Merge "Some live tile and state fixes" into ub-launcher3-master

This commit is contained in:
TreeHugger Robot
2019-02-19 20:24:21 +00:00
committed by Android (Google) Code Review
11 changed files with 138 additions and 292 deletions
@@ -15,7 +15,6 @@
*/
package com.android.launcher3.uioverrides;
import static com.android.launcher3.AbstractFloatingView.TYPE_QUICKSTEP_PREVIEW;
import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS;
import static com.android.launcher3.anim.Interpolators.DEACCEL_2;
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
@@ -76,11 +75,7 @@ public class OverviewState extends LauncherState {
public void onStateEnabled(Launcher launcher) {
RecentsView rv = launcher.getOverviewPanel();
rv.setOverviewStateEnabled(true);
if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
AbstractFloatingView.closeAllOpenViews(launcher);
} else {
AbstractFloatingView.closeAllOpenViewsExcept(launcher, TYPE_QUICKSTEP_PREVIEW);
}
AbstractFloatingView.closeAllOpenViews(launcher);
}
@Override
@@ -36,6 +36,7 @@ import android.graphics.RectF;
import android.graphics.Region;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewOverlay;
import android.view.animation.Interpolator;
import com.android.launcher3.DeviceProfile;
@@ -43,6 +44,7 @@ import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherInitListener;
import com.android.launcher3.LauncherState;
import com.android.launcher3.R;
import com.android.launcher3.TestProtocol;
import com.android.launcher3.allapps.DiscoveryBounce;
import com.android.launcher3.anim.AnimatorPlaybackController;
@@ -55,7 +57,6 @@ import com.android.launcher3.util.MultiValueAlpha.AlphaProperty;
import com.android.launcher3.views.FloatingIconView;
import com.android.quickstep.util.ClipAnimationHelper;
import com.android.quickstep.util.LayoutUtils;
import com.android.quickstep.views.LauncherLayoutListener;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
@@ -72,16 +73,6 @@ import androidx.annotation.UiThread;
*/
public final class LauncherActivityControllerHelper implements ActivityControlHelper<Launcher> {
@Override
public LayoutListener createLayoutListener(Launcher activity) {
return LauncherLayoutListener.resetAndGet(activity);
}
@Override
public void executeOnWindowAvailable(Launcher activity, Runnable action) {
activity.getWorkspace().runOnOverlayHidden(action);
}
@Override
public int getSwipeUpDestinationAndLength(DeviceProfile dp, Context context, Rect outRect) {
LayoutUtils.calculateLauncherTaskSize(context, dp, outRect);
@@ -15,10 +15,8 @@
*/
package com.android.launcher3.uioverrides;
import static com.android.launcher3.AbstractFloatingView.TYPE_QUICKSTEP_PREVIEW;
import static com.android.launcher3.LauncherAnimUtils.ALL_APPS_TRANSITION_MS;
import static com.android.launcher3.anim.Interpolators.DEACCEL_2;
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.Launcher;
@@ -46,11 +44,7 @@ public class AllAppsState extends LauncherState {
@Override
public void onStateEnabled(Launcher launcher) {
if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
AbstractFloatingView.closeAllOpenViews(launcher);
} else {
AbstractFloatingView.closeAllOpenViewsExcept(launcher, TYPE_QUICKSTEP_PREVIEW);
}
AbstractFloatingView.closeAllOpenViews(launcher);
dispatchWindowStateChanged(launcher);
}
@@ -49,10 +49,6 @@ import androidx.annotation.UiThread;
@TargetApi(Build.VERSION_CODES.P)
public interface ActivityControlHelper<T extends BaseDraggingActivity> {
LayoutListener createLayoutListener(T activity);
void executeOnWindowAvailable(T activity, Runnable action);
void onTransitionCancelled(T activity, boolean activityVisible);
int getSwipeUpDestinationAndLength(DeviceProfile dp, Context context, Rect outRect);
@@ -105,18 +101,6 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {
boolean isInLiveTileMode();
interface LayoutListener {
void open();
void setHandler(WindowTransformSwipeHandler handler);
void finish();
void update(boolean shouldFinish, boolean isLongSwipe, RectF currentRect,
float cornerRadius);
}
interface ActivityInitListener {
void register();
@@ -56,11 +56,6 @@ public final class FallbackActivityControllerHelper implements
mHomeComponent = homeComponent;
}
@Override
public void executeOnWindowAvailable(RecentsActivity activity, Runnable action) {
action.run();
}
@Override
public void onTransitionCancelled(RecentsActivity activity, boolean activityVisible) {
// TODO:
@@ -151,26 +146,6 @@ public final class FallbackActivityControllerHelper implements
};
}
@Override
public LayoutListener createLayoutListener(RecentsActivity activity) {
// We do not change anything as part of layout changes in fallback activity. Return a
// default layout listener.
return new LayoutListener() {
@Override
public void open() { }
@Override
public void setHandler(WindowTransformSwipeHandler handler) { }
@Override
public void finish() { }
@Override
public void update(boolean shouldFinish, boolean isLongSwipe, RectF currentRect,
float cornerRadius) { }
};
}
@Override
public ActivityInitListener createActivityInitListener(
BiPredicate<RecentsActivity, Boolean> onInitListener) {
@@ -44,6 +44,11 @@ public class MultiStateCallback {
* Adds the provided state flags to the global state and executes any callbacks as a result.
*/
public void setState(int stateFlag) {
if (DEBUG_STATES) {
Log.d(TAG, "[" + System.identityHashCode(this) + "] Adding "
+ convertToFlagNames(stateFlag) + " to " + convertToFlagNames(mState));
}
int oldState = mState;
mState = mState | stateFlag;
@@ -68,6 +73,11 @@ public class MultiStateCallback {
* as a result.
*/
public void clearState(int stateFlag) {
if (DEBUG_STATES) {
Log.d(TAG, "[" + System.identityHashCode(this) + "] Removing "
+ convertToFlagNames(stateFlag) + " from " + convertToFlagNames(mState));
}
int oldState = mState;
mState = mState & ~stateFlag;
notifyStateChangeHandlers(oldState);
@@ -109,24 +119,14 @@ public class MultiStateCallback {
return (mState & stateMask) == stateMask;
}
private void debugNewState(int stateFlag) {
if (!DEBUG_STATES) {
return;
}
int state = getState();
StringJoiner currentStateStr = new StringJoiner(", ", "[", "]");
String stateFlagStr = "Unknown-" + stateFlag;
private String convertToFlagNames(int flags) {
StringJoiner joiner = new StringJoiner(", ", "[", " (" + flags + ")]");
for (int i = 0; i < mStateNames.length; i++) {
if ((state & (i << i)) != 0) {
currentStateStr.add(mStateNames[i]);
}
if (stateFlag == (1 << i)) {
stateFlagStr = mStateNames[i] + " (" + stateFlag + ")";
if ((flags & (1 << i)) != 0) {
joiner.add(mStateNames[i]);
}
}
Log.d(TAG, "[" + System.identityHashCode(this) + "] Adding " + stateFlagStr + " to "
+ currentStateStr);
return joiner.toString();
}
}
@@ -60,7 +60,9 @@ import android.os.SystemClock;
import android.view.HapticFeedbackConstants;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnApplyWindowInsetsListener;
import android.view.ViewTreeObserver.OnDrawListener;
import android.view.WindowInsets;
import android.view.WindowManager;
import android.view.animation.Interpolator;
@@ -87,11 +89,11 @@ import com.android.quickstep.ActivityControlHelper.ActivityInitListener;
import com.android.quickstep.ActivityControlHelper.AnimationFactory;
import com.android.quickstep.ActivityControlHelper.AnimationFactory.ShelfAnimState;
import com.android.quickstep.ActivityControlHelper.HomeAnimationFactory;
import com.android.quickstep.ActivityControlHelper.LayoutListener;
import com.android.quickstep.util.ClipAnimationHelper;
import com.android.quickstep.util.RemoteAnimationTargetSet;
import com.android.quickstep.util.SwipeAnimationTargetSet;
import com.android.quickstep.util.SwipeAnimationTargetSet.SwipeAnimationListener;
import com.android.quickstep.views.LiveTileOverlay;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;
import com.android.systemui.shared.recents.model.ThumbnailData;
@@ -111,10 +113,10 @@ import androidx.annotation.UiThread;
@TargetApi(Build.VERSION_CODES.O)
public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
implements SwipeAnimationListener {
implements SwipeAnimationListener, OnApplyWindowInsetsListener {
private static final String TAG = WindowTransformSwipeHandler.class.getSimpleName();
private static final String[] STATE_NAMES = DEBUG_STATES ? new String[19] : null;
private static final String[] STATE_NAMES = DEBUG_STATES ? new String[20] : null;
private static int getFlagForIndex(int index, String name) {
if (DEBUG_STATES) {
@@ -167,6 +169,9 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
private static final int STATE_ASSIST_DATA_RECEIVED =
getFlagForIndex(18, "STATE_ASSIST_DATA_RECEIVED");
private static final int STATE_LONG_SWIPE_ACTIVE =
getFlagForIndex(19, "LONG_SWIPE_ACTIVE");
private static final int LAUNCHER_UI_STATES =
STATE_LAUNCHER_PRESENT | STATE_LAUNCHER_DRAWN | STATE_ACTIVITY_MULTIPLIER_COMPLETE
| STATE_LAUNCHER_STARTED;
@@ -252,10 +257,10 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
private AnimatorPlaybackController mLauncherTransitionController;
private T mActivity;
private LayoutListener mLayoutListener;
private RecentsView mRecentsView;
private SyncRtSurfaceTransactionApplierCompat mSyncTransactionApplier;
private AnimationFactory mAnimationFactory = (t) -> { };
private LiveTileOverlay mLiveTileOverlay = new LiveTileOverlay();
private boolean mWasLauncherAlreadyVisible;
@@ -360,6 +365,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
mStateCallback.addCallback(LONG_SWIPE_ENTER_STATE, this::checkLongSwipeCanEnter);
mStateCallback.addCallback(LONG_SWIPE_START_STATE, this::checkLongSwipeCanStart);
mStateCallback.addChangeHandler(STATE_LONG_SWIPE_ACTIVE, this::onLongSwipeActiveChanged);
if (!ENABLE_QUICKSTEP_LIVE_TILE.get()) {
mStateCallback.addChangeHandler(STATE_APP_CONTROLLER_RECEIVED | STATE_LAUNCHER_PRESENT
@@ -410,7 +416,6 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
int oldState = mStateCallback.getState() & ~LAUNCHER_UI_STATES;
initStateCallbacks();
mStateCallback.setState(oldState);
mLayoutListener.setHandler(null);
}
mWasLauncherAlreadyVisible = alreadyOnHome;
mActivity = activity;
@@ -423,10 +428,10 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
}
mRecentsView = activity.getOverviewPanel();
SyncRtSurfaceTransactionApplierCompat.create(mRecentsView, (applier) -> {
mSyncTransactionApplier = applier;
});
SyncRtSurfaceTransactionApplierCompat.create(mRecentsView,
applier -> mSyncTransactionApplier = applier );
mRecentsView.setEnableFreeScroll(false);
mRecentsView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
if (!mLongSwipeMode && mGestureEndTarget != HOME) {
updateFinalShift();
@@ -434,7 +439,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
});
mRecentsView.setRecentsAnimationWrapper(mRecentsAnimationWrapper);
mRecentsView.setClipAnimationHelper(mClipAnimationHelper);
mLayoutListener = mActivityControlHelper.createLayoutListener(mActivity);
mActivity.getRootView().getOverlay().add(mLiveTileOverlay);
mStateCallback.setState(STATE_LAUNCHER_PRESENT);
if (alreadyOnHome) {
@@ -480,7 +485,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
}
setupRecentsViewUi();
mLayoutListener.open();
activity.getRootView().setOnApplyWindowInsetsListener(this);
mStateCallback.setState(STATE_LAUNCHER_STARTED);
}
@@ -522,7 +527,6 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
}
private void initializeLauncherAnimationController() {
mLayoutListener.setHandler(this);
buildAnimationController();
if (LatencyTrackerCompat.isEnabled(mContext)) {
@@ -570,13 +574,13 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
mCurrentShift.updateValue(1);
if (!mLongSwipeMode && !FeatureFlags.SWIPE_HOME.get()) {
onLongSwipeEnabled();
setStateOnUiThread(STATE_LONG_SWIPE_ACTIVE);
}
mLongSwipeDisplacement = displacement - mTransitionDragLength;
onLongSwipeDisplacementUpdated();
} else {
if (mLongSwipeMode) {
onLongSwipeDisabled();
mStateCallback.clearState(STATE_LONG_SWIPE_ACTIVE);
}
float translation = Math.max(displacement, 0);
float shift = mTransitionDragLength == 0 ? 0 : translation / mTransitionDragLength;
@@ -598,14 +602,18 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
}
}
/**
* Called by {@link #mLayoutListener} when launcher layout changes
*/
public void buildAnimationController() {
private void buildAnimationController() {
initTransitionEndpoints(mActivity.getDeviceProfile());
mAnimationFactory.createActivityController(mTransitionDragLength);
}
@Override
public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
WindowInsets result = view.onApplyWindowInsets(windowInsets);
buildAnimationController();
return result;
}
private void onAnimatorPlaybackControllerCreated(AnimatorPlaybackController anim) {
mLauncherTransitionController = anim;
mLauncherTransitionController.dispatchOnStart();
@@ -640,10 +648,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
}
if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
if (mRecentsAnimationWrapper.getController() != null && mLayoutListener != null) {
mLayoutListener.open();
mLayoutListener.update(mCurrentShift.value > 1, mLongSwipeMode,
mClipAnimationHelper.getCurrentRectWithInsets(),
if (mRecentsAnimationWrapper.getController() != null) {
mLiveTileOverlay.update(mClipAnimationHelper.getCurrentRectWithInsets(),
mClipAnimationHelper.getCurrentCornerRadius());
}
}
@@ -1106,12 +1112,16 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
private void invalidateHandlerWithLauncher() {
mLauncherTransitionController = null;
mLayoutListener.finish();
mActivityControlHelper.getAlphaProperty(mActivity).setValue(1);
mRecentsView.setEnableFreeScroll(true);
mRecentsView.setRunningTaskIconScaledDown(false);
mRecentsView.setOnScrollChangeListener(null);
mRecentsView.setRunningTaskHidden(false);
mRecentsView.setEnableDrawingLiveTile(true);
mActivity.getRootView().setOnApplyWindowInsetsListener(null);
mActivity.getRootView().getOverlay().remove(mLiveTileOverlay);
}
private void notifyTransitionCancelled() {
@@ -1224,22 +1234,27 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
}
// Handling long swipe
private void onLongSwipeEnabled() {
mLongSwipeMode = true;
checkLongSwipeCanEnter();
checkLongSwipeCanStart();
}
private void onLongSwipeActiveChanged(boolean isActive) {
mLongSwipeMode = isActive;
private void onLongSwipeDisabled() {
mLongSwipeMode = false;
mStateCallback.clearState(STATE_SCREENSHOT_VIEW_SHOWN);
if (mLongSwipeMode) {
checkLongSwipeCanEnter();
checkLongSwipeCanStart();
} else {
mStateCallback.clearState(STATE_SCREENSHOT_VIEW_SHOWN);
if (mLongSwipeController != null) {
mLongSwipeController.destroy();
setTargetAlphaProvider((t, a1) -> a1);
if (mLongSwipeController != null) {
mLongSwipeController.destroy();
setTargetAlphaProvider((t, a1) -> a1);
// Rebuild animations
buildAnimationController();
// Rebuild animations
buildAnimationController();
}
}
mLiveTileOverlay.setDrawEnabled(!mLongSwipeMode);
if (mRecentsView != null) {
mRecentsView.setRunningTaskHidden(!isActive);
mRecentsView.setEnableDrawingLiveTile(isActive);
}
}
@@ -1,158 +0,0 @@
/*
* Copyright (C) 2017 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.quickstep.views;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
import static com.android.launcher3.states.RotationHelper.REQUEST_NONE;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.MotionEvent;
import android.widget.FrameLayout;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.Insettable;
import com.android.launcher3.Launcher;
import com.android.quickstep.ActivityControlHelper.LayoutListener;
import com.android.quickstep.WindowTransformSwipeHandler;
/**
* Floating view which shows the task snapshot allowing it to be dragged and placed.
*/
public class LauncherLayoutListener extends AbstractFloatingView
implements Insettable, LayoutListener {
public static LauncherLayoutListener resetAndGet(Launcher launcher) {
LauncherRecentsView lrv = launcher.getOverviewPanel();
LauncherLayoutListener listener = lrv.mLauncherLayoutListener;
if (listener.isOpen()) {
listener.close(false);
}
listener.setHandler(null);
return listener;
}
private final Launcher mLauncher;
private final Paint mPaint = new Paint();
private WindowTransformSwipeHandler mHandler;
private RectF mCurrentRect;
private float mCornerRadius;
private boolean mWillNotDraw;
/**
* package private
*/
LauncherLayoutListener(Launcher launcher) {
super(launcher, null);
mLauncher = launcher;
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
setLayoutParams(new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));
mWillNotDraw = willNotDraw();
super.setWillNotDraw(false);
}
@Override
public void update(boolean shouldFinish, boolean isLongSwipe, RectF currentRect,
float cornerRadius) {
if (!ENABLE_QUICKSTEP_LIVE_TILE.get()) {
if (shouldFinish) {
finish();
}
return;
}
mCurrentRect = currentRect;
mCornerRadius = cornerRadius;
setWillNotDraw(mCurrentRect == null || isLongSwipe);
invalidate();
}
@Override
public void setWillNotDraw(boolean willNotDraw) {
// Prevent super call as that causes additional relayout.
mWillNotDraw = willNotDraw;
}
@Override
public void setHandler(WindowTransformSwipeHandler handler) {
mHandler = handler;
}
@Override
public void setInsets(Rect insets) {
if (mHandler != null) {
mHandler.buildAnimationController();
}
}
@Override
public boolean onControllerInterceptTouchEvent(MotionEvent ev) {
return false;
}
@Override
protected void handleClose(boolean animate) {
if (mIsOpen) {
mIsOpen = false;
// We don't support animate.
mLauncher.getDragLayer().removeView(this);
if (mHandler != null) {
mHandler.layoutListenerClosed();
}
}
}
@Override
public void open() {
if (!mIsOpen) {
mLauncher.getDragLayer().addView(this);
mIsOpen = true;
}
}
@Override
public void logActionCommand(int command) {
// We should probably log the weather
}
@Override
protected boolean isOfType(int type) {
return (type & TYPE_QUICKSTEP_PREVIEW) != 0;
}
@Override
public void finish() {
close(false);
setHandler(null);
mLauncher.getRotationHelper().setStateHandlerRequest(REQUEST_NONE);
}
@Override
protected void onDraw(Canvas canvas) {
if (!mWillNotDraw) {
canvas.drawRoundRect(mCurrentRect, mCornerRadius, mCornerRadius, mPaint);
}
}
}
@@ -15,7 +15,6 @@
*/
package com.android.quickstep.views;
import static com.android.launcher3.AbstractFloatingView.TYPE_QUICKSTEP_PREVIEW;
import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.ALL_APPS_HEADER_EXTRA;
import static com.android.launcher3.LauncherState.NORMAL;
@@ -36,8 +35,6 @@ import android.util.FloatProperty;
import android.view.View;
import android.view.ViewDebug;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BaseActivity;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
@@ -77,7 +74,6 @@ public class LauncherRecentsView extends RecentsView<Launcher> {
private float mTranslationYFactor;
private final TransformParams mTransformParams = new TransformParams();
final LauncherLayoutListener mLauncherLayoutListener;
public LauncherRecentsView(Context context) {
this(context, null);
@@ -90,7 +86,6 @@ public class LauncherRecentsView extends RecentsView<Launcher> {
public LauncherRecentsView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setContentAlpha(0);
mLauncherLayoutListener = new LauncherLayoutListener(BaseActivity.fromContext(context));
}
@Override
@@ -205,12 +200,8 @@ public class LauncherRecentsView extends RecentsView<Launcher> {
@Override
public void redrawLiveTile(boolean mightNeedToRefill) {
AbstractFloatingView layoutListener = AbstractFloatingView.getTopOpenViewWithType(
mActivity, TYPE_QUICKSTEP_PREVIEW);
if (layoutListener != null && layoutListener.isOpen()) {
return;
}
if (mRecentsAnimationWrapper == null || mClipAnimationHelper == null) {
if (!mEnableDrawingLiveTile || mRecentsAnimationWrapper == null
|| mClipAnimationHelper == null) {
return;
}
TaskView taskView = getRunningTaskView();
@@ -0,0 +1,62 @@
package com.android.quickstep.views;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
public class LiveTileOverlay extends Drawable {
private final Paint mPaint = new Paint();
private Rect mBoundsRect = new Rect();
private RectF mCurrentRect;
private float mCornerRadius;
private boolean mDrawEnabled = true;
public LiveTileOverlay() {
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
}
public void update(RectF currentRect, float cornerRadius) {
invalidateSelf();
mCurrentRect = currentRect;
mCornerRadius = cornerRadius;
mCurrentRect.roundOut(mBoundsRect);
setBounds(mBoundsRect);
invalidateSelf();
}
public void setDrawEnabled(boolean drawEnabled) {
if (mDrawEnabled != drawEnabled) {
mDrawEnabled = drawEnabled;
invalidateSelf();
}
}
@Override
public void draw(Canvas canvas) {
if (mCurrentRect != null && mDrawEnabled) {
canvas.drawRoundRect(mCurrentRect, mCornerRadius, mCornerRadius, mPaint);
}
}
@Override
public void setAlpha(int i) { }
@Override
public void setColorFilter(ColorFilter colorFilter) { }
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
}
@@ -55,7 +55,6 @@ public abstract class AbstractFloatingView extends LinearLayout implements Touch
TYPE_DISCOVERY_BOUNCE,
TYPE_SNACKBAR,
TYPE_QUICKSTEP_PREVIEW,
TYPE_TASK_MENU,
TYPE_OPTIONS_POPUP
})
@@ -71,25 +70,23 @@ public abstract class AbstractFloatingView extends LinearLayout implements Touch
public static final int TYPE_SNACKBAR = 1 << 7;
// Popups related to quickstep UI
public static final int TYPE_QUICKSTEP_PREVIEW = 1 << 8;
public static final int TYPE_TASK_MENU = 1 << 9;
public static final int TYPE_OPTIONS_POPUP = 1 << 10;
public static final int TYPE_TASK_MENU = 1 << 8;
public static final int TYPE_OPTIONS_POPUP = 1 << 9;
public static final int TYPE_ALL = TYPE_FOLDER | TYPE_ACTION_POPUP
| TYPE_WIDGETS_BOTTOM_SHEET | TYPE_WIDGET_RESIZE_FRAME | TYPE_WIDGETS_FULL_SHEET
| TYPE_QUICKSTEP_PREVIEW | TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE | TYPE_TASK_MENU
| TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE | TYPE_TASK_MENU
| TYPE_OPTIONS_POPUP | TYPE_SNACKBAR;
// Type of popups which should be kept open during launcher rebind
public static final int TYPE_REBIND_SAFE = TYPE_WIDGETS_FULL_SHEET
| TYPE_QUICKSTEP_PREVIEW | TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE;
| TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE;
// Usually we show the back button when a floating view is open. Instead, hide for these types.
public static final int TYPE_HIDE_BACK_BUTTON = TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE
| TYPE_SNACKBAR;
public static final int TYPE_ACCESSIBLE = TYPE_ALL
& ~TYPE_DISCOVERY_BOUNCE & ~TYPE_QUICKSTEP_PREVIEW;
public static final int TYPE_ACCESSIBLE = TYPE_ALL & ~TYPE_DISCOVERY_BOUNCE;
// These view all have particular operation associated with swipe down interaction.
public static final int TYPE_STATUS_BAR_SWIPE_DOWN_DISALLOW = TYPE_WIDGETS_BOTTOM_SHEET |