content: /*
   * Copyright (C) 2018 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.server.display;
  
  import android.content.Intent;
  import android.os.ShellCommand;
  
  import java.io.PrintWriter;
  
  class DisplayManagerShellCommand extends ShellCommand {
      private static final String TAG = "DisplayManagerShellCommand";
  
      private final DisplayManagerService.BinderService mService;
  
      DisplayManagerShellCommand(DisplayManagerService.BinderService service) {
          mService = service;
      }
  
      @Override
      public int onCommand(String cmd) {
          if (cmd == null) {
              return handleDefaultCommands(cmd);
          }
          final PrintWriter pw = getOutPrintWriter();
          switch(cmd) {
              case "set-brightness":
                  return setBrightness();
              case "reset-brightness-configuration":
                  return resetBrightnessConfiguration();
              case "ab-logging-enable":
                  return setAutoBrightnessLoggingEnabled(true);
              case "ab-logging-disable":
                  return setAutoBrightnessLoggingEnabled(false);
              case "dwb-logging-enable":
                  return setDisplayWhiteBalanceLoggingEnabled(true);
              case "dwb-logging-disable":
                  return setDisplayWhiteBalanceLoggingEnabled(false);
              case "dwb-set-cct":
                  return setAmbientColorTemperatureOverride();
              default:
                  return handleDefaultCommands(cmd);
          }
      }
  
      @Override
      public void onHelp() {
          final PrintWriter pw = getOutPrintWriter();
          pw.println("Display manager commands:");
          pw.println("  help");
          pw.println("    Print this help text.");
          pw.println();
          pw.println("  set-brightness BRIGHTNESS");
          pw.println("    Sets the current brightness to BRIGHTNESS (a number between 0 and 1).");
          pw.println("  reset-brightness-configuration");
          pw.println("    Reset the brightness to its default configuration.");
          pw.println("  ab-logging-enable");
          pw.println("    Enable auto-brightness logging.");
          pw.println("  ab-logging-disable");
          pw.println("    Disable auto-brightness logging.");
          pw.println("  dwb-logging-enable");
          pw.println("    Enable display white-balance logging.");
          pw.println("  dwb-logging-disable");
          pw.println("    Disable display white-balance logging.");
          pw.println("  dwb-set-cct CCT");
          pw.println("    Sets the ambient color temperature override to CCT (use -1 to disable).");
          pw.println();
          Intent.printIntentArgsHelp(pw , "");
      }
  
      private int setBrightness() {
          String brightnessText = getNextArg();
          if (brightnessText == null) {
              getErrPrintWriter().println("Error: no brightness specified");
              return 1;
          }
          float brightness = -1.0f;
          try {
              brightness = Float.parseFloat(brightnessText);
          } catch (NumberFormatException e) {
          }
          if (brightness < 0 || brightness > 1) {
              getErrPrintWriter().println("Error: brightness should be a number between 0 and 1");
              return 1;
          }
          mService.setBrightness((int) (brightness * 255));
          return 0;
      }
  
      private int resetBrightnessConfiguration() {
          mService.resetBrightnessConfiguration();
          return 0;
      }
  
      private int setAutoBrightnessLoggingEnabled(boolean enabled) {
          mService.setAutoBrightnessLoggingEnabled(enabled);
          return 0;
      }
  
      private int setDisplayWhiteBalanceLoggingEnabled(boolean enabled) {
          mService.setDisplayWhiteBalanceLoggingEnabled(enabled);
          return 0;
      }
  
      private int setAmbientColorTemperatureOverride() {
          String cctText = getNextArg();
          if (cctText == null) {
              getErrPrintWriter().println("Error: no cct specified");
              return 1;
          }
          float cct;
          try {
              cct = Float.parseFloat(cctText);
          } catch (NumberFormatException e) {
              getErrPrintWriter().println("Error: cct should be a number");
              return 1;
          }
          mService.setAmbientColorTemperatureOverride(cct);
          return 0;
      }
  }
  