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:
@@ -24,6 +24,7 @@ import static com.android.settingslib.applications.ApplicationsState.AppFilter;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.settings.custom.utils.AppUtils;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settingslib.applications.ApplicationsState;
|
import com.android.settingslib.applications.ApplicationsState;
|
||||||
|
|
||||||
@@ -42,13 +43,13 @@ public class AppStateClonedAppsBridge extends AppStateBaseBridge{
|
|||||||
private final List<String> mAllowedApps;
|
private final List<String> mAllowedApps;
|
||||||
private List<String> mCloneProfileApps = new ArrayList<>();
|
private List<String> mCloneProfileApps = new ArrayList<>();
|
||||||
private int mCloneUserId;
|
private int mCloneUserId;
|
||||||
|
private AppUtils appUtils = new AppUtils();
|
||||||
|
|
||||||
public AppStateClonedAppsBridge(Context context, ApplicationsState appState,
|
public AppStateClonedAppsBridge(Context context, ApplicationsState appState,
|
||||||
Callback callback) {
|
Callback callback) {
|
||||||
super(appState, callback);
|
super(appState, callback);
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mAllowedApps = Arrays.asList(mContext.getResources()
|
mAllowedApps = appUtils.getCloneableAppListStr(mContext);
|
||||||
.getStringArray(com.android.internal.R.array.cloneable_apps));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import androidx.lifecycle.OnLifecycleEvent;
|
|||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import com.android.settings.custom.utils.AppUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
@@ -45,6 +46,7 @@ public class ClonedAppsPreferenceController extends BasePreferenceController
|
|||||||
implements LifecycleObserver {
|
implements LifecycleObserver {
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
private AppUtils appUtils = new AppUtils();
|
||||||
|
|
||||||
public ClonedAppsPreferenceController(Context context, String preferenceKey) {
|
public ClonedAppsPreferenceController(Context context, String preferenceKey) {
|
||||||
super(context, preferenceKey);
|
super(context, preferenceKey);
|
||||||
@@ -81,9 +83,7 @@ public class ClonedAppsPreferenceController extends BasePreferenceController
|
|||||||
@Override
|
@Override
|
||||||
protected Integer[] doInBackground(Void... unused) {
|
protected Integer[] doInBackground(Void... unused) {
|
||||||
// Get list of allowlisted cloneable apps.
|
// Get list of allowlisted cloneable apps.
|
||||||
List<String> cloneableApps = Arrays.asList(
|
List<String> cloneableApps = appUtils.getCloneableAppListStr(mContext);
|
||||||
mContext.getResources().getStringArray(
|
|
||||||
com.android.internal.R.array.cloneable_apps));
|
|
||||||
List<String> primaryUserApps = mContext.getPackageManager()
|
List<String> primaryUserApps = mContext.getPackageManager()
|
||||||
.getInstalledPackagesAsUser(/* flags*/ 0, UserHandle.myUserId()).stream()
|
.getInstalledPackagesAsUser(/* flags*/ 0, UserHandle.myUserId()).stream()
|
||||||
.map(x -> x.packageName).toList();
|
.map(x -> x.packageName).toList();
|
||||||
|
|||||||
30
src/com/android/settings/custom/utils/AppUtils.kt
Normal file
30
src/com/android/settings/custom/utils/AppUtils.kt
Normal 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()
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user