diff options
| author | 2018-09-27 16:43:23 +0000 | |
|---|---|---|
| committer | 2018-09-27 16:43:23 +0000 | |
| commit | d0938d02a820c14bd6bab3a39c612b22df1cad72 (patch) | |
| tree | 7b15805b2a960dcf4a6e9999df4dfb86eced1608 | |
| parent | 9e4a42e732eff9c497d6064215ce6e9aa8446111 (diff) | |
| parent | 67f5c8b2d0de7ba67d3bdb71510eb0fae2febd61 (diff) | |
Merge "Removing dependencies on recents-specific code in SysUI"
38 files changed, 350 insertions, 593 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java index b04d04717be5..c7910f97675e 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java @@ -342,6 +342,20 @@ public class ActivityManagerWrapper { } /** + * Moves an already resumed task to the side of the screen to initiate split screen. + */ + public boolean setTaskWindowingModeSplitScreenPrimary(int taskId, int createMode, + Rect initialBounds) { + try { + return ActivityTaskManager.getService().setTaskWindowingModeSplitScreenPrimary(taskId, + createMode, true /* onTop */, false /* animate */, initialBounds, + true /* showRecents */); + } catch (RemoteException e) { + return false; + } + } + + /** * Registers a task stack listener with the system. * This should be called on the main thread. */ diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java index d83b36d6ea80..3191d14c5a83 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java @@ -151,6 +151,25 @@ public class WindowManagerWrapper { } } + public void setPipVisibility(final boolean visible) { + try { + WindowManagerGlobal.getWindowManagerService().setPipVisibility(visible); + } catch (RemoteException e) { + Log.e(TAG, "Unable to reach window manager", e); + } + } + + /** + * @return whether there is a soft nav bar. + */ + public boolean hasSoftNavigationBar() { + try { + return WindowManagerGlobal.getWindowManagerService().hasNavigationBar(); + } catch (RemoteException e) { + return false; + } + } + /** * @return The side of the screen where navigation bar is positioned. * @see #NAV_BAR_POS_RIGHT diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 10c8ec09bd5b..f1b53fec0714 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -86,9 +86,8 @@ import com.android.internal.telephony.TelephonyIntents; import com.android.internal.util.Preconditions; import com.android.internal.widget.LockPatternUtils; import com.android.settingslib.WirelessUtils; -import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; import com.android.systemui.shared.system.ActivityManagerWrapper; - +import com.android.systemui.shared.system.TaskStackChangeListener; import com.google.android.collect.Lists; import java.io.FileDescriptor; @@ -2218,8 +2217,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } } - private final SysUiTaskStackChangeListener - mTaskStackListener = new SysUiTaskStackChangeListener() { + private final TaskStackChangeListener + mTaskStackListener = new TaskStackChangeListener() { @Override public void onTaskStackChangedBackground() { try { diff --git a/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java index bd2b7a577b3d..1af2156c4bbe 100644 --- a/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java @@ -16,6 +16,11 @@ package com.android.systemui; +import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE; +import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_DISABLE_SWIPE_UP; +import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_SHOW_OVERVIEW_BUTTON; +import static com.android.systemui.shared.system.NavigationBarCompat.InteractionType; + import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -33,11 +38,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.util.Log; import android.view.MotionEvent; - import com.android.systemui.OverviewProxyService.OverviewProxyListener; -import com.android.systemui.recents.events.EventBus; -import com.android.systemui.recents.events.activity.DockedFirstAnimationFrameEvent; -import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.shared.recents.IOverviewProxy; import com.android.systemui.shared.recents.ISystemUiProxy; import com.android.systemui.shared.system.ActivityManagerWrapper; @@ -46,17 +47,11 @@ import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.CallbackController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; - import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; -import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE; -import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_DISABLE_SWIPE_UP; -import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_SHOW_OVERVIEW_BUTTON; -import static com.android.systemui.shared.system.NavigationBarCompat.InteractionType; - /** * Class to send information from overview to launcher with a binder. */ @@ -133,7 +128,10 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis } long token = Binder.clearCallingIdentity(); try { - EventBus.getDefault().post(new DockedFirstAnimationFrameEvent()); + Divider divider = SysUiServiceProvider.getComponent(mContext, Divider.class); + if (divider != null) { + divider.onDockedFirstAnimationFrame(); + } } finally { Binder.restoreCallingIdentity(token); } @@ -314,8 +312,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis getDefaultInteractionFlags()); // Listen for the package update changes. - if (SystemServicesProxy.getInstance(context) - .isSystemUser(mDeviceProvisionedController.getCurrentUser())) { + if (mDeviceProvisionedController.getCurrentUser() == UserHandle.USER_SYSTEM) { updateEnabledState(); mDeviceProvisionedController.addCallback(mDeviceProvisionedCallback); IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); diff --git a/packages/SystemUI/src/com/android/systemui/RecentsComponent.java b/packages/SystemUI/src/com/android/systemui/RecentsComponent.java index f9dbf4a15e5c..fb343f9b9b45 100644 --- a/packages/SystemUI/src/com/android/systemui/RecentsComponent.java +++ b/packages/SystemUI/src/com/android/systemui/RecentsComponent.java @@ -22,27 +22,10 @@ import android.view.View; public interface RecentsComponent { void showRecentApps(boolean triggeredFromAltTab); - void showNextAffiliatedTask(); - void showPrevAffiliatedTask(); /** * Docks the top-most task and opens recents. */ - boolean splitPrimaryTask(int dragMode, int stackCreateMode, Rect initialBounds, + boolean splitPrimaryTask(int stackCreateMode, Rect initialBounds, int metricsDockAction); - - /** - * Called during a drag-from-navbar-in gesture. - * - * @param distanceFromTop the distance of the current drag in gesture from the top of the - * screen - */ - void onDraggingInRecents(float distanceFromTop); - - /** - * Called when the gesture to drag in recents ended. - * - * @param velocity the velocity of the finger when releasing it in pixels per second - */ - void onDraggingInRecentsEnded(float velocity); } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/DismissCallbackRegistry.java b/packages/SystemUI/src/com/android/systemui/keyguard/DismissCallbackRegistry.java index 745f312a29b4..d833c16c04b3 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/DismissCallbackRegistry.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/DismissCallbackRegistry.java @@ -19,9 +19,6 @@ package com.android.systemui.keyguard; import com.android.internal.policy.IKeyguardDismissCallback; import com.android.systemui.Dependency; import com.android.systemui.UiOffloadThread; -import com.android.systemui.recents.Recents; -import com.android.systemui.recents.misc.SystemServicesProxy; - import java.util.ArrayList; /** diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java index 0cedf9825990..74f770679cc9 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java @@ -19,7 +19,6 @@ package com.android.systemui.keyguard; import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.ActivityTaskManager; -import android.app.IActivityManager; import android.app.IActivityTaskManager; import android.app.KeyguardManager; import android.content.ComponentName; @@ -29,11 +28,9 @@ import android.os.Bundle; import android.os.RemoteException; import android.os.UserHandle; import android.util.Log; - import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; -import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.TaskStackChangeListener; public class WorkLockActivityController { private static final String TAG = WorkLockActivityController.class.getSimpleName(); @@ -111,7 +108,7 @@ public class WorkLockActivityController { } } - private final SysUiTaskStackChangeListener mLockListener = new SysUiTaskStackChangeListener() { + private final TaskStackChangeListener mLockListener = new TaskStackChangeListener() { @Override public void onTaskProfileLocked(int taskId, int userId) { startWorkChallengeInTask(taskId, userId); diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java index b7164cbb3271..864a6f9185fa 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java @@ -21,11 +21,12 @@ import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE; import android.content.pm.PackageManager; import android.content.res.Configuration; - +import android.os.UserHandle; +import android.os.UserManager; import com.android.systemui.SystemUI; -import com.android.systemui.recents.misc.SystemServicesProxy; +import com.android.systemui.recents.events.EventBus; +import com.android.systemui.recents.events.component.ExpandPipEvent; import com.android.systemui.statusbar.CommandQueue; - import java.io.FileDescriptor; import java.io.PrintWriter; @@ -47,8 +48,8 @@ public class PipUI extends SystemUI implements CommandQueue.Callbacks { } // Ensure that we are the primary user's SystemUI. - final int processUser = SystemServicesProxy.getInstance(mContext).getProcessUser(); - if (!SystemServicesProxy.getInstance(mContext).isSystemUser(processUser)) { + final int processUser = UserManager.get(mContext).getUserHandle(); + if (processUser != UserHandle.USER_SYSTEM) { throw new IllegalStateException("Non-primary Pip component not currently supported."); } @@ -58,6 +59,7 @@ public class PipUI extends SystemUI implements CommandQueue.Callbacks { mPipManager.initialize(mContext); getComponent(CommandQueue.class).addCallbacks(this); + putComponent(PipUI.class, this); } @Override @@ -65,6 +67,10 @@ public class PipUI extends SystemUI implements CommandQueue.Callbacks { mPipManager.showPictureInPictureMenu(); } + public void expandPip() { + EventBus.getDefault().send(new ExpandPipEvent()); + } + @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/ForegroundThread.java b/packages/SystemUI/src/com/android/systemui/pip/phone/ForegroundThread.java index 784ac4e16838..9bf46bb488f3 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/ForegroundThread.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/ForegroundThread.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.recents.misc; +package com.android.systemui.pip.phone; import android.os.Handler; import android.os.HandlerThread; diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java index 5547e2d3985d..9ce2606a2a15 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java @@ -19,21 +19,17 @@ package com.android.systemui.pip.phone; import android.content.Context; import android.graphics.PixelFormat; import android.graphics.Point; -import android.graphics.PointF; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnLayoutChangeListener; -import android.view.ViewGroup; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; import android.widget.FrameLayout; - import com.android.systemui.Interpolators; import com.android.systemui.R; -import com.android.systemui.recents.misc.SystemServicesProxy; +import com.android.systemui.shared.system.WindowManagerWrapper; public class PipDismissViewController { @@ -59,7 +55,7 @@ public class PipDismissViewController { if (mDismissView == null) { // Determine sizes for the view final Rect stableInsets = new Rect(); - SystemServicesProxy.getInstance(mContext).getStableInsets(stableInsets); + WindowManagerWrapper.getInstance().getStableInsets(stableInsets); final Point windowSize = new Point(); mWindowManager.getDefaultDisplay().getRealSize(windowSize); final int gradientHeight = mContext.getResources().getDimensionPixelSize( diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java index ee15655d87b2..04746c16585a 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -17,7 +17,6 @@ package com.android.systemui.pip.phone; import static android.view.Display.DEFAULT_DISPLAY; -import static android.view.WindowManager.INPUT_CONSUMER_PIP; import android.app.ActivityManager; import android.app.ActivityTaskManager; @@ -36,15 +35,15 @@ import android.view.IPinnedStackController; import android.view.IPinnedStackListener; import android.view.IWindowManager; import android.view.WindowManagerGlobal; - +import com.android.systemui.Dependency; +import com.android.systemui.UiOffloadThread; import com.android.systemui.pip.BasePipManager; import com.android.systemui.recents.events.EventBus; import com.android.systemui.recents.events.component.ExpandPipEvent; -import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; -import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.InputConsumerController; - +import com.android.systemui.shared.system.TaskStackChangeListener; +import com.android.systemui.shared.system.WindowManagerWrapper; import java.io.PrintWriter; /** @@ -72,7 +71,7 @@ public class PipManager implements BasePipManager { /** * Handler for system task stack changes. */ - SysUiTaskStackChangeListener mTaskStackListener = new SysUiTaskStackChangeListener() { + TaskStackChangeListener mTaskStackListener = new TaskStackChangeListener() { @Override public void onActivityPinned(String packageName, int userId, int taskId, int stackId) { mTouchHandler.onActivityPinned(); @@ -80,7 +79,9 @@ public class PipManager implements BasePipManager { mMenuController.onActivityPinned(); mAppOpsListener.onActivityPinned(packageName); - SystemServicesProxy.getInstance(mContext).setPipVisibility(true); + Dependency.get(UiOffloadThread.class).submit(() -> { + WindowManagerWrapper.getInstance().setPipVisibility(true); + }); } @Override @@ -93,7 +94,9 @@ public class PipManager implements BasePipManager { mTouchHandler.onActivityUnpinned(topActivity); mAppOpsListener.onActivityUnpinned(); - SystemServicesProxy.getInstance(mContext).setPipVisibility(topActivity != null); + Dependency.get(UiOffloadThread.class).submit(() -> { + WindowManagerWrapper.getInstance().setPipVisibility(topActivity != null); + }); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java index f0ab046f7dbe..ce7da79de794 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java @@ -30,7 +30,6 @@ import android.animation.RectEvaluator; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.app.ActivityManager.StackInfo; -import android.app.ActivityTaskManager; import android.app.IActivityManager; import android.app.IActivityTaskManager; import android.content.Context; @@ -43,14 +42,11 @@ import android.os.Message; import android.os.RemoteException; import android.util.Log; import android.view.animation.Interpolator; - import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.internal.os.SomeArgs; import com.android.internal.policy.PipSnapAlgorithm; -import com.android.systemui.recents.misc.ForegroundThread; -import com.android.systemui.recents.misc.SystemServicesProxy; +import com.android.systemui.shared.system.WindowManagerWrapper; import com.android.systemui.statusbar.FlingAnimationUtils; - import java.io.PrintWriter; /** @@ -116,7 +112,7 @@ public class PipMotionHelper implements Handler.Callback { */ void onConfigurationChanged() { mSnapAlgorithm.onConfigurationChanged(); - SystemServicesProxy.getInstance(mContext).getStableInsets(mStableInsets); + WindowManagerWrapper.getInstance().getStableInsets(mStableInsets); } /** diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java index 020c5500c0a0..43e9db7f0ee5 100755 --- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java @@ -16,6 +16,11 @@ package com.android.systemui.pip.tv; +import static android.app.ActivityTaskManager.INVALID_STACK_ID; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; +import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +import static android.view.Display.DEFAULT_DISPLAY; + import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityManager.StackInfo; @@ -44,22 +49,17 @@ import android.view.IPinnedStackController; import android.view.IPinnedStackListener; import android.view.IWindowManager; import android.view.WindowManagerGlobal; - +import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.UiOffloadThread; import com.android.systemui.pip.BasePipManager; -import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; -import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.shared.system.ActivityManagerWrapper; - +import com.android.systemui.shared.system.TaskStackChangeListener; +import com.android.systemui.shared.system.WindowManagerWrapper; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; -import static android.app.ActivityTaskManager.INVALID_STACK_ID; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; -import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; -import static android.view.Display.DEFAULT_DISPLAY; - /** * Manages the picture-in-picture (PIP) UI and states. */ @@ -630,7 +630,7 @@ public class PipManager implements BasePipManager { return false; } - private SysUiTaskStackChangeListener mTaskStackListener = new SysUiTaskStackChangeListener() { + private TaskStackChangeListener mTaskStackListener = new TaskStackChangeListener() { @Override public void onTaskStackChanged() { if (DEBUG) Log.d(TAG, "onTaskStackChanged()"); @@ -754,7 +754,9 @@ public class PipManager implements BasePipManager { } private void updatePipVisibility(final boolean visible) { - SystemServicesProxy.getInstance(mContext).setPipVisibility(visible); + Dependency.get(UiOffloadThread.class).submit(() -> { + WindowManagerWrapper.getInstance().setPipVisibility(visible); + }); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl b/packages/SystemUI/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl index fc1831d55c9d..90c10992bc94 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl +++ b/packages/SystemUI/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl @@ -31,8 +31,7 @@ oneway interface IRecentsNonSystemUserCallbacks { void hideRecents(boolean triggeredFromAltTab, boolean triggeredFromHomeKey); void toggleRecents(int recentsGrowTarget); void onConfigurationChanged(); - void splitPrimaryTask(int topTaskId, int dragMode, int stackCreateMode, - in Rect initialBounds); + void splitPrimaryTask(int topTaskId, int stackCreateMode, in Rect initialBounds); void onDraggingInRecents(float distanceFromTop); void onDraggingInRecentsEnded(float velocity); void showCurrentUserToast(int msgResId, int msgLength); diff --git a/packages/SystemUI/src/com/android/systemui/recents/IRecentsSystemUserCallbacks.aidl b/packages/SystemUI/src/com/android/systemui/recents/IRecentsSystemUserCallbacks.aidl index 58d8d8fd600a..e97714486dcf 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/IRecentsSystemUserCallbacks.aidl +++ b/packages/SystemUI/src/com/android/systemui/recents/IRecentsSystemUserCallbacks.aidl @@ -29,7 +29,7 @@ oneway interface IRecentsSystemUserCallbacks { void updateRecentsVisibility(boolean visible); void startScreenPinning(int taskId); void sendRecentsDrawnEvent(); - void sendDockingTopTaskEvent(int dragMode, in Rect initialRect); + void sendDockingTopTaskEvent(in Rect initialRect); void sendLaunchRecentsEvent(); void sendDockedFirstAnimationFrameEvent(); void setWaitingForTransitionStartEvent(boolean waitingForTransitionStart); diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java index 8bb3c0231a76..74f6c2dec4e7 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java @@ -53,6 +53,7 @@ import com.android.systemui.OverviewProxyService; import com.android.systemui.R; import com.android.systemui.RecentsComponent; import com.android.systemui.SystemUIApplication; +import com.android.systemui.recents.events.ui.RecentsGrowingEvent; import com.android.systemui.shared.recents.IOverviewProxy; import com.android.systemui.SystemUI; import com.android.systemui.recents.events.EventBus; @@ -248,6 +249,10 @@ public class Recents extends SystemUI mImpl.onBootCompleted(); } + public void growRecents() { + EventBus.getDefault().send(new RecentsGrowingEvent()); + } + /** * Shows the Recents. */ @@ -463,7 +468,7 @@ public class Recents extends SystemUI } @Override - public boolean splitPrimaryTask(int dragMode, int stackCreateMode, Rect initialBounds, + public boolean splitPrimaryTask(int stackCreateMode, Rect initialBounds, int metricsDockAction) { // Ensure the device has been provisioned before allowing the user to interact with // recents @@ -495,16 +500,15 @@ public class Recents extends SystemUI runningTask.topActivity.flattenToShortString()); } if (sSystemServicesProxy.isSystemUser(currentUser)) { - mImpl.splitPrimaryTask(runningTask.id, dragMode, stackCreateMode, - initialBounds); + mImpl.splitPrimaryTask(runningTask.id, stackCreateMode, initialBounds); } else { if (mSystemToUserCallbacks != null) { IRecentsNonSystemUserCallbacks callbacks = mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser); if (callbacks != null) { try { - callbacks.splitPrimaryTask(runningTask.id, dragMode, - stackCreateMode, initialBounds); + callbacks.splitPrimaryTask(runningTask.id, stackCreateMode, + initialBounds); } catch (RemoteException e) { Log.e(TAG, "Callback failed", e); } @@ -552,53 +556,6 @@ public class Recents extends SystemUI } } - @Override - public void onDraggingInRecents(float distanceFromTop) { - if (sSystemServicesProxy.isSystemUser(mDraggingInRecentsCurrentUser)) { - mImpl.onDraggingInRecents(distanceFromTop); - } else { - if (mSystemToUserCallbacks != null) { - IRecentsNonSystemUserCallbacks callbacks = - mSystemToUserCallbacks.getNonSystemUserRecentsForUser( - mDraggingInRecentsCurrentUser); - if (callbacks != null) { - try { - callbacks.onDraggingInRecents(distanceFromTop); - } catch (RemoteException e) { - Log.e(TAG, "Callback failed", e); - } - } else { - Log.e(TAG, "No SystemUI callbacks found for user: " - + mDraggingInRecentsCurrentUser); - } - } - } - } - - @Override - public void onDraggingInRecentsEnded(float velocity) { - if (sSystemServicesProxy.isSystemUser(mDraggingInRecentsCurrentUser)) { - mImpl.onDraggingInRecentsEnded(velocity); - } else { - if (mSystemToUserCallbacks != null) { - IRecentsNonSystemUserCallbacks callbacks = - mSystemToUserCallbacks.getNonSystemUserRecentsForUser( - mDraggingInRecentsCurrentUser); - if (callbacks != null) { - try { - callbacks.onDraggingInRecentsEnded(velocity); - } catch (RemoteException e) { - Log.e(TAG, "Callback failed", e); - } - } else { - Log.e(TAG, "No SystemUI callbacks found for user: " - + mDraggingInRecentsCurrentUser); - } - } - } - } - - @Override public void showNextAffiliatedTask() { // Ensure the device has been provisioned before allowing the user to interact with // recents @@ -609,7 +566,6 @@ public class Recents extends SystemUI mImpl.showNextAffiliatedTask(); } - @Override public void showPrevAffiliatedTask() { // Ensure the device has been provisioned before allowing the user to interact with // recents @@ -686,7 +642,12 @@ public class Recents extends SystemUI public final void onBusEvent(DockedFirstAnimationFrameEvent event) { SystemServicesProxy ssp = Recents.getSystemServices(); int processUser = ssp.getProcessUser(); - if (!ssp.isSystemUser(processUser)) { + if (ssp.isSystemUser(processUser)) { + final Divider divider = getComponent(Divider.class); + if (divider != null) { + divider.onDockedFirstAnimationFrame(); + } + } else { postToSystemUser(new Runnable() { @Override public void run() { @@ -723,7 +684,12 @@ public class Recents extends SystemUI public final void onBusEvent(final RecentsDrawnEvent event) { int processUser = sSystemServicesProxy.getProcessUser(); - if (!sSystemServicesProxy.isSystemUser(processUser)) { + if (sSystemServicesProxy.isSystemUser(processUser)) { + final Divider divider = getComponent(Divider.class); + if (divider != null) { + divider.onRecentsDrawn(); + } + } else { postToSystemUser(new Runnable() { @Override public void run() { @@ -739,13 +705,17 @@ public class Recents extends SystemUI public final void onBusEvent(final DockedTopTaskEvent event) { int processUser = sSystemServicesProxy.getProcessUser(); - if (!sSystemServicesProxy.isSystemUser(processUser)) { + if (sSystemServicesProxy.isSystemUser(processUser)) { + final Divider divider = getComponent(Divider.class); + if (divider != null) { + divider.onDockedTopTask(); + } + } else { postToSystemUser(new Runnable() { @Override public void run() { try { - mUserToSystemCallbacks.sendDockingTopTaskEvent(event.dragMode, - event.initialRect); + mUserToSystemCallbacks.sendDockingTopTaskEvent(event.initialRect); } catch (RemoteException e) { Log.e(TAG, "Callback failed", e); } @@ -756,7 +726,12 @@ public class Recents extends SystemUI public final void onBusEvent(final RecentsActivityStartingEvent event) { int processUser = sSystemServicesProxy.getProcessUser(); - if (!sSystemServicesProxy.isSystemUser(processUser)) { + if (sSystemServicesProxy.isSystemUser(processUser)) { + final Divider divider = getComponent(Divider.class); + if (divider != null) { + divider.onRecentsActivityStarting(); + } + } else { postToSystemUser(new Runnable() { @Override public void run() { diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index 63a65d030f6d..d95c7313a282 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -49,6 +49,7 @@ import android.widget.Toast; import com.android.systemui.Dependency; import com.android.systemui.OverviewProxyService; import com.android.systemui.SysUiServiceProvider; +import com.android.systemui.pip.phone.ForegroundThread; import com.google.android.collect.Lists; import com.android.internal.logging.MetricsLogger; @@ -72,7 +73,6 @@ import com.android.systemui.recents.events.ui.DraggingInRecentsEndedEvent; import com.android.systemui.recents.events.ui.DraggingInRecentsEvent; import com.android.systemui.recents.events.ui.TaskSnapshotChangedEvent; import com.android.systemui.recents.misc.DozeTrigger; -import com.android.systemui.recents.misc.ForegroundThread; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; import com.android.systemui.shared.recents.model.RecentsTaskLoadPlan; @@ -690,14 +690,13 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener showRelativeAffiliatedTask(false); } - public void splitPrimaryTask(int taskId, int dragMode, int stackCreateMode, - Rect initialBounds) { + public void splitPrimaryTask(int taskId, int stackCreateMode, Rect initialBounds) { SystemServicesProxy ssp = Recents.getSystemServices(); // Make sure we inform DividerView before we actually start the activity so we can change // the resize mode already. if (ssp.setTaskWindowingModeSplitScreenPrimary(taskId, stackCreateMode, initialBounds)) { - EventBus.getDefault().send(new DockedTopTaskEvent(dragMode, initialBounds)); + EventBus.getDefault().send(new DockedTopTaskEvent(initialBounds)); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImplProxy.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImplProxy.java index beec4b395e9c..a1da785f2a80 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImplProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImplProxy.java @@ -87,12 +87,11 @@ public class RecentsImplProxy extends IRecentsNonSystemUserCallbacks.Stub { } @Override - public void splitPrimaryTask(int topTaskId, int dragMode, int stackCreateMode, - Rect initialBounds) throws RemoteException { + public void splitPrimaryTask(int topTaskId, int stackCreateMode, Rect initialBounds) + throws RemoteException { SomeArgs args = SomeArgs.obtain(); args.argi1 = topTaskId; - args.argi2 = dragMode; - args.argi3 = stackCreateMode; + args.argi2 = stackCreateMode; args.arg1 = initialBounds; mHandler.sendMessage(mHandler.obtainMessage(MSG_DOCK_TOP_TASK, args)); } @@ -141,7 +140,7 @@ public class RecentsImplProxy extends IRecentsNonSystemUserCallbacks.Stub { break; case MSG_DOCK_TOP_TASK: args = (SomeArgs) msg.obj; - mImpl.splitPrimaryTask(args.argi1, args.argi2, args.argi3 = 0, + mImpl.splitPrimaryTask(args.argi1, args.argi2 = 0, (Rect) args.arg1); break; case MSG_ON_DRAGGING_IN_RECENTS: diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsSystemUser.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsSystemUser.java index ff1f7dc5a2a8..c5e9f046aa16 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsSystemUser.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsSystemUser.java @@ -26,13 +26,13 @@ import android.util.SparseArray; import com.android.systemui.EventLogConstants; import com.android.systemui.EventLogTags; +import com.android.systemui.pip.phone.ForegroundThread; import com.android.systemui.recents.events.EventBus; import com.android.systemui.recents.events.activity.DockedFirstAnimationFrameEvent; import com.android.systemui.recents.events.activity.DockedTopTaskEvent; import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent; import com.android.systemui.recents.events.component.SetWaitingForTransitionStartEvent; import com.android.systemui.recents.events.ui.RecentsDrawnEvent; -import com.android.systemui.recents.misc.ForegroundThread; /** * An implementation of the system user's Recents interface to be called remotely by secondary @@ -99,8 +99,8 @@ public class RecentsSystemUser extends IRecentsSystemUserCallbacks.Stub { } @Override - public void sendDockingTopTaskEvent(int dragMode, Rect initialRect) throws RemoteException { - EventBus.getDefault().post(new DockedTopTaskEvent(dragMode, initialRect)); + public void sendDockingTopTaskEvent(Rect initialRect) throws RemoteException { + EventBus.getDefault().post(new DockedTopTaskEvent(initialRect)); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recents/events/activity/DockedTopTaskEvent.java b/packages/SystemUI/src/com/android/systemui/recents/events/activity/DockedTopTaskEvent.java index f1bc214670f5..9e3ced3f3757 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/events/activity/DockedTopTaskEvent.java +++ b/packages/SystemUI/src/com/android/systemui/recents/events/activity/DockedTopTaskEvent.java @@ -26,11 +26,9 @@ import com.android.systemui.recents.events.EventBus; */ public class DockedTopTaskEvent extends EventBus.Event { - public int dragMode; public Rect initialRect; - public DockedTopTaskEvent(int dragMode, Rect initialRect) { - this.dragMode = dragMode; + public DockedTopTaskEvent(Rect initialRect) { this.initialRect = initialRect; } } diff --git a/packages/SystemUI/src/com/android/systemui/shortcut/ShortcutKeyDispatcher.java b/packages/SystemUI/src/com/android/systemui/shortcut/ShortcutKeyDispatcher.java index 750002cbc5ca..64fa8f86c5f6 100644 --- a/packages/SystemUI/src/com/android/systemui/shortcut/ShortcutKeyDispatcher.java +++ b/packages/SystemUI/src/com/android/systemui/shortcut/ShortcutKeyDispatcher.java @@ -18,11 +18,7 @@ package com.android.systemui.shortcut; import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT; import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; -import static android.os.UserHandle.USER_CURRENT; -import static com.android.systemui.statusbar.phone.NavigationBarGestureHelper.DRAG_MODE_NONE; - -import android.app.ActivityManager; import android.content.res.Configuration; import android.os.RemoteException; import android.util.Log; @@ -30,17 +26,11 @@ import android.view.IWindowManager; import android.view.KeyEvent; import android.view.WindowManager; import android.view.WindowManagerGlobal; - import com.android.internal.policy.DividerSnapAlgorithm; import com.android.systemui.SystemUI; import com.android.systemui.recents.Recents; -import com.android.systemui.recents.misc.SystemServicesProxy; -import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.stackdivider.Divider; import com.android.systemui.stackdivider.DividerView; -import com.android.systemui.statusbar.phone.NavigationBarGestureHelper; - -import java.util.List; /** * Dispatches shortcut to System UI components @@ -94,7 +84,7 @@ public class ShortcutKeyDispatcher extends SystemUI if (dockSide == WindowManager.DOCKED_INVALID) { // Split the screen Recents recents = getComponent(Recents.class); - recents.splitPrimaryTask(DRAG_MODE_NONE, (shortcutCode == SC_DOCK_LEFT) + recents.splitPrimaryTask((shortcutCode == SC_DOCK_LEFT) ? SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT : SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT, null, -1); } else { diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java index da0a43551f1f..ea194a70adf2 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java @@ -16,29 +16,28 @@ package com.android.systemui.stackdivider; +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; + import android.content.res.Configuration; import android.os.RemoteException; +import android.util.Log; import android.view.IDockedStackListener; import android.view.LayoutInflater; import android.view.View; - +import android.view.WindowManagerGlobal; import com.android.systemui.R; import com.android.systemui.SystemUI; import com.android.systemui.recents.Recents; -import com.android.systemui.recents.events.EventBus; -import com.android.systemui.recents.events.ui.RecentsDrawnEvent; -import com.android.systemui.recents.misc.SystemServicesProxy; - -import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; - import java.io.FileDescriptor; import java.io.PrintWriter; /** * Controls the docked stack divider. */ -public class Divider extends SystemUI { +public class Divider extends SystemUI implements DividerView.DividerCallbacks { + private static final String TAG = "Divider"; + private DividerWindowManager mWindowManager; private DividerView mView; private final DividerState mDividerState = new DividerState(); @@ -55,10 +54,13 @@ public class Divider extends SystemUI { update(mContext.getResources().getConfiguration()); putComponent(Divider.class, this); mDockDividerVisibilityListener = new DockDividerVisibilityListener(); - SystemServicesProxy ssp = Recents.getSystemServices(); - ssp.registerDockedStackListener(mDockDividerVisibilityListener); + try { + WindowManagerGlobal.getWindowManagerService().registerDockedStackListener( + mDockDividerVisibilityListener); + } catch (Exception e) { + Log.e(TAG, "Failed to register docked stack listener", e); + } mForcedResizableController = new ForcedResizableInfoActivityController(mContext); - EventBus.getDefault().register(this); } @Override @@ -82,7 +84,7 @@ public class Divider extends SystemUI { private void addDivider(Configuration configuration) { mView = (DividerView) LayoutInflater.from(mContext).inflate(R.layout.docked_stack_divider, null); - mView.injectDependencies(mWindowManager, mDividerState); + mView.injectDependencies(mWindowManager, mDividerState, this); mView.setVisibility(mVisible ? View.VISIBLE : View.INVISIBLE); mView.setMinimizedDockStack(mMinimized, mHomeStackResizable); final int size = mContext.getResources().getDimensionPixelSize( @@ -156,18 +158,64 @@ public class Divider extends SystemUI { mWindowManager.setTouchable((mHomeStackResizable || !mMinimized) && !mAdjustedForIme); } + public void onRecentsActivityStarting() { + if (mView != null) { + mView.onRecentsActivityStarting(); + } + } + /** - * Workaround for b/62528361, at the time RecentsDrawnEvent is sent, it may happen before a + * Workaround for b/62528361, at the time recents has drawn, it may happen before a * configuration change to the Divider, and internally, the event will be posted to the * subscriber, or DividerView, which has been removed and prevented from resizing. Instead, * register the event handler here and proxy the event to the current DividerView. */ - public final void onBusEvent(RecentsDrawnEvent drawnEvent) { + public void onRecentsDrawn() { if (mView != null) { mView.onRecentsDrawn(); } } + public void onUndockingTask() { + if (mView != null) { + mView.onUndockingTask(); + } + } + + public void onDockedFirstAnimationFrame() { + if (mView != null) { + mView.onDockedFirstAnimationFrame(); + } + } + + public void onDockedTopTask() { + if (mView != null) { + mView.onDockedTopTask(); + } + } + + public void onAppTransitionFinished() { + mForcedResizableController.onAppTransitionFinished(); + } + + @Override + public void onDraggingStart() { + mForcedResizableController.onDraggingStart(); + } + + @Override + public void onDraggingEnd() { + mForcedResizableController.onDraggingEnd(); + } + + @Override + public void growRecents() { + Recents recents = getComponent(Recents.class); + if (recents != null) { + recents.growRecents(); + } + } + @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.print(" mVisible="); pw.println(mVisible); diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java index 98925b9ba9e5..fa01af68364e 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java @@ -55,7 +55,6 @@ import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.view.animation.Interpolator; import android.view.animation.PathInterpolator; import android.widget.FrameLayout; - import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.policy.DividerSnapAlgorithm; @@ -64,17 +63,8 @@ import com.android.internal.policy.DockedDividerUtils; import com.android.internal.view.SurfaceFlingerVsyncChoreographer; import com.android.systemui.Interpolators; import com.android.systemui.R; -import com.android.systemui.recents.events.EventBus; -import com.android.systemui.recents.events.activity.DockedFirstAnimationFrameEvent; -import com.android.systemui.recents.events.activity.DockedTopTaskEvent; -import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent; -import com.android.systemui.recents.events.activity.UndockingTaskEvent; -import com.android.systemui.recents.events.ui.RecentsGrowingEvent; -import com.android.systemui.recents.misc.SystemServicesProxy; -import com.android.systemui.stackdivider.events.StartedDragingEvent; -import com.android.systemui.stackdivider.events.StoppedDragingEvent; +import com.android.systemui.shared.system.WindowManagerWrapper; import com.android.systemui.statusbar.FlingAnimationUtils; -import com.android.systemui.statusbar.phone.NavigationBarGestureHelper; /** * Docked stack divider. @@ -82,6 +72,12 @@ import com.android.systemui.statusbar.phone.NavigationBarGestureHelper; public class DividerView extends FrameLayout implements OnTouchListener, OnComputeInternalInsetsListener { + public interface DividerCallbacks { + void onDraggingStart(); + void onDraggingEnd(); + void growRecents(); + } + static final long TOUCH_ANIMATION_DURATION = 150; static final long TOUCH_RELEASE_ANIMATION_DURATION = 200; @@ -149,6 +145,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, private FlingAnimationUtils mFlingAnimationUtils; private DividerSnapAlgorithm mSnapAlgorithm; private DividerSnapAlgorithm mMinimizedSnapAlgorithm; + private DividerCallbacks mCallback; private final Rect mStableInsets = new Rect(); private boolean mGrowRecents; @@ -162,6 +159,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, private DividerState mState; private final SurfaceFlingerVsyncChoreographer mSfChoreographer; + // The view is removed or in the process of been removed from the system. private boolean mRemoved; @@ -306,7 +304,6 @@ public class DividerView extends FrameLayout implements OnTouchListener, @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - EventBus.getDefault().register(this); // Save the current target if not minimized once attached to window if (mHomeStackResizable && mDockSide != WindowManager.DOCKED_INVALID @@ -315,14 +312,9 @@ public class DividerView extends FrameLayout implements OnTouchListener, } } - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - EventBus.getDefault().unregister(this); - } - void onDividerRemoved() { mRemoved = true; + mCallback = null; mHandler.removeMessages(MSG_RESIZE_STACK); } @@ -364,13 +356,15 @@ public class DividerView extends FrameLayout implements OnTouchListener, } } - public void injectDependencies(DividerWindowManager windowManager, DividerState dividerState) { + public void injectDependencies(DividerWindowManager windowManager, DividerState dividerState, + DividerCallbacks callback) { mWindowManager = windowManager; mState = dividerState; + mCallback = callback; // Set the previous position ratio before minimized state after attaching this divider if (mStableInsets.isEmpty()) { - SystemServicesProxy.getInstance(mContext).getStableInsets(mStableInsets); + WindowManagerWrapper.getInstance().getStableInsets(mStableInsets); } if (mState.mRatioPositionBeforeMinimized == 0) { @@ -419,7 +413,9 @@ public class DividerView extends FrameLayout implements OnTouchListener, mWindowManager.setSlippery(false); liftBackground(); } - EventBus.getDefault().send(new StartedDragingEvent()); + if (mCallback != null) { + mCallback.onDraggingStart(); + } return mDockSide != WindowManager.DOCKED_INVALID; } @@ -617,7 +613,9 @@ public class DividerView extends FrameLayout implements OnTouchListener, mCurrentAnimator = null; mEntranceAnimationRunning = false; mExitAnimationRunning = false; - EventBus.getDefault().send(new StoppedDragingEvent()); + if (mCallback != null) { + mCallback.onDraggingEnd(); + } // Record last snap target the divider moved to if (mHomeStackResizable && !mIsInMinimizeInteraction) { @@ -776,7 +774,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, if (mDisplayRotation != mDefaultDisplay.getRotation()) { // Splitscreen to minimize is about to starts after rotating landscape to seascape, // update insets, display info and snap algorithm targets - SystemServicesProxy.getInstance(mContext).getStableInsets(mStableInsets); + WindowManagerWrapper.getInstance().getStableInsets(mStableInsets); repositionSnapTargetBeforeMinimized(); updateDisplayInfo(); } else { @@ -910,7 +908,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, requestLayout(); // Update the snap position to the new docked side with correct insets - SystemServicesProxy.getInstance(mContext).getStableInsets(mStableInsets); + WindowManagerWrapper.getInstance().getStableInsets(mStableInsets); mMinimizedSnapAlgorithm = null; initializeSnapAlgorithm(); @@ -1271,7 +1269,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, } } - public final void onBusEvent(RecentsActivityStartingEvent recentsActivityStartingEvent) { + void onRecentsActivityStarting() { if (mGrowRecents && mDockSide == WindowManager.DOCKED_TOP && getSnapAlgorithm().getMiddleTarget() != getSnapAlgorithm().getLastSplitTarget() && getCurrentPosition() == getSnapAlgorithm().getLastSplitTarget().position) { @@ -1280,16 +1278,14 @@ public class DividerView extends FrameLayout implements OnTouchListener, } } - public final void onBusEvent(DockedFirstAnimationFrameEvent event) { + void onDockedFirstAnimationFrame() { saveSnapTargetBeforeMinimized(mSnapAlgorithm.getMiddleTarget()); } - public final void onBusEvent(DockedTopTaskEvent event) { - if (event.dragMode == NavigationBarGestureHelper.DRAG_MODE_NONE) { - mState.growAfterRecentsDrawn = false; - mState.animateAfterRecentsDrawn = true; - startDragging(false /* animate */, false /* touching */); - } + void onDockedTopTask() { + mState.growAfterRecentsDrawn = false; + mState.animateAfterRecentsDrawn = true; + startDragging(false /* animate */, false /* touching */); updateDockSide(); mEntranceAnimationRunning = true; @@ -1297,7 +1293,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, mSnapAlgorithm.getMiddleTarget()); } - public void onRecentsDrawn() { + void onRecentsDrawn() { updateDockSide(); final int position = calculatePositionForInsetBounds(); if (mState.animateAfterRecentsDrawn) { @@ -1314,13 +1310,15 @@ public class DividerView extends FrameLayout implements OnTouchListener, if (mState.growAfterRecentsDrawn) { mState.growAfterRecentsDrawn = false; updateDockSide(); - EventBus.getDefault().send(new RecentsGrowingEvent()); + if (mCallback != null) { + mCallback.growRecents(); + } stopDragging(position, getSnapAlgorithm().getMiddleTarget(), 336, Interpolators.FAST_OUT_SLOW_IN); } } - public final void onBusEvent(UndockingTaskEvent undockingTaskEvent) { + void onUndockingTask() { int dockSide = mWindowManagerProxy.getDockSide(); if (dockSide != WindowManager.DOCKED_INVALID && (mHomeStackResizable || !mDockedStackMinimized)) { diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivity.java b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivity.java index 4415bd7a631b..02f75050c061 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivity.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivity.java @@ -52,7 +52,7 @@ public class ForcedResizableInfoActivity extends Activity implements OnTouchList protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.forced_resizable_activity); - TextView tv = (TextView) findViewById(com.android.internal.R.id.message); + TextView tv = findViewById(com.android.internal.R.id.message); int reason = getIntent().getIntExtra(EXTRA_FORCED_RESIZEABLE_REASON, -1); String text; switch (reason) { diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java index 826fa6cefccc..f66db48f441c 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java @@ -16,8 +16,7 @@ package com.android.systemui.stackdivider; -import static com.android.systemui.stackdivider.ForcedResizableInfoActivity - .EXTRA_FORCED_RESIZEABLE_REASON; +import static com.android.systemui.stackdivider.ForcedResizableInfoActivity.EXTRA_FORCED_RESIZEABLE_REASON; import android.app.ActivityOptions; import android.content.Context; @@ -26,16 +25,9 @@ import android.os.Handler; import android.os.UserHandle; import android.util.ArraySet; import android.widget.Toast; - import com.android.systemui.R; -import com.android.systemui.recents.events.EventBus; -import com.android.systemui.recents.events.activity.AppTransitionFinishedEvent; -import com.android.systemui.recents.events.component.ShowUserToastEvent; -import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; -import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.shared.system.ActivityManagerWrapper; -import com.android.systemui.stackdivider.events.StartedDragingEvent; -import com.android.systemui.stackdivider.events.StoppedDragingEvent; +import com.android.systemui.shared.system.TaskStackChangeListener; /** * Controller that decides when to show the {@link ForcedResizableInfoActivity}. @@ -49,7 +41,7 @@ public class ForcedResizableInfoActivityController { private final Handler mHandler = new Handler(); private final ArraySet<PendingTaskRecord> mPendingTasks = new ArraySet<>(); private final ArraySet<String> mPackagesShownInSession = new ArraySet<>(); - private boolean mDividerDraging; + private boolean mDividerDragging; private final Runnable mTimeoutRunnable = new Runnable() { @Override @@ -75,9 +67,8 @@ public class ForcedResizableInfoActivityController { public ForcedResizableInfoActivityController(Context context) { mContext = context; - EventBus.getDefault().register(this); ActivityManagerWrapper.getInstance().registerTaskStackListener( - new SysUiTaskStackChangeListener() { + new TaskStackChangeListener() { @Override public void onActivityForcedResizable(String packageName, int taskId, int reason) { @@ -102,19 +93,19 @@ public class ForcedResizableInfoActivityController { } } - public final void onBusEvent(AppTransitionFinishedEvent event) { - if (!mDividerDraging) { + public void onAppTransitionFinished() { + if (!mDividerDragging) { showPending(); } } - public final void onBusEvent(StartedDragingEvent event) { - mDividerDraging = true; + void onDraggingStart() { + mDividerDragging = true; mHandler.removeCallbacks(mTimeoutRunnable); } - public final void onBusEvent(StoppedDragingEvent event) { - mDividerDraging = false; + void onDraggingEnd() { + mDividerDragging = false; showPending(); } @@ -127,13 +118,13 @@ public class ForcedResizableInfoActivityController { } private void activityDismissingDockedStack() { - EventBus.getDefault().send(new ShowUserToastEvent( - R.string.dock_non_resizeble_failed_to_dock_text, Toast.LENGTH_SHORT)); + Toast.makeText(mContext, R.string.dock_non_resizeble_failed_to_dock_text, + Toast.LENGTH_SHORT).show(); } private void activityLaunchOnSecondaryDisplayFailed() { - EventBus.getDefault().send(new ShowUserToastEvent( - R.string.activity_launch_on_secondary_display_failed_text, Toast.LENGTH_SHORT)); + Toast.makeText(mContext, R.string.activity_launch_on_secondary_display_failed_text, + Toast.LENGTH_SHORT).show(); } private void showPending() { diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/events/StartedDragingEvent.java b/packages/SystemUI/src/com/android/systemui/stackdivider/events/StartedDragingEvent.java deleted file mode 100644 index 5d1985123b32..000000000000 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/events/StartedDragingEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2016 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.systemui.stackdivider.events; - -import com.android.systemui.recents.events.EventBus; - -/** - * Sent when the divider is being draged either manually or by an animation. - */ -public class StartedDragingEvent extends EventBus.Event { -} diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/events/StoppedDragingEvent.java b/packages/SystemUI/src/com/android/systemui/stackdivider/events/StoppedDragingEvent.java deleted file mode 100644 index c50d6d62d6e9..000000000000 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/events/StoppedDragingEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2016 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.systemui.stackdivider.events; - -import com.android.systemui.recents.events.EventBus; - -/** - * Sent when the divider isn't draging anymore. - */ -public class StoppedDragingEvent extends EventBus.Event { -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java index 247e3d342bbb..00e0b954d7be 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java @@ -16,6 +16,10 @@ package com.android.systemui.statusbar; +import static android.content.Context.LAYOUT_INFLATER_SERVICE; +import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES; +import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; + import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AlertDialog; @@ -30,10 +34,10 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.ResolveInfo; import android.content.res.ColorStateList; -import android.graphics.drawable.Icon; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; import android.hardware.input.InputManager; import android.os.Handler; import android.os.Looper; @@ -51,29 +55,23 @@ import android.view.View; import android.view.View.AccessibilityDelegate; import android.view.ViewGroup; import android.view.Window; +import android.view.WindowManager; import android.view.WindowManager.KeyboardShortcutsReceiver; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; - import com.android.internal.app.AssistUtils; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.settingslib.Utils; import com.android.systemui.R; -import com.android.systemui.recents.misc.SystemServicesProxy; - import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; -import static android.content.Context.LAYOUT_INFLATER_SERVICE; -import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES; -import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; - /** * Contains functionality for handling keyboard shortcuts. */ @@ -372,19 +370,19 @@ public final class KeyboardShortcuts { private void showKeyboardShortcuts(int deviceId) { retrieveKeyCharacterMap(deviceId); - SystemServicesProxy.getInstance(mContext).requestKeyboardShortcuts(mContext, - new KeyboardShortcutsReceiver() { - @Override - public void onKeyboardShortcutsReceived( - final List<KeyboardShortcutGroup> result) { - result.add(getSystemShortcuts()); - final KeyboardShortcutGroup appShortcuts = getDefaultApplicationShortcuts(); - if (appShortcuts != null) { - result.add(appShortcuts); - } - showKeyboardShortcutsDialog(result); - } - }, deviceId); + WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); + wm.requestAppKeyboardShortcuts(new KeyboardShortcutsReceiver() { + @Override + public void onKeyboardShortcutsReceived( + final List<KeyboardShortcutGroup> result) { + result.add(getSystemShortcuts()); + final KeyboardShortcutGroup appShortcuts = getDefaultApplicationShortcuts(); + if (appShortcuts != null) { + result.add(appShortcuts); + } + showKeyboardShortcutsDialog(result); + } + }, deviceId); } private void dismissKeyboardShortcuts() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java index 2d03ed0ffe4f..2450e448c4f7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -35,8 +35,8 @@ import com.android.systemui.classifier.FalsingLog; import com.android.systemui.classifier.FalsingManager; import com.android.systemui.fragments.FragmentHostManager; import com.android.systemui.recents.Recents; -import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.car.hvac.HvacController; import com.android.systemui.statusbar.car.hvac.TemperatureView; @@ -460,16 +460,11 @@ public class CarStatusBar extends StatusBar implements } } - - public boolean hasDockedTask() { - return Recents.getSystemServices().hasDockedTask(); - } - /** - * An implementation of SysUiTaskStackChangeListener, that listens for changes in the system + * An implementation of TaskStackChangeListener, that listens for changes in the system * task stack and notifies the navigation bar. */ - private class TaskStackListenerImpl extends SysUiTaskStackChangeListener { + private class TaskStackListenerImpl extends TaskStackChangeListener { @Override public void onTaskStackChanged() { try { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java index d5a52740c6d4..a3e982e77522 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java @@ -35,6 +35,8 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; +import android.service.dreams.DreamService; +import android.service.dreams.IDreamManager; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationStats; import android.service.notification.StatusBarNotification; @@ -58,7 +60,6 @@ import com.android.systemui.EventLogTags; import com.android.systemui.ForegroundServiceController; import com.android.systemui.R; import com.android.systemui.UiOffloadThread; -import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.statusbar.NotificationLifetimeExtender; import com.android.systemui.statusbar.AlertingNotificationManager; import com.android.systemui.statusbar.AmbientPulseManager; @@ -127,11 +128,11 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. Dependency.get(NotificationListener.class); protected AmbientPulseManager mAmbientPulseManager = Dependency.get(AmbientPulseManager.class); + protected IDreamManager mDreamManager; protected IStatusBarService mBarService; protected NotificationPresenter mPresenter; protected Callback mCallback; protected PowerManager mPowerManager; - protected SystemServicesProxy mSystemServicesProxy; protected NotificationListenerService.RankingMap mLatestRankingMap; protected HeadsUpManager mHeadsUpManager; protected NotificationData mNotificationData; @@ -223,8 +224,9 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); + mDreamManager = IDreamManager.Stub.asInterface( + ServiceManager.checkService(DreamService.DREAM_SERVICE)); mMessagingUtil = new NotificationMessagingUtil(context); - mSystemServicesProxy = SystemServicesProxy.getInstance(mContext); mGroupManager.setPendingEntries(mPendingNotifications); } @@ -687,7 +689,13 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. } else { // Stop screensaver if the notification has a fullscreen intent. // (like an incoming phone call) - SystemServicesProxy.getInstance(mContext).awakenDreamsAsync(); + Dependency.get(UiOffloadThread.class).submit(() -> { + try { + mDreamManager.awaken(); + } catch (RemoteException e) { + e.printStackTrace(); + } + }); // not immersive & a fullscreen alert should be shown if (DEBUG) @@ -898,7 +906,13 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. return false; } - boolean inUse = mPowerManager.isScreenOn() && !mSystemServicesProxy.isDreaming(); + boolean isDreaming = false; + try { + isDreaming = mDreamManager.isDreaming(); + } catch (RemoteException e) { + Log.e(TAG, "Failed to query dream manager.", e); + } + boolean inUse = mPowerManager.isScreenOn() && !isDreaming; if (!inUse) { if (DEBUG) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java index cbbb0e3dea96..9c579daa38c6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java @@ -35,6 +35,7 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.annotation.IdRes; import android.annotation.Nullable; +import android.app.ActivityManager; import android.app.ActivityTaskManager; import android.app.Fragment; import android.app.IActivityManager; @@ -88,8 +89,8 @@ import com.android.systemui.assist.AssistManager; import com.android.systemui.fragments.FragmentHostManager; import com.android.systemui.fragments.FragmentHostManager.FragmentListener; import com.android.systemui.recents.Recents; -import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.stackdivider.Divider; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue.Callbacks; @@ -284,7 +285,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { mNavigationBarView = (NavigationBarView) view; mNavigationBarView.setDisabledFlags(mDisabledFlags1); - mNavigationBarView.setComponents(mRecents, mDivider, mStatusBar.getPanel()); + mNavigationBarView.setComponents(mStatusBar.getPanel()); mNavigationBarView.setOnVerticalChangedListener(this::onVerticalChanged); mNavigationBarView.setOnTouchListener(this::onNavigationTouch); if (savedInstanceState != null) { @@ -946,7 +947,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { private boolean onLongPressRecents() { if (mRecents == null || !ActivityTaskManager.supportsMultiWindow(getContext()) || !mDivider.getView().getSnapAlgorithm().isSplitScreenFeasible() - || Recents.getConfiguration().isLowRamDevice + || ActivityManager.isLowRamDeviceStatic() // If we are connected to the overview service, then disable the recents button || mOverviewProxyService.getProxy() != null) { return false; @@ -1110,7 +1111,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { } }; - class TaskStackListenerImpl extends SysUiTaskStackChangeListener { + class TaskStackListenerImpl extends TaskStackChangeListener { // Invalidate any rotation suggestion on task change or activity orientation change // Note: all callbacks happen on main thread diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java index 8c02e1f8220b..62d2099204e8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java @@ -16,93 +16,36 @@ package com.android.systemui.statusbar.phone; -import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT; -import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; -import static android.view.WindowManager.DOCKED_INVALID; -import static android.view.WindowManager.DOCKED_LEFT; -import static android.view.WindowManager.DOCKED_TOP; - -import android.app.ActivityManager; import android.content.Context; -import android.content.res.Resources; import android.graphics.Canvas; -import android.graphics.Rect; import android.view.MotionEvent; -import android.view.VelocityTracker; import android.view.View; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.internal.policy.DividerSnapAlgorithm.SnapTarget; -import com.android.systemui.Dependency; -import com.android.systemui.R; -import com.android.systemui.RecentsComponent; import com.android.systemui.SysUiServiceProvider; import com.android.systemui.plugins.statusbar.phone.NavGesture.GestureHelper; -import com.android.systemui.stackdivider.Divider; -import com.android.systemui.tuner.TunerService; /** - * Class to detect gestures on the navigation bar. + * TODO: Remove and replace with QuickStepController */ -public class NavigationBarGestureHelper implements TunerService.Tunable, GestureHelper { - - private static final String TAG = "NavBarGestureHelper"; - private static final String KEY_DOCK_WINDOW_GESTURE = "overview_nav_bar_gesture"; - /** - * When dragging from the navigation bar, we drag in recents. - */ - public static final int DRAG_MODE_NONE = -1; - - /** - * When dragging from the navigation bar, we drag in recents. - */ - public static final int DRAG_MODE_RECENTS = 0; +public class NavigationBarGestureHelper implements GestureHelper { - /** - * When dragging from the navigation bar, we drag the divider. - */ - public static final int DRAG_MODE_DIVIDER = 1; + private static final String TAG = "NavigationBarGestureHelper"; - private RecentsComponent mRecentsComponent; - private Divider mDivider; - private Context mContext; private NavigationBarView mNavigationBarView; - private boolean mIsVertical; private final QuickStepController mQuickStepController; - private final int mScrollTouchSlop; private final StatusBar mStatusBar; - private int mTouchDownX; - private int mTouchDownY; - private boolean mDownOnRecents; - private VelocityTracker mVelocityTracker; - - private boolean mDockWindowEnabled; - private boolean mDockWindowTouchSlopExceeded; - private int mDragMode; public NavigationBarGestureHelper(Context context) { - mContext = context; mStatusBar = SysUiServiceProvider.getComponent(context, StatusBar.class); - Resources r = context.getResources(); - mScrollTouchSlop = r.getDimensionPixelSize(R.dimen.navigation_bar_min_swipe_distance); mQuickStepController = new QuickStepController(context); - Dependency.get(TunerService.class).addTunable(this, KEY_DOCK_WINDOW_GESTURE); } - public void destroy() { - Dependency.get(TunerService.class).removeTunable(this); - } - - public void setComponents(RecentsComponent recentsComponent, Divider divider, - NavigationBarView navigationBarView) { - mRecentsComponent = recentsComponent; - mDivider = divider; + public void setComponents(NavigationBarView navigationBarView) { mNavigationBarView = navigationBarView; mQuickStepController.setComponents(mNavigationBarView); } public void setBarState(boolean isVertical, boolean isRTL) { - mIsVertical = isVertical; mQuickStepController.setBarState(isVertical, isRTL); } @@ -110,22 +53,14 @@ public class NavigationBarGestureHelper implements TunerService.Tunable, Gesture if (!canHandleGestures()) { return false; } - boolean result = mQuickStepController.onInterceptTouchEvent(event); - if (mDockWindowEnabled) { - result |= interceptDockWindowEvent(event); - } - return result; + return mQuickStepController.onInterceptTouchEvent(event); } public boolean onTouchEvent(MotionEvent event) { if (!canHandleGestures()) { return false; } - boolean result = mQuickStepController.onTouchEvent(event); - if (mDockWindowEnabled) { - result |= handleDockWindowEvent(event); - } - return result; + return mQuickStepController.onTouchEvent(event); } public void onDraw(Canvas canvas) { @@ -144,152 +79,7 @@ public class NavigationBarGestureHelper implements TunerService.Tunable, Gesture mQuickStepController.onNavigationButtonLongPress(v); } - private boolean interceptDockWindowEvent(MotionEvent event) { - switch (event.getActionMasked()) { - case MotionEvent.ACTION_DOWN: - handleDragActionDownEvent(event); - break; - case MotionEvent.ACTION_MOVE: - return handleDragActionMoveEvent(event); - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_CANCEL: - handleDragActionUpEvent(event); - break; - } - return false; - } - - private boolean handleDockWindowEvent(MotionEvent event) { - switch (event.getActionMasked()) { - case MotionEvent.ACTION_DOWN: - handleDragActionDownEvent(event); - break; - case MotionEvent.ACTION_MOVE: - handleDragActionMoveEvent(event); - break; - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_CANCEL: - handleDragActionUpEvent(event); - break; - } - return true; - } - - private void handleDragActionDownEvent(MotionEvent event) { - mVelocityTracker = VelocityTracker.obtain(); - mVelocityTracker.addMovement(event); - mDockWindowTouchSlopExceeded = false; - mTouchDownX = (int) event.getX(); - mTouchDownY = (int) event.getY(); - - if (mNavigationBarView != null) { - View recentsButton = mNavigationBarView.getRecentsButton().getCurrentView(); - if (recentsButton != null) { - mDownOnRecents = mTouchDownX >= recentsButton.getLeft() - && mTouchDownX <= recentsButton.getRight() - && mTouchDownY >= recentsButton.getTop() - && mTouchDownY <= recentsButton.getBottom(); - } else { - mDownOnRecents = false; - } - } - } - - private boolean handleDragActionMoveEvent(MotionEvent event) { - mVelocityTracker.addMovement(event); - int x = (int) event.getX(); - int y = (int) event.getY(); - int xDiff = Math.abs(x - mTouchDownX); - int yDiff = Math.abs(y - mTouchDownY); - if (mDivider == null || mRecentsComponent == null) { - return false; - } - if (!mDockWindowTouchSlopExceeded) { - boolean touchSlopExceeded = !mIsVertical - ? yDiff > mScrollTouchSlop && yDiff > xDiff - : xDiff > mScrollTouchSlop && xDiff > yDiff; - if (mDownOnRecents && touchSlopExceeded - && mDivider.getView().getWindowManagerProxy().getDockSide() == DOCKED_INVALID) { - Rect initialBounds = null; - int dragMode = calculateDragMode(); - int createMode = SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; - if (dragMode == DRAG_MODE_DIVIDER) { - initialBounds = new Rect(); - mDivider.getView().calculateBoundsForPosition(mIsVertical - ? (int) event.getRawX() - : (int) event.getRawY(), - mDivider.getView().isHorizontalDivision() - ? DOCKED_TOP - : DOCKED_LEFT, - initialBounds); - } else if (dragMode == DRAG_MODE_RECENTS && mTouchDownX - < mContext.getResources().getDisplayMetrics().widthPixels / 2) { - createMode = SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT; - } - boolean docked = mRecentsComponent.splitPrimaryTask(dragMode, createMode, - initialBounds, MetricsEvent.ACTION_WINDOW_DOCK_SWIPE); - if (docked) { - mDragMode = dragMode; - if (mDragMode == DRAG_MODE_DIVIDER) { - mDivider.getView().startDragging(false /* animate */, true /* touching*/); - } - mDockWindowTouchSlopExceeded = true; - return true; - } - } - } else { - if (mDragMode == DRAG_MODE_DIVIDER) { - int position = !mIsVertical ? (int) event.getRawY() : (int) event.getRawX(); - SnapTarget snapTarget = mDivider.getView().getSnapAlgorithm() - .calculateSnapTarget(position, 0f /* velocity */, false /* hardDismiss */); - mDivider.getView().resizeStack(position, snapTarget.position, snapTarget); - } else if (mDragMode == DRAG_MODE_RECENTS) { - mRecentsComponent.onDraggingInRecents(event.getRawY()); - } - } - return false; - } - - private void handleDragActionUpEvent(MotionEvent event) { - mVelocityTracker.addMovement(event); - mVelocityTracker.computeCurrentVelocity(1000); - if (mDockWindowTouchSlopExceeded && mDivider != null && mRecentsComponent != null) { - if (mDragMode == DRAG_MODE_DIVIDER) { - mDivider.getView().stopDragging(mIsVertical - ? (int) event.getRawX() - : (int) event.getRawY(), - mIsVertical - ? mVelocityTracker.getXVelocity() - : mVelocityTracker.getYVelocity(), - true /* avoidDismissStart */, false /* logMetrics */); - } else if (mDragMode == DRAG_MODE_RECENTS) { - mRecentsComponent.onDraggingInRecentsEnded(mVelocityTracker.getYVelocity()); - } - } - mVelocityTracker.recycle(); - mVelocityTracker = null; - } - private boolean canHandleGestures() { return !mStatusBar.isKeyguardShowing(); } - - private int calculateDragMode() { - if (mIsVertical && !mDivider.getView().isHorizontalDivision()) { - return DRAG_MODE_DIVIDER; - } - if (!mIsVertical && mDivider.getView().isHorizontalDivision()) { - return DRAG_MODE_DIVIDER; - } - return DRAG_MODE_RECENTS; - } - - @Override - public void onTuningChanged(String key, String newValue) { - switch (key) { - case KEY_DOCK_WINDOW_GESTURE: - mDockWindowEnabled = newValue != null && (Integer.parseInt(newValue) != 0); - break; - } - } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 71b35e043f77..e5c910069f82 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -144,8 +144,6 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav private Configuration mConfiguration; private NavigationBarInflaterView mNavigationInflaterView; - private RecentsComponent mRecentsComponent; - private Divider mDivider; private RecentsOnboarding mRecentsOnboarding; private NotificationPanelView mPanelView; @@ -314,14 +312,10 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav return mBarTransitions.getLightTransitionsController(); } - public void setComponents(RecentsComponent recentsComponent, Divider divider, - NotificationPanelView panel) { - mRecentsComponent = recentsComponent; - mDivider = divider; + public void setComponents(NotificationPanelView panel) { mPanelView = panel; if (mGestureHelper instanceof NavigationBarGestureHelper) { - ((NavigationBarGestureHelper) mGestureHelper).setComponents( - recentsComponent, divider, this); + ((NavigationBarGestureHelper) mGestureHelper).setComponents(this); } } @@ -1078,7 +1072,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav @Override public void onPluginDisconnected(NavGesture plugin) { NavigationBarGestureHelper defaultHelper = new NavigationBarGestureHelper(getContext()); - defaultHelper.setComponents(mRecentsComponent, mDivider, this); + defaultHelper.setComponents(this); if (mGestureHelper != null) { mGestureHelper.destroy(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index 1afdc66b9227..553165b40153 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -67,8 +67,8 @@ import com.android.systemui.SysUiServiceProvider; import com.android.systemui.UiOffloadThread; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.qs.tiles.RotationLockTile; -import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue.Callbacks; import com.android.systemui.statusbar.policy.BluetoothController; @@ -797,7 +797,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mIconController.setIconVisibility(mSlotDataSaver, isDataSaving); } - private final SysUiTaskStackChangeListener mTaskListener = new SysUiTaskStackChangeListener() { + private final TaskStackChangeListener mTaskListener = new TaskStackChangeListener() { @Override public void onTaskStackChanged() { // Listen for changes to stacks and then check which instant apps are foreground. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index ff38380b7aa8..226b6453dbab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -102,6 +102,8 @@ import android.os.UserManager; import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings; +import android.service.dreams.DreamService; +import android.service.dreams.IDreamManager; import android.service.notification.StatusBarNotification; import android.service.vr.IVrManager; import android.service.vr.IVrStateCallbacks; @@ -154,6 +156,7 @@ import com.android.systemui.Interpolators; import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.RecentsComponent; +import com.android.systemui.SysUiServiceProvider; import com.android.systemui.SystemUI; import com.android.systemui.SystemUIFactory; import com.android.systemui.UiOffloadThread; @@ -179,10 +182,6 @@ import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.car.CarQSFragment; import com.android.systemui.recents.Recents; import com.android.systemui.recents.ScreenPinningRequest; -import com.android.systemui.recents.events.EventBus; -import com.android.systemui.recents.events.activity.AppTransitionFinishedEvent; -import com.android.systemui.recents.events.activity.UndockingTaskEvent; -import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.shared.system.WindowManagerWrapper; import com.android.systemui.stackdivider.Divider; import com.android.systemui.stackdivider.WindowManagerProxy; @@ -635,6 +634,8 @@ public class StatusBar extends SystemUI implements DemoMode, mStatusBarStateController.addListener(this, StatusBarStateController.RANK_STATUS_BAR); mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); + mDreamManager = IDreamManager.Stub.asInterface( + ServiceManager.checkService(DreamService.DREAM_SERVICE)); mDisplay = mWindowManager.getDefaultDisplay(); updateDisplaySize(); @@ -1214,17 +1215,18 @@ public class StatusBar extends SystemUI implements DemoMode, int createMode = navbarPos == NAV_BAR_POS_LEFT ? SPLIT_SCREEN_CREATE_MODE_BOTTOM_OR_RIGHT : SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; - return mRecents.splitPrimaryTask(NavigationBarGestureHelper.DRAG_MODE_NONE, createMode, - null, metricsDockAction); + return mRecents.splitPrimaryTask(createMode, null, metricsDockAction); } else { Divider divider = getComponent(Divider.class); - if (divider != null && divider.isMinimized() && !divider.isHomeStackResizable()) { - // Undocking from the minimized state is not supported - return false; - } else { - EventBus.getDefault().send(new UndockingTaskEvent()); - if (metricsUndockAction != -1) { - mMetricsLogger.action(metricsUndockAction); + if (divider != null) { + if (divider.isMinimized() && !divider.isHomeStackResizable()) { + // Undocking from the minimized state is not supported + return false; + } else { + divider.onUndockingTask(); + if (metricsUndockAction != -1) { + mMetricsLogger.action(metricsUndockAction); + } } } } @@ -4246,12 +4248,12 @@ public class StatusBar extends SystemUI implements DemoMode, @Override public void appTransitionCancelled() { - EventBus.getDefault().send(new AppTransitionFinishedEvent()); + getComponent(Divider.class).onAppTransitionFinished(); } @Override public void appTransitionFinished() { - EventBus.getDefault().send(new AppTransitionFinishedEvent()); + getComponent(Divider.class).onAppTransitionFinished(); } @Override @@ -4663,6 +4665,7 @@ public class StatusBar extends SystemUI implements DemoMode, protected WindowManager mWindowManager; protected IWindowManager mWindowManagerService; + private IDreamManager mDreamManager; protected Display mDisplay; @@ -4967,7 +4970,13 @@ public class StatusBar extends SystemUI implements DemoMode, } void awakenDreams() { - SystemServicesProxy.getInstance(mContext).awakenDreamsAsync(); + Dependency.get(UiOffloadThread.class).submit(() -> { + try { + mDreamManager.awaken(); + } catch (RemoteException e) { + e.printStackTrace(); + } + }); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java index f8aa28dbb945..199c4c283452 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java @@ -40,9 +40,9 @@ import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; import com.android.systemui.SysuiTestCase; -import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; import com.android.systemui.shared.system.ActivityManagerWrapper; +import com.android.systemui.shared.system.TaskStackChangeListener; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -65,7 +65,7 @@ public class WorkLockActivityControllerTest extends SysuiTestCase { private @Mock IActivityTaskManager mIActivityTaskManager; private WorkLockActivityController mController; - private SysUiTaskStackChangeListener mTaskStackListener; + private TaskStackChangeListener mTaskStackListener; @Before public void setUp() throws Exception { @@ -75,8 +75,8 @@ public class WorkLockActivityControllerTest extends SysuiTestCase { doReturn("com.example.test").when(mContext).getPackageName(); // Construct controller. Save the TaskStackListener for injecting events. - final ArgumentCaptor<SysUiTaskStackChangeListener> listenerCaptor = - ArgumentCaptor.forClass(SysUiTaskStackChangeListener.class); + final ArgumentCaptor<TaskStackChangeListener> listenerCaptor = + ArgumentCaptor.forClass(TaskStackChangeListener.class); mController = new WorkLockActivityController(mContext, mActivityManager, mIActivityTaskManager); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index 1e3d42ba6ede..b545e61a446a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -32,6 +32,7 @@ import android.os.Handler; import android.os.IPowerManager; import android.os.Looper; import android.os.PowerManager; +import android.service.dreams.IDreamManager; import android.support.test.annotation.UiThreadTest; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; @@ -39,7 +40,6 @@ import android.support.test.runner.AndroidJUnit4; import com.android.systemui.ExpandHelper; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; -import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.statusbar.EmptyShadeView; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.NotificationPresenter; @@ -91,7 +91,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { @Mock private NotificationData mNotificationData; @Mock private NotificationRemoteInputManager mRemoteInputManager; @Mock private RemoteInputController mRemoteInputController; - @Mock private SystemServicesProxy mSystemServicesProxy; + @Mock private IDreamManager mDreamManager; private PowerManager mPowerManager; private TestableNotificationEntryManager mEntryManager; @@ -111,7 +111,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { mPowerManager = new PowerManager(mContext, powerManagerService, Handler.createAsync(Looper.myLooper())); - mEntryManager = new TestableNotificationEntryManager(mSystemServicesProxy, mPowerManager, + mEntryManager = new TestableNotificationEntryManager(mDreamManager, mPowerManager, mContext); mEntryManager.setUpForTest(mock(NotificationPresenter.class), null, null, mHeadsUpManager, mNotificationData); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index 5006b0b29b0c..da93327061a8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -50,6 +50,7 @@ import android.os.Looper; import android.os.PowerManager; import android.os.RemoteException; import android.os.UserHandle; +import android.service.dreams.IDreamManager; import android.service.notification.StatusBarNotification; import android.support.test.filters.SmallTest; import android.support.test.metricshelper.MetricsAsserts; @@ -119,9 +120,9 @@ public class StatusBarTest extends SysuiTestCase { @Mock private KeyguardIndicationController mKeyguardIndicationController; @Mock private NotificationStackScrollLayout mStackScroller; @Mock private HeadsUpManagerPhone mHeadsUpManager; - @Mock private SystemServicesProxy mSystemServicesProxy; @Mock private NotificationPanelView mNotificationPanelView; @Mock private IStatusBarService mBarService; + @Mock private IDreamManager mDreamManager; @Mock private ScrimController mScrimController; @Mock private ArrayList<Entry> mNotificationList; @Mock private BiometricUnlockController mBiometricUnlockController; @@ -194,8 +195,7 @@ public class StatusBarTest extends SysuiTestCase { return null; }).when(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any()); - mEntryManager = new TestableNotificationEntryManager(mSystemServicesProxy, mPowerManager, - mContext); + mEntryManager = new TestableNotificationEntryManager(mDreamManager, mPowerManager, mContext); when(mRemoteInputManager.getController()).thenReturn(mRemoteInputController); mStatusBar = new TestableStatusBar(mStatusBarKeyguardViewManager, mUnlockMethodCache, mKeyguardIndicationController, mStackScroller, mHeadsUpManager, @@ -358,12 +358,12 @@ public class StatusBarTest extends SysuiTestCase { } @Test - public void testShouldHeadsUp_nonSuppressedGroupSummary() { + public void testShouldHeadsUp_nonSuppressedGroupSummary() throws Exception { when(mPowerManager.isScreenOn()).thenReturn(true); when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false); when(mNotificationData.shouldSuppressStatusBar(any())).thenReturn(false); when(mNotificationData.shouldFilterOut(any())).thenReturn(false); - when(mSystemServicesProxy.isDreaming()).thenReturn(false); + when(mDreamManager.isDreaming()).thenReturn(false); when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH); Notification n = new Notification.Builder(getContext(), "a") @@ -379,12 +379,12 @@ public class StatusBarTest extends SysuiTestCase { } @Test - public void testShouldHeadsUp_suppressedGroupSummary() { + public void testShouldHeadsUp_suppressedGroupSummary() throws Exception { when(mPowerManager.isScreenOn()).thenReturn(true); when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false); when(mNotificationData.shouldSuppressStatusBar(any())).thenReturn(false); when(mNotificationData.shouldFilterOut(any())).thenReturn(false); - when(mSystemServicesProxy.isDreaming()).thenReturn(false); + when(mDreamManager.isDreaming()).thenReturn(false); when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH); Notification n = new Notification.Builder(getContext(), "a") @@ -400,11 +400,11 @@ public class StatusBarTest extends SysuiTestCase { } @Test - public void testShouldHeadsUp_suppressedHeadsUp() { + public void testShouldHeadsUp_suppressedHeadsUp() throws Exception { when(mPowerManager.isScreenOn()).thenReturn(true); when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false); when(mNotificationData.shouldFilterOut(any())).thenReturn(false); - when(mSystemServicesProxy.isDreaming()).thenReturn(false); + when(mDreamManager.isDreaming()).thenReturn(false); when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH); when(mNotificationData.shouldSuppressPeek(any())).thenReturn(true); @@ -418,11 +418,11 @@ public class StatusBarTest extends SysuiTestCase { } @Test - public void testShouldHeadsUp_noSuppressedHeadsUp() { + public void testShouldHeadsUp_noSuppressedHeadsUp() throws Exception { when(mPowerManager.isScreenOn()).thenReturn(true); when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false); when(mNotificationData.shouldFilterOut(any())).thenReturn(false); - when(mSystemServicesProxy.isDreaming()).thenReturn(false); + when(mDreamManager.isDreaming()).thenReturn(false); when(mNotificationData.getImportance(any())).thenReturn(IMPORTANCE_HIGH); when(mNotificationData.shouldSuppressPeek(any())).thenReturn(false); @@ -690,10 +690,10 @@ public class StatusBarTest extends SysuiTestCase { public static class TestableNotificationEntryManager extends NotificationEntryManager { - public TestableNotificationEntryManager(SystemServicesProxy systemServicesProxy, + public TestableNotificationEntryManager(IDreamManager dreamManager, PowerManager powerManager, Context context) { super(context); - mSystemServicesProxy = systemServicesProxy; + mDreamManager = dreamManager; mPowerManager = powerManager; } |