Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8722754 authored by Darryl Johnson's avatar Darryl Johnson Committed by Android (Google) Code Review
Browse files

Merge "Have CameraServiceProxy listen directly to DeviceStateManager." into sc-v2-dev

parents ba93d261 924b951a
Loading
Loading
Loading
Loading
+19 −3
Original line number Original line Diff line number Diff line
@@ -35,11 +35,14 @@ import android.hardware.CameraStreamStats;
import android.hardware.ICameraService;
import android.hardware.ICameraService;
import android.hardware.ICameraServiceProxy;
import android.hardware.ICameraServiceProxy;
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.CameraMetadata;
import android.hardware.devicestate.DeviceStateManager;
import android.hardware.devicestate.DeviceStateManager.FoldStateListener;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager;
import android.media.AudioManager;
import android.media.AudioManager;
import android.nfc.INfcAdapter;
import android.nfc.INfcAdapter;
import android.os.Binder;
import android.os.Binder;
import android.os.Handler;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.IBinder;
import android.os.IBinder;
import android.os.Message;
import android.os.Message;
import android.os.Process;
import android.os.Process;
@@ -57,8 +60,8 @@ import android.view.IDisplayWindowListener;
import android.view.Surface;
import android.view.Surface;
import android.view.WindowManagerGlobal;
import android.view.WindowManagerGlobal;


