diff --git a/src/com/android/settings/applications/AppStateClonedAppsBridge.java b/src/com/android/settings/applications/AppStateClonedAppsBridge.java index de0251dfffb..238b277c854 100644 --- a/src/com/android/settings/applications/AppStateClonedAppsBridge.java +++ b/src/com/android/settings/applications/AppStateClonedAppsBridge.java @@ -24,6 +24,7 @@ import static com.android.settingslib.applications.ApplicationsState.AppFilter; import android.content.Context; import android.util.Log; +import com.android.settings.custom.utils.AppUtils; import com.android.settings.Utils; import com.android.settingslib.applications.ApplicationsState; @@ -42,13 +43,13 @@ public class AppStateClonedAppsBridge extends AppStateBaseBridge{ private final List mAllowedApps; private List mCloneProfileApps = new ArrayList<>(); private int mCloneUserId; + private AppUtils appUtils = new AppUtils(); public AppStateClonedAppsBridge(Context context, ApplicationsState appState, Callback callback) { super(appState, callback); mContext = context; - mAllowedApps = Arrays.asList(mContext.getResources() - .getStringArray(com.android.internal.R.array.cloneable_apps)); + mAllowedApps = appUtils.getCloneableAppListStr(mContext); } @Override diff --git a/src/com/android/settings/applications/ClonedAppsPreferenceController.java b/src/com/android/settings/applications/ClonedAppsPreferenceController.java index d134ceccd88..38f6dcc80f0 100644 --- a/src/com/android/settings/applications/ClonedAppsPreferenceController.java +++ b/src/com/android/settings/applications/ClonedAppsPreferenceController.java @@ -30,6 +30,7 @@ import androidx.lifecycle.OnLifecycleEvent; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; +import com.android.settings.custom.utils.AppUtils; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; @@ -45,6 +46,7 @@ public class ClonedAppsPreferenceController extends BasePreferenceController implements LifecycleObserver { private Preference mPreference; private Context mContext; + private AppUtils appUtils = new AppUtils(); public ClonedAppsPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); @@ -81,9 +83,7 @@ public class ClonedAppsPreferenceController extends BasePreferenceController @Override protected Integer[] doInBackground(Void... unused) { // Get list of allowlisted cloneable apps. - List cloneableApps = Arrays.asList( - mContext.getResources().getStringArray( - com.android.internal.R.array.cloneable_apps)); + List cloneableApps = appUtils.getCloneableAppListStr(mContext); List primaryUserApps = mContext.getPackageManager() .getInstalledPackagesAsUser(/* flags*/ 0, UserHandle.myUserId()).stream() .map(x -> x.packageName).toList(); diff --git a/src/com/android/settings/custom/utils/AppUtils.kt b/src/com/android/settings/custom/utils/AppUtils.kt new file mode 100644 index 00000000000..353b16f9fdc --- /dev/null +++ b/src/com/android/settings/custom/utils/AppUtils.kt @@ -0,0 +1,30 @@ +package com.android.settings.custom.utils + +import android.content.Context +import android.content.pm.PackageInfo +import android.os.UserHandle + +class AppUtils { + public fun getCloneableAppList(context: Context): List { + var packageList: List = + context.getPackageManager().getInstalledPackagesAsUser(/* flags*/ 0, UserHandle.myUserId()) + + var filteredList: List = packageList.filter { + val packageName = it.applicationInfo?.packageName + val isSystemApp = it.applicationInfo?.isSystemApp() + val isResourceOverlay = it.applicationInfo?.isResourceOverlay() + + val cloneableApps = context.resources.getStringArray(com.android.internal.R.array.cloneable_apps)?.toList() + + cloneableApps?.contains(packageName) == true || (isSystemApp == false && isResourceOverlay == false) + } + + return filteredList + } + + public fun getCloneableAppListStr(context: Context): List { + return getCloneableAppList(context).map { + x -> x.packageName + }.toList() + } +}