Add UiModeManager commands to adb
Change-Id: I0480bf92e6a8e9adee99a0013d70d39550a52611
Fixes: 30096205
Test: adb shell cmd uimode night yes
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 8f99127..6f2f2c4 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -35,10 +35,12 @@
import android.os.BatteryManager;
import android.os.Binder;
import android.os.Handler;
-import android.os.IBinder;
import android.os.PowerManager;
import android.os.RemoteException;
+import android.os.ResultReceiver;
import android.os.ServiceManager;
+import android.os.ShellCallback;
+import android.os.ShellCommand;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
@@ -47,8 +49,6 @@
import android.service.vr.IVrStateCallbacks;
import android.text.TextUtils;
import android.util.Slog;
-import android.view.WindowManagerInternal;
-import android.view.WindowManagerPolicy;
import java.io.File;
import java.io.FileDescriptor;
@@ -62,7 +62,6 @@
import com.android.server.twilight.TwilightListener;
import com.android.server.twilight.TwilightManager;
import com.android.server.twilight.TwilightState;
-import com.android.server.wm.WindowManagerService;
final class UiModeManagerService extends SystemService {
private static final String TAG = UiModeManager.class.getSimpleName();
@@ -238,7 +237,7 @@
publishBinderService(Context.UI_MODE_SERVICE, mService);
}
- private final IBinder mService = new IUiModeManager.Stub() {
+ private final IUiModeManager.Stub mService = new IUiModeManager.Stub() {
@Override
public void enableCarMode(int flags) {
if (isUiModeLocked()) {
@@ -390,6 +389,12 @@
}
@Override
+ public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err,
+ String[] args, ShellCallback callback, ResultReceiver resultReceiver) {
+ new Shell(mService).exec(mService, in, out, err, args, callback, resultReceiver);
+ }
+
+ @Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
!= PackageManager.PERMISSION_GRANTED) {
@@ -777,4 +782,101 @@
}
}
+ /**
+ * Handles "adb shell" commands.
+ */
+ private static class Shell extends ShellCommand {
+ public static final String NIGHT_MODE_STR_YES = "yes";
+ public static final String NIGHT_MODE_STR_NO = "no";
+ public static final String NIGHT_MODE_STR_AUTO = "auto";
+ public static final String NIGHT_MODE_STR_UNKNOWN = "unknown";
+ private final IUiModeManager mInterface;
+
+ Shell(IUiModeManager iface) {
+ mInterface = iface;
+ }
+
+ @Override
+ public void onHelp() {
+ final PrintWriter pw = getOutPrintWriter();
+ pw.println("UiModeManager service (uimode) commands:");
+ pw.println(" help");
+ pw.println(" Print this help text.");
+ pw.println(" night [yes|no|auto]");
+ pw.println(" Set or read night mode.");
+ }
+
+ @Override
+ public int onCommand(String cmd) {
+ if (cmd == null) {
+ return handleDefaultCommands(cmd);
+ }
+
+ try {
+ switch (cmd) {
+ case "night":
+ return handleNightMode();
+ default:
+ return handleDefaultCommands(cmd);
+ }
+ } catch (RemoteException e) {
+ final PrintWriter err = getErrPrintWriter();
+ err.println("Remote exception: " + e);
+ }
+ return -1;
+ }
+
+ private int handleNightMode() throws RemoteException {
+ final PrintWriter err = getErrPrintWriter();
+ final String modeStr = getNextArg();
+ if (modeStr == null) {
+ printCurrentNightMode();
+ return 0;
+ }
+
+ final int mode = strToNightMode(modeStr);
+ if (mode >= 0) {
+ mInterface.setNightMode(mode);
+ printCurrentNightMode();
+ return 0;
+ } else {
+ err.println("Error: mode must be '" + NIGHT_MODE_STR_YES + "', '"
+ + NIGHT_MODE_STR_NO + "', or '" + NIGHT_MODE_STR_AUTO + "'");
+ return -1;
+ }
+ }
+
+ private void printCurrentNightMode() throws RemoteException {
+ final PrintWriter pw = getOutPrintWriter();
+ final int currMode = mInterface.getNightMode();
+ final String currModeStr = nightModeToStr(currMode);
+ pw.println("Night mode: " + currModeStr);
+ }
+
+ private static String nightModeToStr(int mode) {
+ switch (mode) {
+ case UiModeManager.MODE_NIGHT_YES:
+ return NIGHT_MODE_STR_YES;
+ case UiModeManager.MODE_NIGHT_NO:
+ return NIGHT_MODE_STR_NO;
+ case UiModeManager.MODE_NIGHT_AUTO:
+ return NIGHT_MODE_STR_AUTO;
+ default:
+ return NIGHT_MODE_STR_UNKNOWN;
+ }
+ }
+
+ private static int strToNightMode(String modeStr) {
+ switch (modeStr) {
+ case NIGHT_MODE_STR_YES:
+ return UiModeManager.MODE_NIGHT_YES;
+ case NIGHT_MODE_STR_NO:
+ return UiModeManager.MODE_NIGHT_NO;
+ case NIGHT_MODE_STR_AUTO:
+ return UiModeManager.MODE_NIGHT_AUTO;
+ default:
+ return -1;
+ }
+ }
+ }
}