Loading src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java +45 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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() { Loading Loading @@ -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()); } } Loading
src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java +45 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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() { Loading Loading @@ -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()); } }