Loading quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +12 −7 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static com.android.launcher3.AbstractFloatingView.TYPE_ALL; import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE; import static com.android.launcher3.AbstractFloatingView.TYPE_TASKBAR_OVERLAY_PROXY; import static com.android.launcher3.Utilities.isRunningInTestHarness; import static com.android.launcher3.config.FeatureFlags.ENABLE_TASKBAR_NO_RECREATION; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_FOLDER_OPEN; import static com.android.launcher3.taskbar.TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_DRAGGING; import static com.android.launcher3.taskbar.TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_FULLSCREEN; Loading Loading @@ -326,11 +327,11 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mIsDestroyed = false; } if (!mAddedWindow) { if (!ENABLE_TASKBAR_NO_RECREATION.get() && !mAddedWindow) { mWindowManager.addView(mDragLayer, mWindowLayoutParams); mAddedWindow = true; } else { mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); notifyUpdateLayoutParams(); } } Loading Loading @@ -677,7 +678,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mIsDestroyed = true; setUIController(TaskbarUIController.DEFAULT); mControllers.onDestroy(); if (!FLAG_HIDE_NAVBAR_WINDOW) { if (!ENABLE_TASKBAR_NO_RECREATION.get() && !FLAG_HIDE_NAVBAR_WINDOW) { mWindowManager.removeViewImmediate(mDragLayer); mAddedWindow = false; } Loading Loading @@ -809,7 +810,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { } mWindowLayoutParams.height = height; mControllers.taskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged(); mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); notifyUpdateLayoutParams(); } /** Loading Loading @@ -852,7 +853,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { } else { mWindowLayoutParams.flags |= FLAG_NOT_FOCUSABLE; } mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); notifyUpdateLayoutParams(); } /** Loading Loading @@ -1249,14 +1250,18 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mWindowLayoutParams.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; } mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); notifyUpdateLayoutParams(); } void notifyUpdateLayoutParams() { if (mDragLayer.isAttachedToWindow()) { if (ENABLE_TASKBAR_NO_RECREATION.get()) { mWindowManager.updateViewLayout(mDragLayer.getRootView(), mWindowLayoutParams); } else { mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); } } } public void showPopupMenuForIcon(BubbleTextView btv) { setTaskbarWindowFullscreen(true); Loading quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt +31 −3 Original line number Diff line number Diff line Loading @@ -15,9 +15,9 @@ */ package com.android.launcher3.taskbar import android.inputmethodservice.InputMethodService.ENABLE_HIDE_IME_CAPTION_BAR import android.graphics.Insets import android.graphics.Region import android.inputmethodservice.InputMethodService.ENABLE_HIDE_IME_CAPTION_BAR import android.os.Binder import android.os.IBinder import android.view.Gravity Loading @@ -41,6 +41,7 @@ import com.android.internal.policy.GestureNavigationSettingsObserver import com.android.launcher3.DeviceProfile import com.android.launcher3.R import com.android.launcher3.anim.AlphaUpdateListener import com.android.launcher3.config.FeatureFlags.ENABLE_TASKBAR_NO_RECREATION import com.android.launcher3.taskbar.TaskbarControllers.LoggableTaskbarController import com.android.launcher3.util.DisplayController import java.io.PrintWriter Loading Loading @@ -97,11 +98,18 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas 0 } windowLayoutParams.providedInsets = getProvidedInsets(insetsRoundedCornerFlag) windowLayoutParams.providedInsets = if (ENABLE_TASKBAR_NO_RECREATION.get()) { getProvidedInsets(controllers.sharedState!!.insetsFrameProviders!!, insetsRoundedCornerFlag) } else { getProvidedInsets(insetsRoundedCornerFlag) } if (!context.isGestureNav) { if (windowLayoutParams.paramsForRotation != null) { for (layoutParams in windowLayoutParams.paramsForRotation) { layoutParams.providedInsets = getProvidedInsets(insetsRoundedCornerFlag) layoutParams.providedInsets = windowLayoutParams.providedInsets } } } Loading Loading @@ -153,6 +161,26 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas context.notifyUpdateLayoutParams() } /** * This is for when ENABLE_TASKBAR_NO_RECREATION is enabled. We generate one instance of * providedInsets and use it across the entire lifecycle of TaskbarManager. The only thing * we need to reset is nav bar flags based on insetsRoundedCornerFlag. */ private fun getProvidedInsets(providedInsets: Array<InsetsFrameProvider>, insetsRoundedCornerFlag: Int): Array<InsetsFrameProvider> { val navBarsFlag = (if (context.isGestureNav) FLAG_SUPPRESS_SCRIM else 0) or insetsRoundedCornerFlag for (provider in providedInsets) { if (provider.type == navigationBars()) { provider.setFlags( navBarsFlag, FLAG_SUPPRESS_SCRIM or FLAG_INSETS_ROUNDED_CORNER ) } } return providedInsets } /** * The inset types and number of insets provided have to match for both gesture nav and button * nav. The values and the order of the elements in array are allowed to differ. Loading quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +42 −4 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static com.android.launcher3.LauncherPrefs.TASKBAR_PINNING; import static com.android.launcher3.LauncherPrefs.TASKBAR_PINNING_KEY; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.config.FeatureFlags.ENABLE_TASKBAR_NO_RECREATION; import static com.android.launcher3.util.DisplayController.TASKBAR_NOT_DESTROYED_TAG; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import static com.android.launcher3.util.FlagDebugUtils.formatFlagChange; Loading @@ -45,6 +46,8 @@ import android.os.Trace; import android.provider.Settings; import android.util.Log; import android.view.Display; import android.view.WindowManager; import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -105,6 +108,9 @@ public class TaskbarManager { Settings.Secure.NAV_BAR_KIDS_MODE); private final Context mContext; private WindowManager mWindowManager; private FrameLayout mTaskbarRootLayout; private boolean mAddedWindow; private final TaskbarNavButtonController mNavButtonController; private final ComponentCallbacks mComponentCallbacks; Loading Loading @@ -176,6 +182,10 @@ public class TaskbarManager { Display display = service.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY); mContext = service.createWindowContext(display, TYPE_NAVIGATION_BAR_PANEL, null); if (ENABLE_TASKBAR_NO_RECREATION.get()) { mWindowManager = mContext.getSystemService(WindowManager.class); mTaskbarRootLayout = new FrameLayout(mContext); } mNavButtonController = new TaskbarNavButtonController(service, SystemUiProxy.INSTANCE.get(mContext), new Handler(), AssistUtils.newInstance(mContext)); Loading Loading @@ -258,10 +268,15 @@ public class TaskbarManager { LauncherPrefs.get(mContext).removeListener(mTaskbarPinningPreferenceChangeListener, TASKBAR_PINNING); mTaskbarActivityContext.onDestroy(); if (!FLAG_HIDE_NAVBAR_WINDOW) { if (!FLAG_HIDE_NAVBAR_WINDOW || ENABLE_TASKBAR_NO_RECREATION.get()) { mTaskbarActivityContext = null; } } DeviceProfile dp = mUserUnlocked ? LauncherAppState.getIDP(mContext).getDeviceProfile(mContext) : null; if (dp == null || !isTaskbarPresent(dp)) { removeTaskbarRootViewFromWindow(); } } /** Loading Loading @@ -310,6 +325,7 @@ public class TaskbarManager { mUserUnlocked = true; LauncherAppState.getIDP(mContext).addOnChangeListener(mIdpChangeListener); recreateTaskbar(); addTaskbarRootViewToWindow(); } /** Loading Loading @@ -390,10 +406,9 @@ public class TaskbarManager { return; } if (mTaskbarActivityContext == null) { if (ENABLE_TASKBAR_NO_RECREATION.get() || mTaskbarActivityContext == null) { mTaskbarActivityContext = new TaskbarActivityContext(mContext, dp, mNavButtonController, mUnfoldProgressProvider); mNavButtonController, mUnfoldProgressProvider); } else { mTaskbarActivityContext.updateDeviceProfile(dp); } Loading @@ -404,6 +419,13 @@ public class TaskbarManager { createTaskbarUIControllerForActivity(mActivity)); } if (ENABLE_TASKBAR_NO_RECREATION.get()) { addTaskbarRootViewToWindow(); mTaskbarRootLayout.removeAllViews(); mTaskbarRootLayout.addView(mTaskbarActivityContext.getDragLayer()); mTaskbarActivityContext.notifyUpdateLayoutParams(); } // We to wait until user unlocks the device to attach listener. LauncherPrefs.get(mContext).addListener(mTaskbarPinningPreferenceChangeListener, TASKBAR_PINNING); Loading Loading @@ -525,6 +547,22 @@ public class TaskbarManager { } } private void addTaskbarRootViewToWindow() { if (ENABLE_TASKBAR_NO_RECREATION.get() && !mAddedWindow && mTaskbarActivityContext != null) { mWindowManager.addView(mTaskbarRootLayout, mTaskbarActivityContext.getWindowLayoutParams()); mAddedWindow = true; } } private void removeTaskbarRootViewFromWindow() { if (ENABLE_TASKBAR_NO_RECREATION.get() && mAddedWindow) { mWindowManager.removeViewImmediate(mTaskbarRootLayout); mAddedWindow = false; } } /** Temp logs for b/254119092. */ public void debugWhyTaskbarNotDestroyed(String debugReason) { StringJoiner log = new StringJoiner("\n"); Loading quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java +23 −0 Original line number Diff line number Diff line Loading @@ -15,15 +15,28 @@ */ package com.android.launcher3.taskbar; import static android.view.InsetsFrameProvider.SOURCE_DISPLAY; import static android.view.WindowInsets.Type.mandatorySystemGestures; import static android.view.WindowInsets.Type.navigationBars; import static android.view.WindowInsets.Type.systemGestures; import static android.view.WindowInsets.Type.tappableElement; import static com.android.launcher3.taskbar.LauncherTaskbarUIController.DISPLAY_PROGRESS_COUNT; import android.app.PendingIntent; import android.os.Binder; import android.os.IBinder; import android.view.InsetsFrameProvider; /** * State shared across different taskbar instance */ public class TaskbarSharedState { private final IBinder mInsetsOwner = new Binder(); private static int INDEX_LEFT = 0; private static int INDEX_RIGHT = 1; // TaskbarManager#onSystemUiFlagsChanged public int sysuiStateFlags; Loading @@ -48,4 +61,14 @@ public class TaskbarSharedState { // Taskbar System Action public PendingIntent taskbarSystemActionPendingIntent; public final InsetsFrameProvider[] insetsFrameProviders = new InsetsFrameProvider[] { new InsetsFrameProvider(mInsetsOwner, 0, navigationBars()), new InsetsFrameProvider(mInsetsOwner, 0, tappableElement()), new InsetsFrameProvider(mInsetsOwner, 0, mandatorySystemGestures()), new InsetsFrameProvider(mInsetsOwner, INDEX_LEFT, systemGestures()) .setSource(SOURCE_DISPLAY), new InsetsFrameProvider(mInsetsOwner, INDEX_RIGHT, systemGestures()) .setSource(SOURCE_DISPLAY) }; } src/com/android/launcher3/config/FeatureFlags.java +4 −0 Original line number Diff line number Diff line Loading @@ -213,6 +213,10 @@ public final class FeatureFlags { public static final BooleanFlag ENABLE_TRANSIENT_TASKBAR = getDebugFlag(270395798, "ENABLE_TRANSIENT_TASKBAR", ENABLED, "Enables transient taskbar."); public static final BooleanFlag ENABLE_TASKBAR_NO_RECREATION = getDebugFlag(299193589, "ENABLE_TASKBAR_NO_RECREATION", DISABLED, "Enables taskbar with no recreation from lifecycle changes of TaskbarActivityContext."); // TODO(Block 16): Clean up flags // When enabled the promise icon is visible in all apps while installation an app. public static final BooleanFlag PROMISE_APPS_IN_ALL_APPS = getDebugFlag(270390012, Loading Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +12 −7 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static com.android.launcher3.AbstractFloatingView.TYPE_ALL; import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE; import static com.android.launcher3.AbstractFloatingView.TYPE_TASKBAR_OVERLAY_PROXY; import static com.android.launcher3.Utilities.isRunningInTestHarness; import static com.android.launcher3.config.FeatureFlags.ENABLE_TASKBAR_NO_RECREATION; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_FOLDER_OPEN; import static com.android.launcher3.taskbar.TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_DRAGGING; import static com.android.launcher3.taskbar.TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_FULLSCREEN; Loading Loading @@ -326,11 +327,11 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mIsDestroyed = false; } if (!mAddedWindow) { if (!ENABLE_TASKBAR_NO_RECREATION.get() && !mAddedWindow) { mWindowManager.addView(mDragLayer, mWindowLayoutParams); mAddedWindow = true; } else { mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); notifyUpdateLayoutParams(); } } Loading Loading @@ -677,7 +678,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mIsDestroyed = true; setUIController(TaskbarUIController.DEFAULT); mControllers.onDestroy(); if (!FLAG_HIDE_NAVBAR_WINDOW) { if (!ENABLE_TASKBAR_NO_RECREATION.get() && !FLAG_HIDE_NAVBAR_WINDOW) { mWindowManager.removeViewImmediate(mDragLayer); mAddedWindow = false; } Loading Loading @@ -809,7 +810,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { } mWindowLayoutParams.height = height; mControllers.taskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged(); mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); notifyUpdateLayoutParams(); } /** Loading Loading @@ -852,7 +853,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { } else { mWindowLayoutParams.flags |= FLAG_NOT_FOCUSABLE; } mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); notifyUpdateLayoutParams(); } /** Loading Loading @@ -1249,14 +1250,18 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mWindowLayoutParams.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION; } mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); notifyUpdateLayoutParams(); } void notifyUpdateLayoutParams() { if (mDragLayer.isAttachedToWindow()) { if (ENABLE_TASKBAR_NO_RECREATION.get()) { mWindowManager.updateViewLayout(mDragLayer.getRootView(), mWindowLayoutParams); } else { mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams); } } } public void showPopupMenuForIcon(BubbleTextView btv) { setTaskbarWindowFullscreen(true); Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt +31 −3 Original line number Diff line number Diff line Loading @@ -15,9 +15,9 @@ */ package com.android.launcher3.taskbar import android.inputmethodservice.InputMethodService.ENABLE_HIDE_IME_CAPTION_BAR import android.graphics.Insets import android.graphics.Region import android.inputmethodservice.InputMethodService.ENABLE_HIDE_IME_CAPTION_BAR import android.os.Binder import android.os.IBinder import android.view.Gravity Loading @@ -41,6 +41,7 @@ import com.android.internal.policy.GestureNavigationSettingsObserver import com.android.launcher3.DeviceProfile import com.android.launcher3.R import com.android.launcher3.anim.AlphaUpdateListener import com.android.launcher3.config.FeatureFlags.ENABLE_TASKBAR_NO_RECREATION import com.android.launcher3.taskbar.TaskbarControllers.LoggableTaskbarController import com.android.launcher3.util.DisplayController import java.io.PrintWriter Loading Loading @@ -97,11 +98,18 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas 0 } windowLayoutParams.providedInsets = getProvidedInsets(insetsRoundedCornerFlag) windowLayoutParams.providedInsets = if (ENABLE_TASKBAR_NO_RECREATION.get()) { getProvidedInsets(controllers.sharedState!!.insetsFrameProviders!!, insetsRoundedCornerFlag) } else { getProvidedInsets(insetsRoundedCornerFlag) } if (!context.isGestureNav) { if (windowLayoutParams.paramsForRotation != null) { for (layoutParams in windowLayoutParams.paramsForRotation) { layoutParams.providedInsets = getProvidedInsets(insetsRoundedCornerFlag) layoutParams.providedInsets = windowLayoutParams.providedInsets } } } Loading Loading @@ -153,6 +161,26 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas context.notifyUpdateLayoutParams() } /** * This is for when ENABLE_TASKBAR_NO_RECREATION is enabled. We generate one instance of * providedInsets and use it across the entire lifecycle of TaskbarManager. The only thing * we need to reset is nav bar flags based on insetsRoundedCornerFlag. */ private fun getProvidedInsets(providedInsets: Array<InsetsFrameProvider>, insetsRoundedCornerFlag: Int): Array<InsetsFrameProvider> { val navBarsFlag = (if (context.isGestureNav) FLAG_SUPPRESS_SCRIM else 0) or insetsRoundedCornerFlag for (provider in providedInsets) { if (provider.type == navigationBars()) { provider.setFlags( navBarsFlag, FLAG_SUPPRESS_SCRIM or FLAG_INSETS_ROUNDED_CORNER ) } } return providedInsets } /** * The inset types and number of insets provided have to match for both gesture nav and button * nav. The values and the order of the elements in array are allowed to differ. Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +42 −4 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static com.android.launcher3.LauncherPrefs.TASKBAR_PINNING; import static com.android.launcher3.LauncherPrefs.TASKBAR_PINNING_KEY; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.config.FeatureFlags.ENABLE_TASKBAR_NO_RECREATION; import static com.android.launcher3.util.DisplayController.TASKBAR_NOT_DESTROYED_TAG; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import static com.android.launcher3.util.FlagDebugUtils.formatFlagChange; Loading @@ -45,6 +46,8 @@ import android.os.Trace; import android.provider.Settings; import android.util.Log; import android.view.Display; import android.view.WindowManager; import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -105,6 +108,9 @@ public class TaskbarManager { Settings.Secure.NAV_BAR_KIDS_MODE); private final Context mContext; private WindowManager mWindowManager; private FrameLayout mTaskbarRootLayout; private boolean mAddedWindow; private final TaskbarNavButtonController mNavButtonController; private final ComponentCallbacks mComponentCallbacks; Loading Loading @@ -176,6 +182,10 @@ public class TaskbarManager { Display display = service.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY); mContext = service.createWindowContext(display, TYPE_NAVIGATION_BAR_PANEL, null); if (ENABLE_TASKBAR_NO_RECREATION.get()) { mWindowManager = mContext.getSystemService(WindowManager.class); mTaskbarRootLayout = new FrameLayout(mContext); } mNavButtonController = new TaskbarNavButtonController(service, SystemUiProxy.INSTANCE.get(mContext), new Handler(), AssistUtils.newInstance(mContext)); Loading Loading @@ -258,10 +268,15 @@ public class TaskbarManager { LauncherPrefs.get(mContext).removeListener(mTaskbarPinningPreferenceChangeListener, TASKBAR_PINNING); mTaskbarActivityContext.onDestroy(); if (!FLAG_HIDE_NAVBAR_WINDOW) { if (!FLAG_HIDE_NAVBAR_WINDOW || ENABLE_TASKBAR_NO_RECREATION.get()) { mTaskbarActivityContext = null; } } DeviceProfile dp = mUserUnlocked ? LauncherAppState.getIDP(mContext).getDeviceProfile(mContext) : null; if (dp == null || !isTaskbarPresent(dp)) { removeTaskbarRootViewFromWindow(); } } /** Loading Loading @@ -310,6 +325,7 @@ public class TaskbarManager { mUserUnlocked = true; LauncherAppState.getIDP(mContext).addOnChangeListener(mIdpChangeListener); recreateTaskbar(); addTaskbarRootViewToWindow(); } /** Loading Loading @@ -390,10 +406,9 @@ public class TaskbarManager { return; } if (mTaskbarActivityContext == null) { if (ENABLE_TASKBAR_NO_RECREATION.get() || mTaskbarActivityContext == null) { mTaskbarActivityContext = new TaskbarActivityContext(mContext, dp, mNavButtonController, mUnfoldProgressProvider); mNavButtonController, mUnfoldProgressProvider); } else { mTaskbarActivityContext.updateDeviceProfile(dp); } Loading @@ -404,6 +419,13 @@ public class TaskbarManager { createTaskbarUIControllerForActivity(mActivity)); } if (ENABLE_TASKBAR_NO_RECREATION.get()) { addTaskbarRootViewToWindow(); mTaskbarRootLayout.removeAllViews(); mTaskbarRootLayout.addView(mTaskbarActivityContext.getDragLayer()); mTaskbarActivityContext.notifyUpdateLayoutParams(); } // We to wait until user unlocks the device to attach listener. LauncherPrefs.get(mContext).addListener(mTaskbarPinningPreferenceChangeListener, TASKBAR_PINNING); Loading Loading @@ -525,6 +547,22 @@ public class TaskbarManager { } } private void addTaskbarRootViewToWindow() { if (ENABLE_TASKBAR_NO_RECREATION.get() && !mAddedWindow && mTaskbarActivityContext != null) { mWindowManager.addView(mTaskbarRootLayout, mTaskbarActivityContext.getWindowLayoutParams()); mAddedWindow = true; } } private void removeTaskbarRootViewFromWindow() { if (ENABLE_TASKBAR_NO_RECREATION.get() && mAddedWindow) { mWindowManager.removeViewImmediate(mTaskbarRootLayout); mAddedWindow = false; } } /** Temp logs for b/254119092. */ public void debugWhyTaskbarNotDestroyed(String debugReason) { StringJoiner log = new StringJoiner("\n"); Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java +23 −0 Original line number Diff line number Diff line Loading @@ -15,15 +15,28 @@ */ package com.android.launcher3.taskbar; import static android.view.InsetsFrameProvider.SOURCE_DISPLAY; import static android.view.WindowInsets.Type.mandatorySystemGestures; import static android.view.WindowInsets.Type.navigationBars; import static android.view.WindowInsets.Type.systemGestures; import static android.view.WindowInsets.Type.tappableElement; import static com.android.launcher3.taskbar.LauncherTaskbarUIController.DISPLAY_PROGRESS_COUNT; import android.app.PendingIntent; import android.os.Binder; import android.os.IBinder; import android.view.InsetsFrameProvider; /** * State shared across different taskbar instance */ public class TaskbarSharedState { private final IBinder mInsetsOwner = new Binder(); private static int INDEX_LEFT = 0; private static int INDEX_RIGHT = 1; // TaskbarManager#onSystemUiFlagsChanged public int sysuiStateFlags; Loading @@ -48,4 +61,14 @@ public class TaskbarSharedState { // Taskbar System Action public PendingIntent taskbarSystemActionPendingIntent; public final InsetsFrameProvider[] insetsFrameProviders = new InsetsFrameProvider[] { new InsetsFrameProvider(mInsetsOwner, 0, navigationBars()), new InsetsFrameProvider(mInsetsOwner, 0, tappableElement()), new InsetsFrameProvider(mInsetsOwner, 0, mandatorySystemGestures()), new InsetsFrameProvider(mInsetsOwner, INDEX_LEFT, systemGestures()) .setSource(SOURCE_DISPLAY), new InsetsFrameProvider(mInsetsOwner, INDEX_RIGHT, systemGestures()) .setSource(SOURCE_DISPLAY) }; }
src/com/android/launcher3/config/FeatureFlags.java +4 −0 Original line number Diff line number Diff line Loading @@ -213,6 +213,10 @@ public final class FeatureFlags { public static final BooleanFlag ENABLE_TRANSIENT_TASKBAR = getDebugFlag(270395798, "ENABLE_TRANSIENT_TASKBAR", ENABLED, "Enables transient taskbar."); public static final BooleanFlag ENABLE_TASKBAR_NO_RECREATION = getDebugFlag(299193589, "ENABLE_TASKBAR_NO_RECREATION", DISABLED, "Enables taskbar with no recreation from lifecycle changes of TaskbarActivityContext."); // TODO(Block 16): Clean up flags // When enabled the promise icon is visible in all apps while installation an app. public static final BooleanFlag PROMISE_APPS_IN_ALL_APPS = getDebugFlag(270390012, Loading