1267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov/*
2267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov * Copyright (C) 2015 The Android Open Source Project
3267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov *
4267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov * Licensed under the Apache License, Version 2.0 (the "License");
5267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov * you may not use this file except in compliance with the License.
6267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov * You may obtain a copy of the License at
7267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov *
8267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov *      http://www.apache.org/licenses/LICENSE-2.0
9267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov *
10267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov * Unless required by applicable law or agreed to in writing, software
11267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov * distributed under the License is distributed on an "AS IS" BASIS,
12267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov * See the License for the specific language governing permissions and
14267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov * limitations under the License.
15267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov */
16ef861375eebd9ac6cce7c0bb163380ab1c951063Svetoslavpackage com.android.packageinstaller.permission.ui.television;
17267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
18267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.app.ActionBar;
19267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.app.FragmentTransaction;
20267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.content.ActivityNotFoundException;
21f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkertimport android.content.Context;
22267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.content.Intent;
23267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.os.Bundle;
2474fa089b8c39d84b737607a3e3d2cde4d3b42d24Philip P. Moltmannimport android.support.annotation.Nullable;
25f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkertimport android.support.v7.preference.Preference;
26f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkertimport android.support.v7.preference.Preference.OnPreferenceClickListener;
27f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkertimport android.support.v7.preference.PreferenceScreen;
289f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monkimport android.util.ArraySet;
29267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.util.Log;
30267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.view.MenuItem;
31f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkertimport android.view.View;
32267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
33267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.R;
34f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monkimport com.android.packageinstaller.permission.model.PermissionApps.PmCache;
35267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.permission.model.PermissionGroup;
36267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.permission.model.PermissionGroups;
37f9bf4f795615bac03d1b35a0138318473b1ef6bfSvet Ganovimport com.android.packageinstaller.permission.utils.Utils;
38267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
39267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport java.util.List;
40267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
41b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiripublic final class ManagePermissionsFragment extends SettingsWithHeader
42267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        implements PermissionGroups.PermissionsGroupsChangeCallback, OnPreferenceClickListener {
43267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private static final String LOG_TAG = "ManagePermissionsFragment";
44267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
45267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private static final String OS_PKG = "android";
46267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
47f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk    private static final String EXTRA_PREFS_KEY = "extra_prefs_key";
48f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk
499f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monk    private ArraySet<String> mLauncherPkgs;
509f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monk
51267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private PermissionGroups mPermissions;
52267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
53267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private PreferenceScreen mExtraScreen;
54267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
55267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public static ManagePermissionsFragment newInstance() {
56267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        return new ManagePermissionsFragment();
57267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
58267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
59267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
60267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public void onCreate(Bundle icicle) {
61267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        super.onCreate(icicle);
62a11e73b95ac5d664d57e860fa41a00c7a50720b7Todd Volkert        setLoading(true /* loading */, false /* animate */);
63267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        setHasOptionsMenu(true);
64267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        final ActionBar ab = getActivity().getActionBar();
65267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        if (ab != null) {
66267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            ab.setDisplayHomeAsUpEnabled(true);
67267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
689f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monk        mLauncherPkgs = Utils.getLauncherPackages(getContext());
699337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann        mPermissions = new PermissionGroups(getContext(), getLoaderManager(), this);
70267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
71267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
72267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
73267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public boolean onOptionsItemSelected(MenuItem item) {
74d9f8f576c98b8ef194ca77131cb779b14dde5886Svet Ganov        if (item.getItemId() == android.R.id.home) {
75d9f8f576c98b8ef194ca77131cb779b14dde5886Svet Ganov            getActivity().finish();
76d9f8f576c98b8ef194ca77131cb779b14dde5886Svet Ganov            return true;
77267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
78267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        return super.onOptionsItemSelected(item);
79267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
80267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
81267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
82267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public boolean onPreferenceClick(Preference preference) {
83267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        String key = preference.getKey();
84267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
85267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        PermissionGroup group = mPermissions.getGroup(key);
86267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        if (group == null) {
87267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            return false;
88267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
89267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
90267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
91267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                .putExtra(Intent.EXTRA_PERMISSION_NAME, key);
92267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        try {
93267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            getActivity().startActivity(intent);
94267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        } catch (ActivityNotFoundException e) {
95267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            Log.w(LOG_TAG, "No app to handle " + intent);
96267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
97267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
98267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        return true;
99267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
100267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
101267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
102267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public void onPermissionGroupsChanged() {
103267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        updatePermissionsUi();
104267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
105267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
106f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert    @Override
107f9bf4f795615bac03d1b35a0138318473b1ef6bfSvet Ganov    public void onViewCreated(View view, Bundle savedInstanceState) {
108f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert        super.onViewCreated(view, savedInstanceState);
109b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri        bindPermissionUi(this, getView());
11030366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert    }
111f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert
112b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri    private static void bindPermissionUi(SettingsWithHeader fragment, @Nullable View rootView) {
113b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri        if (fragment == null || rootView == null) {
114f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert            return;
115f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert        }
116b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri        fragment.setHeader(null, null, null, fragment.getString(
117b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri                R.string.manage_permissions_decor_title));
118f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert    }
119f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert
120f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert    private void updatePermissionsUi() {
121f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert        Context context = getPreferenceManager().getContext();
122f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert        if (context == null) {
123f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert            return;
124f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert        }
125f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert
126267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        List<PermissionGroup> groups = mPermissions.getGroups();
127267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        PreferenceScreen screen = getPreferenceScreen();
128267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
12993568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk        // Use this to speed up getting the info for all of the PermissionApps below.
13093568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk        // Create a new one for each refresh to make sure it has fresh data.
13193568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk        PmCache cache = new PmCache(getContext().getPackageManager());
132267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        for (PermissionGroup group : groups) {
13330366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert            boolean isSystemPermission = group.getDeclaringPackage().equals(OS_PKG);
13430366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert
135f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            Preference preference = findPreference(group.getName());
136f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            if (preference == null && mExtraScreen != null) {
137f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                preference = mExtraScreen.findPreference(group.getName());
138f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            }
139f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            if (preference == null) {
140f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert                preference = new Preference(context);
141f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                preference.setOnPreferenceClickListener(this);
142f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                preference.setKey(group.getName());
143f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert                preference.setIcon(Utils.applyTint(context, group.getIcon(),
144f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                        android.R.attr.colorControlNormal));
145f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                preference.setTitle(group.getLabel());
146140154b8965eb599ea79991462fce46daa4ce8dbJason Monk                // Set blank summary so that no resizing/jumping happens when the summary is loaded.
147140154b8965eb599ea79991462fce46daa4ce8dbJason Monk                preference.setSummary(" ");
148f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                preference.setPersistent(false);
149d9f8f576c98b8ef194ca77131cb779b14dde5886Svet Ganov                if (isSystemPermission) {
150f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                    screen.addPreference(preference);
151f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                } else {
152f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                    if (mExtraScreen == null) {
153f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert                        mExtraScreen = getPreferenceManager().createPreferenceScreen(context);
154f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                    }
155f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                    mExtraScreen.addPreference(preference);
156f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                }
157f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            }
158f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk
1599337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann            preference.setSummary(getString(R.string.app_permissions_group_summary,
1609337ca6d658fa5abf7bc42cfff195827d07c496bPhilip P. Moltmann                    group.getGranted(), group.getTotal()));
161267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
162267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
163f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk        if (mExtraScreen != null && mExtraScreen.getPreferenceCount() > 0
164f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                && screen.findPreference(EXTRA_PREFS_KEY) == null) {
165f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert            Preference extraScreenPreference = new Preference(context);
166f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            extraScreenPreference.setKey(EXTRA_PREFS_KEY);
16797d7b7a694afdd62adf4607be65717548eec40b5Svet Ganov            extraScreenPreference.setIcon(Utils.applyTint(context,
168ef861375eebd9ac6cce7c0bb163380ab1c951063Svetoslav                    R.drawable.ic_more_items,
169f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert                    android.R.attr.colorControlNormal));
170267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            extraScreenPreference.setTitle(R.string.additional_permissions);
171267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            extraScreenPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
172267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                @Override
173267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                public boolean onPreferenceClick(Preference preference) {
174267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
175267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    frag.setTargetFragment(ManagePermissionsFragment.this, 0);
176267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    FragmentTransaction ft = getFragmentManager().beginTransaction();
177267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    ft.replace(android.R.id.content, frag);
178f5f6b1b113bb39a268948c19a39833d3ff839d32Todd Volkert                    ft.addToBackStack(null);
179267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    ft.commit();
180267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    return true;
181267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                }
182267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            });
18391bc7980041628fb807ee19f5588abe5615be26bJason Monk            int count = mExtraScreen.getPreferenceCount();
18491bc7980041628fb807ee19f5588abe5615be26bJason Monk            extraScreenPreference.setSummary(getResources().getQuantityString(
18591bc7980041628fb807ee19f5588abe5615be26bJason Monk                    R.plurals.additional_permissions_more, count, count));
186267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            screen.addPreference(extraScreenPreference);
187267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
18839e9a82e0d5ea964f6ad187669e4358da40a132aJason Monk        if (screen.getPreferenceCount() != 0) {
189a11e73b95ac5d664d57e860fa41a00c7a50720b7Todd Volkert            setLoading(false /* loading */, true /* animate */);
19039e9a82e0d5ea964f6ad187669e4358da40a132aJason Monk        }
191267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
192267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
193b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri    public static class AdditionalPermissionsFragment extends SettingsWithHeader {
194267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        @Override
195267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        public void onCreate(Bundle icicle) {
196a11e73b95ac5d664d57e860fa41a00c7a50720b7Todd Volkert            setLoading(true /* loading */, false /* animate */);
197267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            super.onCreate(icicle);
198f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            getActivity().setTitle(R.string.additional_permissions);
199f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            setHasOptionsMenu(true);
200267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
201267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
202267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        @Override
203f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk        public void onDestroy() {
204f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            getActivity().setTitle(R.string.app_permissions);
205f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            super.onDestroy();
206267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
207f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk
208f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk        @Override
209f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk        public boolean onOptionsItemSelected(MenuItem item) {
210f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            switch (item.getItemId()) {
211f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                case android.R.id.home:
212f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                    getFragmentManager().popBackStack();
213f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk                    return true;
214f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            }
215f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk            return super.onOptionsItemSelected(item);
216f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk        }
217f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk
218f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert        @Override
219f9bf4f795615bac03d1b35a0138318473b1ef6bfSvet Ganov        public void onViewCreated(View view, Bundle savedInstanceState) {
22030366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert            super.onViewCreated(view, savedInstanceState);
221b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri            bindPermissionUi(this, getView());
222b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri        }
223b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri
224b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri        private static void bindPermissionUi(SettingsWithHeader fragment, @Nullable View rootView) {
225b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri            if (fragment == null || rootView == null) {
226b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri                return;
227b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri            }
228b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri            fragment.setHeader(null, null, null,
229b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri                    fragment.getString(R.string.additional_permissions_decor_title));
23030366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert        }
23130366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert
23230366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert        @Override
233f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
234f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert            setPreferenceScreen(((ManagePermissionsFragment) getTargetFragment()).mExtraScreen);
235a11e73b95ac5d664d57e860fa41a00c7a50720b7Todd Volkert            setLoading(false /* loading */, true /* animate */);
236f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert        }
237267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
238267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov}
239