Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4143228b authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by android-build-merger
Browse files

Merge "Cleanup of the PackageInstaller API - Settings" into nyc-dev

am: c8d363e2

* commit 'c8d363e2':
  Cleanup of the PackageInstaller API - Settings

Change-Id: I67ea31a2464101d25b6d80b4b84dad596738e829
parents cd57db78 c8d363e2
Loading
Loading
Loading
Loading
+6 −49
Original line number Diff line number Diff line
@@ -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
+19 −31
Original line number Diff line number Diff line
@@ -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,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(
@@ -1216,7 +1205,6 @@ public class InstalledAppDetails extends AppInfoBase
                    summary = ListFormatter.getInstance().format(list);
                }
            }
            }
            mPermissionsPreference.setSummary(summary);
        }
    };
+50 −38
Original line number Diff line number Diff line
@@ -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 */
        }
    }
}