Loading quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java +2 −2 Original line number Diff line number Diff line Loading @@ -85,8 +85,8 @@ public class AllAppsState extends LauncherState { } @Override public float getHoseatAlpha(Launcher launcher) { return 0; public int getVisibleElements(Launcher launcher) { return ALL_APPS_HEADER | ALL_APPS_CONTENT; } @Override Loading quickstep/src/com/android/launcher3/uioverrides/DragPauseDetector.javadeleted 100644 → 0 +0 −92 Original line number Diff line number Diff line /* * 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.launcher3.uioverrides; import com.android.launcher3.Alarm; import com.android.launcher3.OnAlarmListener; /** * Utility class to detect a pause during a drag. */ public class DragPauseDetector implements OnAlarmListener { private static final float MAX_VELOCITY_TO_PAUSE = 0.2f; private static final long PAUSE_DURATION = 100; private final Alarm mAlarm; private final Runnable mOnPauseCallback; private boolean mTriggered = false; private int mDisabledFlags = 0; public DragPauseDetector(Runnable onPauseCallback) { mOnPauseCallback = onPauseCallback; mAlarm = new Alarm(); mAlarm.setOnAlarmListener(this); mAlarm.setAlarm(PAUSE_DURATION); } public void onDrag(float velocity) { if (mTriggered || !isEnabled()) { return; } if (Math.abs(velocity) > MAX_VELOCITY_TO_PAUSE) { // Cancel any previous alarm and set a new alarm mAlarm.setAlarm(PAUSE_DURATION); } } @Override public void onAlarm(Alarm alarm) { if (!mTriggered && isEnabled()) { mTriggered = true; mOnPauseCallback.run(); } } public boolean isTriggered () { return mTriggered; } public boolean isEnabled() { return mDisabledFlags == 0; } public void addDisabledFlags(int flags) { boolean wasEnabled = isEnabled(); mDisabledFlags |= flags; resetAlarm(wasEnabled); } public void clearDisabledFlags(int flags) { boolean wasEnabled = isEnabled(); mDisabledFlags &= ~flags; resetAlarm(wasEnabled); } private void resetAlarm(boolean wasEnabled) { boolean isEnabled = isEnabled(); if (wasEnabled == isEnabled) { // Nothing has changed } if (isEnabled && !mTriggered) { mAlarm.setAlarm(PAUSE_DURATION); } else if (!isEnabled) { mAlarm.cancelAlarm(); } } } quickstep/src/com/android/launcher3/uioverrides/EdgeSwipeController.javadeleted 100644 → 0 +0 −165 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.launcher3.uioverrides; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.touch.SwipeDetector.DIRECTION_NEGATIVE; import static com.android.launcher3.touch.SwipeDetector.DIRECTION_POSITIVE; import static com.android.launcher3.touch.SwipeDetector.HORIZONTAL; import static com.android.launcher3.touch.SwipeDetector.VERTICAL; import static com.android.quickstep.TouchInteractionService.EDGE_NAV_BAR; import android.graphics.Rect; import android.metrics.LogMaker; import android.view.MotionEvent; import com.android.launcher3.DeviceProfile; import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.util.VerticalSwipeController; import com.android.quickstep.views.RecentsView; class EventLogTags { private EventLogTags() { } // don't instantiate /** 524292 sysui_multi_action (content|4) */ public static final int SYSUI_MULTI_ACTION = 524292; public static void writeSysuiMultiAction(Object[] content) { android.util.EventLog.writeEvent(SYSUI_MULTI_ACTION, content); } } class MetricsLogger { private static MetricsLogger sMetricsLogger; private static MetricsLogger getLogger() { if (sMetricsLogger == null) { sMetricsLogger = new MetricsLogger(); } return sMetricsLogger; } protected void saveLog(Object[] rep) { EventLogTags.writeSysuiMultiAction(rep); } public void write(LogMaker content) { if (content.getType() == 0/*MetricsEvent.TYPE_UNKNOWN*/) { content.setType(4/*MetricsEvent.TYPE_ACTION*/); } saveLog(content.serialize()); } } /** * Extension of {@link VerticalSwipeController} to go from NORMAL to OVERVIEW. */ public class EdgeSwipeController extends VerticalSwipeController implements OnDeviceProfileChangeListener { private static final Rect sTempRect = new Rect(); private final MetricsLogger mMetricsLogger = new MetricsLogger(); public EdgeSwipeController(Launcher l) { super(l, NORMAL, OVERVIEW, l.getDeviceProfile().isVerticalBarLayout() ? HORIZONTAL : VERTICAL); l.addOnDeviceProfileChangeListener(this); } @Override public void onDeviceProfileChanged(DeviceProfile dp) { mDetector.updateDirection(dp.isVerticalBarLayout() ? HORIZONTAL : VERTICAL); } @Override protected boolean shouldInterceptTouch(MotionEvent ev) { return mLauncher.isInState(NORMAL) && (ev.getEdgeFlags() & EDGE_NAV_BAR) != 0; } @Override protected int getSwipeDirection(MotionEvent ev) { return isTransitionFlipped() ? DIRECTION_NEGATIVE : DIRECTION_POSITIVE; } public EdgeSwipeController(Launcher l, LauncherState baseState) { super(l, baseState); } @Override protected boolean isTransitionFlipped() { return mLauncher.getDeviceProfile().isSeascape(); } @Override protected void onTransitionComplete(boolean wasFling, boolean stateChanged) { if (stateChanged && mToState instanceof OverviewState) { // Mimic ActivityMetricsLogger.logAppTransitionMultiEvents() logging for // "Recents" activity for app transition tests. final LogMaker builder = new LogMaker(761/*APP_TRANSITION*/); builder.setPackageName("com.android.systemui"); builder.addTaggedData(871/*FIELD_CLASS_NAME*/, "com.android.systemui.recents.RecentsActivity"); builder.addTaggedData(319/*APP_TRANSITION_DELAY_MS*/, 0/* zero time */); mMetricsLogger.write(builder); // Add user event logging for launcher pipeline int direction = Direction.UP; if (mLauncher.getDeviceProfile().isVerticalBarLayout()) { direction = Direction.LEFT; if (mLauncher.getDeviceProfile().isSeascape()) { direction = Direction.RIGHT; } } mLauncher.getUserEventDispatcher().logStateChangeAction( wasFling ? Touch.FLING : Touch.SWIPE, direction, ContainerType.NAVBAR, ContainerType.WORKSPACE, // src target ContainerType.TASKSWITCHER, // dst target mLauncher.getWorkspace().getCurrentPage()); } } @Override protected float getShiftRange() { return getShiftRange(mLauncher); } public static float getShiftRange(Launcher launcher) { RecentsView.getPageRect(launcher.getDeviceProfile(), launcher, sTempRect); DragLayer dl = launcher.getDragLayer(); Rect insets = dl.getInsets(); DeviceProfile dp = launcher.getDeviceProfile(); if (dp.isVerticalBarLayout()) { if (dp.isSeascape()) { return insets.left + sTempRect.left; } else { return dl.getWidth() - sTempRect.right + insets.right; } } else { return dl.getHeight() - sTempRect.bottom + insets.bottom; } } } quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java +3 −3 Original line number Diff line number Diff line Loading @@ -41,10 +41,10 @@ public class FastOverviewState extends OverviewState { } @Override public float getHoseatAlpha(Launcher launcher) { public int getVisibleElements(Launcher launcher) { if (DEBUG_DIFFERENT_UI) { return 0; return NONE; } return super.getHoseatAlpha(launcher); return super.getVisibleElements(launcher); } } quickstep/src/com/android/launcher3/uioverrides/LandscapeEdgeSwipeController.java 0 → 100644 +71 −0 Original line number Diff line number Diff line package com.android.launcher3.uioverrides; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.quickstep.TouchInteractionService.EDGE_NAV_BAR; import android.view.MotionEvent; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.touch.AbstractStateChangeTouchController; import com.android.launcher3.touch.SwipeDetector; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.quickstep.util.SysuiEventLogger; /** * Touch controller for handling edge swipes in landscape/seascape UI */ public class LandscapeEdgeSwipeController extends AbstractStateChangeTouchController { public LandscapeEdgeSwipeController(Launcher l) { super(l, SwipeDetector.HORIZONTAL); } @Override protected boolean canInterceptTouch(MotionEvent ev) { if (mCurrentAnimation != null) { // If we are already animating from a previous state, we can intercept. return true; } if (AbstractFloatingView.getTopOpenView(mLauncher) != null) { return false; } return mLauncher.isInState(NORMAL) && (ev.getEdgeFlags() & EDGE_NAV_BAR) != 0; } @Override protected int getSwipeDirection(MotionEvent ev) { mFromState = NORMAL; mToState = OVERVIEW; return SwipeDetector.DIRECTION_BOTH; } @Override protected float getShiftRange() { return mLauncher.getDragLayer().getWidth(); } @Override protected float initCurrentAnimation() { float range = getShiftRange(); long maxAccuracy = (long) (2 * range); mCurrentAnimation = mLauncher.getStateManager() .createAnimationToNewWorkspace(mToState, maxAccuracy); return (mLauncher.getDeviceProfile().isSeascape() ? 2 : -2) / range; } @Override protected int getDirectionForLog() { return mLauncher.getDeviceProfile().isSeascape() ? Direction.RIGHT : Direction.LEFT; } @Override protected void onSwipeInteractionCompleted(LauncherState targetState, int logAction) { super.onSwipeInteractionCompleted(targetState, logAction); if (mFromState == NORMAL && targetState == OVERVIEW) { SysuiEventLogger.writeDummyRecentsTransition(0); } } } Loading
quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java +2 −2 Original line number Diff line number Diff line Loading @@ -85,8 +85,8 @@ public class AllAppsState extends LauncherState { } @Override public float getHoseatAlpha(Launcher launcher) { return 0; public int getVisibleElements(Launcher launcher) { return ALL_APPS_HEADER | ALL_APPS_CONTENT; } @Override Loading
quickstep/src/com/android/launcher3/uioverrides/DragPauseDetector.javadeleted 100644 → 0 +0 −92 Original line number Diff line number Diff line /* * 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.launcher3.uioverrides; import com.android.launcher3.Alarm; import com.android.launcher3.OnAlarmListener; /** * Utility class to detect a pause during a drag. */ public class DragPauseDetector implements OnAlarmListener { private static final float MAX_VELOCITY_TO_PAUSE = 0.2f; private static final long PAUSE_DURATION = 100; private final Alarm mAlarm; private final Runnable mOnPauseCallback; private boolean mTriggered = false; private int mDisabledFlags = 0; public DragPauseDetector(Runnable onPauseCallback) { mOnPauseCallback = onPauseCallback; mAlarm = new Alarm(); mAlarm.setOnAlarmListener(this); mAlarm.setAlarm(PAUSE_DURATION); } public void onDrag(float velocity) { if (mTriggered || !isEnabled()) { return; } if (Math.abs(velocity) > MAX_VELOCITY_TO_PAUSE) { // Cancel any previous alarm and set a new alarm mAlarm.setAlarm(PAUSE_DURATION); } } @Override public void onAlarm(Alarm alarm) { if (!mTriggered && isEnabled()) { mTriggered = true; mOnPauseCallback.run(); } } public boolean isTriggered () { return mTriggered; } public boolean isEnabled() { return mDisabledFlags == 0; } public void addDisabledFlags(int flags) { boolean wasEnabled = isEnabled(); mDisabledFlags |= flags; resetAlarm(wasEnabled); } public void clearDisabledFlags(int flags) { boolean wasEnabled = isEnabled(); mDisabledFlags &= ~flags; resetAlarm(wasEnabled); } private void resetAlarm(boolean wasEnabled) { boolean isEnabled = isEnabled(); if (wasEnabled == isEnabled) { // Nothing has changed } if (isEnabled && !mTriggered) { mAlarm.setAlarm(PAUSE_DURATION); } else if (!isEnabled) { mAlarm.cancelAlarm(); } } }
quickstep/src/com/android/launcher3/uioverrides/EdgeSwipeController.javadeleted 100644 → 0 +0 −165 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.launcher3.uioverrides; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.touch.SwipeDetector.DIRECTION_NEGATIVE; import static com.android.launcher3.touch.SwipeDetector.DIRECTION_POSITIVE; import static com.android.launcher3.touch.SwipeDetector.HORIZONTAL; import static com.android.launcher3.touch.SwipeDetector.VERTICAL; import static com.android.quickstep.TouchInteractionService.EDGE_NAV_BAR; import android.graphics.Rect; import android.metrics.LogMaker; import android.view.MotionEvent; import com.android.launcher3.DeviceProfile; import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.util.VerticalSwipeController; import com.android.quickstep.views.RecentsView; class EventLogTags { private EventLogTags() { } // don't instantiate /** 524292 sysui_multi_action (content|4) */ public static final int SYSUI_MULTI_ACTION = 524292; public static void writeSysuiMultiAction(Object[] content) { android.util.EventLog.writeEvent(SYSUI_MULTI_ACTION, content); } } class MetricsLogger { private static MetricsLogger sMetricsLogger; private static MetricsLogger getLogger() { if (sMetricsLogger == null) { sMetricsLogger = new MetricsLogger(); } return sMetricsLogger; } protected void saveLog(Object[] rep) { EventLogTags.writeSysuiMultiAction(rep); } public void write(LogMaker content) { if (content.getType() == 0/*MetricsEvent.TYPE_UNKNOWN*/) { content.setType(4/*MetricsEvent.TYPE_ACTION*/); } saveLog(content.serialize()); } } /** * Extension of {@link VerticalSwipeController} to go from NORMAL to OVERVIEW. */ public class EdgeSwipeController extends VerticalSwipeController implements OnDeviceProfileChangeListener { private static final Rect sTempRect = new Rect(); private final MetricsLogger mMetricsLogger = new MetricsLogger(); public EdgeSwipeController(Launcher l) { super(l, NORMAL, OVERVIEW, l.getDeviceProfile().isVerticalBarLayout() ? HORIZONTAL : VERTICAL); l.addOnDeviceProfileChangeListener(this); } @Override public void onDeviceProfileChanged(DeviceProfile dp) { mDetector.updateDirection(dp.isVerticalBarLayout() ? HORIZONTAL : VERTICAL); } @Override protected boolean shouldInterceptTouch(MotionEvent ev) { return mLauncher.isInState(NORMAL) && (ev.getEdgeFlags() & EDGE_NAV_BAR) != 0; } @Override protected int getSwipeDirection(MotionEvent ev) { return isTransitionFlipped() ? DIRECTION_NEGATIVE : DIRECTION_POSITIVE; } public EdgeSwipeController(Launcher l, LauncherState baseState) { super(l, baseState); } @Override protected boolean isTransitionFlipped() { return mLauncher.getDeviceProfile().isSeascape(); } @Override protected void onTransitionComplete(boolean wasFling, boolean stateChanged) { if (stateChanged && mToState instanceof OverviewState) { // Mimic ActivityMetricsLogger.logAppTransitionMultiEvents() logging for // "Recents" activity for app transition tests. final LogMaker builder = new LogMaker(761/*APP_TRANSITION*/); builder.setPackageName("com.android.systemui"); builder.addTaggedData(871/*FIELD_CLASS_NAME*/, "com.android.systemui.recents.RecentsActivity"); builder.addTaggedData(319/*APP_TRANSITION_DELAY_MS*/, 0/* zero time */); mMetricsLogger.write(builder); // Add user event logging for launcher pipeline int direction = Direction.UP; if (mLauncher.getDeviceProfile().isVerticalBarLayout()) { direction = Direction.LEFT; if (mLauncher.getDeviceProfile().isSeascape()) { direction = Direction.RIGHT; } } mLauncher.getUserEventDispatcher().logStateChangeAction( wasFling ? Touch.FLING : Touch.SWIPE, direction, ContainerType.NAVBAR, ContainerType.WORKSPACE, // src target ContainerType.TASKSWITCHER, // dst target mLauncher.getWorkspace().getCurrentPage()); } } @Override protected float getShiftRange() { return getShiftRange(mLauncher); } public static float getShiftRange(Launcher launcher) { RecentsView.getPageRect(launcher.getDeviceProfile(), launcher, sTempRect); DragLayer dl = launcher.getDragLayer(); Rect insets = dl.getInsets(); DeviceProfile dp = launcher.getDeviceProfile(); if (dp.isVerticalBarLayout()) { if (dp.isSeascape()) { return insets.left + sTempRect.left; } else { return dl.getWidth() - sTempRect.right + insets.right; } } else { return dl.getHeight() - sTempRect.bottom + insets.bottom; } } }
quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java +3 −3 Original line number Diff line number Diff line Loading @@ -41,10 +41,10 @@ public class FastOverviewState extends OverviewState { } @Override public float getHoseatAlpha(Launcher launcher) { public int getVisibleElements(Launcher launcher) { if (DEBUG_DIFFERENT_UI) { return 0; return NONE; } return super.getHoseatAlpha(launcher); return super.getVisibleElements(launcher); } }
quickstep/src/com/android/launcher3/uioverrides/LandscapeEdgeSwipeController.java 0 → 100644 +71 −0 Original line number Diff line number Diff line package com.android.launcher3.uioverrides; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.quickstep.TouchInteractionService.EDGE_NAV_BAR; import android.view.MotionEvent; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.touch.AbstractStateChangeTouchController; import com.android.launcher3.touch.SwipeDetector; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.quickstep.util.SysuiEventLogger; /** * Touch controller for handling edge swipes in landscape/seascape UI */ public class LandscapeEdgeSwipeController extends AbstractStateChangeTouchController { public LandscapeEdgeSwipeController(Launcher l) { super(l, SwipeDetector.HORIZONTAL); } @Override protected boolean canInterceptTouch(MotionEvent ev) { if (mCurrentAnimation != null) { // If we are already animating from a previous state, we can intercept. return true; } if (AbstractFloatingView.getTopOpenView(mLauncher) != null) { return false; } return mLauncher.isInState(NORMAL) && (ev.getEdgeFlags() & EDGE_NAV_BAR) != 0; } @Override protected int getSwipeDirection(MotionEvent ev) { mFromState = NORMAL; mToState = OVERVIEW; return SwipeDetector.DIRECTION_BOTH; } @Override protected float getShiftRange() { return mLauncher.getDragLayer().getWidth(); } @Override protected float initCurrentAnimation() { float range = getShiftRange(); long maxAccuracy = (long) (2 * range); mCurrentAnimation = mLauncher.getStateManager() .createAnimationToNewWorkspace(mToState, maxAccuracy); return (mLauncher.getDeviceProfile().isSeascape() ? 2 : -2) / range; } @Override protected int getDirectionForLog() { return mLauncher.getDeviceProfile().isSeascape() ? Direction.RIGHT : Direction.LEFT; } @Override protected void onSwipeInteractionCompleted(LauncherState targetState, int logAction) { super.onSwipeInteractionCompleted(targetState, logAction); if (mFromState == NORMAL && targetState == OVERVIEW) { SysuiEventLogger.writeDummyRecentsTransition(0); } } }