diff options
4 files changed, 38 insertions, 0 deletions
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl index bab0306aaf9f..5ec90941aa88 100644 --- a/core/java/com/android/internal/statusbar/IStatusBar.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl @@ -113,6 +113,11 @@ oneway interface IStatusBar void showGlobalActionsMenu(); /** + * Notifies the status bar that a new rotation suggestion is available. + */ + void onProposedRotationChanged(int rotation); + + /** * Set whether the top app currently hides the statusbar. * * @param hidesStatusBar whether it is being hidden diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index 634927503747..8e1b10432a3d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -82,6 +82,7 @@ public class CommandQueue extends IStatusBar.Stub { private static final int MSG_TOGGLE_PANEL = 35 << MSG_SHIFT; private static final int MSG_SHOW_SHUTDOWN_UI = 36 << MSG_SHIFT; private static final int MSG_SET_TOP_APP_HIDES_STATUS_BAR = 37 << MSG_SHIFT; + private static final int MSG_ROTATION_PROPOSAL = 38 << MSG_SHIFT; public static final int FLAG_EXCLUDE_NONE = 0; public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0; @@ -142,6 +143,8 @@ public class CommandQueue extends IStatusBar.Stub { default void handleSystemKey(int arg1) { } default void handleShowGlobalActionsMenu() { } default void handleShowShutdownUi(boolean isReboot, String reason) { } + + default void onRotationProposal(int rotation) { } } @VisibleForTesting @@ -458,6 +461,15 @@ public class CommandQueue extends IStatusBar.Stub { } } + @Override + public void onProposedRotationChanged(int rotation) { + synchronized (mLock) { + mHandler.removeMessages(MSG_ROTATION_PROPOSAL); + mHandler.obtainMessage(MSG_ROTATION_PROPOSAL, rotation, 0, + null).sendToTarget(); + } + } + private final class H extends Handler { private H(Looper l) { super(l); @@ -654,6 +666,11 @@ public class CommandQueue extends IStatusBar.Stub { mCallbacks.get(i).setTopAppHidesStatusBar(msg.arg1 != 0); } break; + case MSG_ROTATION_PROPOSAL: + for (int i = 0; i < mCallbacks.size(); i++) { + mCallbacks.get(i).onRotationProposal(msg.arg1); + } + break; } } } diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java index b07fe98d806e..3792bc6777ed 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java @@ -90,6 +90,13 @@ public interface StatusBarManagerInternal { boolean showShutdownUi(boolean isReboot, String requestString); + /** + * Show a rotation suggestion that a user may approve to rotate the screen. + * + * @param rotation rotation suggestion + */ + void onProposedRotationChanged(int rotation); + public interface GlobalActionsListener { /** * Called when sysui starts and connects its status bar, or when the status bar binder diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index c78a3406d0ac..c7c03b48a778 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -406,6 +406,15 @@ public class StatusBarManagerService extends IStatusBarService.Stub { } return false; } + + @Override + public void onProposedRotationChanged(int rotation) { + if (mBar != null){ + try { + mBar.onProposedRotationChanged(rotation); + } catch (RemoteException ex) {} + } + } }; // ================================================================================ |