Test: make messaging Bug: 76692459 Change-Id: I9103450622f129311545648ac75f5b2f9fc2d04a Merged-In: I9103450622f129311545648ac75f5b2f9fc2d04a
217 lines
7.2 KiB
Java
217 lines
7.2 KiB
Java
/*
|
|
* 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 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 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) { }
|
|
}
|