Merge "Separate BubblesController construction from initialization" into sc-dev
This commit is contained in:
@@ -19,6 +19,7 @@ package com.android.wm.shell;
|
|||||||
import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_FULLSCREEN;
|
import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_FULLSCREEN;
|
||||||
|
|
||||||
import com.android.wm.shell.apppairs.AppPairsController;
|
import com.android.wm.shell.apppairs.AppPairsController;
|
||||||
|
import com.android.wm.shell.bubbles.BubbleController;
|
||||||
import com.android.wm.shell.common.DisplayImeController;
|
import com.android.wm.shell.common.DisplayImeController;
|
||||||
import com.android.wm.shell.common.ShellExecutor;
|
import com.android.wm.shell.common.ShellExecutor;
|
||||||
import com.android.wm.shell.common.annotations.ExternalThread;
|
import com.android.wm.shell.common.annotations.ExternalThread;
|
||||||
@@ -40,6 +41,7 @@ public class ShellInitImpl {
|
|||||||
private final DisplayImeController mDisplayImeController;
|
private final DisplayImeController mDisplayImeController;
|
||||||
private final DragAndDropController mDragAndDropController;
|
private final DragAndDropController mDragAndDropController;
|
||||||
private final ShellTaskOrganizer mShellTaskOrganizer;
|
private final ShellTaskOrganizer mShellTaskOrganizer;
|
||||||
|
private final Optional<BubbleController> mBubblesOptional;
|
||||||
private final Optional<LegacySplitScreenController> mLegacySplitScreenOptional;
|
private final Optional<LegacySplitScreenController> mLegacySplitScreenOptional;
|
||||||
private final Optional<SplitScreenController> mSplitScreenOptional;
|
private final Optional<SplitScreenController> mSplitScreenOptional;
|
||||||
private final Optional<AppPairsController> mAppPairsOptional;
|
private final Optional<AppPairsController> mAppPairsOptional;
|
||||||
@@ -54,6 +56,7 @@ public class ShellInitImpl {
|
|||||||
public ShellInitImpl(DisplayImeController displayImeController,
|
public ShellInitImpl(DisplayImeController displayImeController,
|
||||||
DragAndDropController dragAndDropController,
|
DragAndDropController dragAndDropController,
|
||||||
ShellTaskOrganizer shellTaskOrganizer,
|
ShellTaskOrganizer shellTaskOrganizer,
|
||||||
|
Optional<BubbleController> bubblesOptional,
|
||||||
Optional<LegacySplitScreenController> legacySplitScreenOptional,
|
Optional<LegacySplitScreenController> legacySplitScreenOptional,
|
||||||
Optional<SplitScreenController> splitScreenOptional,
|
Optional<SplitScreenController> splitScreenOptional,
|
||||||
Optional<AppPairsController> appPairsOptional,
|
Optional<AppPairsController> appPairsOptional,
|
||||||
@@ -65,6 +68,7 @@ public class ShellInitImpl {
|
|||||||
mDisplayImeController = displayImeController;
|
mDisplayImeController = displayImeController;
|
||||||
mDragAndDropController = dragAndDropController;
|
mDragAndDropController = dragAndDropController;
|
||||||
mShellTaskOrganizer = shellTaskOrganizer;
|
mShellTaskOrganizer = shellTaskOrganizer;
|
||||||
|
mBubblesOptional = bubblesOptional;
|
||||||
mLegacySplitScreenOptional = legacySplitScreenOptional;
|
mLegacySplitScreenOptional = legacySplitScreenOptional;
|
||||||
mSplitScreenOptional = splitScreenOptional;
|
mSplitScreenOptional = splitScreenOptional;
|
||||||
mAppPairsOptional = appPairsOptional;
|
mAppPairsOptional = appPairsOptional;
|
||||||
@@ -91,6 +95,7 @@ public class ShellInitImpl {
|
|||||||
|
|
||||||
mAppPairsOptional.ifPresent(AppPairsController::onOrganizerRegistered);
|
mAppPairsOptional.ifPresent(AppPairsController::onOrganizerRegistered);
|
||||||
mSplitScreenOptional.ifPresent(SplitScreenController::onOrganizerRegistered);
|
mSplitScreenOptional.ifPresent(SplitScreenController::onOrganizerRegistered);
|
||||||
|
mBubblesOptional.ifPresent(BubbleController::initialize);
|
||||||
|
|
||||||
// Bind the splitscreen impl to the drag drop controller
|
// Bind the splitscreen impl to the drag drop controller
|
||||||
mDragAndDropController.initialize(mSplitScreenOptional);
|
mDragAndDropController.initialize(mSplitScreenOptional);
|
||||||
|
|||||||
@@ -120,6 +120,16 @@ public class BubbleController {
|
|||||||
@Nullable private BubbleStackView.SurfaceSynchronizer mSurfaceSynchronizer;
|
@Nullable private BubbleStackView.SurfaceSynchronizer mSurfaceSynchronizer;
|
||||||
private final FloatingContentCoordinator mFloatingContentCoordinator;
|
private final FloatingContentCoordinator mFloatingContentCoordinator;
|
||||||
private final BubbleDataRepository mDataRepository;
|
private final BubbleDataRepository mDataRepository;
|
||||||
|
private final WindowManagerShellWrapper mWindowManagerShellWrapper;
|
||||||
|
private final LauncherApps mLauncherApps;
|
||||||
|
private final IStatusBarService mBarService;
|
||||||
|
private final WindowManager mWindowManager;
|
||||||
|
private final ShellTaskOrganizer mTaskOrganizer;
|
||||||
|
|
||||||
|
// Used to post to main UI thread
|
||||||
|
private final ShellExecutor mMainExecutor;
|
||||||
|
private final Handler mMainHandler;
|
||||||
|
|
||||||
private BubbleLogger mLogger;
|
private BubbleLogger mLogger;
|
||||||
private BubbleData mBubbleData;
|
private BubbleData mBubbleData;
|
||||||
private View mBubbleScrim;
|
private View mBubbleScrim;
|
||||||
@@ -148,12 +158,6 @@ public class BubbleController {
|
|||||||
*/
|
*/
|
||||||
@Nullable private BubbleEntry mNotifEntryToExpandOnShadeUnlock;
|
@Nullable private BubbleEntry mNotifEntryToExpandOnShadeUnlock;
|
||||||
|
|
||||||
private IStatusBarService mBarService;
|
|
||||||
private WindowManager mWindowManager;
|
|
||||||
|
|
||||||
// Used to post to main UI thread
|
|
||||||
private final ShellExecutor mMainExecutor;
|
|
||||||
|
|
||||||
/** LayoutParams used to add the BubbleStackView to the window manager. */
|
/** LayoutParams used to add the BubbleStackView to the window manager. */
|
||||||
private WindowManager.LayoutParams mWmLayoutParams;
|
private WindowManager.LayoutParams mWmLayoutParams;
|
||||||
/** Whether or not the BubbleStackView has been added to the WindowManager. */
|
/** Whether or not the BubbleStackView has been added to the WindowManager. */
|
||||||
@@ -177,15 +181,6 @@ public class BubbleController {
|
|||||||
|
|
||||||
private boolean mInflateSynchronously;
|
private boolean mInflateSynchronously;
|
||||||
|
|
||||||
private ShellTaskOrganizer mTaskOrganizer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the IME is visible, as reported by the BubbleStackView. If it is, we'll make the
|
|
||||||
* Bubbles window NOT_FOCUSABLE so that touches on the Bubbles UI doesn't steal focus from the
|
|
||||||
* ActivityView and hide the IME.
|
|
||||||
*/
|
|
||||||
private boolean mImeVisible = false;
|
|
||||||
|
|
||||||
/** true when user is in status bar unlock shade. */
|
/** true when user is in status bar unlock shade. */
|
||||||
private boolean mIsStatusBarShade = true;
|
private boolean mIsStatusBarShade = true;
|
||||||
|
|
||||||
@@ -231,13 +226,28 @@ public class BubbleController {
|
|||||||
ShellExecutor mainExecutor,
|
ShellExecutor mainExecutor,
|
||||||
Handler mainHandler) {
|
Handler mainHandler) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
mLauncherApps = launcherApps;
|
||||||
|
mBarService = statusBarService == null
|
||||||
|
? IStatusBarService.Stub.asInterface(
|
||||||
|
ServiceManager.getService(Context.STATUS_BAR_SERVICE))
|
||||||
|
: statusBarService;
|
||||||
|
mWindowManager = windowManager;
|
||||||
|
mWindowManagerShellWrapper = windowManagerShellWrapper;
|
||||||
mFloatingContentCoordinator = floatingContentCoordinator;
|
mFloatingContentCoordinator = floatingContentCoordinator;
|
||||||
mDataRepository = dataRepository;
|
mDataRepository = dataRepository;
|
||||||
mLogger = bubbleLogger;
|
mLogger = bubbleLogger;
|
||||||
mMainExecutor = mainExecutor;
|
mMainExecutor = mainExecutor;
|
||||||
|
mMainHandler = mainHandler;
|
||||||
|
mTaskOrganizer = organizer;
|
||||||
|
mSurfaceSynchronizer = synchronizer;
|
||||||
|
mCurrentUserId = ActivityManager.getCurrentUser();
|
||||||
mBubblePositioner = positioner;
|
mBubblePositioner = positioner;
|
||||||
mBubbleData = data;
|
mBubbleData = data;
|
||||||
|
mSavedBubbleKeysPerUser = new SparseSetArray<>();
|
||||||
|
mBubbleIconFactory = new BubbleIconFactory(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initialize() {
|
||||||
mBubbleData.setListener(mBubbleDataListener);
|
mBubbleData.setListener(mBubbleDataListener);
|
||||||
mBubbleData.setSuppressionChangedListener(bubble -> {
|
mBubbleData.setSuppressionChangedListener(bubble -> {
|
||||||
// Make sure NoMan knows suppression state so that anyone querying it can tell.
|
// Make sure NoMan knows suppression state so that anyone querying it can tell.
|
||||||
@@ -261,28 +271,18 @@ public class BubbleController {
|
|||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
windowManagerShellWrapper.addPinnedStackListener(new BubblesImeListener());
|
mWindowManagerShellWrapper.addPinnedStackListener(new BubblesImeListener());
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
mSurfaceSynchronizer = synchronizer;
|
|
||||||
|
|
||||||
mWindowManager = windowManager;
|
|
||||||
mBarService = statusBarService == null
|
|
||||||
? IStatusBarService.Stub.asInterface(
|
|
||||||
ServiceManager.getService(Context.STATUS_BAR_SERVICE))
|
|
||||||
: statusBarService;
|
|
||||||
|
|
||||||
mSavedBubbleKeysPerUser = new SparseSetArray<>();
|
|
||||||
mCurrentUserId = ActivityManager.getCurrentUser();
|
|
||||||
mBubbleData.setCurrentUserId(mCurrentUserId);
|
mBubbleData.setCurrentUserId(mCurrentUserId);
|
||||||
|
|
||||||
mBubbleIconFactory = new BubbleIconFactory(context);
|
|
||||||
mTaskOrganizer = organizer;
|
|
||||||
mTaskOrganizer.addLocusIdListener((taskId, locus, visible) ->
|
mTaskOrganizer.addLocusIdListener((taskId, locus, visible) ->
|
||||||
mBubbleData.onLocusVisibilityChanged(taskId, locus, visible));
|
mBubbleData.onLocusVisibilityChanged(taskId, locus, visible));
|
||||||
|
|
||||||
launcherApps.registerCallback(new LauncherApps.Callback() {
|
mLauncherApps.registerCallback(new LauncherApps.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void onPackageAdded(String s, UserHandle userHandle) {}
|
public void onPackageAdded(String s, UserHandle userHandle) {}
|
||||||
|
|
||||||
@@ -318,7 +318,7 @@ public class BubbleController {
|
|||||||
mBubbleData.removeBubblesWithInvalidShortcuts(
|
mBubbleData.removeBubblesWithInvalidShortcuts(
|
||||||
packageName, validShortcuts, DISMISS_SHORTCUT_REMOVED);
|
packageName, validShortcuts, DISMISS_SHORTCUT_REMOVED);
|
||||||
}
|
}
|
||||||
}, mainHandler);
|
}, mMainHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -527,10 +527,6 @@ public class BubbleController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void onImeVisibilityChanged(boolean imeVisible) {
|
|
||||||
mImeVisible = imeVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Removes the BubbleStackView from the WindowManager if it's there. */
|
/** Removes the BubbleStackView from the WindowManager if it's there. */
|
||||||
private void removeFromWindowManagerMaybe() {
|
private void removeFromWindowManagerMaybe() {
|
||||||
if (!mAddedToWindowManager) {
|
if (!mAddedToWindowManager) {
|
||||||
|
|||||||
@@ -876,8 +876,6 @@ public class BubbleStackView extends FrameLayout
|
|||||||
mTaskbarScrim.setVisibility(GONE);
|
mTaskbarScrim.setVisibility(GONE);
|
||||||
|
|
||||||
setOnApplyWindowInsetsListener((View view, WindowInsets insets) -> {
|
setOnApplyWindowInsetsListener((View view, WindowInsets insets) -> {
|
||||||
mBubbleController.onImeVisibilityChanged(
|
|
||||||
insets.getInsets(WindowInsets.Type.ime()).bottom > 0);
|
|
||||||
if (!mIsExpanded || mIsExpansionAnimating) {
|
if (!mIsExpanded || mIsExpansionAnimating) {
|
||||||
return view.onApplyWindowInsets(insets);
|
return view.onApplyWindowInsets(insets);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -416,6 +416,7 @@ public abstract class WMShellBaseModule {
|
|||||||
static ShellInitImpl provideShellInitImpl(DisplayImeController displayImeController,
|
static ShellInitImpl provideShellInitImpl(DisplayImeController displayImeController,
|
||||||
DragAndDropController dragAndDropController,
|
DragAndDropController dragAndDropController,
|
||||||
ShellTaskOrganizer shellTaskOrganizer,
|
ShellTaskOrganizer shellTaskOrganizer,
|
||||||
|
Optional<BubbleController> bubblesOptional,
|
||||||
Optional<LegacySplitScreenController> legacySplitScreenOptional,
|
Optional<LegacySplitScreenController> legacySplitScreenOptional,
|
||||||
Optional<SplitScreenController> splitScreenOptional,
|
Optional<SplitScreenController> splitScreenOptional,
|
||||||
Optional<AppPairsController> appPairsOptional,
|
Optional<AppPairsController> appPairsOptional,
|
||||||
@@ -427,6 +428,7 @@ public abstract class WMShellBaseModule {
|
|||||||
return new ShellInitImpl(displayImeController,
|
return new ShellInitImpl(displayImeController,
|
||||||
dragAndDropController,
|
dragAndDropController,
|
||||||
shellTaskOrganizer,
|
shellTaskOrganizer,
|
||||||
|
bubblesOptional,
|
||||||
legacySplitScreenOptional,
|
legacySplitScreenOptional,
|
||||||
splitScreenOptional,
|
splitScreenOptional,
|
||||||
appPairsOptional,
|
appPairsOptional,
|
||||||
|
|||||||
@@ -55,5 +55,6 @@ public class TestableBubbleController extends BubbleController {
|
|||||||
statusBarService, windowManager, windowManagerShellWrapper, launcherApps,
|
statusBarService, windowManager, windowManagerShellWrapper, launcherApps,
|
||||||
bubbleLogger, shellTaskOrganizer, positioner, shellMainExecutor, shellMainHandler);
|
bubbleLogger, shellTaskOrganizer, positioner, shellMainExecutor, shellMainHandler);
|
||||||
setInflateSynchronously(true);
|
setInflateSynchronously(true);
|
||||||
|
initialize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user