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 */
16package com.android.packageinstaller.permission.ui.handheld;
17
18import android.app.FragmentTransaction;
19import android.preference.Preference;
20import android.preference.PreferenceScreen;
21import android.view.MenuItem;
22
23import com.android.packageinstaller.R;
24import com.android.packageinstaller.permission.model.PermissionGroup;
25import com.android.packageinstaller.permission.utils.Utils;
26
27import java.util.List;
28
29/**
30 * Fragment that allows the user to manage standard permissions.
31 */
32public final class ManageStandardPermissionsFragment extends ManagePermissionsFragment {
33    private static final String EXTRA_PREFS_KEY = "extra_prefs_key";
34
35    /**
36     * @return A new fragment
37     */
38    public static ManageStandardPermissionsFragment newInstance() {
39        return new ManageStandardPermissionsFragment();
40    }
41
42    @Override
43    public void onStart() {
44        super.onStart();
45
46        getActivity().setTitle(com.android.packageinstaller.R.string.app_permissions);
47    }
48
49
50    @Override
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
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