diff options
author | Jon <jonmiranda@google.com> | 2018-08-22 18:11:49 -0400 |
---|---|---|
committer | Jon <jonmiranda@google.com> | 2018-08-22 18:12:49 -0400 |
commit | 170be9beb07b104985da50f3018ed9da025681b7 (patch) | |
tree | 618da5acbfc2f696da71a2f0f484aefa493c570d | |
parent | 0fd1472b940efc7f92c5a441935206afc9db7470 (diff) | |
parent | a75f0395ee36d284da17adcdc70016a71c262bf9 (diff) | |
download | android_packages_apps_Trebuchet-170be9beb07b104985da50f3018ed9da025681b7.tar.gz android_packages_apps_Trebuchet-170be9beb07b104985da50f3018ed9da025681b7.tar.bz2 android_packages_apps_Trebuchet-170be9beb07b104985da50f3018ed9da025681b7.zip |
Merge branch 'ub-launcher3-edmonton-polish' into pi-dev
Bug: 112854572
Bug: 80134723
Test: manual
Change-Id: I9dacb5203e16ddad8d685058cdd19b689585acc8
16 files changed, 127 insertions, 21 deletions
diff --git a/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java b/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java index ac9f8634e..2d0946b89 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java +++ b/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java @@ -165,6 +165,14 @@ public class UiFactory { } } + public static void onEnterAnimationComplete(Context context) { + // After the transition to home, enable the high-res thumbnail loader if it wasn't enabled + // as a part of quickstep/scrub, so that high-res thumbnails can load the next time we + // enter overview + RecentsModel.getInstance(context).getRecentsTaskLoader() + .getHighResThumbnailLoader().setVisible(true); + } + public static void onLauncherStateOrResumeChanged(Launcher launcher) { LauncherState state = launcher.getStateManager().getState(); DeviceProfile profile = launcher.getDeviceProfile(); diff --git a/quickstep/src/com/android/quickstep/ActivityControlHelper.java b/quickstep/src/com/android/quickstep/ActivityControlHelper.java index 275075f27..ced87542d 100644 --- a/quickstep/src/com/android/quickstep/ActivityControlHelper.java +++ b/quickstep/src/com/android/quickstep/ActivityControlHelper.java @@ -294,6 +294,9 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> { private void playScaleDownAnim(AnimatorSet anim, Launcher launcher) { RecentsView recentsView = launcher.getOverviewPanel(); TaskView v = recentsView.getTaskViewAt(recentsView.getCurrentPage()); + if (v == null) { + return; + } ClipAnimationHelper clipHelper = new ClipAnimationHelper(); clipHelper.fromTaskThumbnailView(v.getThumbnail(), (RecentsView) v.getParent(), null); if (!clipHelper.getSourceRect().isEmpty() && !clipHelper.getTargetRect().isEmpty()) { diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java index ed8b4d2b1..1d7c066ab 100644 --- a/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -241,6 +241,12 @@ public class RecentsActivity extends BaseDraggingActivity { } @Override + public void onEnterAnimationComplete() { + super.onEnterAnimationComplete(); + UiFactory.onEnterAnimationComplete(this); + } + + @Override public void onTrimMemory(int level) { super.onTrimMemory(level); UiFactory.onTrimMemory(this, level); diff --git a/quickstep/src/com/android/quickstep/RecentsModel.java b/quickstep/src/com/android/quickstep/RecentsModel.java index 0c8e47f2b..0b97f0119 100644 --- a/quickstep/src/com/android/quickstep/RecentsModel.java +++ b/quickstep/src/com/android/quickstep/RecentsModel.java @@ -232,7 +232,6 @@ public class RecentsModel extends TaskStackChangeListener { public void onStart() { mRecentsTaskLoader.startLoader(mContext); - mRecentsTaskLoader.getHighResThumbnailLoader().setVisible(true); } public void onTrimMemory(int level) { diff --git a/quickstep/src/com/android/quickstep/TaskSystemShortcut.java b/quickstep/src/com/android/quickstep/TaskSystemShortcut.java index 5a6312d4e..e5a2b5e25 100644 --- a/quickstep/src/com/android/quickstep/TaskSystemShortcut.java +++ b/quickstep/src/com/android/quickstep/TaskSystemShortcut.java @@ -30,7 +30,6 @@ import android.os.UserHandle; import android.util.Log; import android.view.View; -import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.DeviceProfile; import com.android.launcher3.ItemInfo; @@ -270,9 +269,4 @@ public class TaskSystemShortcut<T extends SystemShortcut> extends SystemShortcut return null; } } - - private static void dismissTaskMenuView(BaseDraggingActivity activity) { - AbstractFloatingView.closeOpenViews(activity, true, - AbstractFloatingView.TYPE_ALL & ~AbstractFloatingView.TYPE_REBIND_SAFE); - } } diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java index 902eb950d..1f0a05775 100644 --- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -483,6 +483,12 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> { if (LatencyTrackerCompat.isEnabled(mContext)) { LatencyTrackerCompat.logToggleRecents((int) (mLauncherFrameDrawnTime - mTouchTimeMs)); } + + // This method is only called when STATE_GESTURE_STARTED_QUICKSTEP/ + // STATE_GESTURE_STARTED_QUICKSCRUB is set, so we can enable the high-res thumbnail loader + // here once we are sure that we will end up in an overview state + RecentsModel.getInstance(mContext).getRecentsTaskLoader() + .getHighResThumbnailLoader().setVisible(true); } public void updateInteractionType(@InteractionType int interactionType) { diff --git a/res/xml/device_profiles.xml b/res/xml/device_profiles.xml index a34f22515..ef6e14506 100644 --- a/res/xml/device_profiles.xml +++ b/res/xml/device_profiles.xml @@ -133,13 +133,13 @@ launcher:name="Nexus 7" launcher:minWidthDps="575" launcher:minHeightDps="904" - launcher:numRows="5" + launcher:numRows="6" launcher:numColumns="6" launcher:numFolderRows="4" launcher:numFolderColumns="5" launcher:iconSize="64" launcher:iconTextSize="14.4" - launcher:numHotseatIcons="7" + launcher:numHotseatIcons="6" launcher:defaultLayoutId="@xml/default_workspace_5x6" /> @@ -147,8 +147,8 @@ launcher:name="Nexus 10" launcher:minWidthDps="727" launcher:minHeightDps="1207" - launcher:numRows="5" - launcher:numColumns="6" + launcher:numRows="6" + launcher:numColumns="7" launcher:numFolderRows="4" launcher:numFolderColumns="5" launcher:iconSize="76" diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 820c125e1..9839c12dc 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -59,6 +59,9 @@ public class DeviceProfile { private static final float TALL_DEVICE_ASPECT_RATIO_THRESHOLD = 2.0f; + // To evenly space the icons, increase the left/right margins for tablets in portrait mode. + private static final int PORTRAIT_TABLET_LEFT_RIGHT_PADDING_MULTIPLIER = 4; + // Workspace public final int desiredWorkspaceLeftRightMarginPx; public final int cellLayoutPaddingLeftRightPx; @@ -172,7 +175,9 @@ public class DeviceProfile { defaultWidgetPadding = AppWidgetHostView.getDefaultPaddingForWidget(context, cn, null); edgeMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_edge_margin); desiredWorkspaceLeftRightMarginPx = isVerticalBarLayout() ? 0 : edgeMarginPx; - cellLayoutPaddingLeftRightPx = + int cellLayoutPaddingLeftRightMultiplier = !isVerticalBarLayout() && isTablet + ? PORTRAIT_TABLET_LEFT_RIGHT_PADDING_MULTIPLIER : 1; + cellLayoutPaddingLeftRightPx = cellLayoutPaddingLeftRightMultiplier * res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_layout_padding); cellLayoutBottomPaddingPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_layout_bottom_padding); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c3c4f5e5e..4fe35033b 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -348,6 +348,12 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, } @Override + public void onEnterAnimationComplete() { + super.onEnterAnimationComplete(); + UiFactory.onEnterAnimationComplete(this); + } + + @Override public void onConfigurationChanged(Configuration newConfig) { int diff = newConfig.diff(mOldConfig); if ((diff & (CONFIG_ORIENTATION | CONFIG_SCREEN_SIZE)) != 0) { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index abba9c490..54d29c115 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -286,7 +286,9 @@ public class Workspace extends PagedView<WorkspacePageIndicator> mInsets.set(insets); DeviceProfile grid = mLauncher.getDeviceProfile(); - mMaxDistanceForFolderCreation = (0.55f * grid.iconSizePx); + mMaxDistanceForFolderCreation = grid.isTablet + ? 0.75f * grid.iconSizePx + : 0.55f * grid.iconSizePx; mWorkspaceFadeInAdjacentScreens = grid.shouldFadeAdjacentWorkspaceScreens(); Rect padding = grid.workspacePadding; diff --git a/src/com/android/launcher3/graphics/ShadowGenerator.java b/src/com/android/launcher3/graphics/ShadowGenerator.java index 5fbf502aa..88da853d6 100644 --- a/src/com/android/launcher3/graphics/ShadowGenerator.java +++ b/src/com/android/launcher3/graphics/ShadowGenerator.java @@ -126,13 +126,13 @@ public class ShadowGenerator { } public Bitmap createPill(int width, int height) { - radius = height / 2; + radius = height / 2f; - int centerX = Math.round(width / 2 + shadowBlur); + int centerX = Math.round(width / 2f + shadowBlur); int centerY = Math.round(radius + shadowBlur + keyShadowDistance); int center = Math.max(centerX, centerY); bounds.set(0, 0, width, height); - bounds.offsetTo(center - width / 2, center - height / 2); + bounds.offsetTo(center - width / 2f, center - height / 2f); int size = center * 2; Bitmap result = Bitmap.createBitmap(size, size, Config.ARGB_8888); diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java index 3c1cc9057..693e53242 100644 --- a/src/com/android/launcher3/popup/SystemShortcut.java +++ b/src/com/android/launcher3/popup/SystemShortcut.java @@ -75,6 +75,7 @@ public abstract class SystemShortcut<T extends BaseDraggingActivity> extends Ite public View.OnClickListener getOnClickListener( BaseDraggingActivity activity, ItemInfo itemInfo) { return (view) -> { + dismissTaskMenuView(activity); Rect sourceBounds = activity.getViewBounds(view); Bundle opts = activity.getActivityLaunchOptionsAsBundle(view); new PackageManagerHelper(activity).startDetailsActivityForInfo( @@ -117,4 +118,9 @@ public abstract class SystemShortcut<T extends BaseDraggingActivity> extends Ite }; } } + + protected static void dismissTaskMenuView(BaseDraggingActivity activity) { + AbstractFloatingView.closeOpenViews(activity, true, + AbstractFloatingView.TYPE_ALL & ~AbstractFloatingView.TYPE_REBIND_SAFE); + } } diff --git a/src/com/android/launcher3/qsb/QsbContainerView.java b/src/com/android/launcher3/qsb/QsbContainerView.java index 8e29df16a..5b8ae5836 100644 --- a/src/com/android/launcher3/qsb/QsbContainerView.java +++ b/src/com/android/launcher3/qsb/QsbContainerView.java @@ -162,7 +162,6 @@ public class QsbContainerView extends FrameLayout { .getAppWidgetOptions(widgetId), opts)) { mQsb.updateAppWidgetOptions(opts); } - mQsb.setPadding(0, 0, 0, 0); mQsbWidgetHost.startListening(); return mQsb; } diff --git a/src/com/android/launcher3/qsb/QsbWidgetHostView.java b/src/com/android/launcher3/qsb/QsbWidgetHostView.java index 407812dd1..cff512637 100644 --- a/src/com/android/launcher3/qsb/QsbWidgetHostView.java +++ b/src/com/android/launcher3/qsb/QsbWidgetHostView.java @@ -52,6 +52,11 @@ public class QsbWidgetHostView extends AppWidgetHostView { return mPreviousOrientation != orientation; } + @Override + public void setPadding(int left, int top, int right, int bottom) { + // Prevent the base class from applying the default widget padding. + super.setPadding(0, 0, 0, 0); + } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { diff --git a/src/com/android/launcher3/util/ConfigMonitor.java b/src/com/android/launcher3/util/ConfigMonitor.java index 2489d3048..611931d28 100644 --- a/src/com/android/launcher3/util/ConfigMonitor.java +++ b/src/com/android/launcher3/util/ConfigMonitor.java @@ -21,37 +21,102 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Configuration; +import android.graphics.Point; +import android.hardware.display.DisplayManager; +import android.hardware.display.DisplayManager.DisplayListener; +import android.os.Handler; import android.util.Log; +import android.view.Display; +import android.view.WindowManager; /** * {@link BroadcastReceiver} which watches configuration changes and * restarts the process in case changes which affect the device profile occur. */ -public class ConfigMonitor extends BroadcastReceiver { +public class ConfigMonitor extends BroadcastReceiver implements DisplayListener { + + private static final String TAG = "ConfigMonitor"; + + private final Point mTmpPoint1 = new Point(); + private final Point mTmpPoint2 = new Point(); private final Context mContext; private final float mFontScale; private final int mDensity; + private final int mDisplayId; + private final Point mRealSize; + private final Point mSmallestSize, mLargestSize; + public ConfigMonitor(Context context) { mContext = context; Configuration config = context.getResources().getConfiguration(); mFontScale = config.fontScale; mDensity = config.densityDpi; + + Display display = getDefaultDisplay(context); + mDisplayId = display.getDisplayId(); + + mRealSize = new Point(); + display.getRealSize(mRealSize); + + mSmallestSize = new Point(); + mLargestSize = new Point(); + display.getCurrentSizeRange(mSmallestSize, mLargestSize); } @Override public void onReceive(Context context, Intent intent) { Configuration config = context.getResources().getConfiguration(); if (mFontScale != config.fontScale || mDensity != config.densityDpi) { - Log.d("ConfigMonitor", "Configuration changed, restarting launcher"); - mContext.unregisterReceiver(this); - android.os.Process.killProcess(android.os.Process.myPid()); + Log.d(TAG, "Configuration changed"); + killProcess(); } } public void register() { mContext.registerReceiver(this, new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED)); + mContext.getSystemService(DisplayManager.class) + .registerDisplayListener(this, new Handler(UiThreadHelper.getBackgroundLooper())); + } + + @Override + public void onDisplayAdded(int displayId) { } + + @Override + public void onDisplayRemoved(int displayId) { } + + @Override + public void onDisplayChanged(int displayId) { + if (displayId != mDisplayId) { + return; + } + Display display = getDefaultDisplay(mContext); + display.getRealSize(mTmpPoint1); + + if (!mRealSize.equals(mTmpPoint1) && !mRealSize.equals(mTmpPoint1.y, mTmpPoint1.x)) { + Log.d(TAG, String.format("Display size changed from %s to %s", mRealSize, mTmpPoint1)); + killProcess(); + return; + } + + display.getCurrentSizeRange(mTmpPoint1, mTmpPoint2); + if (!mSmallestSize.equals(mTmpPoint1) || !mLargestSize.equals(mTmpPoint2)) { + Log.d(TAG, String.format("Available size changed from [%s, %s] to [%s, %s]", + mSmallestSize, mLargestSize, mTmpPoint1, mTmpPoint2)); + killProcess(); + } + } + + private void killProcess() { + Log.d(TAG, "restarting launcher"); + mContext.unregisterReceiver(this); + mContext.getSystemService(DisplayManager.class).unregisterDisplayListener(this); + android.os.Process.killProcess(android.os.Process.myPid()); + } + + private Display getDefaultDisplay(Context context) { + return context.getSystemService(WindowManager.class).getDefaultDisplay(); } } diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/UiFactory.java b/src_ui_overrides/com/android/launcher3/uioverrides/UiFactory.java index 5a7e50fae..0d727fdbb 100644 --- a/src_ui_overrides/com/android/launcher3/uioverrides/UiFactory.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/UiFactory.java @@ -48,6 +48,8 @@ public class UiFactory { public static void onStart(Launcher launcher) { } + public static void onEnterAnimationComplete(Context context) {} + public static void onLauncherStateOrResumeChanged(Launcher launcher) { } public static void onTrimMemory(Launcher launcher, int level) { } |