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

Commit fd37a192 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Specify user for getProperty of package

Otherwise the property won't be found when launching an activity
only belongs to profile user (not exists on system user).

Fix: 396444327
Flag: EXEMPT bugfix
Test: OptPropFactoryTest
Change-Id: I1b9cdbafedbf93644a11fdf0f6fed55ffd4d6b5c
parent 7479cb10
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -2111,7 +2111,8 @@ final class ActivityRecord extends WindowToken {
        }
        try {
            return mAtmService.mContext.getPackageManager()
                    .getProperty(PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED, packageName)
                    .getPropertyAsUser(PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED, packageName,
                            null /* className */, mUserId)
                    .getBoolean();
        } catch (PackageManager.NameNotFoundException e) {
            // No such property name.
@@ -2968,8 +2969,9 @@ final class ActivityRecord extends WindowToken {
        }
        try {
            return mAtmService.mContext.getPackageManager()
                    .getProperty(PROPERTY_ALLOW_UNTRUSTED_ACTIVITY_EMBEDDING_STATE_SHARING,
                            mActivityComponent)
                    .getPropertyAsUser(PROPERTY_ALLOW_UNTRUSTED_ACTIVITY_EMBEDDING_STATE_SHARING,
                            mActivityComponent.getPackageName(),
                            mActivityComponent.getClassName(), mUserId)
                    .getBoolean();
        } catch (PackageManager.NameNotFoundException e) {
            // No such property name.
@@ -3169,7 +3171,8 @@ final class ActivityRecord extends WindowToken {
            return true;
        }
        return !AppCompatResizeOverrides.allowRestrictedResizability(
                wms.mContext.getPackageManager(), appInfo.packageName);
                wms.mContext.getPackageManager(), appInfo.packageName,
                UserHandle.getUserId(appInfo.uid));
    }

    boolean isResizeable() {
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ class AppCompatController {
                        @NonNull ActivityRecord activityRecord) {
        final PackageManager packageManager = wmService.mContext.getPackageManager();
        final OptPropFactory optPropBuilder = new OptPropFactory(packageManager,
                activityRecord.packageName);
                activityRecord.packageName, activityRecord.mUserId);
        mDeviceStateQuery = new AppCompatDeviceStateQuery(activityRecord);
        mTransparentPolicy = new TransparentPolicy(activityRecord,
                wmService.mAppCompatConfiguration);
+7 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZA
import static com.android.server.wm.AppCompatUtils.isChangeEnabled;

import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.content.pm.PackageManager;

import com.android.server.wm.utils.OptPropFactory;
@@ -52,7 +53,8 @@ class AppCompatResizeOverrides {
                PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES);
        mAllowRestrictedResizability = AppCompatUtils.asLazy(() -> {
            // Application level.
            if (allowRestrictedResizability(packageManager, mActivityRecord.packageName)) {
            if (allowRestrictedResizability(packageManager, mActivityRecord.packageName,
                    mActivityRecord.mUserId)) {
                return true;
            }
            // Activity level.
@@ -68,10 +70,11 @@ class AppCompatResizeOverrides {
        });
    }

    static boolean allowRestrictedResizability(PackageManager pm, String packageName) {
    static boolean allowRestrictedResizability(@NonNull PackageManager pm,
            @NonNull String packageName, @UserIdInt int userId) {
        try {
            return pm.getProperty(PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY, packageName)
                    .getBoolean();
            return pm.getPropertyAsUser(PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY, packageName,
                            null /* className */, userId).getBoolean();
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
+2 −2
Original line number Diff line number Diff line
@@ -1837,9 +1837,9 @@ class Task extends TaskFragment {

    private void updateAllowForceResizeOverride() {
        try {
            mAllowForceResizeOverride = mAtmService.mContext.getPackageManager().getProperty(
            mAllowForceResizeOverride = mAtmService.mContext.getPackageManager().getPropertyAsUser(
                    PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES,
                    getBasePackageName()).getBoolean();
                    getBasePackageName(), null /* className */, mUserId).getBoolean();
        } catch (PackageManager.NameNotFoundException e) {
            // Package not found or property not defined, reset to default value.
            mAllowForceResizeOverride = true;
+11 −3
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static java.lang.Boolean.TRUE;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.content.pm.PackageManager;
import android.util.Slog;

@@ -38,15 +39,20 @@ public class OptPropFactory {
    @NonNull
    private final String mPackageName;

    @UserIdInt
    private final int mUserId;

    /**
     * Object responsible to handle optIn and optOut properties.
     *
     * @param packageManager The PackageManager reference
     * @param packageName    The name of the package.
     */
    public OptPropFactory(@NonNull PackageManager packageManager, @NonNull String packageName) {
    public OptPropFactory(@NonNull PackageManager packageManager, @NonNull String packageName,
            @UserIdInt int userId) {
        mPackageManager = packageManager;
        mPackageName = packageName;
        mUserId = userId;
    }

    /**
@@ -58,7 +64,8 @@ public class OptPropFactory {
    @NonNull
    public OptProp create(@NonNull String propertyName) {
        return OptProp.create(
                () -> mPackageManager.getProperty(propertyName, mPackageName).getBoolean(),
                () -> mPackageManager.getPropertyAsUser(propertyName, mPackageName,
                        null /* className */, mUserId).getBoolean(),
                propertyName);
    }

@@ -73,7 +80,8 @@ public class OptPropFactory {
    @NonNull
    public OptProp create(@NonNull String propertyName, @NonNull BooleanSupplier gateCondition) {
        return OptProp.create(
                () -> mPackageManager.getProperty(propertyName, mPackageName).getBoolean(),
                () -> mPackageManager.getPropertyAsUser(propertyName, mPackageName,
                        null /* className */, mUserId).getBoolean(),
                propertyName,
                gateCondition);
    }
Loading