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

Commit 55a52fd9 authored by Oli Thompson's avatar Oli Thompson Committed by Android (Google) Code Review
Browse files

Merge "Backup connected apps settings" into main

parents 81a2c38a 383b7960
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@ import static android.app.admin.DevicePolicyResources.Strings.Settings.ONLY_CONN
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
import static android.provider.Settings.ACTION_MANAGE_CROSS_PROFILE_ACCESS;
import static android.provider.Settings.Global.CONNECTED_APPS_ALLOWED_PACKAGES;
import static android.provider.Settings.Global.CONNECTED_APPS_DISALLOWED_PACKAGES;

import android.Manifest;
import android.annotation.UserIdInt;
@@ -35,6 +37,7 @@ import android.app.ActionBar;
import android.app.AppOpsManager;
import android.app.admin.DevicePolicyEventLogger;
import android.app.admin.DevicePolicyManager;
import android.app.admin.flags.Flags;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
@@ -49,6 +52,7 @@ import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.stats.devicepolicy.DevicePolicyEnums;
import android.util.IconDrawableFactory;
import android.view.LayoutInflater;
@@ -68,6 +72,10 @@ import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.widget.LayoutPreference;

import java.util.Collections;
import java.util.Optional;
import java.util.Set;

public class InteractAcrossProfilesDetails extends AppInfoBase
        implements Preference.OnPreferenceClickListener {

@@ -381,6 +389,7 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
    private void enableInteractAcrossProfiles(boolean newState) {
        mCrossProfileApps.setInteractAcrossProfilesAppOp(
                mPackageName, newState ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED);
        setUserPreferenceForPackage(newState, mPackageName);
    }

    private void handleInstallBannerClick() {
@@ -552,4 +561,40 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
        }
        return ACTION_MANAGE_CROSS_PROFILE_ACCESS.equals(intent.getAction());
    }

    private void setUserPreferenceForPackage(boolean enabled, String crossProfilePackage) {
        if (!Flags.backupConnectedAppsSettings()) {
            return;
        }
        String allowedPackagesString = Settings.Global.getString(getContentResolver(),
                CONNECTED_APPS_ALLOWED_PACKAGES);
        String disallowedPackagesString = Settings.Global.getString(getContentResolver(),
                CONNECTED_APPS_DISALLOWED_PACKAGES);

        Set<String> allowedPackagesSet = getSetFromString(allowedPackagesString);
        Set<String> disallowedPackagesSet = getSetFromString(disallowedPackagesString);

        if (enabled) {
            allowedPackagesSet.add(crossProfilePackage);
            disallowedPackagesSet.remove(crossProfilePackage);

        } else {
            allowedPackagesSet.remove(crossProfilePackage);
            disallowedPackagesSet.add(crossProfilePackage);
        }

        Settings.Global.putString(getContentResolver(),
                CONNECTED_APPS_ALLOWED_PACKAGES,
                String.join(",", allowedPackagesSet));

        Settings.Global.putString(getContentResolver(),
                CONNECTED_APPS_DISALLOWED_PACKAGES,
                String.join(",", disallowedPackagesSet));
    }

    private Set<String> getSetFromString(String packages) {
        return Optional.ofNullable(packages)
                .map(pkg -> Set.of(pkg.split(",")))
                .orElse(Collections.emptySet());
    }
}