Settings: Make all user apps cloneable

* Filter system apps and overlays
* Include pre-defined apps in com.android.internal.R.array.cloneable_apps

Change-Id: Ia08a1095cd2aec9c6d77d055f1344e57225a44d5
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: AnierinB <anierin@evolution-x.org>
This commit is contained in:
someone5678
2023-10-18 21:23:42 +09:00
committed by Joey
parent 9051e97b8c
commit 53b71e539d
3 changed files with 36 additions and 5 deletions

View File

@@ -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<String> mAllowedApps;
private List<String> 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

View File

@@ -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<String> cloneableApps = Arrays.asList(
mContext.getResources().getStringArray(
com.android.internal.R.array.cloneable_apps));
List<String> cloneableApps = appUtils.getCloneableAppListStr(mContext);
List<String> primaryUserApps = mContext.getPackageManager()
.getInstalledPackagesAsUser(/* flags*/ 0, UserHandle.myUserId()).stream()
.map(x -> x.packageName).toList();

View File

@@ -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<PackageInfo> {
var packageList: List<PackageInfo> =
context.getPackageManager().getInstalledPackagesAsUser(/* flags*/ 0, UserHandle.myUserId())
var filteredList: List<PackageInfo> = 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<String> {
return getCloneableAppList(context).map {
x -> x.packageName
}.toList()
}
}