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