ManagePermissionsFragment.java revision 93568c580d730911a6e2734e79fbe6dc27c1bca1
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 */
16267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovpackage com.android.packageinstaller.permission.ui;
17267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
18267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.app.ActionBar;
19267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.app.Activity;
20267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.app.FragmentTransaction;
21267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.content.ActivityNotFoundException;
22267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.content.Intent;
23267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.content.res.Resources;
24267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.content.res.Resources.Theme;
25267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.os.Bundle;
26267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.preference.Preference;
27267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.preference.Preference.OnPreferenceClickListener;
28267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.preference.PreferenceFragment;
29267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.preference.PreferenceScreen;
30267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.util.Log;
31267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.view.Menu;
32267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.view.MenuInflater;
33267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.view.MenuItem;
34267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.view.View;
35267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
36267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.R;
3793568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monkimport com.android.packageinstaller.permission.model.PermissionApps;
38267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.permission.model.PermissionGroup;
39267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.permission.model.PermissionGroups;
4093568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monkimport com.android.packageinstaller.permission.model.PermissionApps.PmCache;
41267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.permission.utils.Utils;
42267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
43267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport java.util.List;
44267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
45267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovpublic final class ManagePermissionsFragment extends PreferenceFragment
46267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        implements PermissionGroups.PermissionsGroupsChangeCallback, OnPreferenceClickListener {
47267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private static final String LOG_TAG = "ManagePermissionsFragment";
48267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
49267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private static final String OS_PKG = "android";
50267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
51267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private PermissionGroups mPermissions;
52267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
53267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private PreferenceScreen mExtraScreen;
54267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
55267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private boolean mShowLegacyPermissions;
56267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
57267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public static ManagePermissionsFragment newInstance() {
58267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        return new ManagePermissionsFragment();
59267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
60267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
61267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
62267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public void onCreate(Bundle icicle) {
63267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        super.onCreate(icicle);
64267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        setHasOptionsMenu(true);
65267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        final ActionBar ab = getActivity().getActionBar();
66267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        if (ab != null) {
67267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            ab.setDisplayHomeAsUpEnabled(true);
68267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
69267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        mPermissions = new PermissionGroups(getActivity(), getLoaderManager(), this);
70267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
71267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
72267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
73267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public void onResume() {
74267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        super.onResume();
75267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        mPermissions.refresh();
76b8fa280183c0e893f194ce162ccfe8845f60e347Jason Monk        updatePermissionsUi();
77267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
78267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
79267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
80267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
81267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        super.onCreateOptionsMenu(menu, inflater);
82267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        inflater.inflate(R.menu.toggle_legacy_permissions, menu);
83267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
84267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
85267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
86267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public void onPrepareOptionsMenu(Menu menu) {
87267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        MenuItem item = menu.findItem(R.id.toggle_legacy_permissions);
88267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        if (!mShowLegacyPermissions) {
89267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            item.setTitle(R.string.show_legacy_permissions);
90267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        } else {
91267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            item.setTitle(R.string.hide_legacy_permissions);
92267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
93267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
94267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
95267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
96267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public boolean onOptionsItemSelected(MenuItem item) {
97267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        switch (item.getItemId()) {
98267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            case android.R.id.home: {
99267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                getActivity().finish();
100267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                return true;
101267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            }
102267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
103267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            case R.id.toggle_legacy_permissions: {
104267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                mShowLegacyPermissions = !mShowLegacyPermissions;
105267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                updatePermissionsUi();
106267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                return true;
107267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            }
108267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
109267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        return super.onOptionsItemSelected(item);
110267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
111267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
112267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
113267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public boolean onPreferenceClick(Preference preference) {
114267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        String key = preference.getKey();
115267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
116267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        PermissionGroup group = mPermissions.getGroup(key);
117267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        if (group == null) {
118267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            return false;
119267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
120267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
121267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
122267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                .putExtra(Intent.EXTRA_PERMISSION_NAME, key);
123267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        try {
124267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            getActivity().startActivity(intent);
125267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        } catch (ActivityNotFoundException e) {
126267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            Log.w(LOG_TAG, "No app to handle " + intent);
127267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
128267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
129267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        return true;
130267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
131267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
132267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    @Override
133267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public void onPermissionGroupsChanged() {
134267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        updatePermissionsUi();
135267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
136267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
137267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    private void updatePermissionsUi() {
138267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        Activity activity = getActivity();
139267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
140267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        if (activity == null) {
141267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            return;
142267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
143267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
144267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        List<PermissionGroup> groups = mPermissions.getGroups();
145267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
146267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        PreferenceScreen screen = getPreferenceScreen();
147267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        if (screen == null) {
148267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            screen = getPreferenceManager().createPreferenceScreen(activity);
149267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            setPreferenceScreen(screen);
150267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        } else {
151267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            screen.removeAll();
152267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            if (mExtraScreen != null) {
153267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                mExtraScreen.removeAll();
154267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            }
155267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
156267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
15793568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk        // Use this to speed up getting the info for all of the PermissionApps below.
15893568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk        // Create a new one for each refresh to make sure it has fresh data.
15993568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk        PmCache cache = new PmCache(getContext().getPackageManager());
160267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        for (PermissionGroup group : groups) {
161267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            // Show legacy permissions only if the user chose that.
162267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            if (!mShowLegacyPermissions && group.getDeclaringPackage().equals(OS_PKG)
163267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    && !Utils.isModernPermissionGroup(group.getName())) {
164267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                continue;
165267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            }
166267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
16793568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk            final Preference preference = new Preference(activity);
168267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            preference.setOnPreferenceClickListener(this);
169267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            preference.setKey(group.getName());
1707c719ca27ff887903f8890e8181ed8e28bb6e886Jason Monk            preference.setIcon(Utils.applyTint(getContext(), group.getIcon(),
1717c719ca27ff887903f8890e8181ed8e28bb6e886Jason Monk                    android.R.attr.colorControlNormal));
172267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            preference.setTitle(group.getLabel());
173267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            preference.setPersistent(false);
17493568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk            new PermissionApps(getContext(), group.getName(), new PermissionApps.Callback() {
17593568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk                @Override
17693568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk                public void onPermissionsLoaded(PermissionApps permissionApps) {
17793568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk                    int granted = permissionApps.getGrantedCount();
17893568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk                    int total = permissionApps.getTotalCount();
17993568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk                    preference.setSummary(getString(R.string.app_permissions_group_summary,
18093568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk                            granted, total));
18193568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk                }
18293568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk            }, cache).refresh(false);
183267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
184267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            if (group.getDeclaringPackage().equals(OS_PKG)) {
185267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                screen.addPreference(preference);
186267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            } else {
187267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                if (mExtraScreen == null) {
188267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    mExtraScreen = getPreferenceManager().createPreferenceScreen(activity);
189267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                }
190267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                mExtraScreen.addPreference(preference);
191267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            }
192267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
193267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
194267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        if (mExtraScreen != null && mExtraScreen.getPreferenceCount() > 0) {
195267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            Preference extraScreenPreference = new Preference(activity);
196267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            extraScreenPreference.setIcon(R.drawable.ic_toc);
197267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            extraScreenPreference.setTitle(R.string.additional_permissions);
198267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            extraScreenPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
199267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                @Override
200267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                public boolean onPreferenceClick(Preference preference) {
201267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
202267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    frag.setTargetFragment(ManagePermissionsFragment.this, 0);
203267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    FragmentTransaction ft = getFragmentManager().beginTransaction();
204267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    ft.replace(android.R.id.content, frag);
205267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    ft.addToBackStack("AdditionalPerms");
206267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    ft.commit();
207267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    return true;
208267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                }
209267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            });
210267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            extraScreenPreference.setSummary(getString(R.string.additional_permissions_more,
211267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    mExtraScreen.getPreferenceCount()));
212267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            screen.addPreference(extraScreenPreference);
213267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
214267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
215267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
216267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    public static class AdditionalPermissionsFragment extends SettingsWithHeader {
217267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        @Override
218267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        public void onCreate(Bundle icicle) {
219267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            super.onCreate(icicle);
220267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            setPreferenceScreen(((ManagePermissionsFragment) getTargetFragment()).mExtraScreen);
221267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
222267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov
223267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        @Override
224267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        public void onViewCreated(View view, Bundle savedInstanceState) {
225267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            super.onViewCreated(view, savedInstanceState);
226267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            Resources resources = getResources();
227267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            Theme theme = getActivity().getTheme();
228267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov            setHeader(resources.getDrawable(R.drawable.ic_toc, theme),
229267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov                    getString(R.string.additional_permissions), null);
230267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov        }
231267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov    }
232267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov}
233