Merge "Fixing actions view getting visible sometimes" into ub-launcher3-rvc-dev

This commit is contained in:
TreeHugger Robot 2020-04-20 17:52:03 +00:00 committed by Android (Google) Code Review
commit f01f25b579
15 changed files with 242 additions and 204 deletions

View File

@ -13,12 +13,20 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<com.android.quickstep.views.LauncherRecentsView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:accessibilityPaneTitle="@string/accessibility_recent_apps"
android:clipChildren="false"
android:clipToPadding="false"
android:theme="@style/HomeScreenElementTheme"
android:visibility="invisible" />
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<com.android.quickstep.views.LauncherRecentsView
android:id="@+id/overview_panel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:accessibilityPaneTitle="@string/accessibility_recent_apps"
android:clipChildren="false"
android:clipToPadding="false"
android:theme="@style/HomeScreenElementTheme"
android:visibility="invisible" />
<include
android:id="@+id/overview_actions_view"
layout="@layout/overview_actions_container" />
</merge>

View File

@ -15,20 +15,14 @@
*/
package com.android.launcher3.uioverrides;
import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA;
import static com.android.launcher3.LauncherState.OVERVIEW_BUTTONS;
import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_FADE;
import static com.android.quickstep.views.RecentsView.CONTENT_ALPHA;
import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
import android.annotation.TargetApi;
import android.os.Build;
import android.util.FloatProperty;
import android.view.Surface;
import android.view.View;
import android.view.animation.Interpolator;
import androidx.annotation.NonNull;
@ -38,6 +32,7 @@ import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.anim.PropertySetter;
import com.android.launcher3.states.StateAnimationConfig;
import com.android.launcher3.util.MultiValueAlpha;
import com.android.quickstep.views.ClearAllButton;
import com.android.quickstep.views.LauncherRecentsView;
import com.android.quickstep.views.RecentsView;
@ -61,7 +56,7 @@ public final class RecentsViewStateController extends
mRecentsView.updateEmptyMessage();
mRecentsView.resetTaskVisuals();
}
setAlphas(PropertySetter.NO_ANIM_PROPERTY_SETTER, state, LINEAR);
setAlphas(PropertySetter.NO_ANIM_PROPERTY_SETTER, state);
mRecentsView.setFullscreenProgress(state.getOverviewFullscreenProgress());
}
@ -79,23 +74,17 @@ public final class RecentsViewStateController extends
AnimationSuccessListener.forRunnable(mRecentsView::resetTaskVisuals));
}
setAlphas(builder, toState,
config.getInterpolator(ANIM_OVERVIEW_FADE, AGGRESSIVE_EASE_IN_OUT));
setAlphas(builder, toState);
builder.setFloat(mRecentsView, FULLSCREEN_PROGRESS,
toState.getOverviewFullscreenProgress(), LINEAR);
}
private void setAlphas(PropertySetter propertySetter, LauncherState state,
Interpolator actionInterpolator) {
private void setAlphas(PropertySetter propertySetter, LauncherState state) {
float buttonAlpha = (state.getVisibleElements(mLauncher) & OVERVIEW_BUTTONS) != 0 ? 1 : 0;
propertySetter.setFloat(mRecentsView.getClearAllButton(), ClearAllButton.VISIBILITY_ALPHA,
buttonAlpha, LINEAR);
View actionsView = mLauncher.getActionsView();
int launcherRotation = mRecentsView.getPagedViewOrientedState().getLauncherRotation();
if (actionsView != null && launcherRotation == Surface.ROTATION_0) {
propertySetter.setViewAlpha(actionsView, buttonAlpha, actionInterpolator);
}
propertySetter.setFloat(mLauncher.getActionsView().getVisibilityAlpha(),
MultiValueAlpha.VALUE, buttonAlpha, LINEAR);
}
@Override

View File

@ -42,9 +42,10 @@ import java.util.function.Supplier;
public class ImageActionsApi {
private static final String TAG = BuildConfig.APPLICATION_ID + "ImageActionsApi";
private final Context mContext;
private final Supplier<Bitmap> mBitmapSupplier;
private final SystemUiProxy mSystemUiProxy;
protected final Context mContext;
protected final Supplier<Bitmap> mBitmapSupplier;
protected final SystemUiProxy mSystemUiProxy;
public ImageActionsApi(Context context, Supplier<Bitmap> bitmapSupplier) {
mContext = context;

View File

@ -71,6 +71,7 @@ public final class RecentsActivity extends BaseRecentsActivity {
mRecentsRootView = findViewById(R.id.drag_layer);
mFallbackRecentsView = findViewById(R.id.overview_panel);
mRecentsRootView.recreateControllers();
mFallbackRecentsView.init(findViewById(R.id.overview_actions_view));
}
@Override

View File

@ -16,7 +16,6 @@
package com.android.quickstep;
import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ACTIONS;
import static com.android.launcher3.util.MainThreadInitializedObject.forOverride;
import android.content.Context;
@ -84,47 +83,47 @@ public class TaskOverlayFactory implements ResourceBasedOverride {
/**
* Overlay on each task handling Overview Action Buttons.
*/
public static class TaskOverlay {
public static class TaskOverlay<T extends OverviewActionsView> {
private final Context mApplicationContext;
private OverviewActionsView mActionsView;
private final TaskThumbnailView mThumbnailView;
protected final TaskThumbnailView mThumbnailView;
private T mActionsView;
protected TaskOverlay(TaskThumbnailView taskThumbnailView) {
mApplicationContext = taskThumbnailView.getContext().getApplicationContext();
mThumbnailView = taskThumbnailView;
}
protected T getActionsView() {
if (mActionsView == null) {
mActionsView = BaseActivity.fromContext(mThumbnailView.getContext()).findViewById(
R.id.overview_actions_view);
}
return mActionsView;
}
/**
* Called when the current task is interactive for the user
*/
public void initOverlay(Task task, ThumbnailData thumbnail, Matrix matrix) {
ImageActionsApi imageApi = new ImageActionsApi(
mApplicationContext, mThumbnailView::getThumbnail);
getActionsView().setCallbacks(new OverlayUICallbacks() {
@Override
public void onShare() {
imageApi.startShareActivity();
}
if (mActionsView == null && ENABLE_OVERVIEW_ACTIONS.get()
&& SysUINavigationMode.removeShelfFromOverview(mApplicationContext)) {
mActionsView = BaseActivity.fromContext(mThumbnailView.getContext()).findViewById(
R.id.overview_actions_view);
}
if (mActionsView != null) {
mActionsView.setListener(new OverviewActionsView.Listener() {
@Override
public void onShare() {
imageApi.startShareActivity();
}
@Override
public void onScreenshot() {
imageApi.saveScreenshot(mThumbnailView.getThumbnail(),
getTaskSnapshotBounds(), getTaskSnapshotInsets(), task.key.id);
}
});
}
@Override
public void onScreenshot() {
imageApi.saveScreenshot(mThumbnailView.getThumbnail(),
getTaskSnapshotBounds(), getTaskSnapshotInsets(), task.key.id);
}
});
}
/**
* Called when the overlay is no longer used.
*/
@ -161,4 +160,16 @@ public class TaskOverlayFactory implements ResourceBasedOverride {
return Insets.of(0, 0, 0, 0);
}
}
/**
* Callbacks the Ui can generate. This is the only way for a Ui to call methods on the
* controller.
*/
public interface OverlayUICallbacks {
/** User has indicated they want to share the current task. */
void onShare();
/** User has indicated they want to screenshot the current task. */
void onScreenshot();
}
}

View File

@ -30,6 +30,7 @@ import com.android.launcher3.LauncherState.ScaleAndTranslation;
import com.android.launcher3.Utilities;
import com.android.quickstep.RecentsActivity;
import com.android.quickstep.util.LayoutUtils;
import com.android.quickstep.views.OverviewActionsView;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;
import com.android.systemui.shared.recents.model.Task;
@ -67,6 +68,11 @@ public class FallbackRecentsView extends RecentsView<RecentsActivity> {
public FallbackRecentsView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void init(OverviewActionsView actionsView) {
super.init(actionsView);
setOverviewStateEnabled(true);
setOverlayEnabled(true);
}

View File

@ -47,7 +47,6 @@ import com.android.launcher3.appprediction.PredictionUiStateManager;
import com.android.launcher3.appprediction.PredictionUiStateManager.Client;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.statehandlers.DepthController;
import com.android.launcher3.states.RotationHelper;
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
import com.android.launcher3.util.TraceHelper;
import com.android.launcher3.views.ScrimView;
@ -98,10 +97,15 @@ public class LauncherRecentsView extends RecentsView<BaseQuickstepLauncher>
public LauncherRecentsView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setContentAlpha(0);
mActivity.getStateManager().addStateListener(this);
}
@Override
public void init(OverviewActionsView actionsView) {
super.init(actionsView);
setContentAlpha(0);
}
@Override
public void startHome() {
if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {

View File

@ -16,34 +16,59 @@
package com.android.quickstep.views;
import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ACTIONS;
import static com.android.quickstep.SysUINavigationMode.removeShelfFromOverview;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
import com.android.launcher3.R;
import com.android.launcher3.util.MultiValueAlpha;
import com.android.launcher3.util.MultiValueAlpha.AlphaProperty;
import com.android.quickstep.TaskOverlayFactory.OverlayUICallbacks;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* View for showing action buttons in Overview
*/
public class OverviewActionsView extends FrameLayout {
public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayout
implements OnClickListener {
private final View mScreenshotButton;
private final View mShareButton;
@IntDef(flag = true, value = {
HIDDEN_UNSUPPORTED_NAVIGATION,
HIDDEN_DISABLED_FEATURE,
HIDDEN_NON_ZERO_ROTATION,
HIDDEN_NO_TASKS,
HIDDEN_GESTURE_RUNNING,
HIDDEN_NO_RECENTS})
@Retention(RetentionPolicy.SOURCE)
public @interface ActionsHiddenFlags { }
/**
* Listener for taps on the various actions.
*/
public interface Listener {
/** User has initiated the share actions. */
void onShare();
public static final int HIDDEN_UNSUPPORTED_NAVIGATION = 1 << 0;
public static final int HIDDEN_DISABLED_FEATURE = 1 << 1;
public static final int HIDDEN_NON_ZERO_ROTATION = 1 << 2;
public static final int HIDDEN_NO_TASKS = 1 << 3;
public static final int HIDDEN_GESTURE_RUNNING = 1 << 4;
public static final int HIDDEN_NO_RECENTS = 1 << 5;
/** User has initiated the screenshot action. */
void onScreenshot();
}
private static final int INDEX_CONTENT_ALPHA = 0;
private static final int INDEX_VISIBILITY_ALPHA = 1;
private static final int INDEX_HIDDEN_FLAGS_ALPHA = 2;
private final MultiValueAlpha mMultiValueAlpha;
@ActionsHiddenFlags
private int mHiddenFlags;
protected T mCallbacks;
public OverviewActionsView(Context context) {
this(context, null);
@ -54,26 +79,62 @@ public class OverviewActionsView extends FrameLayout {
}
public OverviewActionsView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
super(context, attrs, defStyleAttr, 0);
mMultiValueAlpha = new MultiValueAlpha(this, 3);
}
public OverviewActionsView(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
LayoutInflater.from(context).inflate(R.layout.overview_actions, this, true);
mShareButton = findViewById(R.id.action_share);
mScreenshotButton = findViewById(R.id.action_screenshot);
@Override
protected void onFinishInflate() {
super.onFinishInflate();
findViewById(R.id.action_share).setOnClickListener(this);
findViewById(R.id.action_screenshot).setOnClickListener(this);
}
/**
* Set listener for callbacks on action button taps.
*
* @param listener for callbacks, or {@code null} to clear the listener.
* @param callbacks for callbacks, or {@code null} to clear the listener.
*/
public void setListener(@Nullable OverviewActionsView.Listener listener) {
mShareButton.setOnClickListener(
listener == null ? null : view -> listener.onShare());
mScreenshotButton.setOnClickListener(
listener == null ? null : view -> listener.onScreenshot());
public void setCallbacks(T callbacks) {
mCallbacks = callbacks;
}
@Override
public void onClick(View view) {
if (mCallbacks == null) {
return;
}
int id = view.getId();
if (id == R.id.action_share) {
mCallbacks.onShare();
} else if (id == R.id.action_screenshot) {
mCallbacks.onScreenshot();
}
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
updateHiddenFlags(HIDDEN_DISABLED_FEATURE, !ENABLE_OVERVIEW_ACTIONS.get());
updateHiddenFlags(HIDDEN_UNSUPPORTED_NAVIGATION, !removeShelfFromOverview(getContext()));
}
public void updateHiddenFlags(@ActionsHiddenFlags int visibilityFlags, boolean enable) {
if (enable) {
mHiddenFlags |= visibilityFlags;
} else {
mHiddenFlags &= ~visibilityFlags;
}
boolean isHidden = mHiddenFlags != 0;
mMultiValueAlpha.getProperty(INDEX_HIDDEN_FLAGS_ALPHA).setValue(isHidden ? 0 : 1);
setVisibility(isHidden ? INVISIBLE : VISIBLE);
}
public AlphaProperty getContentAlpha() {
return mMultiValueAlpha.getProperty(INDEX_CONTENT_ALPHA);
}
public AlphaProperty getVisibilityAlpha() {
return mMultiValueAlpha.getProperty(INDEX_VISIBILITY_ALPHA);
}
}

View File

@ -28,7 +28,6 @@ import static com.android.launcher3.anim.Interpolators.ACCEL;
import static com.android.launcher3.anim.Interpolators.ACCEL_2;
import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ACTIONS;
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.TASK_DISMISS_SWIPE_UP;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.TASK_LAUNCH_SWIPE_DOWN;
@ -39,6 +38,10 @@ import static com.android.launcher3.userevent.nano.LauncherLogProto.ControlType.
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
import static com.android.quickstep.TaskUtils.checkCurrentOrManagedUserId;
import static com.android.quickstep.views.OverviewActionsView.HIDDEN_GESTURE_RUNNING;
import static com.android.quickstep.views.OverviewActionsView.HIDDEN_NON_ZERO_ROTATION;
import static com.android.quickstep.views.OverviewActionsView.HIDDEN_NO_RECENTS;
import static com.android.quickstep.views.OverviewActionsView.HIDDEN_NO_TASKS;
import android.animation.AnimatorSet;
import android.animation.LayoutTransition;
@ -67,7 +70,6 @@ import android.util.AttributeSet;
import android.util.FloatProperty;
import android.util.Property;
import android.util.SparseBooleanArray;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@ -87,7 +89,6 @@ import androidx.annotation.Nullable;
import com.android.launcher3.BaseActivity;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Insettable;
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherState;
import com.android.launcher3.PagedView;
@ -117,7 +118,6 @@ import com.android.quickstep.RecentsAnimationController;
import com.android.quickstep.RecentsAnimationTargets;
import com.android.quickstep.RecentsModel;
import com.android.quickstep.RecentsModel.TaskVisualsChangeListener;
import com.android.quickstep.SysUINavigationMode;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.TaskThumbnailCache;
import com.android.quickstep.TaskUtils;
@ -331,8 +331,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
// Keeps track of the index where the first TaskView should be
private int mTaskViewStartIndex = 0;
private View mActionsView;
private boolean mGestureRunning = false;
private OverviewActionsView mActionsView;
private BaseActivity.MultiWindowModeChangedListener mMultiWindowModeChangedListener =
(inMultiWindowMode) -> {
@ -393,11 +392,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
int rotation = RecentsOrientedState.getRotationForUserDegreesRotated(i);
if (mPreviousRotation != rotation) {
animateRecentsRotationInPlace(rotation);
if (rotation == 0) {
showActionsView();
} else {
hideActionsView();
}
mPreviousRotation = rotation;
}
}
@ -472,6 +466,10 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
reset();
}
public void init(OverviewActionsView actionsView) {
mActionsView = actionsView;
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
@ -485,7 +483,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
mIPinnedStackAnimationListener.setActivity(mActivity);
SystemUiProxy.INSTANCE.get(getContext()).setPinnedStackAnimationListener(
mIPinnedStackAnimationListener);
setActionsView();
mOrientationState.init();
}
@ -513,6 +510,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
TaskView taskView = (TaskView) child;
mHasVisibleTaskData.delete(taskView.getTask().key.id);
mTaskViewPool.recycle(taskView);
mActionsView.updateHiddenFlags(HIDDEN_NO_TASKS, getTaskViewCount() == 0);
}
updateTaskStartIndex(child);
}
@ -525,6 +523,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
// child direction back to match system settings.
child.setLayoutDirection(mIsRtl ? View.LAYOUT_DIRECTION_LTR : View.LAYOUT_DIRECTION_RTL);
updateTaskStartIndex(child);
mActionsView.updateHiddenFlags(HIDDEN_NO_TASKS, false);
}
private void updateTaskStartIndex(View affectingView) {
@ -688,7 +687,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
if (getTaskViewCount() != requiredTaskCount) {
if (indexOfChild(mClearAllButton) != -1) {
removeView(mClearAllButton);
hideActionsView();
}
for (int i = getTaskViewCount(); i < requiredTaskCount; i++) {
addView(mTaskViewPool.getView());
@ -698,7 +696,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
}
if (requiredTaskCount > 0) {
addView(mClearAllButton);
showActionsView();
}
}
@ -738,7 +735,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
if (indexOfChild(mClearAllButton) != -1) {
removeView(mClearAllButton);
}
hideActionsView();
}
public int getTaskViewCount() {
@ -1000,7 +996,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
setEnableDrawingLiveTile(false);
setRunningTaskHidden(true);
setRunningTaskIconScaledDown(true);
mGestureRunning = true;
mActionsView.updateHiddenFlags(HIDDEN_GESTURE_RUNNING, true);
}
/**
@ -1066,7 +1062,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
}
setRunningTaskHidden(false);
animateUpRunningTaskIconScale();
mGestureRunning = false;
mActionsView.updateHiddenFlags(HIDDEN_GESTURE_RUNNING, false);
}
/**
@ -1083,7 +1079,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
addView(taskView, mTaskViewStartIndex);
if (wasEmpty) {
addView(mClearAllButton);
showActionsView();
}
// The temporary running task is only used for the duration between the start of the
// gesture and the task list is loaded and applied
@ -1407,7 +1402,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
if (getTaskViewCount() == 0) {
removeViewInLayout(mClearAllButton);
hideActionsView();
startHome();
} else {
snapToPageImmediately(pageToSnapTo);
@ -1550,14 +1544,12 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
int alphaInt = Math.round(alpha * 255);
mEmptyMessagePaint.setAlpha(alphaInt);
mEmptyIcon.setAlpha(alphaInt);
mActionsView.getContentAlpha().setValue(mContentAlpha);
if (alpha > 0) {
setVisibility(VISIBLE);
if (!mGestureRunning) {
showActionsView();
}
} else if (!mFreezeViewVisibility) {
setVisibility(GONE);
hideActionsView();
}
}
@ -1568,18 +1560,20 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
public void setFreezeViewVisibility(boolean freezeViewVisibility) {
if (mFreezeViewVisibility != freezeViewVisibility) {
mFreezeViewVisibility = freezeViewVisibility;
if (!mFreezeViewVisibility) {
setVisibility(mContentAlpha > 0 ? VISIBLE : GONE);
if (mContentAlpha > 0) {
showActionsView();
} else {
hideActionsView();
}
}
}
}
@Override
public void setVisibility(int visibility) {
super.setVisibility(visibility);
if (mActionsView != null) {
mActionsView.updateHiddenFlags(HIDDEN_NO_RECENTS, visibility != VISIBLE);
}
}
public void setLayoutRotation(int touchRotation, int displayRotation) {
int launcherRotation = mOrientationState.getLauncherRotation();
setLayoutInternal(touchRotation, displayRotation, launcherRotation);
@ -1592,6 +1586,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
setLayoutDirection(mIsRtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);
mClearAllButton.setRotation(mOrientationHandler.getDegreesRotated());
mActivity.getDragLayer().recreateControllers();
mActionsView.updateHiddenFlags(HIDDEN_NON_ZERO_ROTATION, touchRotation != 0);
requestLayout();
}
}
@ -2150,36 +2145,4 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
mActivity.clearForceInvisibleFlag(STATE_HANDLER_INVISIBILITY_FLAGS);
}
}
private void showActionsView() {
if (mActionsView != null && getTaskViewCount() > 0) {
mActionsView.setVisibility(VISIBLE);
}
}
private void hideActionsView() {
if (mActionsView != null) {
mActionsView.setVisibility(GONE);
}
}
private void setActionsView() {
if (mActionsView == null && ENABLE_OVERVIEW_ACTIONS.get()
&& SysUINavigationMode.removeShelfFromOverview(mActivity)) {
mActionsView = ((ViewGroup) getParent()).findViewById(R.id.overview_actions_view);
if (mActionsView != null) {
InsettableFrameLayout.LayoutParams layoutParams =
new InsettableFrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
getResources().getDimensionPixelSize(
R.dimen.overview_actions_height));
layoutParams.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
int margin = getResources().getDimensionPixelSize(
R.dimen.overview_actions_horizontal_margin);
layoutParams.setMarginStart(margin);
layoutParams.setMarginEnd(margin);
mActionsView.setLayoutParams(layoutParams);
showActionsView();
}
}
}
}

View File

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:id="@+id/action_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<Space
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</Space>
<Button
android:id="@+id/action_screenshot"
style="@style/OverviewActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_screenshot"
android:text="@string/action_screenshot" />
<Space
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</Space>
<Button
android:id="@+id/action_share"
style="@style/OverviewActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_share"
android:text="@string/action_share" />
<Space
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</Space>
</LinearLayout>
</merge>

View File

@ -16,8 +16,48 @@
-->
<com.android.quickstep.views.OverviewActionsView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone">
android:layout_width="match_parent"
android:layout_height="@dimen/overview_actions_height"
android:layout_gravity="center_horizontal|bottom"
android:layout_marginLeft="@dimen/overview_actions_horizontal_margin"
android:layout_marginRight="@dimen/overview_actions_horizontal_margin" >
<LinearLayout
android:id="@+id/action_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<Space
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</Space>
<Button
android:id="@+id/action_screenshot"
style="@style/OverviewActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_screenshot"
android:text="@string/action_screenshot" />
<Space
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</Space>
<Button
android:id="@+id/action_share"
style="@style/OverviewActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_share"
android:text="@string/action_share" />
<Space
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</Space>
</LinearLayout>
</com.android.quickstep.views.OverviewActionsView>

View File

@ -28,7 +28,6 @@ import android.content.IntentSender;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.view.View;
import com.android.launcher3.LauncherState.ScaleAndTranslation;
import com.android.launcher3.LauncherStateManager.StateHandler;
@ -52,6 +51,7 @@ import com.android.quickstep.util.QuickstepOnboardingPrefs;
import com.android.quickstep.util.RemoteAnimationProvider;
import com.android.quickstep.util.RemoteFadeOutAnimationListener;
import com.android.quickstep.util.ShelfPeekAnim;
import com.android.quickstep.views.OverviewActionsView;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
@ -75,7 +75,7 @@ public abstract class BaseQuickstepLauncher extends Launcher
private final ShelfPeekAnim mShelfPeekAnim = new ShelfPeekAnim(this);
private View mActionsView;
private OverviewActionsView mActionsView;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -164,19 +164,17 @@ public abstract class BaseQuickstepLauncher extends Launcher
protected void setupViews() {
super.setupViews();
mActionsView = findViewById(R.id.overview_actions_view);
((RecentsView) getOverviewPanel()).init(mActionsView);
if (FeatureFlags.ENABLE_OVERVIEW_ACTIONS.get() && removeShelfFromOverview(this)) {
// Overview is above all other launcher elements, including qsb, so move it to the top.
getOverviewPanel().bringToFront();
if (mActionsView != null) {
mActionsView.bringToFront();
}
mActionsView.bringToFront();
}
}
public View getActionsView() {
return mActionsView;
public <T extends OverviewActionsView> T getActionsView() {
return (T) mActionsView;
}
@Override

View File

@ -45,12 +45,8 @@
<include
android:id="@+id/overview_panel"
layout="@layout/overview_panel"
android:visibility="gone" />
layout="@layout/overview_panel" />
<include
android:id="@+id/overview_actions_view"
layout="@layout/overview_actions_container" />
<!-- Keep these behind the workspace so that they are not visible when
we go into AllApps -->

View File

@ -17,4 +17,5 @@
<Space
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
android:layout_height="0dp" />
android:layout_height="0dp"
android:visibility="gone" />

View File

@ -16,7 +16,7 @@
package com.android.launcher3.util;
import android.util.Property;
import android.util.FloatProperty;
import android.view.View;
import java.util.Arrays;
@ -26,8 +26,8 @@ import java.util.Arrays;
*/
public class MultiValueAlpha {
public static final Property<AlphaProperty, Float> VALUE =
new Property<AlphaProperty, Float>(Float.TYPE, "value") {
public static final FloatProperty<AlphaProperty> VALUE =
new FloatProperty<AlphaProperty>("value") {
@Override
public Float get(AlphaProperty alphaProperty) {
@ -35,7 +35,7 @@ public class MultiValueAlpha {
}
@Override
public void set(AlphaProperty object, Float value) {
public void setValue(AlphaProperty object, float value) {
object.setValue(value);
}
};