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/mediapicker/MediaChooser.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/mediapicker/MediaChooser.java')
-rw-r--r-- | src/com/android/messaging/ui/mediapicker/MediaChooser.java | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/src/com/android/messaging/ui/mediapicker/MediaChooser.java b/src/com/android/messaging/ui/mediapicker/MediaChooser.java new file mode 100644 index 0000000..9ac0d1b --- /dev/null +++ b/src/com/android/messaging/ui/mediapicker/MediaChooser.java @@ -0,0 +1,216 @@ +/* + * 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.app.FragmentManager; +import android.content.Context; +import android.support.v7.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 android.widget.ImageButton; + +import com.android.messaging.R; +import com.android.messaging.datamodel.binding.ImmutableBindingRef; +import com.android.messaging.datamodel.data.MediaPickerData; +import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageSubscriptionDataProvider; +import com.android.messaging.ui.BasePagerViewHolder; +import com.android.messaging.util.Assert; +import com.android.messaging.util.OsUtil; + +abstract class MediaChooser extends BasePagerViewHolder + implements DraftMessageSubscriptionDataProvider { + /** The media picker that the chooser is hosted in */ + protected final MediaPicker mMediaPicker; + + /** Referencing the main media picker binding to perform data loading */ + protected final ImmutableBindingRef<MediaPickerData> mBindingRef; + + /** True if this is the selected chooser */ + protected boolean mSelected; + + /** True if this chooser is open */ + protected boolean mOpen; + + /** The button to show in the tab strip */ + private ImageButton mTabButton; + + /** Used by subclasses to indicate that no loader is required from the data model in order for + * this chooser to function. + */ + public static final int NO_LOADER_REQUIRED = -1; + + /** + * Initializes a new instance of the Chooser class + * @param mediaPicker The media picker that the chooser is hosted in + */ + MediaChooser(final MediaPicker mediaPicker) { + Assert.notNull(mediaPicker); + mMediaPicker = mediaPicker; + mBindingRef = mediaPicker.getMediaPickerDataBinding(); + mSelected = false; + } + + protected void setSelected(final boolean selected) { + mSelected = selected; + if (selected) { + // If we're selected, it must be open + mOpen = true; + } + if (mTabButton != null) { + mTabButton.setSelected(selected); + mTabButton.setAlpha(selected ? 1 : 0.5f); + } + } + + ImageButton getTabButton() { + return mTabButton; + } + + void onCreateTabButton(final LayoutInflater inflater, final ViewGroup parent) { + mTabButton = (ImageButton) inflater.inflate( + R.layout.mediapicker_tab_button, + parent, + false /* addToParent */); + mTabButton.setImageResource(getIconResource()); + mTabButton.setContentDescription( + inflater.getContext().getResources().getString(getIconDescriptionResource())); + setSelected(mSelected); + mTabButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(final View view) { + mMediaPicker.selectChooser(MediaChooser.this); + } + }); + } + + protected Context getContext() { + return mMediaPicker.getActivity(); + } + + protected FragmentManager getFragmentManager() { + return OsUtil.isAtLeastJB_MR1() ? mMediaPicker.getChildFragmentManager() : + mMediaPicker.getFragmentManager(); + } + protected LayoutInflater getLayoutInflater() { + return LayoutInflater.from(getContext()); + } + + /** Allows the chooser to handle full screen change */ + void onFullScreenChanged(final boolean fullScreen) {} + + /** Allows the chooser to handle the chooser being opened or closed */ + void onOpenedChanged(final boolean open) { + mOpen = open; + } + + /** @return The bit field of media types that this chooser can pick */ + public abstract int getSupportedMediaTypes(); + + /** @return The resource id of the icon for the chooser */ + abstract int getIconResource(); + + /** @return The resource id of the string to use for the accessibility text of the icon */ + abstract int getIconDescriptionResource(); + + /** + * Sets up the action bar to show the current state of the full-screen chooser + * @param actionBar The action bar to populate + */ + void updateActionBar(final ActionBar actionBar) { + final int actionBarTitleResId = getActionBarTitleResId(); + if (actionBarTitleResId == 0) { + actionBar.hide(); + } else { + actionBar.setCustomView(null); + actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.show(); + // Use X instead of <- in the action bar + actionBar.setHomeAsUpIndicator(R.drawable.ic_remove_small_light); + actionBar.setTitle(actionBarTitleResId); + } + } + + /** + * Returns the resource Id used for the action bar title. + */ + abstract int getActionBarTitleResId(); + + /** + * Throws an exception if the media chooser object doesn't require data support. + */ + public void onDataUpdated(final Object data, final int loaderId) { + throw new IllegalStateException(); + } + + /** + * Called by the MediaPicker to determine whether this panel can be swiped down further. If + * not, then a swipe down gestured will be captured by the MediaPickerPanel to shrink the + * entire panel. + */ + public boolean canSwipeDown() { + return false; + } + + /** + * Typically the media picker is closed when the IME is opened, but this allows the chooser to + * specify that showing the IME is okay while the chooser is up + */ + public boolean canShowIme() { + return false; + } + + public boolean onBackPressed() { + return false; + } + + public void onCreateOptionsMenu(final MenuInflater inflater, final Menu menu) { + } + + public boolean onOptionsItemSelected(final MenuItem item) { + return false; + } + + public void setThemeColor(final int color) { + } + + /** + * Returns true if the chooser is owning any incoming touch events, so that the media picker + * panel won't process it and slide the panel. + */ + public boolean isHandlingTouch() { + return false; + } + + public void stopTouchHandling() { + } + + @Override + public int getConversationSelfSubId() { + return mMediaPicker.getConversationSelfSubId(); + } + + /** Optional activity life-cycle methods to be overridden by subclasses */ + public void onPause() { } + public void onResume() { } + protected void onRequestPermissionsResult( + final int requestCode, final String permissions[], final int[] grantResults) { } +} |