Backup connected apps settings
Save the preference for connected apps for backup and restore Flag: android.app.admin.backup_connected_apps_settings Bug: 175067666 Test: manual Change-Id: Ic46fbd1ab82f551ecf89caf800e41d6afe48fc68
This commit is contained in:
@@ -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_AWARE;
|
||||||
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
|
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.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.Manifest;
|
||||||
import android.annotation.UserIdInt;
|
import android.annotation.UserIdInt;
|
||||||
@@ -35,6 +37,7 @@ import android.app.ActionBar;
|
|||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.app.admin.DevicePolicyEventLogger;
|
import android.app.admin.DevicePolicyEventLogger;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
|
import android.app.admin.flags.Flags;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -49,6 +52,7 @@ import android.graphics.drawable.Drawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.stats.devicepolicy.DevicePolicyEnums;
|
import android.stats.devicepolicy.DevicePolicyEnums;
|
||||||
import android.util.IconDrawableFactory;
|
import android.util.IconDrawableFactory;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
@@ -68,6 +72,10 @@ import com.android.settingslib.RestrictedLockUtils;
|
|||||||
import com.android.settingslib.RestrictedSwitchPreference;
|
import com.android.settingslib.RestrictedSwitchPreference;
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class InteractAcrossProfilesDetails extends AppInfoBase
|
public class InteractAcrossProfilesDetails extends AppInfoBase
|
||||||
implements Preference.OnPreferenceClickListener {
|
implements Preference.OnPreferenceClickListener {
|
||||||
|
|
||||||
@@ -381,6 +389,7 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
|
|||||||
private void enableInteractAcrossProfiles(boolean newState) {
|
private void enableInteractAcrossProfiles(boolean newState) {
|
||||||
mCrossProfileApps.setInteractAcrossProfilesAppOp(
|
mCrossProfileApps.setInteractAcrossProfilesAppOp(
|
||||||
mPackageName, newState ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED);
|
mPackageName, newState ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED);
|
||||||
|
setUserPreferenceForPackage(newState, mPackageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleInstallBannerClick() {
|
private void handleInstallBannerClick() {
|
||||||
@@ -552,4 +561,40 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
|
|||||||
}
|
}
|
||||||
return ACTION_MANAGE_CROSS_PROFILE_ACCESS.equals(intent.getAction());
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user