import com.android.internal.annotations.GuardedBy;
import com.android.framework.protobuf.nano.MessageNano;
import com.android.framework.protobuf.nano.MessageNano;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.FrameworkStatsLog;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import com.android.server.ServiceThread;
import com.android.server.ServiceThread;
@@ -447,6 +450,8 @@ public class CameraServiceProxy extends SystemService
        }
        }
    };
    };


    private final FoldStateListener mFoldStateListener;

    public CameraServiceProxy(Context context) {
    public CameraServiceProxy(Context context) {
        super(context);
        super(context);
        mContext = context;
        mContext = context;
@@ -459,6 +464,14 @@ public class CameraServiceProxy extends SystemService
        // Don't keep any extra logging threads if not needed
        // Don't keep any extra logging threads if not needed
        mLogWriterService.setKeepAliveTime(1, TimeUnit.SECONDS);
        mLogWriterService.setKeepAliveTime(1, TimeUnit.SECONDS);
        mLogWriterService.allowCoreThreadTimeOut(true);
        mLogWriterService.allowCoreThreadTimeOut(true);

        mFoldStateListener = new FoldStateListener(mContext, folded -> {
            if (folded) {
                setDeviceStateFlags(ICameraService.DEVICE_STATE_FOLDED);
            } else {
                clearDeviceStateFlags(ICameraService.DEVICE_STATE_FOLDED);
            }
        });
    }
    }


    /**
    /**
@@ -471,7 +484,7 @@ public class CameraServiceProxy extends SystemService
     *
     *
     * @see #clearDeviceStateFlags(int)
     * @see #clearDeviceStateFlags(int)
     */
     */
    public void setDeviceStateFlags(@DeviceStateFlags int deviceStateFlags) {
    private void setDeviceStateFlags(@DeviceStateFlags int deviceStateFlags) {
        synchronized (mLock) {
        synchronized (mLock) {
            mHandler.removeMessages(MSG_NOTIFY_DEVICE_STATE);
            mHandler.removeMessages(MSG_NOTIFY_DEVICE_STATE);
            mDeviceState |= deviceStateFlags;
            mDeviceState |= deviceStateFlags;
@@ -491,7 +504,7 @@ public class CameraServiceProxy extends SystemService
     *
     *
     * @see #setDeviceStateFlags(int)
     * @see #setDeviceStateFlags(int)
     */
     */
    public void clearDeviceStateFlags(@DeviceStateFlags int deviceStateFlags) {
    private void clearDeviceStateFlags(@DeviceStateFlags int deviceStateFlags) {
        synchronized (mLock) {
        synchronized (mLock) {
            mHandler.removeMessages(MSG_NOTIFY_DEVICE_STATE);
            mHandler.removeMessages(MSG_NOTIFY_DEVICE_STATE);
            mDeviceState &= ~deviceStateFlags;
            mDeviceState &= ~deviceStateFlags;
@@ -555,6 +568,9 @@ public class CameraServiceProxy extends SystemService
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                Log.e(TAG, "Failed to register display window listener!");
                Log.e(TAG, "Failed to register display window listener!");
            }
            }

            mContext.getSystemService(DeviceStateManager.class)
                    .registerCallback(new HandlerExecutor(mHandler), mFoldStateListener);
        }
        }
    }
    }


+2 −25
Original line number Original line Diff line number Diff line
@@ -16,10 +16,8 @@


package com.android.server.policy;
package com.android.server.policy;


import android.annotation.Nullable;
import android.content.Context;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.Rect;
import android.hardware.ICameraService;
import android.hardware.devicestate.DeviceStateManager;
import android.hardware.devicestate.DeviceStateManager;
import android.hardware.devicestate.DeviceStateManager.FoldStateListener;
import android.hardware.devicestate.DeviceStateManager.FoldStateListener;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.display.DisplayManagerInternal;
@@ -27,13 +25,11 @@ import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.HandlerExecutor;
import android.os.RemoteCallbackList;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.RemoteException;
import android.util.Slog;
import android.view.DisplayInfo;
import android.view.DisplayInfo;
import android.view.IDisplayFoldListener;
import android.view.IDisplayFoldListener;


import com.android.server.DisplayThread;
import com.android.server.DisplayThread;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import com.android.server.camera.CameraServiceProxy;
import com.android.server.wm.WindowManagerInternal;
import com.android.server.wm.WindowManagerInternal;


/**
/**
@@ -41,13 +37,8 @@ import com.android.server.wm.WindowManagerInternal;
 * TODO(b/126160895): Move DisplayFoldController from PhoneWindowManager to DisplayPolicy.
 * TODO(b/126160895): Move DisplayFoldController from PhoneWindowManager to DisplayPolicy.
 */
 */
class DisplayFoldController {
class DisplayFoldController {
    private static final String TAG = "DisplayFoldController";

    private final WindowManagerInternal mWindowManagerInternal;
    private final WindowManagerInternal mWindowManagerInternal;
    private final DisplayManagerInternal mDisplayManagerInternal;
    private final DisplayManagerInternal mDisplayManagerInternal;
    // Camera service proxy can be disabled through a config.
    @Nullable
    private final CameraServiceProxy mCameraServiceProxy;
    private final int mDisplayId;
    private final int mDisplayId;
    private final Handler mHandler;
    private final Handler mHandler;


@@ -64,12 +55,10 @@ class DisplayFoldController {


    DisplayFoldController(
    DisplayFoldController(
            Context context, WindowManagerInternal windowManagerInternal,
            Context context, WindowManagerInternal windowManagerInternal,
            DisplayManagerInternal displayManagerInternal,
            DisplayManagerInternal displayManagerInternal, int displayId, Rect foldedArea,
            @Nullable CameraServiceProxy cameraServiceProxy, int displayId, Rect foldedArea,
            Handler handler) {
            Handler handler) {
        mWindowManagerInternal = windowManagerInternal;
        mWindowManagerInternal = windowManagerInternal;
        mDisplayManagerInternal = displayManagerInternal;
        mDisplayManagerInternal = displayManagerInternal;
        mCameraServiceProxy = cameraServiceProxy;
        mDisplayId = displayId;
        mDisplayId = displayId;
        mFoldedArea = new Rect(foldedArea);
        mFoldedArea = new Rect(foldedArea);
        mHandler = handler;
        mHandler = handler;
@@ -124,16 +113,6 @@ class DisplayFoldController {
            }
            }
        }
        }


        if (mCameraServiceProxy != null) {
            if (folded) {
                mCameraServiceProxy.setDeviceStateFlags(ICameraService.DEVICE_STATE_FOLDED);
            } else {
                mCameraServiceProxy.clearDeviceStateFlags(ICameraService.DEVICE_STATE_FOLDED);
            }
        } else {
            Slog.w(TAG, "Camera service unavailable to toggle folded state.");
        }

        mDurationLogger.setDeviceFolded(folded);
        mDurationLogger.setDeviceFolded(folded);
        mDurationLogger.logFocusedAppWithFoldState(folded, mFocusedApp);
        mDurationLogger.logFocusedAppWithFoldState(folded, mFocusedApp);
        mFolded = folded;
        mFolded = folded;
@@ -188,8 +167,6 @@ class DisplayFoldController {
                LocalServices.getService(WindowManagerInternal.class);
                LocalServices.getService(WindowManagerInternal.class);
        final DisplayManagerInternal displayService =
        final DisplayManagerInternal displayService =
                LocalServices.getService(DisplayManagerInternal.class);
                LocalServices.getService(DisplayManagerInternal.class);
        final CameraServiceProxy cameraServiceProxy =
                LocalServices.getService(CameraServiceProxy.class);


        final String configFoldedArea = context.getResources().getString(
        final String configFoldedArea = context.getResources().getString(
                com.android.internal.R.string.config_foldedArea);
                com.android.internal.R.string.config_foldedArea);
@@ -201,6 +178,6 @@ class DisplayFoldController {
        }
        }


        return new DisplayFoldController(context, windowManagerService, displayService,
        return new DisplayFoldController(context, windowManagerService, displayService,
                cameraServiceProxy, displayId, foldedArea, DisplayThread.getHandler());
                displayId, foldedArea, DisplayThread.getHandler());
    }
    }
}
}