diff options
author | Kevin F. Haggerty <haggertk@lineageos.org> | 2019-05-07 20:35:36 -0600 |
---|---|---|
committer | Kevin F. Haggerty <haggertk@lineageos.org> | 2019-05-07 21:33:02 -0600 |
commit | 61407710d37b510f2b0393532ac2f9fa9bffaedf (patch) | |
tree | 0f6f189ae9faa19039e668a84198e4cd1a5506e9 | |
parent | 4008a89a772db78a808cc8636d05ebcf2751fedc (diff) | |
parent | 170be9beb07b104985da50f3018ed9da025681b7 (diff) | |
download | android_packages_apps_Trebuchet-61407710d37b510f2b0393532ac2f9fa9bffaedf.tar.gz android_packages_apps_Trebuchet-61407710d37b510f2b0393532ac2f9fa9bffaedf.tar.bz2 android_packages_apps_Trebuchet-61407710d37b510f2b0393532ac2f9fa9bffaedf.zip |
Merge tag 'android-9.0.0_r37' into staging/lineage-16.0_merge-android-9.0.0_r37
Android 9.0.0 Release 37 (PQ3A.190505.002)
* tag 'android-9.0.0_r37':
Preventing padding from getting reset when the widget updates
Revert "Use clear-all recent tasks call"
Kill launcher when display size changes
Use clear-all recent tasks call
Fix missing callback in fallback activity to re-enable high res loader.
Update launcher grid for tablet devices.
Fix gap between notification dots and their shadows
Add null check before playing recents scale down anim
Defer starting the high-res thumbnail loader until quick step/scrub
Increase max distance for folder creation for tablets.
App menu icon launching app info hides taskview menu
Change-Id: I73e57c71349e3fcb7c56b89b74fc2ffdbcb45393
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 47e67005f..abee2a8bb 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java +++ b/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java @@ -168,6 +168,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 721a13246..1b4101b6b 100644 --- a/res/xml/device_profiles.xml +++ b/res/xml/device_profiles.xml @@ -141,14 +141,14 @@ 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:minAllAppsPredictionColumns="4" launcher:iconSize="60" launcher:iconTextSize="14.4" - launcher:numHotseatIcons="7" + launcher:numHotseatIcons="6" launcher:defaultLayoutId="@xml/default_workspace_5x6" /> @@ -156,8 +156,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:minAllAppsPredictionColumns="4" diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index c17628767..ad2c0786b 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 df64623ca..47f875459 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -353,6 +353,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 b570acaa3..de7e6d8cd 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 0348b0bfc..a5bf68ce6 100644 --- a/src/com/android/launcher3/popup/SystemShortcut.java +++ b/src/com/android/launcher3/popup/SystemShortcut.java @@ -80,6 +80,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( @@ -122,4 +123,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 c9f6721ef..f103f804a 100644 --- a/src/com/android/launcher3/qsb/QsbContainerView.java +++ b/src/com/android/launcher3/qsb/QsbContainerView.java @@ -191,7 +191,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 906edf92a..de9caf4f5 100644 --- a/src/com/android/launcher3/qsb/QsbWidgetHostView.java +++ b/src/com/android/launcher3/qsb/QsbWidgetHostView.java @@ -58,6 +58,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) { } |