diff options
author | Mike Dodd <mdodd@google.com> | 2015-08-11 11:16:59 -0700 |
---|---|---|
committer | Mike Dodd <mdodd@google.com> | 2015-08-12 08:58:28 -0700 |
commit | 461a34b466cb4b13dbbc2ec6330b31e217b2ac4e (patch) | |
tree | bc4b489af52d0e2521e21167d2ad76a47256f348 /src/com/android/messaging/ui/attachmentchooser/AttachmentGridItemView.java | |
parent | 8b3e2b9c1b0a09423a7ba5d1091b9192106502f8 (diff) | |
download | android_packages_apps_Messaging-461a34b466cb4b13dbbc2ec6330b31e217b2ac4e.tar.gz android_packages_apps_Messaging-461a34b466cb4b13dbbc2ec6330b31e217b2ac4e.tar.bz2 android_packages_apps_Messaging-461a34b466cb4b13dbbc2ec6330b31e217b2ac4e.zip |
Initial checkin of AOSP Messaging app.
b/23110861
Change-Id: I9aa980d7569247d6b2ca78f5dcb4502e1eaadb8a
Diffstat (limited to 'src/com/android/messaging/ui/attachmentchooser/AttachmentGridItemView.java')
-rw-r--r-- | src/com/android/messaging/ui/attachmentchooser/AttachmentGridItemView.java | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/com/android/messaging/ui/attachmentchooser/AttachmentGridItemView.java b/src/com/android/messaging/ui/attachmentchooser/AttachmentGridItemView.java new file mode 100644 index 0000000..8bb7356 --- /dev/null +++ b/src/com/android/messaging/ui/attachmentchooser/AttachmentGridItemView.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.messaging.ui.attachmentchooser; + +import android.content.Context; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.TouchDelegate; +import android.view.View; +import android.widget.CheckBox; +import android.widget.FrameLayout; + +import com.android.messaging.R; +import com.android.messaging.datamodel.data.MessagePartData; +import com.android.messaging.ui.AttachmentPreviewFactory; +import com.android.messaging.util.Assert; +import com.google.common.annotations.VisibleForTesting; + +/** + * Shows an item in the attachment picker grid. + */ +public class AttachmentGridItemView extends FrameLayout { + public interface HostInterface { + boolean isItemSelected(MessagePartData attachment); + void onItemCheckedChanged(AttachmentGridItemView view, MessagePartData attachment); + void onItemClicked(AttachmentGridItemView view, MessagePartData attachment); + } + + @VisibleForTesting + MessagePartData mAttachmentData; + private FrameLayout mAttachmentViewContainer; + private CheckBox mCheckBox; + private HostInterface mHostInterface; + + public AttachmentGridItemView(final Context context, final AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + mAttachmentViewContainer = (FrameLayout) findViewById(R.id.attachment_container); + mCheckBox = (CheckBox) findViewById(R.id.checkbox); + mCheckBox.setOnClickListener(new OnClickListener() { + @Override + public void onClick(final View v) { + mHostInterface.onItemCheckedChanged(AttachmentGridItemView.this, mAttachmentData); + } + }); + setOnClickListener(new OnClickListener() { + @Override + public void onClick(final View v) { + mHostInterface.onItemClicked(AttachmentGridItemView.this, mAttachmentData); + } + }); + addOnLayoutChangeListener(new OnLayoutChangeListener() { + @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, + int oldLeft, int oldTop, int oldRight, int oldBottom) { + // Enlarge the clickable region for the checkbox. + final int touchAreaIncrease = getResources().getDimensionPixelOffset( + R.dimen.attachment_grid_checkbox_area_increase); + final Rect region = new Rect(); + mCheckBox.getHitRect(region); + region.inset(-touchAreaIncrease, -touchAreaIncrease); + setTouchDelegate(new TouchDelegate(region, mCheckBox)); + } + }); + } + + @Override + protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { + // The grid view auto-fits the columns, so we want to let the height match the width + // to make the attachment preview square. + super.onMeasure(widthMeasureSpec, widthMeasureSpec); + } + + public void bind(final MessagePartData attachment, final HostInterface hostInterface) { + Assert.isTrue(attachment.isAttachment()); + mHostInterface = hostInterface; + updateSelectedState(); + if (mAttachmentData == null || !mAttachmentData.equals(attachment)) { + mAttachmentData = attachment; + updateAttachmentView(); + } + } + + @VisibleForTesting + HostInterface testGetHostInterface() { + return mHostInterface; + } + + public void updateSelectedState() { + mCheckBox.setChecked(mHostInterface.isItemSelected(mAttachmentData)); + } + + private void updateAttachmentView() { + mAttachmentViewContainer.removeAllViews(); + final LayoutInflater inflater = LayoutInflater.from(getContext()); + final View attachmentView = AttachmentPreviewFactory.createAttachmentPreview(inflater, + mAttachmentData, mAttachmentViewContainer, + AttachmentPreviewFactory.TYPE_CHOOSER_GRID, true /* startImageRequest */, null); + mAttachmentViewContainer.addView(attachmentView); + } +} |