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

Commit fded36e3 authored by Satish Yalla's avatar Satish Yalla Committed by Android (Google) Code Review
Browse files

Revert "Add device state Hal service"

Revert submission 30266203-device state hal service

Reason for revert: DroidMonitor created revert due to b/381006458. Will be verified through ABTD for standard investigation.

Reverted changes: /q/submissionid:30266203-device+state+hal+service

Change-Id: I4abf46bf7865bcd0b189b55f43c165732956712d
parent 680eb904
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -178,7 +178,6 @@ java_library_static {

    static_libs: [
        "android.frameworks.vibrator-V1-java", // AIDL
        "android.frameworks.devicestate-V1-java", // AIDL
        "android.hardware.authsecret-V1.0-java",
        "android.hardware.authsecret-V1-java",
        "android.hardware.boot-V1.0-java", // HIDL
+2 −149
Original line number Diff line number Diff line
@@ -19,16 +19,7 @@ package com.android.server.devicestate;
import static android.Manifest.permission.CONTROL_DEVICE_STATE;
import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.frameworks.devicestate.DeviceStateConfiguration.DeviceStatePropertyValue.FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_CLOSED;
import static android.frameworks.devicestate.DeviceStateConfiguration.DeviceStatePropertyValue.FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_HALF_OPEN;
import static android.frameworks.devicestate.DeviceStateConfiguration.DeviceStatePropertyValue.FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_OPEN;
import static android.frameworks.devicestate.DeviceStateConfiguration.DeviceStatePropertyValue.FEATURE_DUAL_DISPLAY;
import static android.frameworks.devicestate.DeviceStateConfiguration.DeviceStatePropertyValue.FEATURE_REAR_DISPLAY;
import static android.frameworks.devicestate.DeviceStateConfiguration.DeviceStatePropertyValue.FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY;
import static android.frameworks.devicestate.DeviceStateConfiguration.DeviceStatePropertyValue.FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY;
import static android.hardware.devicestate.DeviceState.PROPERTY_FEATURE_DUAL_DISPLAY_INTERNAL_DEFAULT;
import static android.hardware.devicestate.DeviceState.PROPERTY_FEATURE_REAR_DISPLAY;
import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY;
import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY;
import static android.hardware.devicestate.DeviceState.PROPERTY_POLICY_AVAILABLE_FOR_APP_REQUEST;
import static android.hardware.devicestate.DeviceState.PROPERTY_POLICY_CANCEL_OVERRIDE_REQUESTS;
@@ -53,10 +44,6 @@ import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.IProcessObserver;
import android.content.Context;
import android.frameworks.devicestate.DeviceStateConfiguration;
import android.frameworks.devicestate.ErrorCode;
import android.frameworks.devicestate.IDeviceStateListener;
import android.frameworks.devicestate.IDeviceStateService;
import android.hardware.devicestate.DeviceState;
import android.hardware.devicestate.DeviceStateInfo;
import android.hardware.devicestate.DeviceStateManager;
@@ -69,12 +56,9 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
import android.os.ServiceSpecificException;
import android.os.ShellCallback;
import android.os.SystemProperties;
import android.os.Trace;
import android.util.LongSparseLongArray;
import android.util.Slog;
import android.util.SparseArray;

@@ -98,7 +82,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.WeakHashMap;
@@ -147,8 +130,6 @@ public final class DeviceStateManagerService extends SystemService {
    @NonNull
    private final BinderService mBinderService;
    @NonNull
    private final HalService mHalService;
    @NonNull
    private final OverrideRequestController mOverrideRequestController;
    @NonNull
    private final DeviceStateProviderListener mDeviceStateProviderListener;
@@ -158,7 +139,7 @@ public final class DeviceStateManagerService extends SystemService {

    // All supported device states keyed by identifier.
    @GuardedBy("mLock")
    private final SparseArray<DeviceState> mDeviceStates = new SparseArray<>();
    private SparseArray<DeviceState> mDeviceStates = new SparseArray<>();

    // The current committed device state. Will be empty until the first device state provided by
    // the DeviceStateProvider is committed.
@@ -196,7 +177,7 @@ public final class DeviceStateManagerService extends SystemService {
    @GuardedBy("mLock")
    private final SparseArray<ProcessRecord> mProcessRecords = new SparseArray<>();

    private final Set<Integer> mDeviceStatesAvailableForAppRequests = new HashSet<>();
    private Set<Integer> mDeviceStatesAvailableForAppRequests = new HashSet<>();

    private Set<Integer> mFoldedDeviceStates = new HashSet<>();

@@ -278,7 +259,6 @@ public final class DeviceStateManagerService extends SystemService {
        mDeviceStateProviderListener = new DeviceStateProviderListener();
        mDeviceStatePolicy.getDeviceStateProvider().setListener(mDeviceStateProviderListener);
        mBinderService = new BinderService();
        mHalService = new HalService();
        mActivityTaskManagerInternal = LocalServices.getService(ActivityTaskManagerInternal.class);
        mDeviceStateNotificationController = new DeviceStateNotificationController(
                context, mHandler,
@@ -292,10 +272,6 @@ public final class DeviceStateManagerService extends SystemService {
    @Override
    public void onStart() {
        publishBinderService(Context.DEVICE_STATE_SERVICE, mBinderService);
        String halServiceName = IDeviceStateService.DESCRIPTOR + "/default";
        if (ServiceManager.isDeclared(halServiceName)) {
            publishBinderService(halServiceName, mHalService);
        }
        publishLocalService(DeviceStateManagerInternal.class, new LocalService());

        if (!Flags.deviceStatePropertyMigration()) {
@@ -464,11 +440,6 @@ public final class DeviceStateManagerService extends SystemService {
        return mBinderService;
    }

    @VisibleForTesting
    IDeviceStateService getHalBinderService() {
        return mHalService;
    }

    private void updateSupportedStates(DeviceState[] supportedDeviceStates,
            @DeviceStateProvider.SupportedStatesUpdatedReason int reason) {
        synchronized (mLock) {
@@ -1311,124 +1282,6 @@ public final class DeviceStateManagerService extends SystemService {
        }
    }

    private final class HalService extends IDeviceStateService.Stub {
        private final LongSparseLongArray mPublicProperties = new LongSparseLongArray();
        public HalService() {
            mPublicProperties.put(
                    DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_CLOSED,
                    FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_CLOSED);
            mPublicProperties.put(
                    DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_HALF_OPEN,
                    FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_HALF_OPEN);
            mPublicProperties.put(
                    DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_OPEN,
                    FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_OPEN);
            mPublicProperties.put(
                    PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY,
                    FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY);
            mPublicProperties.put(
                    PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY,
                    FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY);
            mPublicProperties.put(
                    PROPERTY_FEATURE_REAR_DISPLAY,
                    FEATURE_REAR_DISPLAY);
            mPublicProperties.put(
                    PROPERTY_FEATURE_DUAL_DISPLAY_INTERNAL_DEFAULT,
                    FEATURE_DUAL_DISPLAY);
        }

        private final class HalBinderCallback implements IDeviceStateManagerCallback {
            private final IDeviceStateListener mListener;

            private HalBinderCallback(@NonNull IDeviceStateListener listener) {
                mListener = listener;
            }

            @Override
            public void onDeviceStateInfoChanged(DeviceStateInfo info) throws RemoteException {
                DeviceStateConfiguration config = new DeviceStateConfiguration();
                Set<Integer> systemProperties = new HashSet<>(
                        info.currentState.getConfiguration().getSystemProperties());
                Set<Integer> physicalProperties = new HashSet<>(
                        info.currentState.getConfiguration().getPhysicalProperties());
                config.deviceProperties = 0;
                for (Integer prop : systemProperties) {
                    Long publicProperty = mPublicProperties.get(prop);
                    if (publicProperty != null) {
                        config.deviceProperties |= publicProperty.longValue();
                    }
                }
                for (Integer prop : physicalProperties) {
                    Long publicProperty = mPublicProperties.get(prop);
                    if (publicProperty != null) {
                        config.deviceProperties |= publicProperty.longValue();
                    }
                }
                mListener.onDeviceStateChanged(config);
            }

            @Override
            public void onRequestActive(IBinder token) {
                //No-op
            }

            @Override
            public void onRequestCanceled(IBinder token) {
                //No-op
            }

            @Override
            public IBinder asBinder() {
                return mListener.asBinder();
            }
        }

        @Override
        public void registerListener(IDeviceStateListener listener) throws RemoteException {
            if (listener == null) {
                throw new ServiceSpecificException(ErrorCode.BAD_INPUT);
            }

            final int callingPid = Binder.getCallingPid();
            final long token = Binder.clearCallingIdentity();
            try {
                HalBinderCallback callback = new HalBinderCallback(listener);
                DeviceStateInfo info = registerProcess(callingPid, callback);
                if (info != null)  {
                    callback.onDeviceStateInfoChanged(info);
                }
            } catch (SecurityException e) {
                throw new ServiceSpecificException(ErrorCode.ALREADY_EXISTS);
            } finally {
                Binder.restoreCallingIdentity(token);
            }
        }

        @Override
        public void unregisterListener(IDeviceStateListener listener) throws RemoteException {
            final int callingPid = Binder.getCallingPid();

            synchronized (mLock) {
                if (mProcessRecords.contains(callingPid)) {
                    mProcessRecords.remove(callingPid);
                    return;
                }
            }

            throw new ServiceSpecificException(ErrorCode.BAD_INPUT);
        }

        @Override
        public int getInterfaceVersion() throws RemoteException {
            return IDeviceStateService.VERSION;
        }

        @Override
        public String getInterfaceHash() throws RemoteException {
            return IDeviceStateService.HASH;
        }
    }

    /** Implementation of {@link IDeviceStateManager} published as a binder service. */
    private final class BinderService extends IDeviceStateManager.Stub {

+0 −5
Original line number Diff line number Diff line
@@ -4,9 +4,4 @@
        <version>2</version>
        <fqname>IAltitudeService/default</fqname>
    </hal>
    <hal format="aidl">
        <name>android.frameworks.devicestate</name>
        <version>1</version>
        <fqname>IDeviceStateService/default</fqname>
    </hal>
</manifest>
+0 −53
Original line number Diff line number Diff line
@@ -24,14 +24,9 @@ import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertThrows;

import android.content.Context;
import android.frameworks.devicestate.DeviceStateConfiguration;
import android.frameworks.devicestate.ErrorCode;
import android.frameworks.devicestate.IDeviceStateListener;
import android.frameworks.devicestate.IDeviceStateService;
import android.hardware.devicestate.DeviceState;
import android.hardware.devicestate.DeviceStateInfo;
import android.hardware.devicestate.DeviceStateRequest;
@@ -39,7 +34,6 @@ import android.hardware.devicestate.IDeviceStateManagerCallback;
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.platform.test.annotations.Presubmit;
import android.platform.test.flag.junit.FlagsParameterization;
import android.platform.test.flag.junit.SetFlagsRule;
@@ -341,53 +335,6 @@ public final class DeviceStateManagerServiceTest {
        assertThat(info.currentState.getIdentifier()).isEqualTo(INVALID_DEVICE_STATE_IDENTIFIER);
    }

    @Test
    public void halRegisterUnregisterCallback() throws RemoteException {
        IDeviceStateService halService = mService.getHalBinderService();
        IDeviceStateListener halListener = new IDeviceStateListener.Stub() {
            @Override
            public void onDeviceStateChanged(DeviceStateConfiguration deviceState) { }

            @Override
            public int getInterfaceVersion() {
                return IDeviceStateListener.VERSION;
            }

            @Override
            public String getInterfaceHash() {
                return IDeviceStateListener.HASH;
            }
        };

        int errorCode = ErrorCode.OK;
        try {
            halService.unregisterListener(halListener);
        } catch(ServiceSpecificException e) {
            errorCode = e.errorCode;
        }
        assertEquals(errorCode, ErrorCode.BAD_INPUT);

        errorCode = ErrorCode.OK;
        try {
            halService.unregisterListener(null);
        } catch(ServiceSpecificException e) {
            errorCode = e.errorCode;
        }
        assertEquals(errorCode, ErrorCode.BAD_INPUT);

        halService.registerListener(halListener);

        errorCode = ErrorCode.OK;
        try {
            halService.registerListener(halListener);
        } catch (ServiceSpecificException e) {
            errorCode = e.errorCode;
        }
        assertEquals(errorCode, ErrorCode.ALREADY_EXISTS);

        halService.unregisterListener(halListener);
    }

    @Test
    public void registerCallback() throws RemoteException {
        final TestDeviceStateManagerCallback callback = new TestDeviceStateManagerCallback();