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

Commit 9ac22390 authored by Jonathan Klee's avatar Jonathan Klee
Browse files

fix: update hide microG setting per user

parent 67507ea3
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -522,6 +522,33 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,
        onChanged();
    }

    public void updateHiddenMicrogPackagesConfig(Computer snapshot, @UserIdInt int userId,
            @Nullable ArraySet<String> packageNames) {
        final SparseArray<ArraySet<String>> oldPackageNamesByUser =
                mHideMicrogPackagesForCallerByUser;
        final ArraySet<String> oldPackageNames = oldPackageNamesByUser.get(userId);
        final ArraySet<String> newPackageNames =
                packageNames == null ? null : new ArraySet<>(packageNames);
        if (Objects.equals(oldPackageNames, newPackageNames)) {
            return;
        }

        final SparseArray<ArraySet<String>> newPackageNamesByUser =
                copyPackageNamesByUser(oldPackageNamesByUser);
        if (newPackageNames == null || newPackageNames.isEmpty()) {
            newPackageNamesByUser.remove(userId);
        } else {
            newPackageNamesByUser.put(userId, newPackageNames);
        }
        mHideMicrogPackagesForCallerByUser = newPackageNamesByUser;

        if (mCacheReady && hasUser(snapshot.getUserInfos(), userId)) {
            updateEntireShouldFilterCache(snapshot, userId);
        }

        onChanged();
    }

    /**
     * Adds a package that should be considered when filtering visibility between apps.
     *
@@ -1338,4 +1365,13 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,
        }
        return true;
    }

    private static boolean hasUser(@NonNull UserInfo[] users, @UserIdInt int userId) {
        for (UserInfo user : users) {
            if (user.id == userId) {
                return true;
            }
        }
        return false;
    }
}
+30 −17
Original line number Diff line number Diff line
@@ -4246,25 +4246,17 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            @Override
            public void onChange(boolean selfChange, @Nullable Uri uri, int userId) {
                final Computer snapshot = snapshotComputer();
                final SparseArray<ArraySet<String>> packageNamesByUser = new SparseArray<>();
                for (UserInfo userInfo : snapshot.getUserInfos()) {
                    final String packageList = android.provider.Settings.System.getStringForUser(
                            resolver,
                            android.provider.Settings.System
                                    .HIDE_MICROG_PACKAGES_FOR_PACKAGE,
                            userInfo.id);
                    if (TextUtils.isEmpty(packageList)) {
                        continue;
                if (userId != UserHandle.USER_ALL) {
                    mAppsFilter.updateHiddenMicrogPackagesConfig(snapshot, userId,
                            getHiddenMicrogPackagesForCaller(resolver, userId));
                    return;
                }

                    final ArraySet<String> packageNames = new ArraySet<>();
                    for (String packageName : packageList.split(",")) {
                        final String trimmedPackageName = packageName.trim();
                        if (!trimmedPackageName.isEmpty()) {
                            packageNames.add(trimmedPackageName);
                        }
                    }
                    if (!packageNames.isEmpty()) {
                final SparseArray<ArraySet<String>> packageNamesByUser = new SparseArray<>();
                for (UserInfo userInfo : snapshot.getUserInfos()) {
                    final ArraySet<String> packageNames =
                            getHiddenMicrogPackagesForCaller(resolver, userInfo.id);
                    if (packageNames != null) {
                        packageNamesByUser.put(userInfo.id, packageNames);
                    }
                }
@@ -4419,6 +4411,27 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        }
    }

    @Nullable
    private static ArraySet<String> getHiddenMicrogPackagesForCaller(
            @NonNull ContentResolver resolver, @UserIdInt int userId) {
        final String packageList = android.provider.Settings.System.getStringForUser(
                resolver,
                android.provider.Settings.System.HIDE_MICROG_PACKAGES_FOR_PACKAGE,
                userId);
        if (TextUtils.isEmpty(packageList)) {
            return null;
        }

        final ArraySet<String> packageNames = new ArraySet<>();
        for (String packageName : packageList.split(",")) {
            final String trimmedPackageName = packageName.trim();
            if (!trimmedPackageName.isEmpty()) {
                packageNames.add(trimmedPackageName);
            }
        }
        return packageNames.isEmpty() ? null : packageNames;
    }

    //TODO: b/111402650
    private void disableSkuSpecificApps() {
        String[] apkList = mContext.getResources().getStringArray(