summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kenneth Ford <kennethford@google.com> 2022-11-19 04:16:15 +0000
committer Kenneth Ford <kennethford@google.com> 2022-11-22 17:47:40 +0000
commitb8bb4dd9068b701693e86b62b404bbbd946ea047 (patch)
tree32f388c6d42b4083728c48deafdaa244cf38d17c
parent837507ea200734ee8e67b138afffa7e243023d9f (diff)
Add rear display dialog methods to CommandQueue and StatusBarService
Creates new methods through CommandQueue and StatusBarService to allow DeviceStateManagerService to notify SystemUI to show the rear display education dialog Bug: 207686851 Test: CommandQueueTest Change-Id: I65e22a9940a866bb62b597f5cd4f6ce81d891e12 Merged-In: I65e22a9940a866bb62b597f5cd4f6ce81d891e12
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBar.aidl3
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBarService.aidl3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java17
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java8
-rw-r--r--services/core/java/com/android/server/devicestate/DeviceStateManagerService.java22
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java7
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerService.java29
7 files changed, 75 insertions, 14 deletions
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 1d4b246de5c8..56e1a872423d 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -325,4 +325,7 @@ oneway interface IStatusBar
/** Dump protos from SystemUI. The proto definition is defined there */
void dumpProto(in String[] args, in ParcelFileDescriptor pfd);
+
+ /** Shows rear display educational dialog */
+ void showRearDisplayDialog(int currentBaseState);
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index ef8f2db5ff57..e140ce88bf28 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -226,4 +226,7 @@ interface IStatusBarService
/** Unregisters a nearby media devices provider. */
void unregisterNearbyMediaDevicesProvider(in INearbyMediaDevicesProvider provider);
+
+ /** Shows rear display educational dialog */
+ void showRearDisplayDialog(int currentBaseState);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index e6d7e4124d01..426d4fcbb27d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -165,6 +165,7 @@ public class CommandQueue extends IStatusBar.Stub implements
private static final int MSG_REGISTER_NEARBY_MEDIA_DEVICE_PROVIDER = 66 << MSG_SHIFT;
private static final int MSG_UNREGISTER_NEARBY_MEDIA_DEVICE_PROVIDER = 67 << MSG_SHIFT;
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;
public static final int FLAG_EXCLUDE_NONE = 0;
public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0;
@@ -474,6 +475,11 @@ public class CommandQueue extends IStatusBar.Stub implements
*/
default void unregisterNearbyMediaDevicesProvider(
@NonNull INearbyMediaDevicesProvider provider) {}
+
+ /**
+ * @see IStatusBar#showRearDisplayDialog
+ */
+ default void showRearDisplayDialog(int currentBaseState) {}
}
public CommandQueue(Context context) {
@@ -1229,6 +1235,13 @@ public class CommandQueue extends IStatusBar.Stub implements
}
@Override
+ public void showRearDisplayDialog(int currentBaseState) {
+ synchronized (mLock) {
+ mHandler.obtainMessage(MSG_SHOW_REAR_DISPLAY_DIALOG, currentBaseState).sendToTarget();
+ }
+ }
+
+ @Override
public void requestAddTile(
@NonNull ComponentName componentName,
@NonNull CharSequence appName,
@@ -1724,6 +1737,10 @@ public class CommandQueue extends IStatusBar.Stub implements
mCallbacks.get(i).requestTileServiceListeningState(component);
}
break;
+ case MSG_SHOW_REAR_DISPLAY_DIALOG:
+ for (int i = 0; i < mCallbacks.size(); i++) {
+ mCallbacks.get(i).showRearDisplayDialog((Integer) msg.obj);
+ }
}
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
index cf7f8dd26647..42bc7948caf4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
@@ -519,4 +519,12 @@ public class CommandQueueTest extends SysuiTestCase {
waitForIdleSync();
verify(mCallbacks).setNavigationBarLumaSamplingEnabled(eq(1), eq(true));
}
+
+ @Test
+ public void testShowRearDisplayDialog() {
+ final int currentBaseState = 1;
+ mCommandQueue.showRearDisplayDialog(currentBaseState);
+ waitForIdleSync();
+ verify(mCallbacks).showRearDisplayDialog(eq(currentBaseState));
+ }
}
diff --git a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java
index 925fc21737e5..c856cabdc967 100644
--- a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java
+++ b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java
@@ -17,10 +17,7 @@
package com.android.server.devicestate;
import static android.Manifest.permission.CONTROL_DEVICE_STATE;
-import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
-import static android.hardware.devicestate.DeviceStateManager.ACTION_SHOW_REAR_DISPLAY_OVERLAY;
-import static android.hardware.devicestate.DeviceStateManager.EXTRA_ORIGINAL_DEVICE_BASE_STATE;
import static android.hardware.devicestate.DeviceStateManager.INVALID_DEVICE_STATE;
import static android.hardware.devicestate.DeviceStateManager.MAXIMUM_DEVICE_STATE;
import static android.hardware.devicestate.DeviceStateManager.MINIMUM_DEVICE_STATE;
@@ -36,10 +33,7 @@ import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.ActivityOptions;
-import android.app.WindowConfiguration;
import android.content.Context;
-import android.content.Intent;
import android.hardware.devicestate.DeviceStateInfo;
import android.hardware.devicestate.DeviceStateManager;
import android.hardware.devicestate.DeviceStateManagerInternal;
@@ -64,6 +58,7 @@ import com.android.internal.util.FrameworkStatsLog;
import com.android.server.DisplayThread;
import com.android.server.LocalServices;
import com.android.server.SystemService;
+import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.WindowProcessController;
@@ -731,19 +726,18 @@ public final class DeviceStateManagerService extends SystemService {
/**
* If we get a request to enter rear display mode, we need to display an educational
- * overlay to let the user know what will happen. This creates the pending request and then
- * launches the {@link RearDisplayEducationActivity}
+ * overlay to let the user know what will happen. This calls into the
+ * {@link StatusBarManagerInternal} to notify SystemUI to display the educational dialog.
*/
@GuardedBy("mLock")
private void showRearDisplayEducationalOverlayLocked(OverrideRequest request) {
mRearDisplayPendingOverrideRequest = request;
- Intent intent = new Intent(ACTION_SHOW_REAR_DISPLAY_OVERLAY);
- intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
- intent.putExtra(EXTRA_ORIGINAL_DEVICE_BASE_STATE, mBaseState.get().getIdentifier());
- final ActivityOptions options = ActivityOptions.makeBasic();
- options.setLaunchWindowingMode(WindowConfiguration.WINDOWING_MODE_FULLSCREEN);
- getUiContext().startActivity(intent, options.toBundle());
+ StatusBarManagerInternal statusBar =
+ LocalServices.getService(StatusBarManagerInternal.class);
+ if (statusBar != null) {
+ statusBar.showRearDisplayDialog(mBaseState.get().getIdentifier());
+ }
}
private void cancelStateRequestInternal(int callingPid) {
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index 690dd10aa3e5..c758f487d4de 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -172,4 +172,11 @@ public interface StatusBarManagerInternal {
* @see com.android.internal.statusbar.IStatusBar#setUdfpsHbmListener(IUdfpsHbmListener)
*/
void setUdfpsHbmListener(IUdfpsHbmListener listener);
+
+ /**
+ * Shows the rear display educational dialog
+ *
+ * @see com.android.internal.statusbar.IStatusBar#showRearDisplayDialog
+ */
+ void showRearDisplayDialog(int currentBaseState);
}
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 036739271c93..194dfb25583f 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -16,6 +16,7 @@
package com.android.server.statusbar;
+import static android.Manifest.permission.CONTROL_DEVICE_STATE;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
import static android.app.StatusBarManager.DISABLE2_GLOBAL_ACTIONS;
@@ -31,6 +32,7 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVE
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.ActivityThread;
@@ -685,6 +687,15 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
} catch (RemoteException ex) { }
}
}
+
+ @Override
+ public void showRearDisplayDialog(int currentBaseState) {
+ if (mBar != null) {
+ try {
+ mBar.showRearDisplayDialog(currentBaseState);
+ } catch (RemoteException ex) { }
+ }
+ }
};
private final GlobalActionsProvider mGlobalActionsProvider = new GlobalActionsProvider() {
@@ -1288,6 +1299,11 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
"StatusBarManagerService");
}
+ @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_STATE)
+ private void enforceControlDeviceStatePermission() {
+ mContext.enforceCallingOrSelfPermission(CONTROL_DEVICE_STATE, "StatusBarManagerService");
+ }
+
private boolean doesCallerHoldInteractAcrossUserPermission() {
return mContext.checkCallingPermission(INTERACT_ACROSS_USERS_FULL) == PERMISSION_GRANTED
|| mContext.checkCallingPermission(INTERACT_ACROSS_USERS) == PERMISSION_GRANTED;
@@ -2171,6 +2187,19 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
}
}
+ @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_STATE)
+ @Override
+ public void showRearDisplayDialog(int currentState) {
+ enforceControlDeviceStatePermission();
+ if (mBar != null) {
+ try {
+ mBar.showRearDisplayDialog(currentState);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "showRearDisplayDialog", e);
+ }
+ }
+ }
+
/** @hide */
public void passThroughShellCommand(String[] args, FileDescriptor fd) {
enforceStatusBarOrShell();