content: package com.genymobile.scrcpy.wrappers;
  
  import com.genymobile.scrcpy.FakeContext;
  
  import android.annotation.SuppressLint;
  import android.content.Context;
  import android.hardware.camera2.CameraManager;
  import android.os.IBinder;
  import android.os.IInterface;
  
  import java.lang.reflect.Constructor;
  import java.lang.reflect.Method;
  
  @SuppressLint("PrivateApi,DiscouragedPrivateApi")
  public final class ServiceManager {
  
      private static final Method GET_SERVICE_METHOD;
  
      static {
          try {
              GET_SERVICE_METHOD = Class.forName("android.os.ServiceManager").getDeclaredMethod("getService", String.class);
          } catch (Exception e) {
              throw new AssertionError(e);
          }
      }
  
      private static WindowManager windowManager;
      private static DisplayManager displayManager;
      private static InputManager inputManager;
      private static PowerManager powerManager;
      private static StatusBarManager statusBarManager;
      private static ClipboardManager clipboardManager;
      private static ActivityManager activityManager;
      private static CameraManager cameraManager;
  
      private ServiceManager() {
          /* not instantiable */
      }
  
      static IInterface getService(String service, String type) {
          try {
              IBinder binder = (IBinder) GET_SERVICE_METHOD.invoke(null, service);
              Method asInterfaceMethod = Class.forName(type + "$Stub").getMethod("asInterface", IBinder.class);
              return (IInterface) asInterfaceMethod.invoke(null, binder);
          } catch (Exception e) {
              throw new AssertionError(e);
          }
      }
  
      public static WindowManager getWindowManager() {
          if (windowManager == null) {
              windowManager = WindowManager.create();
          }
          return windowManager;
      }
  
      public static DisplayManager getDisplayManager() {
          if (displayManager == null) {
              displayManager = DisplayManager.create();
          }
          return displayManager;
      }
  
      public static InputManager getInputManager() {
          if (inputManager == null) {
              inputManager = InputManager.create();
          }
          return inputManager;
      }
  
      public static PowerManager getPowerManager() {
          if (powerManager == null) {
              powerManager = PowerManager.create();
          }
          return powerManager;
      }
  
      public static StatusBarManager getStatusBarManager() {
          if (statusBarManager == null) {
              statusBarManager = StatusBarManager.create();
          }
          return statusBarManager;
      }
  
      public static ClipboardManager getClipboardManager() {
          if (clipboardManager == null) {
              // May be null, some devices have no clipboard manager
              clipboardManager = ClipboardManager.create();
          }
          return clipboardManager;
      }
  
      public static ActivityManager getActivityManager() {
          if (activityManager == null) {
              activityManager = ActivityManager.create();
          }
          return activityManager;
      }
  
      public static CameraManager getCameraManager() {
          if (cameraManager == null) {
              try {
                  Constructor<CameraManager> ctor = CameraManager.class.getDeclaredConstructor(Context.class);
                  cameraManager = ctor.newInstance(FakeContext.get());
              } catch (Exception e) {
                  throw new AssertionError(e);
              }
          }
          return cameraManager;
      }
  }
  