diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java index 6edbf60d933..ffa22368743 100644 --- a/src/com/android/settings/applications/AdvancedAppSettings.java +++ b/src/com/android/settings/applications/AdvancedAppSettings.java @@ -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 { - 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 { - 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 diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 14277c995c1..1ef304f74ff 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -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 @@ -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(); } @@ -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)); @@ -1187,34 +1178,31 @@ 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 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 list = new ArrayList<>(grantedGroupLabels); + if (additionalGrantedPermissionCount > 0) { + // N additional permissions. + list.add(res.getQuantityString( + R.plurals.runtime_permissions_additional_count, + additionalGrantedPermissionCount, additionalGrantedPermissionCount)); + } + if (list.size() == 0) { summary = res.getString( - R.string.runtime_permissions_summary_no_permissions_requested); + R.string.runtime_permissions_summary_no_permissions_granted); } else { - final ArrayList list = new ArrayList(Arrays.asList(groupLabels)); - if (additionalCounts > 0) { - // N additional permissions. - list.add(res.getQuantityString( - R.plurals.runtime_permissions_additional_count, - additionalCounts, additionalCounts)); - } - if (list.size() == 0) { - summary = res.getString( - R.string.runtime_permissions_summary_no_permissions_granted); - } else { - summary = ListFormatter.getInstance().format(list); - } + summary = ListFormatter.getInstance().format(list); } } mPermissionsPreference.setSummary(summary); diff --git a/src/com/android/settings/applications/PermissionsSummaryHelper.java b/src/com/android/settings/applications/PermissionsSummaryHelper.java index 859e4468ca4..bac6b24b4d9 100644 --- a/src/com/android/settings/applications/PermissionsSummaryHelper.java +++ b/src/com/android/settings/applications/PermissionsSummaryHelper.java @@ -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; -public class PermissionsSummaryHelper { +import java.text.Collator; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; - 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 class PermissionsSummaryHelper { - 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); - } - - 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); - } - - private static BroadcastReceiver sendPermissionRequest(Context context, String action, - Intent request, final PermissionsResultCallback callback) { - BroadcastReceiver receiver = new BroadcastReceiver() { + 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 onReceive(Context context, Intent intent) { - int[] counts = intent.getIntArrayExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT); + public void onGetAppPermissions( + @NonNull List permissions) { + final int permissionCount = permissions.size(); - CharSequence[] groups = intent.getCharSequenceArrayExtra( - Intent.EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT); + int grantedStandardCount = 0; + int grantedAdditionalCount = 0; + int requestedCount = 0; + List grantedStandardLabels = new ArrayList<>(); - callback.onPermissionSummaryResult(counts, groups); + 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++; + } + } + } - context.unregisterReceiver(this); + Collator collator = Collator.getInstance(); + collator.setStrength(Collator.PRIMARY); + Collections.sort(grantedStandardLabels, collator); + + 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 grantedGroupLabels) { + /* do nothing - stub */ + } } }