diff options
| author | 2022-12-07 03:51:55 +0000 | |
|---|---|---|
| committer | 2022-12-07 03:51:55 +0000 | |
| commit | a1e0b9465b7856f861e4fb428b4a411edefb881c (patch) | |
| tree | 471ded0b531e04611639ba53923b6809a5622a91 | |
| parent | 0de589346f7cc6ae7d5b3bcd991b05fb4759df4c (diff) | |
| parent | 054f7d809072214b7bafdf92d62ef3bd5754e01b (diff) | |
Merge "Map split from the current running app to META+CTRL+DPAD_LEFT and META+CTRL+DPAD_RIGHT" into tm-qpr-dev
6 files changed, 74 insertions, 1 deletions
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl index 2cf41bbfffc1..017bf3f3dd6c 100644 --- a/core/java/com/android/internal/statusbar/IStatusBar.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl @@ -331,4 +331,11 @@ oneway interface IStatusBar /** Called when requested to go to fullscreen from the active split app. */ void goToFullscreenFromSplit(); + + /** + * Enters stage split from a current running app. + * + * @param leftOrTop indicates where the stage split is. + */ + void enterStageSplitFromRunningApp(boolean leftOrTop); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java index 547b496beaff..00d129ae70ca 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java @@ -565,13 +565,25 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis statusBarWinController.registerCallback(mStatusBarWindowCallback); mScreenshotHelper = new ScreenshotHelper(context); - // Listen for tracing state changes commandQueue.addCallback(new CommandQueue.Callbacks() { + + // Listen for tracing state changes @Override public void onTracingStateChanged(boolean enabled) { mSysUiState.setFlag(SYSUI_STATE_TRACING_ENABLED, enabled) .commitUpdate(mContext.getDisplayId()); } + + @Override + public void enterStageSplitFromRunningApp(boolean leftOrTop) { + if (mOverviewProxy != null) { + try { + mOverviewProxy.enterStageSplitFromRunningApp(leftOrTop); + } catch (RemoteException e) { + Log.w(TAG_OPS, "Unable to enter stage split from the current running app"); + } + } + } }); mCommandQueue = commandQueue; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index d000e6e75eed..750d00466a8d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -167,6 +167,7 @@ public class CommandQueue extends IStatusBar.Stub implements private static final int MSG_TILE_SERVICE_REQUEST_LISTENING_STATE = 68 << MSG_SHIFT; private static final int MSG_SHOW_REAR_DISPLAY_DIALOG = 69 << MSG_SHIFT; private static final int MSG_GO_TO_FULLSCREEN_FROM_SPLIT = 70 << MSG_SHIFT; + private static final int MSG_ENTER_STAGE_SPLIT_FROM_RUNNING_APP = 71 << MSG_SHIFT; public static final int FLAG_EXCLUDE_NONE = 0; public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0; @@ -486,6 +487,11 @@ public class CommandQueue extends IStatusBar.Stub implements * @see IStatusBar#goToFullscreenFromSplit */ default void goToFullscreenFromSplit() {} + + /** + * @see IStatusBar#enterStageSplitFromRunningApp + */ + default void enterStageSplitFromRunningApp(boolean leftOrTop) {} } public CommandQueue(Context context) { @@ -1248,6 +1254,14 @@ public class CommandQueue extends IStatusBar.Stub implements } @Override + public void enterStageSplitFromRunningApp(boolean leftOrTop) { + synchronized (mLock) { + mHandler.obtainMessage(MSG_ENTER_STAGE_SPLIT_FROM_RUNNING_APP, + leftOrTop).sendToTarget(); + } + } + + @Override public void requestAddTile( @NonNull ComponentName componentName, @NonNull CharSequence appName, @@ -1758,6 +1772,11 @@ public class CommandQueue extends IStatusBar.Stub implements mCallbacks.get(i).goToFullscreenFromSplit(); } break; + case MSG_ENTER_STAGE_SPLIT_FROM_RUNNING_APP: + for (int i = 0; i < mCallbacks.size(); i++) { + mCallbacks.get(i).enterStageSplitFromRunningApp((Boolean) msg.obj); + } + break; } } } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index a4c9684af418..6d5da3254eac 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -2873,6 +2873,18 @@ public class PhoneWindowManager implements WindowManagerPolicy { return key_consumed; } break; + case KeyEvent.KEYCODE_DPAD_LEFT: + if (down && event.isMetaPressed() && event.isCtrlPressed() && repeatCount == 0) { + enterStageSplitFromRunningApp(true /* leftOrTop */); + return key_consumed; + } + break; + case KeyEvent.KEYCODE_DPAD_RIGHT: + if (down && event.isMetaPressed() && event.isCtrlPressed() && repeatCount == 0) { + enterStageSplitFromRunningApp(false /* leftOrTop */); + return key_consumed; + } + break; case KeyEvent.KEYCODE_SLASH: if (down && repeatCount == 0 && event.isMetaPressed() && !keyguardOn) { toggleKeyboardShortcutsMenu(event.getDeviceId()); @@ -3489,6 +3501,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } + private void enterStageSplitFromRunningApp(boolean leftOrTop) { + StatusBarManagerInternal statusbar = getStatusBarManagerInternal(); + if (statusbar != null) { + statusbar.enterStageSplitFromRunningApp(leftOrTop); + } + } + void launchHomeFromHotKey(int displayId) { launchHomeFromHotKey(displayId, true /* awakenFromDreams */, true /*respectKeyguard*/); } diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java index 9957140162a0..e7221c850da8 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java @@ -184,4 +184,11 @@ public interface StatusBarManagerInternal { * Called when requested to go to fullscreen from the active split app. */ void goToFullscreenFromSplit(); + + /** + * Enters stage split from a current running app. + * + * @see com.android.internal.statusbar.IStatusBar#enterStageSplitFromRunningApp + */ + void enterStageSplitFromRunningApp(boolean leftOrTop); } diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index 5a91dc6ef8d9..45748e6ce76d 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -705,6 +705,15 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D } catch (RemoteException ex) { } } } + + @Override + public void enterStageSplitFromRunningApp(boolean leftOrTop) { + if (mBar != null) { + try { + mBar.enterStageSplitFromRunningApp(leftOrTop); + } catch (RemoteException ex) { } + } + } }; private final GlobalActionsProvider mGlobalActionsProvider = new GlobalActionsProvider() { |