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

Commit 534dd5ee authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Check package permission for the correct userId." into main

parents 8361f947 c94d03b6
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import static com.android.server.SystemService.PHASE_BOOT_COMPLETED;
import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY;
import static com.android.server.usage.AppIdleHistory.STANDBY_BUCKET_UNKNOWN;

import android.Manifest;
import android.annotation.CurrentTimeMillisLong;
import android.annotation.DurationMillisLong;
import android.annotation.NonNull;
@@ -100,6 +101,7 @@ import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.Trace;
import android.os.UserHandle;
import android.permission.PermissionManager;
import android.provider.DeviceConfig;
import android.provider.Settings.Global;
import android.telephony.TelephonyManager;
@@ -1523,8 +1525,8 @@ public class AppStandbyController
            return STANDBY_BUCKET_ACTIVE;
        }

        if (mPackageManager.checkPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION,
                packageName) == PERMISSION_GRANTED) {
        if (mSystemServicesReady
                && mInjector.isBackgroundLocationPermissionGranted(packageName, userId)) {
            return STANDBY_BUCKET_FREQUENT;
        }

@@ -2636,6 +2638,7 @@ public class AppStandbyController
        private IBatteryStats mBatteryStats;
        private BatteryManager mBatteryManager;
        private PackageManagerInternal mPackageManagerInternal;
        private PermissionManager mPermissionManager;
        private DisplayManager mDisplayManager;
        private PowerManager mPowerManager;
        private IDeviceIdleController mDeviceIdleController;
@@ -2675,6 +2678,7 @@ public class AppStandbyController
                mBatteryStats = IBatteryStats.Stub.asInterface(
                        ServiceManager.getService(BatteryStats.SERVICE_NAME));
                mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class);
                mPermissionManager = mContext.getSystemService(PermissionManager.class);
                mDisplayManager = (DisplayManager) mContext.getSystemService(
                        Context.DISPLAY_SERVICE);
                mPowerManager = mContext.getSystemService(PowerManager.class);
@@ -2710,10 +2714,6 @@ public class AppStandbyController
            return SystemClock.elapsedRealtime();
        }

        long currentTimeMillis() {
            return System.currentTimeMillis();
        }

        boolean isAppIdleEnabled() {
            final boolean buildFlag = mContext.getResources().getBoolean(
                    com.android.internal.R.bool.config_enableAutoPowerModes);
@@ -2754,6 +2754,14 @@ public class AppStandbyController
            return mAlarmManagerInternal.shouldGetBucketElevation(packageName, uid);
        }

        boolean isBackgroundLocationPermissionGranted(@NonNull String packageName,
                @UserIdInt int userId) {
            final int result = mPermissionManager.checkPackageNamePermission(
                    Manifest.permission.ACCESS_BACKGROUND_LOCATION,
                    packageName, Context.DEVICE_ID_DEFAULT, userId);
            return result == PERMISSION_GRANTED;
        }

        void updatePowerWhitelistCache() {
            try {
                // Don't call out to DeviceIdleController with the lock held.
+15 −20
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RARE;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_WORKING_SET;
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;

import static com.android.server.usage.AppStandbyController.DEFAULT_ELAPSED_TIME_THRESHOLDS;
import static com.android.server.usage.AppStandbyController.DEFAULT_SCREEN_TIME_THRESHOLDS;
@@ -58,12 +57,11 @@ import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;
import static org.mockito.AdditionalMatchers.not;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.intThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -245,6 +243,7 @@ public class AppStandbyControllerTests {
        List<UserHandle> mCrossProfileTargets = Collections.emptyList();
        boolean mDeviceIdleMode = false;
        Set<Pair<String, Integer>> mClockApps = new ArraySet<>();
        Set<Pair<String, Integer>> mBgLocationGrantedApps = new ArraySet<>();
        DeviceConfig.Properties.Builder mSettingsBuilder =
                new DeviceConfig.Properties.Builder(DeviceConfig.NAMESPACE_APP_STANDBY)
                        .setLong("screen_threshold_active", 0)
@@ -280,11 +279,6 @@ public class AppStandbyControllerTests {
            return mElapsedRealtime;
        }

        @Override
        long currentTimeMillis() {
            return mElapsedRealtime;
        }

        @Override
        boolean isAppIdleEnabled() {
            return mIsAppIdleEnabled;
@@ -310,6 +304,11 @@ public class AppStandbyControllerTests {
            return mClockApps.contains(Pair.create(packageName, uid));
        }

        @Override
        boolean isBackgroundLocationPermissionGranted(String packageName, int userId) {
            return mBgLocationGrantedApps.contains(Pair.create(packageName, userId));
        }

        @Override
        PackageManagerInternal getPackageManagerInternal() {
            return mPackageManagerInternal;
@@ -393,6 +392,10 @@ public class AppStandbyControllerTests {

        // Internal methods

        void addBgLocationGrantedApps(String packageName, int userId) {
            mBgLocationGrantedApps.add(Pair.create(packageName, userId));
        }

        void setDisplayOn(boolean on) {
            mDisplayOn = on;
            if (mDisplayListener != null) {
@@ -484,18 +487,9 @@ public class AppStandbyControllerTests {
                doReturn(pkg.applicationInfo).when(mockPm)
                        .getApplicationInfo(eq(pkg.packageName), anyInt());

                if (pkg.packageName.equals(PACKAGE_BACKGROUND_LOCATION)) {
                    doReturn(PERMISSION_GRANTED).when(mockPm).checkPermission(
                            eq(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION),
                            eq(pkg.packageName));
                    doReturn(PERMISSION_DENIED).when(mockPm).checkPermission(
                            not(eq(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION)),
                            eq(pkg.packageName));
                } else {
                doReturn(PERMISSION_DENIED).when(mockPm).checkPermission(anyString(),
                        eq(pkg.packageName));
            }
            }
        } catch (PackageManager.NameNotFoundException nnfe) {}
    }

@@ -2077,6 +2071,7 @@ public class AppStandbyControllerTests {
     */
    @Test
    public void testBackgroundLocationBucket() throws Exception {
        mInjector.addBgLocationGrantedApps(PACKAGE_BACKGROUND_LOCATION, USER_ID);
        reportEvent(mController, USER_INTERACTION, mInjector.mElapsedRealtime,
                PACKAGE_BACKGROUND_LOCATION);
        waitAndAssertBucket(STANDBY_BUCKET_ACTIVE, PACKAGE_BACKGROUND_LOCATION);