summaryrefslogtreecommitdiffstats
path: root/src/com/android/messaging/ui/mediapicker/MediaChooser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/messaging/ui/mediapicker/MediaChooser.java')
-rw-r--r--src/com/android/messaging/ui/mediapicker/MediaChooser.java216
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) { }
+}