diff options
Diffstat (limited to 'src/com/android/messaging/ui')
9 files changed, 4 insertions, 842 deletions
diff --git a/src/com/android/messaging/ui/mediapicker/AudioListAdapter.java b/src/com/android/messaging/ui/mediapicker/AudioListAdapter.java deleted file mode 100644 index 2520d6b..0000000 --- a/src/com/android/messaging/ui/mediapicker/AudioListAdapter.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2016 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.mediapicker; - -import android.content.Context; -import android.database.Cursor; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CursorAdapter; -import com.android.messaging.R; -import com.android.messaging.ui.mediapicker.AudioListItemView.HostInterface; -import com.android.messaging.util.Assert; - -/** - * Bridges between the image cursor loaded by GalleryBoundCursorLoader and the GalleryGridView. - */ -public class AudioListAdapter extends CursorAdapter { - private HostInterface mGgivHostInterface; - - public AudioListAdapter(final Context context, final Cursor cursor) { - super(context, cursor, 0); - } - - public void setHostInterface(final HostInterface ggivHostInterface) { - mGgivHostInterface = ggivHostInterface; - } - - /** - * {@inheritDoc} - */ - @Override - public void bindView(final View view, final Context context, final Cursor cursor) { - Assert.isTrue(view instanceof AudioListItemView); - final AudioListItemView audioListItemView = (AudioListItemView) view; - audioListItemView.bind(cursor, mGgivHostInterface); - } - - /** - * {@inheritDoc} - */ - @Override - public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { - final LayoutInflater layoutInflater = LayoutInflater.from(context); - return layoutInflater.inflate(R.layout.audio_list_item_view, parent, false); - } -} diff --git a/src/com/android/messaging/ui/mediapicker/AudioListChooser.java b/src/com/android/messaging/ui/mediapicker/AudioListChooser.java deleted file mode 100644 index 767e725..0000000 --- a/src/com/android/messaging/ui/mediapicker/AudioListChooser.java +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (C) 2016 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.mediapicker; - -import android.Manifest; -import android.content.pm.PackageManager; -import android.database.Cursor; -import androidx.appcompat.app.ActionBar; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import com.android.messaging.Factory; -import com.android.messaging.R; -import com.android.messaging.datamodel.data.MediaPickerData; -import com.android.messaging.datamodel.data.MediaPickerData.MediaPickerDataListener; -import com.android.messaging.datamodel.data.MessagePartData; -import com.android.messaging.util.Assert; -import com.android.messaging.util.OsUtil; - -/** - * Chooser which allows the user to select one or more existing audios - */ -class AudioListChooser extends MediaChooser implements - AudioListView.AudioListViewListener, MediaPickerDataListener { - private final AudioListAdapter mAdapter; - private AudioListView mAudioListView; - private View mMissingPermissionView; - private static final String TAG = AudioListChooser.class.getSimpleName(); - - AudioListChooser(final MediaPicker mediaPicker) { - super(mediaPicker); - mAdapter = new AudioListAdapter(Factory.get().getApplicationContext(), null); - } - - @Override - public int getSupportedMediaTypes() { - return MediaPicker.MEDIA_TYPE_AUDIO; - } - - @Override - public View destroyView() { - mAudioListView.setAdapter(null); - mAdapter.setHostInterface(null); - // The loader is started only if startMediaPickerDataLoader() is called - if (OsUtil.hasStoragePermission()) { - mBindingRef.getData().destroyLoader(MediaPickerData.GALLERY_AUDIO_LOADER); - } - return super.destroyView(); - } - - @Override - public int getIconResource() { - return R.drawable.ic_library_music_white_24px; - } - - @Override - public int getIconDescriptionResource() { - return R.string.mediapicker_audioChooserDescription; - } - - @Override - public boolean canSwipeDown() { - return mAudioListView.canSwipeDown(); - } - - @Override - public void onItemSelected(final MessagePartData item) { - mMediaPicker.dispatchItemsSelected(item, !mAudioListView.isMultiSelectEnabled()); - } - - @Override - public void onItemUnselected(final MessagePartData item) { - mMediaPicker.dispatchItemUnselected(item); - } - - @Override - public void onConfirmSelection() { - // The user may only confirm if multiselect is enabled. - Assert.isTrue(mAudioListView.isMultiSelectEnabled()); - mMediaPicker.dispatchConfirmItemSelection(); - } - - @Override - public void onUpdate() { - mMediaPicker.invalidateOptionsMenu(); - } - - @Override - public void onCreateOptionsMenu(final MenuInflater inflater, final Menu menu) { - if (mView != null) { - mAudioListView.onCreateOptionsMenu(inflater, menu); - } - } - - @Override - public boolean onOptionsItemSelected(final MenuItem item) { - return (mView != null) ? mAudioListView.onOptionsItemSelected(item) : false; - } - - @Override - protected View createView(final ViewGroup container) { - final LayoutInflater inflater = getLayoutInflater(); - final View view = inflater.inflate( - R.layout.mediapicker_audio_list_chooser, - container /* root */, - false /* attachToRoot */); - - mAudioListView = (AudioListView) view.findViewById(R.id.audio_list_view); - mAdapter.setHostInterface(mAudioListView); - mAudioListView.setAdapter(mAdapter); - mAudioListView.setHostInterface(this); - mAudioListView.setDraftMessageDataModel(mMediaPicker.getDraftMessageDataModel()); - if (OsUtil.hasStoragePermission()) { - startMediaPickerDataLoader(); - } - - mMissingPermissionView = view.findViewById(R.id.missing_permission_view); - updateForPermissionState(OsUtil.hasStoragePermission()); - return view; - } - - @Override - int getActionBarTitleResId() { - return R.string.mediapicker_audio_list_title; - } - - @Override - void updateActionBar(final ActionBar actionBar) { - super.updateActionBar(actionBar); - if (mAudioListView == null) { - return; - } - final int selectionCount = mAudioListView.getSelectionCount(); - if (selectionCount > 0 && mAudioListView.isMultiSelectEnabled()) { - actionBar.setTitle(getContext().getResources().getString( - R.string.mediapicker_audio_list_title_selection, - selectionCount)); - } - } - - @Override - public void onMediaPickerDataUpdated(final MediaPickerData mediaPickerData, final Object data, - final int loaderId) { - mBindingRef.ensureBound(mediaPickerData); - Assert.equals(MediaPickerData.GALLERY_AUDIO_LOADER, loaderId); - Cursor rawCursor = null; - if (data instanceof Cursor) { - rawCursor = (Cursor) data; - } - - mAdapter.swapCursor(rawCursor); - } - - @Override - public void onResume() { - if (OsUtil.hasStoragePermission()) { - // Work around a bug in MediaStore where cursors querying the Files provider don't get - // updated for changes to Images.Media or Video.Media. - startMediaPickerDataLoader(); - } - } - - @Override - protected void setSelected(final boolean selected) { - super.setSelected(selected); - if (selected && !OsUtil.hasStoragePermission()) { - mMediaPicker.requestPermissions( - new String[] { Manifest.permission.READ_EXTERNAL_STORAGE }, - MediaPicker.GALLERY_PERMISSION_REQUEST_CODE); - } - } - - private void startMediaPickerDataLoader() { - mBindingRef.getData().startLoader(MediaPickerData.GALLERY_AUDIO_LOADER, mBindingRef, null, - this); - } - - @Override - protected void onRequestPermissionsResult( - final int requestCode, final String permissions[], final int[] grantResults) { - if (requestCode == MediaPicker.GALLERY_PERMISSION_REQUEST_CODE) { - final boolean permissionGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED; - if (permissionGranted) { - startMediaPickerDataLoader(); - } - updateForPermissionState(permissionGranted); - } - } - - private void updateForPermissionState(final boolean granted) { - // onRequestPermissionsResult can sometimes get called before createView(). - if (mAudioListView == null) { - return; - } - - mAudioListView.setVisibility(granted ? View.VISIBLE : View.GONE); - mMissingPermissionView.setVisibility(granted ? View.GONE : View.VISIBLE); - } -} diff --git a/src/com/android/messaging/ui/mediapicker/AudioListItemView.java b/src/com/android/messaging/ui/mediapicker/AudioListItemView.java deleted file mode 100644 index d95f1fd..0000000 --- a/src/com/android/messaging/ui/mediapicker/AudioListItemView.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2016 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.mediapicker; - -import android.content.Context; -import android.database.Cursor; -import android.util.AttributeSet; -import android.view.View; -import android.widget.CheckBox; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import com.android.messaging.R; -import com.android.messaging.datamodel.DataModel; -import com.android.messaging.datamodel.data.AudioListItemData; -import com.google.common.annotations.VisibleForTesting; - -/** - * Shows an item in the audio picker list view. Hosts an FileImageView with a checkbox. - */ -public class AudioListItemView extends LinearLayout { - private static final String TAG = AudioListItemView.class.getSimpleName(); - /** - * Implemented by the owner of this ListItemView instance to communicate on media - * picking and selection events. - */ - public interface HostInterface { - void onItemClicked(View view, AudioListItemData data, boolean longClick); - boolean isItemSelected(AudioListItemData data); - boolean isMultiSelectEnabled(); - } - - @VisibleForTesting - AudioListItemData mData; - TextView mAudioFilename; - CheckBox mCheckBox; - ImageView mImageIcon; - - private HostInterface mHostInterface; - private final OnClickListener mOnClickListener = new OnClickListener() { - @Override - public void onClick(final View v) { - mHostInterface.onItemClicked(AudioListItemView.this, mData, false /*longClick*/); - } - }; - - public AudioListItemView(final Context context, final AttributeSet attrs) { - super(context, attrs); - mData = DataModel.get().createAudioListItemData(); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - mAudioFilename = (TextView)findViewById(R.id.audio_filename); - mImageIcon = (ImageView) findViewById(R.id.audio_button); - - mCheckBox = (CheckBox)findViewById(R.id.audio_checkbox); - mCheckBox.setOnClickListener(mOnClickListener); - setOnClickListener(mOnClickListener); - - final OnLongClickListener longClickListener = new OnLongClickListener() { - @Override - public boolean onLongClick(final View v) { - mHostInterface.onItemClicked(v, mData, true /* longClick */); - return true; - } - }; - setOnLongClickListener(longClickListener); - mCheckBox.setOnLongClickListener(longClickListener); - } - - - public void bind(final Cursor cursor, final HostInterface hostInterface) { - mData.bind(cursor); - mHostInterface = hostInterface; - updateViewState(); - } - - private void updateViewState() { - updateListItemView(); - if (mHostInterface.isMultiSelectEnabled()) { - mCheckBox.setVisibility(VISIBLE); - mCheckBox.setClickable(true); - mCheckBox.setChecked(mHostInterface.isItemSelected(mData)); - mImageIcon.setVisibility(GONE); - } else { - mCheckBox.setVisibility(GONE); - mCheckBox.setClickable(false); - mImageIcon.setVisibility(VISIBLE); - } - } - - private void updateListItemView() { - mAudioFilename.setText(mData.getAudioFilename()); - } - -} diff --git a/src/com/android/messaging/ui/mediapicker/AudioListView.java b/src/com/android/messaging/ui/mediapicker/AudioListView.java deleted file mode 100644 index 7fc7d2c..0000000 --- a/src/com/android/messaging/ui/mediapicker/AudioListView.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright (C) 2016 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.mediapicker; - -import android.content.Context; -import android.graphics.Rect; -import android.net.Uri; -import android.os.Parcel; -import android.os.Parcelable; -import android.util.ArrayMap; -import android.util.AttributeSet; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import com.android.messaging.R; -import com.android.messaging.datamodel.binding.BindingBase; -import com.android.messaging.datamodel.binding.ImmutableBindingRef; -import com.android.messaging.datamodel.data.AudioListItemData; -import com.android.messaging.datamodel.data.DraftMessageData; -import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageDataListener; -import com.android.messaging.datamodel.data.MessagePartData; -import com.android.messaging.ui.PersistentInstanceState; -import com.android.messaging.util.Assert; -import com.android.messaging.util.ContentType; -import com.android.messaging.util.LogUtil; - -import java.util.Iterator; -import java.util.Map; - -/** - * Shows a list of audio filenames from external storage in a ListView with multi-select - * capabilities - */ -public class AudioListView extends MediaPickerListView implements - AudioListItemView.HostInterface, - PersistentInstanceState, - DraftMessageDataListener { - /** - * Implemented by the owner of this GalleryGridView instance to communicate on image - * picking and multi-image selection events. - */ - public interface AudioListViewListener { - void onItemSelected(MessagePartData item); - void onItemUnselected(MessagePartData item); - void onConfirmSelection(); - void onUpdate(); - } - - private AudioListViewListener mListener; - - // TODO: Consider putting this into the data model object if we add more states. - private final ArrayMap<Uri, MessagePartData> mSelectedAudios; - private boolean mIsMultiSelectMode = false; - private ImmutableBindingRef<DraftMessageData> mDraftMessageDataModel; - - public AudioListView(final Context context, final AttributeSet attrs) { - super(context, attrs); - mSelectedAudios = new ArrayMap<Uri, MessagePartData>(); - } - - public void setHostInterface(final AudioListViewListener hostInterface) { - mListener = hostInterface; - } - - public void setDraftMessageDataModel(final BindingBase<DraftMessageData> dataModel) { - mDraftMessageDataModel = BindingBase.createBindingReference(dataModel); - mDraftMessageDataModel.getData().addListener(this); - } - - @Override - public void onItemClicked(final View view, final AudioListItemData data, - final boolean longClick) { - if (ContentType.isMediaType(data.getContentType())) { - if (longClick) { - // Turn on multi-select mode when an item is long-pressed. - setMultiSelectEnabled(true); - } - - final Rect startRect = new Rect(); - view.getGlobalVisibleRect(startRect); - if (isMultiSelectEnabled()) { - toggleItemSelection(startRect, data); - } else { - mListener.onItemSelected(data.constructMessagePartData(startRect)); - } - } else { - LogUtil.w(LogUtil.BUGLE_TAG, - "Selected item has invalid contentType " + data.getContentType()); - } - } - - @Override - public boolean isItemSelected(final AudioListItemData data) { - return mSelectedAudios.containsKey(data.getAudioUri()); - } - - int getSelectionCount() { - return mSelectedAudios.size(); - } - - @Override - public boolean isMultiSelectEnabled() { - return mIsMultiSelectMode; - } - - private void toggleItemSelection(final Rect startRect, final AudioListItemData data) { - Assert.isTrue(isMultiSelectEnabled()); - if (isItemSelected(data)) { - final MessagePartData item = mSelectedAudios.remove(data.getAudioUri()); - mListener.onItemUnselected(item); - if (mSelectedAudios.size() == 0) { - // No image is selected any more, turn off multi-select mode. - setMultiSelectEnabled(false); - } - } else { - final MessagePartData item = data.constructMessagePartData(startRect); - mSelectedAudios.put(data.getAudioUri(), item); - mListener.onItemSelected(item); - } - invalidateViews(); - } - - private void toggleMultiSelect() { - mIsMultiSelectMode = !mIsMultiSelectMode; - invalidateViews(); - } - - private void setMultiSelectEnabled(final boolean enabled) { - if (mIsMultiSelectMode != enabled) { - toggleMultiSelect(); - } - } - - private boolean canToggleMultiSelect() { - // We allow the user to toggle multi-select mode only when nothing has selected. If - // something has been selected, we show a confirm button instead. - return mSelectedAudios.size() == 0; - } - - public void onCreateOptionsMenu(final MenuInflater inflater, final Menu menu) { - inflater.inflate(R.menu.gallery_picker_menu, menu); - final MenuItem toggleMultiSelect = menu.findItem(R.id.action_multiselect); - final MenuItem confirmMultiSelect = menu.findItem(R.id.action_confirm_multiselect); - final boolean canToggleMultiSelect = canToggleMultiSelect(); - toggleMultiSelect.setVisible(canToggleMultiSelect); - confirmMultiSelect.setVisible(!canToggleMultiSelect); - } - - public boolean onOptionsItemSelected(final MenuItem item) { - switch (item.getItemId()) { - case R.id.action_multiselect: - Assert.isTrue(canToggleMultiSelect()); - toggleMultiSelect(); - return true; - - case R.id.action_confirm_multiselect: - Assert.isTrue(!canToggleMultiSelect()); - mListener.onConfirmSelection(); - return true; - } - return false; - } - - - @Override - public void onDraftChanged(final DraftMessageData data, final int changeFlags) { - mDraftMessageDataModel.ensureBound(data); - // Whenever attachment changed, refresh selection state to remove those that are not - // selected. - if ((changeFlags & DraftMessageData.ATTACHMENTS_CHANGED) == - DraftMessageData.ATTACHMENTS_CHANGED) { - refreshImageSelectionStateOnAttachmentChange(); - } - } - - @Override - public void onDraftAttachmentLimitReached(final DraftMessageData data) { - mDraftMessageDataModel.ensureBound(data); - // Whenever draft attachment limit is reach, refresh selection state to remove those - // not actually added to draft. - refreshImageSelectionStateOnAttachmentChange(); - } - - @Override - public void onDraftAttachmentLoadFailed() { - // Nothing to do since the failed attachment gets removed automatically. - } - - private void refreshImageSelectionStateOnAttachmentChange() { - boolean changed = false; - final Iterator<Map.Entry<Uri, MessagePartData>> iterator = - mSelectedAudios.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry<Uri, MessagePartData> entry = iterator.next(); - if (!mDraftMessageDataModel.getData().containsAttachment(entry.getKey())) { - iterator.remove(); - changed = true; - } - } - - if (changed) { - mListener.onUpdate(); - invalidateViews(); - } - } - - @Override // PersistentInstanceState - public Parcelable saveState() { - return onSaveInstanceState(); - } - - @Override // PersistentInstanceState - public void restoreState(final Parcelable restoredState) { - onRestoreInstanceState(restoredState); - invalidateViews(); - } - - @Override - public Parcelable onSaveInstanceState() { - final Parcelable superState = super.onSaveInstanceState(); - final SavedState savedState = new SavedState(superState); - savedState.isMultiSelectMode = mIsMultiSelectMode; - savedState.selectedAudios = mSelectedAudios.values() - .toArray(new MessagePartData[mSelectedAudios.size()]); - return savedState; - } - - @Override - public void onRestoreInstanceState(final Parcelable state) { - if (!(state instanceof SavedState)) { - super.onRestoreInstanceState(state); - return; - } - - final SavedState savedState = (SavedState) state; - super.onRestoreInstanceState(savedState.getSuperState()); - mIsMultiSelectMode = savedState.isMultiSelectMode; - mSelectedAudios.clear(); - for (int i = 0; i < savedState.selectedAudios.length; i++) { - final MessagePartData selectedAudio = savedState.selectedAudios[i]; - mSelectedAudios.put(selectedAudio.getContentUri(), selectedAudio); - } - } - - @Override // PersistentInstanceState - public void resetState() { - mSelectedAudios.clear(); - mIsMultiSelectMode = false; - invalidateViews(); - } - - public static class SavedState extends BaseSavedState { - boolean isMultiSelectMode; - MessagePartData[] selectedAudios; - - SavedState(final Parcelable superState) { - super(superState); - } - - private SavedState(final Parcel in) { - super(in); - isMultiSelectMode = in.readInt() == 1 ? true : false; - - // Read parts - final int partCount = in.readInt(); - selectedAudios = new MessagePartData[partCount]; - for (int i = 0; i < partCount; i++) { - selectedAudios[i] = ((MessagePartData) in.readParcelable( - MessagePartData.class.getClassLoader())); - } - } - - @Override - public void writeToParcel(final Parcel out, final int flags) { - super.writeToParcel(out, flags); - out.writeInt(isMultiSelectMode ? 1 : 0); - - // Write parts - out.writeInt(selectedAudios.length); - for (final MessagePartData image : selectedAudios) { - out.writeParcelable(image, flags); - } - } - - public static final Creator<SavedState> CREATOR = - new Creator<SavedState>() { - @Override - public SavedState createFromParcel(final Parcel in) { - return new SavedState(in); - } - @Override - public SavedState[] newArray(final int size) { - return new SavedState[size]; - } - }; - } -} diff --git a/src/com/android/messaging/ui/mediapicker/GalleryGridItemView.java b/src/com/android/messaging/ui/mediapicker/GalleryGridItemView.java index eb66b80..2006f57 100644 --- a/src/com/android/messaging/ui/mediapicker/GalleryGridItemView.java +++ b/src/com/android/messaging/ui/mediapicker/GalleryGridItemView.java @@ -18,9 +18,7 @@ package com.android.messaging.ui.mediapicker; import android.content.Context; import android.database.Cursor; import android.graphics.Rect; -import androidx.appcompat.mms.CarrierConfigValuesLoader; import android.util.AttributeSet; -import android.util.Log; import android.view.MotionEvent; import android.view.TouchDelegate; import android.view.View; @@ -28,16 +26,11 @@ import android.widget.CheckBox; import android.widget.FrameLayout; import android.widget.ImageView.ScaleType; -import android.widget.Toast; import com.android.messaging.R; import com.android.messaging.datamodel.DataModel; -import com.android.messaging.datamodel.data.DraftMessageData; import com.android.messaging.datamodel.data.GalleryGridItemData; -import com.android.messaging.datamodel.data.ParticipantData; -import com.android.messaging.sms.MmsConfig; import com.android.messaging.ui.AsyncImageView; import com.android.messaging.ui.ConversationDrawables; -import com.android.messaging.util.UriUtil; import com.google.common.annotations.VisibleForTesting; import java.util.concurrent.TimeUnit; @@ -46,7 +39,6 @@ import java.util.concurrent.TimeUnit; * Shows an item in the gallery picker grid view. Hosts an FileImageView with a checkbox. */ public class GalleryGridItemView extends FrameLayout { - private static final String TAG = GalleryGridItemView.class.getSimpleName(); /** * Implemented by the owner of this GalleryGridItemView instance to communicate on media * picking and selection events. @@ -55,7 +47,6 @@ public class GalleryGridItemView extends FrameLayout { void onItemClicked(View view, GalleryGridItemData data, boolean longClick); boolean isItemSelected(GalleryGridItemData data); boolean isMultiSelectEnabled(); - int getSubscriptionProviderSubId(); } @VisibleForTesting @@ -64,65 +55,10 @@ public class GalleryGridItemView extends FrameLayout { private AsyncImageView mImageView; private CheckBox mCheckBox; private HostInterface mHostInterface; - private static long mTotalContentSize = 0; - private static long mMaxMessageSize = 0; - - private boolean checkSize() { - if (mData.isDocumentPickerItem()) { - return true; - } - // only perform the check for videos, since they are not being compressed - // images will be compressed, so exclude them from this check - - // determine the maximum message size, this will be computed only once per this class - if (mMaxMessageSize == 0) { - int subId = mHostInterface.getSubscriptionProviderSubId(); - mMaxMessageSize = MmsConfig.get(subId).getMaxMessageSize(); - } - - long contentSize = mData.getContentSize(); - if (mHostInterface.isMultiSelectEnabled()) { - if (mData.isVideoItem()) { - if (mHostInterface.isItemSelected(mData)) { - // un-selecting - mTotalContentSize -= contentSize; - if (mTotalContentSize < 0) { - mTotalContentSize = 0; - } - } else { - // selecting - mTotalContentSize += contentSize; - } - } - } else { - // short click or first long click - if (mData.isVideoItem()) { - mTotalContentSize = contentSize; - } else { - mTotalContentSize = 0; - } - } - - if (mTotalContentSize > mMaxMessageSize) { - mTotalContentSize -= contentSize; - if (mTotalContentSize < 0) { - mTotalContentSize = 0; - } - - Toast.makeText(getContext(), getContext(). - getString(R.string.mediapicker_gallery_image_item_attachment_too_large), - Toast.LENGTH_LONG).show(); - return false; - } - - return true; - } private final OnClickListener mOnClickListener = new OnClickListener() { @Override public void onClick(final View v) { - if (checkSize()) { - mHostInterface.onItemClicked(GalleryGridItemView.this, mData, false /*longClick*/); - } + mHostInterface.onItemClicked(GalleryGridItemView.this, mData, false /*longClick*/); } }; @@ -142,9 +78,7 @@ public class GalleryGridItemView extends FrameLayout { final OnLongClickListener longClickListener = new OnLongClickListener() { @Override public boolean onLongClick(final View v) { - if (checkSize()) { - mHostInterface.onItemClicked(v, mData, true /* longClick */); - } + mHostInterface.onItemClicked(v, mData, true /* longClick */); return true; } }; @@ -225,6 +159,7 @@ public class GalleryGridItemView extends FrameLayout { dateSeconds * TimeUnit.SECONDS.toMillis(1)); mImageView.setContentDescription(contentDescription); } else { + hideVideoPlayButtonOverlay(); mImageView.setScaleType(ScaleType.CENTER_CROP); setBackgroundColor(getResources().getColor(R.color.gallery_image_default_background)); mImageView.setImageResourceId(mData.getImageRequestDescriptor()); diff --git a/src/com/android/messaging/ui/mediapicker/GalleryGridView.java b/src/com/android/messaging/ui/mediapicker/GalleryGridView.java index a9bc8b5..2265dd5 100644 --- a/src/com/android/messaging/ui/mediapicker/GalleryGridView.java +++ b/src/com/android/messaging/ui/mediapicker/GalleryGridView.java @@ -34,7 +34,6 @@ import com.android.messaging.datamodel.data.DraftMessageData; import com.android.messaging.datamodel.data.GalleryGridItemData; import com.android.messaging.datamodel.data.MessagePartData; import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageDataListener; -import com.android.messaging.datamodel.data.ParticipantData; import com.android.messaging.ui.PersistentInstanceState; import com.android.messaging.util.Assert; import com.android.messaging.util.ContentType; @@ -70,20 +69,11 @@ public class GalleryGridView extends MediaPickerGridView implements private boolean mIsMultiSelectMode = false; private ImmutableBindingRef<DraftMessageData> mDraftMessageDataModel; - /** Provides subscription-related data to access per-subscription configurations. */ - private DraftMessageData.DraftMessageSubscriptionDataProvider mSubscriptionDataProvider; - - public GalleryGridView(final Context context, final AttributeSet attrs) { super(context, attrs); mSelectedImages = new ArrayMap<Uri, MessagePartData>(); } - public void setSubscriptionProvider(DraftMessageData.DraftMessageSubscriptionDataProvider - provider) { - mSubscriptionDataProvider = provider; - } - public void setHostInterface(final GalleryGridViewListener hostInterface) { mListener = hostInterface; } @@ -131,16 +121,6 @@ public class GalleryGridView extends MediaPickerGridView implements return mIsMultiSelectMode; } - @Override - public int getSubscriptionProviderSubId() { - if (mSubscriptionDataProvider != null) { - return mSubscriptionDataProvider.getConversationSelfSubId(); - } else { - return ParticipantData.DEFAULT_SELF_SUB_ID; - } - } - - private void toggleItemSelection(final Rect startRect, final GalleryGridItemData data) { Assert.isTrue(isMultiSelectEnabled()); if (isItemSelected(data)) { diff --git a/src/com/android/messaging/ui/mediapicker/GalleryMediaChooser.java b/src/com/android/messaging/ui/mediapicker/GalleryMediaChooser.java index 728de4c..1b8c2dc 100644 --- a/src/com/android/messaging/ui/mediapicker/GalleryMediaChooser.java +++ b/src/com/android/messaging/ui/mediapicker/GalleryMediaChooser.java @@ -21,10 +21,7 @@ import android.content.pm.PackageManager; import android.database.Cursor; import android.database.MatrixCursor; import android.database.MergeCursor; -import android.provider.Telephony; import androidx.appcompat.app.ActionBar; -import androidx.appcompat.mms.CarrierConfigValuesLoader; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -32,7 +29,6 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.Toast; import com.android.messaging.Factory; import com.android.messaging.R; import com.android.messaging.datamodel.data.GalleryGridItemData; @@ -41,7 +37,6 @@ import com.android.messaging.datamodel.data.MessagePartData; import com.android.messaging.datamodel.data.MediaPickerData.MediaPickerDataListener; import com.android.messaging.util.Assert; import com.android.messaging.util.OsUtil; -import com.android.messaging.util.UriUtil; /** * Chooser which allows the user to select one or more existing images or videos @@ -51,7 +46,6 @@ class GalleryMediaChooser extends MediaChooser implements private final GalleryGridAdapter mAdapter; private GalleryGridView mGalleryGridView; private View mMissingPermissionView; - private static final String TAG = GalleryMediaChooser.class.getSimpleName(); GalleryMediaChooser(final MediaPicker mediaPicker) { super(mediaPicker); @@ -81,7 +75,7 @@ class GalleryMediaChooser extends MediaChooser implements @Override public int getIconDescriptionResource() { - return R.string.mediapicker_galleryChooserDescription_cm; + return R.string.mediapicker_galleryChooserDescription; } @Override @@ -133,7 +127,6 @@ class GalleryMediaChooser extends MediaChooser implements mGalleryGridView = (GalleryGridView) view.findViewById(R.id.gallery_grid_view); mAdapter.setHostInterface(mGalleryGridView); - mGalleryGridView.setSubscriptionProvider(this); mGalleryGridView.setAdapter(mAdapter); mGalleryGridView.setHostInterface(this); mGalleryGridView.setDraftMessageDataModel(mMediaPicker.getDraftMessageDataModel()); @@ -179,7 +172,6 @@ class GalleryMediaChooser extends MediaChooser implements if (data instanceof Cursor) { rawCursor = (Cursor) data; } - // Before delivering the cursor, wrap around the local gallery cursor // with an extra item for document picker integration in the front. final MatrixCursor specialItemsCursor = diff --git a/src/com/android/messaging/ui/mediapicker/MediaPicker.java b/src/com/android/messaging/ui/mediapicker/MediaPicker.java index 5920e63..8e5198b 100644 --- a/src/com/android/messaging/ui/mediapicker/MediaPicker.java +++ b/src/com/android/messaging/ui/mediapicker/MediaPicker.java @@ -178,7 +178,6 @@ public class MediaPicker extends Fragment implements DraftMessageSubscriptionDat mChoosers = new MediaChooser[] { new CameraMediaChooser(this), new GalleryMediaChooser(this), - new AudioListChooser(this), new AudioMediaChooser(this), }; diff --git a/src/com/android/messaging/ui/mediapicker/MediaPickerListView.java b/src/com/android/messaging/ui/mediapicker/MediaPickerListView.java deleted file mode 100644 index f448b87..0000000 --- a/src/com/android/messaging/ui/mediapicker/MediaPickerListView.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.mediapicker; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.GridView; -import android.widget.ListView; - -public class MediaPickerListView extends ListView { - - public MediaPickerListView(final Context context, final AttributeSet attrs) { - super(context, attrs); - } - - /** - * Returns if the list view can be swiped down further. It cannot be swiped down - * if there's no item or if we are already at the top. - */ - public boolean canSwipeDown() { - if (getAdapter() == null || getAdapter().getCount() == 0 || getChildCount() == 0) { - return false; - } - - final int firstVisiblePosition = getFirstVisiblePosition(); - if (firstVisiblePosition == 0 && getChildAt(0).getTop() >= 0) { - return false; - } - return true; - } -} |