Loading src/com/android/settings/applications/AdvancedAppSettings.java +6 −49 Original line number Diff line number Diff line Loading @@ -123,66 +123,23 @@ public class AdvancedAppSettings extends SettingsPreferenceFragment implements private final PermissionsResultCallback mPermissionCallback = new PermissionsResultCallback() { @Override public void onPermissionSummaryResult(int[] counts, CharSequence[] groupLabels) { public void onAppWithPermissionsCountsResult(int standardGrantedPermissionAppCount, int standardUsedPermissionAppCount) { if (getActivity() == null) { return; } mPermissionReceiver = null; if (counts != null) { if (standardUsedPermissionAppCount != 0) { mAppPermsPreference.setSummary(getContext().getString( R.string.app_permissions_summary, counts[0], counts[1])); R.string.app_permissions_summary, standardGrantedPermissionAppCount, standardUsedPermissionAppCount)); } else { mAppPermsPreference.setSummary(null); } } }; private class CountAppsWithOverlayPermission extends AsyncTask<AppStateOverlayBridge, Void, Integer> { int numOfPackagesRequestedPermission = 0; @Override protected Integer doInBackground(AppStateOverlayBridge... params) { AppStateOverlayBridge overlayBridge = params[0]; numOfPackagesRequestedPermission = overlayBridge .getNumberOfPackagesWithPermission(); return overlayBridge.getNumberOfPackagesCanDrawOverlay(); } @Override protected void onPostExecute(Integer result) { // checks if fragment is still there before updating the preference object if (isAdded()) { mSystemAlertWindowPreference.setSummary(getContext().getString( R.string.system_alert_window_summary, result, numOfPackagesRequestedPermission)); } } } private class CountAppsWithWriteSettingsPermission extends AsyncTask<AppStateWriteSettingsBridge, Void, Integer> { int numOfPackagesRequestedPermission = 0; @Override protected Integer doInBackground(AppStateWriteSettingsBridge... params) { AppStateWriteSettingsBridge writeSettingsBridge = params[0]; numOfPackagesRequestedPermission = writeSettingsBridge .getNumberOfPackagesWithPermission(); return writeSettingsBridge.getNumberOfPackagesCanWriteSettings(); } @Override protected void onPostExecute(Integer result) { // checks if fragment is still there before updating the preference object if (isAdded()) { mWriteSettingsPreference.setSummary(getContext().getString( R.string.write_settings_summary, result, numOfPackagesRequestedPermission)); } } } public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override Loading src/com/android/settings/applications/InstalledAppDetails.java +19 −31 Original line number Diff line number Diff line Loading @@ -179,8 +179,6 @@ public class InstalledAppDetails extends AppInfoBase protected ProcStatsData mStatsManager; protected ProcStatsPackageEntry mStats; private BroadcastReceiver mPermissionReceiver; private boolean handleDisableable(Button button) { boolean disableable = false; // Try to prevent the user from bricking their phone Loading Loading @@ -356,11 +354,6 @@ public class InstalledAppDetails extends AppInfoBase @Override public void onDestroy() { TrafficStats.closeQuietly(mStatsSession); if (mPermissionReceiver != null) { getContext().unregisterReceiver(mPermissionReceiver); mPermissionReceiver = null; } super.onDestroy(); } Loading Loading @@ -564,10 +557,8 @@ public class InstalledAppDetails extends AppInfoBase // Update the preference summaries. Activity context = getActivity(); mStoragePreference.setSummary(AppStorageSettings.getSummary(mAppEntry, context)); if (mPermissionReceiver != null) { getContext().unregisterReceiver(mPermissionReceiver); } mPermissionReceiver = PermissionsSummaryHelper.getPermissionSummary(getContext(), PermissionsSummaryHelper.getPermissionSummary(getContext(), mPackageName, mPermissionCallback); mLaunchPreference.setSummary(AppUtils.getLaunchByDefaultSummary(mAppEntry, mUsbManager, mPm, context)); Loading Loading @@ -1187,27 +1178,25 @@ public class InstalledAppDetails extends AppInfoBase private final PermissionsResultCallback mPermissionCallback = new PermissionsResultCallback() { @Override public void onPermissionSummaryResult(int[] counts, CharSequence[] groupLabels) { public void onPermissionSummaryResult(int standardGrantedPermissionCount, int requestedPermissionCount, int additionalGrantedPermissionCount, List<CharSequence> grantedGroupLabels) { if (getActivity() == null) { return; } mPermissionReceiver = null; final Resources res = getResources(); CharSequence summary = null; if (counts != null) { int totalCount = counts[1]; int additionalCounts = counts[2]; if (totalCount == 0) { if (requestedPermissionCount == 0) { summary = res.getString( R.string.runtime_permissions_summary_no_permissions_requested); } else { final ArrayList<CharSequence> list = new ArrayList(Arrays.asList(groupLabels)); if (additionalCounts > 0) { final ArrayList<CharSequence> list = new ArrayList<>(grantedGroupLabels); if (additionalGrantedPermissionCount > 0) { // N additional permissions. list.add(res.getQuantityString( R.plurals.runtime_permissions_additional_count, additionalCounts, additionalCounts)); additionalGrantedPermissionCount, additionalGrantedPermissionCount)); } if (list.size() == 0) { summary = res.getString( Loading @@ -1216,7 +1205,6 @@ public class InstalledAppDetails extends AppInfoBase summary = ListFormatter.getInstance().format(list); } } } mPermissionsPreference.setSummary(summary); } }; Loading src/com/android/settings/applications/PermissionsSummaryHelper.java +50 −38 Original line number Diff line number Diff line Loading @@ -15,54 +15,66 @@ */ package com.android.settings.applications; import android.content.BroadcastReceiver; import android.annotation.NonNull; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.permission.RuntimePermissionPresentationInfo; import android.content.pm.permission.RuntimePermissionPresenter; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class PermissionsSummaryHelper { private static final String ACTION_PERM_COUNT_RESPONSE = "com.android.settings.PERM_COUNT_RESPONSE"; private static final String ACTION_APP_COUNT_RESPONSE = "com.android.settings.APP_COUNT_RESPONSE"; public static void getPermissionSummary(Context context, String pkg, final PermissionsResultCallback callback) { final RuntimePermissionPresenter presenter = RuntimePermissionPresenter.getInstance(context); presenter.getAppPermissions(pkg, new RuntimePermissionPresenter.OnResultCallback() { @Override public void onGetAppPermissions( @NonNull List<RuntimePermissionPresentationInfo> permissions) { final int permissionCount = permissions.size(); public static BroadcastReceiver getPermissionSummary(Context context, String pkg, PermissionsResultCallback callback) { Intent request = new Intent(Intent.ACTION_GET_PERMISSIONS_COUNT); request.putExtra(Intent.EXTRA_PACKAGE_NAME, pkg); return sendPermissionRequest(context, ACTION_PERM_COUNT_RESPONSE, request, callback); } int grantedStandardCount = 0; int grantedAdditionalCount = 0; int requestedCount = 0; List<CharSequence> grantedStandardLabels = new ArrayList<>(); public static BroadcastReceiver getAppWithPermissionsCounts(Context context, PermissionsResultCallback callback) { Intent request = new Intent(Intent.ACTION_GET_PERMISSIONS_COUNT); return sendPermissionRequest(context, ACTION_APP_COUNT_RESPONSE, request, callback); for (int i = 0; i < permissionCount; i++) { RuntimePermissionPresentationInfo permission = permissions.get(i); requestedCount++; if (permission.isGranted()) { if (permission.isStandard()) { grantedStandardLabels.add(permission.getLabel()); grantedStandardCount++; } else { grantedAdditionalCount++; } } } private static BroadcastReceiver sendPermissionRequest(Context context, String action, Intent request, final PermissionsResultCallback callback) { BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int[] counts = intent.getIntArrayExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT); CharSequence[] groups = intent.getCharSequenceArrayExtra( Intent.EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT); callback.onPermissionSummaryResult(counts, groups); Collator collator = Collator.getInstance(); collator.setStrength(Collator.PRIMARY); Collections.sort(grantedStandardLabels, collator); context.unregisterReceiver(this); callback.onPermissionSummaryResult(grantedStandardCount, requestedCount, grantedAdditionalCount, grantedStandardLabels); } }; context.registerReceiver(receiver, new IntentFilter(action)); request.putExtra(Intent.EXTRA_GET_PERMISSIONS_RESPONSE_INTENT, action); request.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); context.sendBroadcast(request); return receiver; }, null); } public interface PermissionsResultCallback { void onPermissionSummaryResult(int[] counts, CharSequence[] groupLabels); public static abstract class PermissionsResultCallback { public void onAppWithPermissionsCountsResult(int standardGrantedPermissionAppCount, int standardUsedPermissionAppCount) { /* do nothing - stub */ } public void onPermissionSummaryResult(int standardGrantedPermissionCount, int requestedPermissionCount, int additionalGrantedPermissionCount, List<CharSequence> grantedGroupLabels) { /* do nothing - stub */ } } } Loading
src/com/android/settings/applications/AdvancedAppSettings.java +6 −49 Original line number Diff line number Diff line Loading @@ -123,66 +123,23 @@ public class AdvancedAppSettings extends SettingsPreferenceFragment implements private final PermissionsResultCallback mPermissionCallback = new PermissionsResultCallback() { @Override public void onPermissionSummaryResult(int[] counts, CharSequence[] groupLabels) { public void onAppWithPermissionsCountsResult(int standardGrantedPermissionAppCount, int standardUsedPermissionAppCount) { if (getActivity() == null) { return; } mPermissionReceiver = null; if (counts != null) { if (standardUsedPermissionAppCount != 0) { mAppPermsPreference.setSummary(getContext().getString( R.string.app_permissions_summary, counts[0], counts[1])); R.string.app_permissions_summary, standardGrantedPermissionAppCount, standardUsedPermissionAppCount)); } else { mAppPermsPreference.setSummary(null); } } }; private class CountAppsWithOverlayPermission extends AsyncTask<AppStateOverlayBridge, Void, Integer> { int numOfPackagesRequestedPermission = 0; @Override protected Integer doInBackground(AppStateOverlayBridge... params) { AppStateOverlayBridge overlayBridge = params[0]; numOfPackagesRequestedPermission = overlayBridge .getNumberOfPackagesWithPermission(); return overlayBridge.getNumberOfPackagesCanDrawOverlay(); } @Override protected void onPostExecute(Integer result) { // checks if fragment is still there before updating the preference object if (isAdded()) { mSystemAlertWindowPreference.setSummary(getContext().getString( R.string.system_alert_window_summary, result, numOfPackagesRequestedPermission)); } } } private class CountAppsWithWriteSettingsPermission extends AsyncTask<AppStateWriteSettingsBridge, Void, Integer> { int numOfPackagesRequestedPermission = 0; @Override protected Integer doInBackground(AppStateWriteSettingsBridge... params) { AppStateWriteSettingsBridge writeSettingsBridge = params[0]; numOfPackagesRequestedPermission = writeSettingsBridge .getNumberOfPackagesWithPermission(); return writeSettingsBridge.getNumberOfPackagesCanWriteSettings(); } @Override protected void onPostExecute(Integer result) { // checks if fragment is still there before updating the preference object if (isAdded()) { mWriteSettingsPreference.setSummary(getContext().getString( R.string.write_settings_summary, result, numOfPackagesRequestedPermission)); } } } public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override Loading
src/com/android/settings/applications/InstalledAppDetails.java +19 −31 Original line number Diff line number Diff line Loading @@ -179,8 +179,6 @@ public class InstalledAppDetails extends AppInfoBase protected ProcStatsData mStatsManager; protected ProcStatsPackageEntry mStats; private BroadcastReceiver mPermissionReceiver; private boolean handleDisableable(Button button) { boolean disableable = false; // Try to prevent the user from bricking their phone Loading Loading @@ -356,11 +354,6 @@ public class InstalledAppDetails extends AppInfoBase @Override public void onDestroy() { TrafficStats.closeQuietly(mStatsSession); if (mPermissionReceiver != null) { getContext().unregisterReceiver(mPermissionReceiver); mPermissionReceiver = null; } super.onDestroy(); } Loading Loading @@ -564,10 +557,8 @@ public class InstalledAppDetails extends AppInfoBase // Update the preference summaries. Activity context = getActivity(); mStoragePreference.setSummary(AppStorageSettings.getSummary(mAppEntry, context)); if (mPermissionReceiver != null) { getContext().unregisterReceiver(mPermissionReceiver); } mPermissionReceiver = PermissionsSummaryHelper.getPermissionSummary(getContext(), PermissionsSummaryHelper.getPermissionSummary(getContext(), mPackageName, mPermissionCallback); mLaunchPreference.setSummary(AppUtils.getLaunchByDefaultSummary(mAppEntry, mUsbManager, mPm, context)); Loading Loading @@ -1187,27 +1178,25 @@ public class InstalledAppDetails extends AppInfoBase private final PermissionsResultCallback mPermissionCallback = new PermissionsResultCallback() { @Override public void onPermissionSummaryResult(int[] counts, CharSequence[] groupLabels) { public void onPermissionSummaryResult(int standardGrantedPermissionCount, int requestedPermissionCount, int additionalGrantedPermissionCount, List<CharSequence> grantedGroupLabels) { if (getActivity() == null) { return; } mPermissionReceiver = null; final Resources res = getResources(); CharSequence summary = null; if (counts != null) { int totalCount = counts[1]; int additionalCounts = counts[2]; if (totalCount == 0) { if (requestedPermissionCount == 0) { summary = res.getString( R.string.runtime_permissions_summary_no_permissions_requested); } else { final ArrayList<CharSequence> list = new ArrayList(Arrays.asList(groupLabels)); if (additionalCounts > 0) { final ArrayList<CharSequence> list = new ArrayList<>(grantedGroupLabels); if (additionalGrantedPermissionCount > 0) { // N additional permissions. list.add(res.getQuantityString( R.plurals.runtime_permissions_additional_count, additionalCounts, additionalCounts)); additionalGrantedPermissionCount, additionalGrantedPermissionCount)); } if (list.size() == 0) { summary = res.getString( Loading @@ -1216,7 +1205,6 @@ public class InstalledAppDetails extends AppInfoBase summary = ListFormatter.getInstance().format(list); } } } mPermissionsPreference.setSummary(summary); } }; Loading
src/com/android/settings/applications/PermissionsSummaryHelper.java +50 −38 Original line number Diff line number Diff line Loading @@ -15,54 +15,66 @@ */ package com.android.settings.applications; import android.content.BroadcastReceiver; import android.annotation.NonNull; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.permission.RuntimePermissionPresentationInfo; import android.content.pm.permission.RuntimePermissionPresenter; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class PermissionsSummaryHelper { private static final String ACTION_PERM_COUNT_RESPONSE = "com.android.settings.PERM_COUNT_RESPONSE"; private static final String ACTION_APP_COUNT_RESPONSE = "com.android.settings.APP_COUNT_RESPONSE"; public static void getPermissionSummary(Context context, String pkg, final PermissionsResultCallback callback) { final RuntimePermissionPresenter presenter = RuntimePermissionPresenter.getInstance(context); presenter.getAppPermissions(pkg, new RuntimePermissionPresenter.OnResultCallback() { @Override public void onGetAppPermissions( @NonNull List<RuntimePermissionPresentationInfo> permissions) { final int permissionCount = permissions.size(); public static BroadcastReceiver getPermissionSummary(Context context, String pkg, PermissionsResultCallback callback) { Intent request = new Intent(Intent.ACTION_GET_PERMISSIONS_COUNT); request.putExtra(Intent.EXTRA_PACKAGE_NAME, pkg); return sendPermissionRequest(context, ACTION_PERM_COUNT_RESPONSE, request, callback); } int grantedStandardCount = 0; int grantedAdditionalCount = 0; int requestedCount = 0; List<CharSequence> grantedStandardLabels = new ArrayList<>(); public static BroadcastReceiver getAppWithPermissionsCounts(Context context, PermissionsResultCallback callback) { Intent request = new Intent(Intent.ACTION_GET_PERMISSIONS_COUNT); return sendPermissionRequest(context, ACTION_APP_COUNT_RESPONSE, request, callback); for (int i = 0; i < permissionCount; i++) { RuntimePermissionPresentationInfo permission = permissions.get(i); requestedCount++; if (permission.isGranted()) { if (permission.isStandard()) { grantedStandardLabels.add(permission.getLabel()); grantedStandardCount++; } else { grantedAdditionalCount++; } } } private static BroadcastReceiver sendPermissionRequest(Context context, String action, Intent request, final PermissionsResultCallback callback) { BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int[] counts = intent.getIntArrayExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT); CharSequence[] groups = intent.getCharSequenceArrayExtra( Intent.EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT); callback.onPermissionSummaryResult(counts, groups); Collator collator = Collator.getInstance(); collator.setStrength(Collator.PRIMARY); Collections.sort(grantedStandardLabels, collator); context.unregisterReceiver(this); callback.onPermissionSummaryResult(grantedStandardCount, requestedCount, grantedAdditionalCount, grantedStandardLabels); } }; context.registerReceiver(receiver, new IntentFilter(action)); request.putExtra(Intent.EXTRA_GET_PERMISSIONS_RESPONSE_INTENT, action); request.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); context.sendBroadcast(request); return receiver; }, null); } public interface PermissionsResultCallback { void onPermissionSummaryResult(int[] counts, CharSequence[] groupLabels); public static abstract class PermissionsResultCallback { public void onAppWithPermissionsCountsResult(int standardGrantedPermissionAppCount, int standardUsedPermissionAppCount) { /* do nothing - stub */ } public void onPermissionSummaryResult(int standardGrantedPermissionCount, int requestedPermissionCount, int additionalGrantedPermissionCount, List<CharSequence> grantedGroupLabels) { /* do nothing - stub */ } } }