1ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue/* 2ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * Copyright (C) 2017 The Android Open Source Project 3ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * 4ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * Licensed under the Apache License, Version 2.0 (the "License"); 5ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * you may not use this file except in compliance with the License. 6ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * You may obtain a copy of the License at 7ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * 8ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * http://www.apache.org/licenses/LICENSE-2.0 9ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * 10ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * Unless required by applicable law or agreed to in writing, software 11ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * distributed under the License is distributed on an "AS IS" BASIS, 12ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * See the License for the specific language governing permissions and 14ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue * limitations under the License. 15ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue */ 16ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xuepackage com.android.settingslib.applications; 17ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 18ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xueimport android.annotation.NonNull; 19ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xueimport android.content.Context; 20ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xueimport android.content.pm.permission.RuntimePermissionPresentationInfo; 21ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xueimport android.content.pm.permission.RuntimePermissionPresenter; 22ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 23ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xueimport java.text.Collator; 24ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xueimport java.util.ArrayList; 25ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xueimport java.util.Collections; 26ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xueimport java.util.List; 27ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 28ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xuepublic class PermissionsSummaryHelper { 29ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 30ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue public static void getPermissionSummary(Context context, String pkg, 31ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue final PermissionsResultCallback callback) { 32ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue final RuntimePermissionPresenter presenter = 33ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue RuntimePermissionPresenter.getInstance(context); 34ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue presenter.getAppPermissions(pkg, new RuntimePermissionPresenter.OnResultCallback() { 35ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue @Override 36ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue public void onGetAppPermissions( 37ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue @NonNull List<RuntimePermissionPresentationInfo> permissions) { 38ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue final int permissionCount = permissions.size(); 39ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 40ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue int grantedStandardCount = 0; 41ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue int grantedAdditionalCount = 0; 42ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue int requestedCount = 0; 43ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue List<CharSequence> grantedStandardLabels = new ArrayList<>(); 44ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 45ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue for (int i = 0; i < permissionCount; i++) { 46ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue RuntimePermissionPresentationInfo permission = permissions.get(i); 47ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue requestedCount++; 48ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue if (permission.isGranted()) { 49ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue if (permission.isStandard()) { 50ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue grantedStandardLabels.add(permission.getLabel()); 51ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue grantedStandardCount++; 52ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue } else { 53ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue grantedAdditionalCount++; 54ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue } 55ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue } 56ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue } 57ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 58ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue Collator collator = Collator.getInstance(); 59ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue collator.setStrength(Collator.PRIMARY); 60ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue Collections.sort(grantedStandardLabels, collator); 61ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 62ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue callback.onPermissionSummaryResult(grantedStandardCount, requestedCount, 63ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue grantedAdditionalCount, grantedStandardLabels); 64ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue } 65ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue }, null); 66ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue } 67ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 68ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue public static abstract class PermissionsResultCallback { 69ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue public void onAppWithPermissionsCountsResult(int standardGrantedPermissionAppCount, 70ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue int standardUsedPermissionAppCount) { 71ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue /* do nothing - stub */ 72ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue } 73ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue 74ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue public void onPermissionSummaryResult(int standardGrantedPermissionCount, 75ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue int requestedPermissionCount, int additionalGrantedPermissionCount, 76ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue List<CharSequence> grantedGroupLabels) { 77ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue /* do nothing - stub */ 78ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue } 79ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue } 80ef027edcc4b6db30144f6a64d1f056b8c0b54f66roger xue} 81