• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.packageinstaller.permission.ui.handheld;
17 
18 import android.app.FragmentTransaction;
19 import android.preference.Preference;
20 import android.preference.PreferenceScreen;
21 import android.view.MenuItem;
22 
23 import com.android.packageinstaller.R;
24 import com.android.packageinstaller.permission.model.PermissionGroup;
25 import com.android.packageinstaller.permission.utils.Utils;
26 
27 import java.util.List;
28 
29 /**
30  * Fragment that allows the user to manage standard permissions.
31  */
32 public final class ManageStandardPermissionsFragment extends ManagePermissionsFragment {
33     private static final String EXTRA_PREFS_KEY = "extra_prefs_key";
34 
35     /**
36      * @return A new fragment
37      */
newInstance()38     public static ManageStandardPermissionsFragment newInstance() {
39         return new ManageStandardPermissionsFragment();
40     }
41 
42     @Override
onStart()43     public void onStart() {
44         super.onStart();
45 
46         getActivity().setTitle(com.android.packageinstaller.R.string.app_permissions);
47     }
48 
49 
50     @Override
onOptionsItemSelected(MenuItem item)51     public boolean onOptionsItemSelected(MenuItem item) {
52         if (item.getItemId() == android.R.id.home) {
53             getActivity().finish();
54             return true;
55         }
56         return super.onOptionsItemSelected(item);
57     }
58 
59     @Override
updatePermissionsUi()60     protected void updatePermissionsUi() {
61         PreferenceScreen screen = updatePermissionsUi(true);
62         if (screen == null) {
63             return;
64         }
65 
66         // Check if we need an additional permissions preference
67         List<PermissionGroup> groups = getPermissions().getGroups();
68         int numExtraPermissions = 0;
69         for (PermissionGroup group : groups) {
70             if (!group.getDeclaringPackage().equals(ManagePermissionsFragment.OS_PKG)) {
71                 numExtraPermissions++;
72             }
73         }
74 
75         Preference additionalPermissionsPreference = screen.findPreference(EXTRA_PREFS_KEY);
76         if (numExtraPermissions == 0) {
77             if (additionalPermissionsPreference != null) {
78                 screen.removePreference(additionalPermissionsPreference);
79             }
80         } else {
81             if (additionalPermissionsPreference == null) {
82                 additionalPermissionsPreference = new Preference(getActivity());
83                 additionalPermissionsPreference.setKey(EXTRA_PREFS_KEY);
84                 additionalPermissionsPreference.setIcon(Utils.applyTint(getActivity(),
85                         R.drawable.ic_more_items,
86                         android.R.attr.colorControlNormal));
87                 additionalPermissionsPreference.setTitle(R.string.additional_permissions);
88                 additionalPermissionsPreference.setOnPreferenceClickListener(preference -> {
89                     ManageCustomPermissionsFragment frag =
90                             new ManageCustomPermissionsFragment();
91                     frag.setTargetFragment(ManageStandardPermissionsFragment.this, 0);
92                     FragmentTransaction ft = getFragmentManager().beginTransaction();
93                     ft.replace(android.R.id.content, frag);
94                     ft.addToBackStack(null);
95                     ft.commit();
96                     return true;
97                 });
98 
99                 screen.addPreference(additionalPermissionsPreference);
100             }
101 
102             additionalPermissionsPreference.setSummary(getResources().getQuantityString(
103                     R.plurals.additional_permissions_more, numExtraPermissions,
104                     numExtraPermissions));
105         }
106     }
107 }
108