Loading src/com/android/settings/applications/appops/AppOpsCategory.java +8 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.util.IconDrawableFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; Loading Loading @@ -60,6 +61,7 @@ public class AppOpsCategory extends ListFragment implements AppListAdapter mAdapter; String mCurrentPkgName; private int mCurrentPkgUid; public AppOpsCategory() { } Loading Loading @@ -264,10 +266,12 @@ public class AppOpsCategory extends ListFragment implements private final LayoutInflater mInflater; private final AppOpsState mState; private final boolean mUserControlled; private final Context mContext; List<AppOpEntry> mList; public AppListAdapter(Context context, AppOpsState state, boolean userControlled) { mContext = context; mResources = context.getResources(); mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mState = state; Loading Loading @@ -309,7 +313,8 @@ public class AppOpsCategory extends ListFragment implements AppOpEntry item = getItem(position); ((ImageView) view.findViewById(R.id.app_icon)).setImageDrawable( item.getAppEntry().getIcon()); IconDrawableFactory.newInstance(mContext).getBadgedIcon( item.getAppEntry().getApplicationInfo())); ((TextView) view.findViewById(R.id.app_name)).setText(item.getAppEntry().getLabel()); if (mUserControlled) { ((TextView) view.findViewById(R.id.op_name)).setText( Loading Loading @@ -361,6 +366,7 @@ public class AppOpsCategory extends ListFragment implements // start new fragment to display extended information final Bundle args = new Bundle(); args.putString(AppOpsDetails.ARG_PACKAGE_NAME, mCurrentPkgName); args.putInt(AppOpsDetails.ARG_PACKAGE_UID, mCurrentPkgUid); new SubSettingLauncher(getContext()) .setDestination(AppOpsDetails.class.getName()) Loading Loading @@ -388,6 +394,7 @@ public class AppOpsCategory extends ListFragment implements entry.overridePrimaryOpMode(mode); } else { mCurrentPkgName = entry.getAppEntry().getApplicationInfo().packageName; mCurrentPkgUid = entry.getAppEntry().getApplicationInfo().uid; startApplicationDetailsActivity(); } } Loading src/com/android/settings/applications/appops/AppOpsDetails.java +10 −3 Original line number Diff line number Diff line Loading @@ -30,12 +30,14 @@ import android.content.pm.PermissionInfo; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.ListPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.util.IconDrawableFactory; import android.util.Log; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; Loading @@ -54,6 +56,7 @@ public class AppOpsDetails extends SettingsPreferenceFragment { static final String TAG = "AppOpsDetails"; public static final String ARG_PACKAGE_NAME = "package"; public static final String ARG_PACKAGE_UID = "package_uid"; private static final String KEY_HEADER = "header"; private AppOpsState mState; Loading Loading @@ -148,7 +151,8 @@ public class AppOpsDetails extends SettingsPreferenceFragment { final Activity activity = getActivity(); final Preference pref = EntityHeaderController .newInstance(getActivity(), this /* fragment */, null /* header */) .setIcon(mPm.getApplicationIcon(appInfo)) .setIcon(IconDrawableFactory.newInstance(getContext()) .getBadgedIcon(appInfo)) .setLabel(label) .setPackageName(appInfo.packageName) .setUid(appInfo.uid) Loading @@ -163,6 +167,8 @@ public class AppOpsDetails extends SettingsPreferenceFragment { private String retrieveAppEntry() { final Bundle args = getArguments(); String packageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null; int packageUserId = (args != null) ? UserHandle.getUserId(args.getInt(ARG_PACKAGE_UID)) : 0; if (packageName == null) { Intent intent = (args == null) ? getActivity().getIntent() : (Intent) args.getParcelable("intent"); Loading @@ -171,9 +177,10 @@ public class AppOpsDetails extends SettingsPreferenceFragment { } } try { mPackageInfo = mPm.getPackageInfo(packageName, mPackageInfo = mPm.getPackageInfoAsUser(packageName, PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER); PackageManager.MATCH_ANY_USER, packageUserId); } catch (NameNotFoundException e) { Log.e(TAG, "Exception when retrieving package:" + packageName, e); mPackageInfo = null; Loading src/com/android/settings/applications/appops/AppOpsState.java +15 −35 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.content.SharedPreferences; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.os.UserHandle; import android.text.format.DateUtils; import android.util.Log; import android.util.SparseArray; Loading Loading @@ -292,7 +293,6 @@ public class AppOpsState { * This class holds the per-item data in our Loader. */ public static class AppEntry { private final AppOpsState mState; private final ApplicationInfo mInfo; private final File mApkFile; private final SparseArray<AppOpsManager.OpEntry> mOps Loading @@ -300,11 +300,9 @@ public class AppOpsState { private final SparseArray<AppOpEntry> mOpSwitches = new SparseArray<AppOpEntry>(); private String mLabel; private Drawable mIcon; private boolean mMounted; public AppEntry(AppOpsState state, ApplicationInfo info) { mState = state; mInfo = info; mApkFile = new File(info.sourceDir); } Loading @@ -330,30 +328,6 @@ public class AppOpsState { return mLabel; } public Drawable getIcon() { if (mIcon == null) { if (mApkFile.exists()) { mIcon = mInfo.loadIcon(mState.mPm); return mIcon; } else { mMounted = false; } } else if (!mMounted) { // If the app wasn't mounted but is now mounted, reload // its icon. if (mApkFile.exists()) { mMounted = true; mIcon = mInfo.loadIcon(mState.mPm); return mIcon; } } else { return mIcon; } return mState.mContext.getDrawable( android.R.drawable.sym_def_app_icon); } @Override public String toString() { return mLabel; } Loading Loading @@ -602,12 +576,12 @@ public class AppOpsState { } private AppEntry getAppEntry(final Context context, final HashMap<String, AppEntry> appEntries, final String packageName, ApplicationInfo appInfo, boolean applyFilters) { final String packageName, ApplicationInfo appInfo, int userId, boolean applyFilters) { if (appInfo == null) { try { appInfo = mPm.getApplicationInfo(packageName, PackageManager.GET_DISABLED_COMPONENTS); appInfo = mPm.getApplicationInfoAsUser(packageName, PackageManager.GET_DISABLED_COMPONENTS, userId); } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, "Unable to find info for package " + packageName); return null; Loading @@ -627,11 +601,11 @@ public class AppOpsState { } } AppEntry appEntry = appEntries.get(packageName); AppEntry appEntry = appEntries.get(String.format("%d_%s", userId, packageName)); if (appEntry == null) { appEntry = new AppEntry(this, appInfo); appEntry.loadLabel(context); appEntries.put(packageName, appEntry); appEntries.put(String.format("%d_%s", userId, packageName), appEntry); } return appEntry; } Loading Loading @@ -715,8 +689,9 @@ public class AppOpsState { if (pkgs != null) { for (int i=0; i<pkgs.size(); i++) { AppOpsManager.PackageOps pkgOps = pkgs.get(i); int userId = UserHandle.getUserId(pkgOps.getUid()); AppEntry appEntry = getAppEntry(context, appEntries, pkgOps.getPackageName(), null, applyFilters); userId, applyFilters); if (appEntry == null) { continue; } Loading @@ -740,7 +715,8 @@ public class AppOpsState { if (packageName != null) { apps = new ArrayList<PackageInfo>(); try { PackageInfo pi = mPm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); PackageInfo pi = mPm.getPackageInfoAsUser(packageName, PackageManager.GET_PERMISSIONS, UserHandle.getUserId(uid)); apps.add(pi); } catch (NameNotFoundException e) { } Loading @@ -751,8 +727,12 @@ public class AppOpsState { } for (int i=0; i<apps.size(); i++) { PackageInfo appInfo = apps.get(i); int userId = UserHandle.getUserId(uid); if (appInfo.applicationInfo != null) { userId = UserHandle.getUserId(appInfo.applicationInfo.uid); } AppEntry appEntry = getAppEntry(context, appEntries, appInfo.packageName, appInfo.applicationInfo, applyFilters); appInfo.applicationInfo, userId, applyFilters); if (appEntry == null) { continue; } Loading Loading
src/com/android/settings/applications/appops/AppOpsCategory.java +8 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.util.IconDrawableFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; Loading Loading @@ -60,6 +61,7 @@ public class AppOpsCategory extends ListFragment implements AppListAdapter mAdapter; String mCurrentPkgName; private int mCurrentPkgUid; public AppOpsCategory() { } Loading Loading @@ -264,10 +266,12 @@ public class AppOpsCategory extends ListFragment implements private final LayoutInflater mInflater; private final AppOpsState mState; private final boolean mUserControlled; private final Context mContext; List<AppOpEntry> mList; public AppListAdapter(Context context, AppOpsState state, boolean userControlled) { mContext = context; mResources = context.getResources(); mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mState = state; Loading Loading @@ -309,7 +313,8 @@ public class AppOpsCategory extends ListFragment implements AppOpEntry item = getItem(position); ((ImageView) view.findViewById(R.id.app_icon)).setImageDrawable( item.getAppEntry().getIcon()); IconDrawableFactory.newInstance(mContext).getBadgedIcon( item.getAppEntry().getApplicationInfo())); ((TextView) view.findViewById(R.id.app_name)).setText(item.getAppEntry().getLabel()); if (mUserControlled) { ((TextView) view.findViewById(R.id.op_name)).setText( Loading Loading @@ -361,6 +366,7 @@ public class AppOpsCategory extends ListFragment implements // start new fragment to display extended information final Bundle args = new Bundle(); args.putString(AppOpsDetails.ARG_PACKAGE_NAME, mCurrentPkgName); args.putInt(AppOpsDetails.ARG_PACKAGE_UID, mCurrentPkgUid); new SubSettingLauncher(getContext()) .setDestination(AppOpsDetails.class.getName()) Loading Loading @@ -388,6 +394,7 @@ public class AppOpsCategory extends ListFragment implements entry.overridePrimaryOpMode(mode); } else { mCurrentPkgName = entry.getAppEntry().getApplicationInfo().packageName; mCurrentPkgUid = entry.getAppEntry().getApplicationInfo().uid; startApplicationDetailsActivity(); } } Loading
src/com/android/settings/applications/appops/AppOpsDetails.java +10 −3 Original line number Diff line number Diff line Loading @@ -30,12 +30,14 @@ import android.content.pm.PermissionInfo; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.ListPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.util.IconDrawableFactory; import android.util.Log; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; Loading @@ -54,6 +56,7 @@ public class AppOpsDetails extends SettingsPreferenceFragment { static final String TAG = "AppOpsDetails"; public static final String ARG_PACKAGE_NAME = "package"; public static final String ARG_PACKAGE_UID = "package_uid"; private static final String KEY_HEADER = "header"; private AppOpsState mState; Loading Loading @@ -148,7 +151,8 @@ public class AppOpsDetails extends SettingsPreferenceFragment { final Activity activity = getActivity(); final Preference pref = EntityHeaderController .newInstance(getActivity(), this /* fragment */, null /* header */) .setIcon(mPm.getApplicationIcon(appInfo)) .setIcon(IconDrawableFactory.newInstance(getContext()) .getBadgedIcon(appInfo)) .setLabel(label) .setPackageName(appInfo.packageName) .setUid(appInfo.uid) Loading @@ -163,6 +167,8 @@ public class AppOpsDetails extends SettingsPreferenceFragment { private String retrieveAppEntry() { final Bundle args = getArguments(); String packageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null; int packageUserId = (args != null) ? UserHandle.getUserId(args.getInt(ARG_PACKAGE_UID)) : 0; if (packageName == null) { Intent intent = (args == null) ? getActivity().getIntent() : (Intent) args.getParcelable("intent"); Loading @@ -171,9 +177,10 @@ public class AppOpsDetails extends SettingsPreferenceFragment { } } try { mPackageInfo = mPm.getPackageInfo(packageName, mPackageInfo = mPm.getPackageInfoAsUser(packageName, PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER); PackageManager.MATCH_ANY_USER, packageUserId); } catch (NameNotFoundException e) { Log.e(TAG, "Exception when retrieving package:" + packageName, e); mPackageInfo = null; Loading
src/com/android/settings/applications/appops/AppOpsState.java +15 −35 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.content.SharedPreferences; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.os.UserHandle; import android.text.format.DateUtils; import android.util.Log; import android.util.SparseArray; Loading Loading @@ -292,7 +293,6 @@ public class AppOpsState { * This class holds the per-item data in our Loader. */ public static class AppEntry { private final AppOpsState mState; private final ApplicationInfo mInfo; private final File mApkFile; private final SparseArray<AppOpsManager.OpEntry> mOps Loading @@ -300,11 +300,9 @@ public class AppOpsState { private final SparseArray<AppOpEntry> mOpSwitches = new SparseArray<AppOpEntry>(); private String mLabel; private Drawable mIcon; private boolean mMounted; public AppEntry(AppOpsState state, ApplicationInfo info) { mState = state; mInfo = info; mApkFile = new File(info.sourceDir); } Loading @@ -330,30 +328,6 @@ public class AppOpsState { return mLabel; } public Drawable getIcon() { if (mIcon == null) { if (mApkFile.exists()) { mIcon = mInfo.loadIcon(mState.mPm); return mIcon; } else { mMounted = false; } } else if (!mMounted) { // If the app wasn't mounted but is now mounted, reload // its icon. if (mApkFile.exists()) { mMounted = true; mIcon = mInfo.loadIcon(mState.mPm); return mIcon; } } else { return mIcon; } return mState.mContext.getDrawable( android.R.drawable.sym_def_app_icon); } @Override public String toString() { return mLabel; } Loading Loading @@ -602,12 +576,12 @@ public class AppOpsState { } private AppEntry getAppEntry(final Context context, final HashMap<String, AppEntry> appEntries, final String packageName, ApplicationInfo appInfo, boolean applyFilters) { final String packageName, ApplicationInfo appInfo, int userId, boolean applyFilters) { if (appInfo == null) { try { appInfo = mPm.getApplicationInfo(packageName, PackageManager.GET_DISABLED_COMPONENTS); appInfo = mPm.getApplicationInfoAsUser(packageName, PackageManager.GET_DISABLED_COMPONENTS, userId); } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, "Unable to find info for package " + packageName); return null; Loading @@ -627,11 +601,11 @@ public class AppOpsState { } } AppEntry appEntry = appEntries.get(packageName); AppEntry appEntry = appEntries.get(String.format("%d_%s", userId, packageName)); if (appEntry == null) { appEntry = new AppEntry(this, appInfo); appEntry.loadLabel(context); appEntries.put(packageName, appEntry); appEntries.put(String.format("%d_%s", userId, packageName), appEntry); } return appEntry; } Loading Loading @@ -715,8 +689,9 @@ public class AppOpsState { if (pkgs != null) { for (int i=0; i<pkgs.size(); i++) { AppOpsManager.PackageOps pkgOps = pkgs.get(i); int userId = UserHandle.getUserId(pkgOps.getUid()); AppEntry appEntry = getAppEntry(context, appEntries, pkgOps.getPackageName(), null, applyFilters); userId, applyFilters); if (appEntry == null) { continue; } Loading @@ -740,7 +715,8 @@ public class AppOpsState { if (packageName != null) { apps = new ArrayList<PackageInfo>(); try { PackageInfo pi = mPm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); PackageInfo pi = mPm.getPackageInfoAsUser(packageName, PackageManager.GET_PERMISSIONS, UserHandle.getUserId(uid)); apps.add(pi); } catch (NameNotFoundException e) { } Loading @@ -751,8 +727,12 @@ public class AppOpsState { } for (int i=0; i<apps.size(); i++) { PackageInfo appInfo = apps.get(i); int userId = UserHandle.getUserId(uid); if (appInfo.applicationInfo != null) { userId = UserHandle.getUserId(appInfo.applicationInfo.uid); } AppEntry appEntry = getAppEntry(context, appEntries, appInfo.packageName, appInfo.applicationInfo, applyFilters); appInfo.applicationInfo, userId, applyFilters); if (appEntry == null) { continue; } Loading