diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2017-10-19 16:15:09 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2017-10-20 13:56:47 -0700 |
commit | c99cb174c3369c8c192efc12d97dd8e9f6d189b9 (patch) | |
tree | e5d112b3fe7fba4c5306242f89fb25ee91874db2 /src/com/android/launcher3/states | |
parent | cac861068eeb088ef8524bd39ecba0f2006c02e9 (diff) | |
download | android_packages_apps_Trebuchet-c99cb174c3369c8c192efc12d97dd8e9f6d189b9.tar.gz android_packages_apps_Trebuchet-c99cb174c3369c8c192efc12d97dd8e9f6d189b9.tar.bz2 android_packages_apps_Trebuchet-c99cb174c3369c8c192efc12d97dd8e9f6d189b9.zip |
Moving some state specific logic to subclass of LauncherState
Bug: 67678570
Change-Id: I1316f91c9f19bd572e4a0da67a22fa8921e1dcf9
Diffstat (limited to 'src/com/android/launcher3/states')
-rw-r--r-- | src/com/android/launcher3/states/OverviewState.java | 78 | ||||
-rw-r--r-- | src/com/android/launcher3/states/SpringLoadedState.java | 108 |
2 files changed, 186 insertions, 0 deletions
diff --git a/src/com/android/launcher3/states/OverviewState.java b/src/com/android/launcher3/states/OverviewState.java new file mode 100644 index 000000000..911cec62f --- /dev/null +++ b/src/com/android/launcher3/states/OverviewState.java @@ -0,0 +1,78 @@ +/* + * 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.states; + +import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS; +import static com.android.launcher3.Utilities.isAccessibilityEnabled; + +import android.graphics.Rect; +import android.view.accessibility.AccessibilityNodeInfo; + +import com.android.launcher3.DeviceProfile; +import com.android.launcher3.Launcher; +import com.android.launcher3.LauncherState; +import com.android.launcher3.Workspace; +import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; + +/** + * Definition for overview state + */ +public class OverviewState extends LauncherState { + + // The percent to shrink the workspace during overview mode + public static final float SCALE_FACTOR = 0.7f; + + private static final int STATE_FLAGS = FLAG_SHOW_SCRIM | FLAG_MULTI_PAGE | FLAG_HIDE_HOTSEAT | + FLAG_DO_NOT_RESTORE; + + public OverviewState(int id) { + super(id, ContainerType.WORKSPACE, OVERVIEW_TRANSITION_MS, STATE_FLAGS); + } + + @Override + public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { + DeviceProfile grid = launcher.getDeviceProfile(); + Workspace ws = launcher.getWorkspace(); + Rect insets = launcher.getDragLayer().getInsets(); + + int overviewButtonBarHeight = grid.getOverviewModeButtonBarHeight(); + int scaledHeight = (int) (SCALE_FACTOR * ws.getNormalChildHeight()); + Rect workspacePadding = grid.getWorkspacePadding(null); + int workspaceTop = insets.top + workspacePadding.top; + int workspaceBottom = ws.getViewportHeight() - insets.bottom - workspacePadding.bottom; + int overviewTop = insets.top; + int overviewBottom = ws.getViewportHeight() - insets.bottom - overviewButtonBarHeight; + int workspaceOffsetTopEdge = + workspaceTop + ((workspaceBottom - workspaceTop) - scaledHeight) / 2; + int overviewOffsetTopEdge = overviewTop + (overviewBottom - overviewTop - scaledHeight) / 2; + return new float[] {SCALE_FACTOR, -workspaceOffsetTopEdge + overviewOffsetTopEdge }; + } + + @Override + public void onStateEnabled(Launcher launcher) { + launcher.getWorkspace().setPageRearrangeEnabled(true); + + if (isAccessibilityEnabled(launcher)) { + launcher.getOverviewPanel().getChildAt(0).performAccessibilityAction( + AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null); + } + } + + @Override + public void onStateDisabled(Launcher launcher) { + launcher.getWorkspace().setPageRearrangeEnabled(false); + } +} diff --git a/src/com/android/launcher3/states/SpringLoadedState.java b/src/com/android/launcher3/states/SpringLoadedState.java new file mode 100644 index 000000000..f60ef0ca1 --- /dev/null +++ b/src/com/android/launcher3/states/SpringLoadedState.java @@ -0,0 +1,108 @@ +/* + * 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.states; + +import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_TRANSITION_MS; + +import android.content.pm.ActivityInfo; +import android.graphics.Rect; +import android.os.Handler; + +import com.android.launcher3.DeviceProfile; +import com.android.launcher3.InstallShortcutReceiver; +import com.android.launcher3.Launcher; +import com.android.launcher3.LauncherState; +import com.android.launcher3.Workspace; +import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; + +/** + * Definition for spring loaded state used during drag and drop. + */ +public class SpringLoadedState extends LauncherState { + + private static final int STATE_FLAGS = FLAG_SHOW_SCRIM | FLAG_MULTI_PAGE | + FLAG_DISABLE_ACCESSIBILITY | FLAG_DO_NOT_RESTORE; + + // Determines how long to wait after a rotation before restoring the screen orientation to + // match the sensor state. + private static final int RESTORE_SCREEN_ORIENTATION_DELAY = 500; + + public SpringLoadedState(int id) { + super(id, ContainerType.OVERVIEW, SPRING_LOADED_TRANSITION_MS, STATE_FLAGS); + } + + @Override + public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { + DeviceProfile grid = launcher.getDeviceProfile(); + Workspace ws = launcher.getWorkspace(); + if (grid.isVerticalBarLayout() || ws.getChildCount() == 0) { + return super.getWorkspaceScaleAndTranslation(launcher); + } + + float scale = grid.workspaceSpringLoadShrinkFactor; + Rect insets = launcher.getDragLayer().getInsets(); + + float scaledHeight = scale * ws.getNormalChildHeight(); + float shrunkTop = insets.top + grid.dropTargetBarSizePx; + float shrunkBottom = ws.getViewportHeight() - insets.bottom + - grid.getWorkspacePadding(null).bottom + - grid.workspaceSpringLoadedBottomSpace; + float totalShrunkSpace = shrunkBottom - shrunkTop; + + float desiredCellTop = shrunkTop + (totalShrunkSpace - scaledHeight) / 2; + + float halfHeight = ws.getHeight() / 2; + float myCenter = ws.getTop() + halfHeight; + float cellTopFromCenter = halfHeight - ws.getChildAt(0).getTop(); + float actualCellTop = myCenter - cellTopFromCenter * scale; + return new float[] { scale, (desiredCellTop - actualCellTop) / scale}; + } + + @Override + public void onStateEnabled(Launcher launcher) { + Workspace ws = launcher.getWorkspace(); + ws.showPageIndicatorAtCurrentScroll(); + ws.getPageIndicator().setShouldAutoHide(false); + + // Lock the orientation: + if (launcher.isRotationEnabled()) { + launcher.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); + } + + // Prevent any Un/InstallShortcutReceivers from updating the db while we are + // in spring loaded mode + InstallShortcutReceiver.enableInstallQueue(InstallShortcutReceiver.FLAG_DRAG_AND_DROP); + } + + @Override + public void onStateDisabled(final Launcher launcher) { + launcher.getWorkspace().getPageIndicator().setShouldAutoHide(true); + + // Unlock rotation lock + if (launcher.isRotationEnabled()) { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + launcher.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); + } + }, RESTORE_SCREEN_ORIENTATION_DELAY); + } + + // Re-enable any Un/InstallShortcutReceiver and now process any queued items + InstallShortcutReceiver.disableAndFlushInstallQueue( + InstallShortcutReceiver.FLAG_DRAG_AND_DROP, launcher); + } +} |