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

Commit 41f02e5d authored by Ruben Brunk's avatar Ruben Brunk Committed by Android (Google) Code Review
Browse files

Merge "Allow current VrListenerService to read thermal info." into nyc-dev

parents 669cacac 8f1d5cba
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -101,7 +101,8 @@ public class HardwarePropertiesManager {
     *         {@link #UNDEFINED_TEMPERATURE} if undefined.
     *         Empty if platform doesn't provide the queried temperature.
     *
     * @throws SecurityException if a non profile or device owner tries to call this method.
     * @throws SecurityException if something other than the profile or device owner, or the
     *        current VR service tries to retrieve information provided by this service.
    */
    public @NonNull float[] getDeviceTemperatures(@DeviceTemperatureType int type,
            @TemperatureSource int source) {
@@ -137,7 +138,8 @@ public class HardwarePropertiesManager {
     *         each unplugged core.
     *         Empty if CPU usage is not supported on this system.
     *
     * @throws SecurityException if a non profile or device owner tries to call this method.
     * @throws SecurityException if something other than the profile or device owner, or the
     *        current VR service tries to retrieve information provided by this service.
     */
    public @NonNull CpuUsageInfo[] getCpuUsages() {
        try {
@@ -153,7 +155,8 @@ public class HardwarePropertiesManager {
     * @return an array of float fan speeds in RPM. Empty if there are no fans or fan speed is not
     * supported on this system.
     *
     * @throws SecurityException if a non profile or device owner tries to call this method.
     * @throws SecurityException if something other than the profile or device owner, or the
     *        current VR service tries to retrieve information provided by this service.
     */
    public @NonNull float[] getFanSpeeds() {
        try {
+11 −5
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.os.Binder;
import android.os.CpuUsageInfo;
import android.os.IHardwarePropertiesManager;
import android.os.Process;
import android.os.UserHandle;
import com.android.server.vr.VrManagerInternal;

import java.util.Arrays;

@@ -78,14 +80,15 @@ public class HardwarePropertiesManagerService extends IHardwarePropertiesManager
     *
     * @param callingPackage The calling package name.
     *
     * @throws SecurityException if a non profile or device owner or system tries to retrieve
     * information provided by the service.
     * @throws SecurityException if something other than the profile or device owner, or the
     *        current VR service tries to retrieve information provided by this service.
     */
    private void enforceHardwarePropertiesRetrievalAllowed(String callingPackage)
            throws SecurityException {
        final PackageManager pm = mContext.getPackageManager();
        int uid = 0;
        try {
            final int uid = pm.getPackageUid(callingPackage, 0);
            uid = pm.getPackageUid(callingPackage, 0);
            if (Binder.getCallingUid() != uid) {
                throw new SecurityException("The caller has faked the package name.");
            }
@@ -93,10 +96,13 @@ public class HardwarePropertiesManagerService extends IHardwarePropertiesManager
            throw new SecurityException("The caller has faked the package name.");
        }

        final int userId = UserHandle.getUserId(uid);
        final VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class);
        final DevicePolicyManager dpm = mContext.getSystemService(DevicePolicyManager.class);
        if (!dpm.isDeviceOwnerApp(callingPackage) && !dpm.isProfileOwnerApp(callingPackage)
                && Binder.getCallingUid() != Process.SYSTEM_UID) {
            throw new SecurityException("The caller is not a device or profile owner or system.");
                && !vrService.isCurrentVrListener(callingPackage, userId)) {
            throw new SecurityException("The caller is not a device or profile owner or bound "
                + "VrListenerService.");
        }
    }
}
+11 −0
Original line number Diff line number Diff line
@@ -37,6 +37,17 @@ public abstract class VrManagerInternal {
     */
    public abstract boolean isInVrMode();

    /**
     * Return {@code true} if the given package is the currently bound VrListenerService for the
     * given user.
     *
     * @param packageName The package name to check.
     * @param userId the user ID to check the package name for.
     *
     * @return {@code true} if the given package is the currently bound VrListenerService.
     */
    public abstract boolean isCurrentVrListener(String packageName, int userId);

    /**
     * Set the current VR mode state.
     *
+15 −0
Original line number Diff line number Diff line
@@ -126,6 +126,11 @@ public class VrManagerService extends SystemService implements EnabledComponentC
            VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage);
        }

        @Override
        public boolean isCurrentVrListener(String packageName, int userId) {
            return VrManagerService.this.isCurrentVrListener(packageName, userId);
        }

        @Override
        public void registerListener(VrStateListener listener) {
            VrManagerService.this.addListener(listener);
@@ -355,6 +360,16 @@ public class VrManagerService extends SystemService implements EnabledComponentC
        }
    }

    private boolean isCurrentVrListener(String packageName, int userId) {
        synchronized (mLock) {
            if (mCurrentVrService == null) {
                return false;
            }
            return mCurrentVrService.getComponent().getPackageName().equals(packageName) &&
                    userId == mCurrentVrService.getUserId();
        }
    }

    private void addListener(VrStateListener listener) {
        synchronized (mLock) {
            mListeners.add(listener);