ManagePermissionsFragment.java revision b22473b280b2b893167ffaae24e9b1c43d343a3f
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 18f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkertimport android.annotation.Nullable; 19267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.app.ActionBar; 20267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.app.FragmentTransaction; 21267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.content.ActivityNotFoundException; 22f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkertimport android.content.Context; 23267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.content.Intent; 24f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkertimport android.graphics.drawable.Drawable; 25267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.os.Bundle; 26f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkertimport android.support.v7.preference.Preference; 27f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkertimport android.support.v7.preference.Preference.OnPreferenceClickListener; 28f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkertimport android.support.v7.preference.PreferenceScreen; 299f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monkimport android.util.ArraySet; 30267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.util.Log; 31267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport android.view.MenuItem; 32f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkertimport android.view.View; 33f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkertimport android.widget.ImageView; 34f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkertimport android.widget.TextView; 35267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 36267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.R; 3793568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monkimport com.android.packageinstaller.permission.model.PermissionApps; 38f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monkimport com.android.packageinstaller.permission.model.PermissionApps.PmCache; 39267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.permission.model.PermissionGroup; 40267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport com.android.packageinstaller.permission.model.PermissionGroups; 41bd6ad3a2b1c30f7a007c4c2ef7e5c273a2f9df10Svet Ganovimport com.android.packageinstaller.util.Utils; 42267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 43267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganovimport java.util.List; 44267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 45b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiripublic final class ManagePermissionsFragment extends SettingsWithHeader 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 51f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk private static final String EXTRA_PREFS_KEY = "extra_prefs_key"; 52f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk 539f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monk private ArraySet<String> mLauncherPkgs; 549f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monk 55267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov private PermissionGroups mPermissions; 56267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 57267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov private PreferenceScreen mExtraScreen; 58267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 59267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov public static ManagePermissionsFragment newInstance() { 60267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov return new ManagePermissionsFragment(); 61267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 62267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 63267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov @Override 64267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov public void onCreate(Bundle icicle) { 65267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov super.onCreate(icicle); 66a11e73b95ac5d664d57e860fa41a00c7a50720b7Todd Volkert setLoading(true /* loading */, false /* animate */); 67267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov setHasOptionsMenu(true); 68267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov final ActionBar ab = getActivity().getActionBar(); 69267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov if (ab != null) { 70267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov ab.setDisplayHomeAsUpEnabled(true); 71267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 729f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monk mLauncherPkgs = Utils.getLauncherPackages(getContext()); 73267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov mPermissions = new PermissionGroups(getActivity(), getLoaderManager(), this); 74267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 75267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 76267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov @Override 77267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov public void onResume() { 78267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov super.onResume(); 79267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov mPermissions.refresh(); 80b8fa280183c0e893f194ce162ccfe8845f60e347Jason Monk updatePermissionsUi(); 81267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 82267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 83267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov @Override 84267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov public boolean onOptionsItemSelected(MenuItem item) { 85d9f8f576c98b8ef194ca77131cb779b14dde5886Svet Ganov if (item.getItemId() == android.R.id.home) { 86d9f8f576c98b8ef194ca77131cb779b14dde5886Svet Ganov getActivity().finish(); 87d9f8f576c98b8ef194ca77131cb779b14dde5886Svet Ganov return true; 88267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 89267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov return super.onOptionsItemSelected(item); 90267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 91267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 92267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov @Override 93267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov public boolean onPreferenceClick(Preference preference) { 94267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov String key = preference.getKey(); 95267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 96267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov PermissionGroup group = mPermissions.getGroup(key); 97267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov if (group == null) { 98267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov return false; 99267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 100267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 101267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS) 102267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov .putExtra(Intent.EXTRA_PERMISSION_NAME, key); 103267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov try { 104267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov getActivity().startActivity(intent); 105267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } catch (ActivityNotFoundException e) { 106267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov Log.w(LOG_TAG, "No app to handle " + intent); 107267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 108267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 109267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov return true; 110267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 111267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 112267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov @Override 113267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov public void onPermissionGroupsChanged() { 114267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov updatePermissionsUi(); 115267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 116267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 117f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert @Override 118f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 119f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert super.onViewCreated(view, savedInstanceState); 120b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri bindPermissionUi(this, getView()); 12130366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert } 122f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert 123b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri private static void bindPermissionUi(SettingsWithHeader fragment, @Nullable View rootView) { 124b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri if (fragment == null || rootView == null) { 125f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert return; 126f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert } 127b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri fragment.setHeader(null, null, null, fragment.getString( 128b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri R.string.manage_permissions_decor_title)); 129f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert } 130f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert 131f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert private void updatePermissionsUi() { 132f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert Context context = getPreferenceManager().getContext(); 133f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert if (context == null) { 134f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert return; 135f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert } 136f9ffffb3b507a797ad1ead81cbff5f4935956e4cTodd Volkert 137267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov List<PermissionGroup> groups = mPermissions.getGroups(); 138267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov PreferenceScreen screen = getPreferenceScreen(); 139267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 14093568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk // Use this to speed up getting the info for all of the PermissionApps below. 14193568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk // Create a new one for each refresh to make sure it has fresh data. 14293568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk PmCache cache = new PmCache(getContext().getPackageManager()); 143267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov for (PermissionGroup group : groups) { 14430366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert boolean isSystemPermission = group.getDeclaringPackage().equals(OS_PKG); 14530366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert 146f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk Preference preference = findPreference(group.getName()); 147f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk if (preference == null && mExtraScreen != null) { 148f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk preference = mExtraScreen.findPreference(group.getName()); 149f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk } 150f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk if (preference == null) { 151f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert preference = new Preference(context); 152f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk preference.setOnPreferenceClickListener(this); 153f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk preference.setKey(group.getName()); 154f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert preference.setIcon(Utils.applyTint(context, group.getIcon(), 155f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk android.R.attr.colorControlNormal)); 156f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk preference.setTitle(group.getLabel()); 157140154b8965eb599ea79991462fce46daa4ce8dbJason Monk // Set blank summary so that no resizing/jumping happens when the summary is loaded. 158140154b8965eb599ea79991462fce46daa4ce8dbJason Monk preference.setSummary(" "); 159f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk preference.setPersistent(false); 160d9f8f576c98b8ef194ca77131cb779b14dde5886Svet Ganov if (isSystemPermission) { 161f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk screen.addPreference(preference); 162f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk } else { 163f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk if (mExtraScreen == null) { 164f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert mExtraScreen = getPreferenceManager().createPreferenceScreen(context); 165f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk } 166f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk mExtraScreen.addPreference(preference); 167f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk } 168f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk } 169f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk final Preference finalPref = preference; 170f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk 17193568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk new PermissionApps(getContext(), group.getName(), new PermissionApps.Callback() { 17293568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk @Override 17393568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk public void onPermissionsLoaded(PermissionApps permissionApps) { 174ac39d5041cc12eb83d71261ad33e936bc53d96b1Svet Ganov if (getActivity() == null) { 175ac39d5041cc12eb83d71261ad33e936bc53d96b1Svet Ganov return; 176ac39d5041cc12eb83d71261ad33e936bc53d96b1Svet Ganov } 1779f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monk int granted = permissionApps.getGrantedCount(mLauncherPkgs); 1789f0442cdfc055cc3aed19770f48f516b052f6e60Jason Monk int total = permissionApps.getTotalCount(mLauncherPkgs); 179f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk finalPref.setSummary(getString(R.string.app_permissions_group_summary, 18093568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk granted, total)); 18193568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk } 18293568c580d730911a6e2734e79fbe6dc27c1bca1Jason Monk }, cache).refresh(false); 183267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 184267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 185f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk if (mExtraScreen != null && mExtraScreen.getPreferenceCount() > 0 186f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk && screen.findPreference(EXTRA_PREFS_KEY) == null) { 187f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert Preference extraScreenPreference = new Preference(context); 188f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk extraScreenPreference.setKey(EXTRA_PREFS_KEY); 18997d7b7a694afdd62adf4607be65717548eec40b5Svet Ganov extraScreenPreference.setIcon(Utils.applyTint(context, 190ef861375eebd9ac6cce7c0bb163380ab1c951063Svetoslav R.drawable.ic_more_items, 191f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert android.R.attr.colorControlNormal)); 192267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov extraScreenPreference.setTitle(R.string.additional_permissions); 193267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov extraScreenPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { 194267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov @Override 195267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov public boolean onPreferenceClick(Preference preference) { 196267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment(); 197267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov frag.setTargetFragment(ManagePermissionsFragment.this, 0); 198267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov FragmentTransaction ft = getFragmentManager().beginTransaction(); 199267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov ft.replace(android.R.id.content, frag); 200f5f6b1b113bb39a268948c19a39833d3ff839d32Todd Volkert ft.addToBackStack(null); 201267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov ft.commit(); 202267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov return true; 203267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 204267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov }); 20591bc7980041628fb807ee19f5588abe5615be26bJason Monk int count = mExtraScreen.getPreferenceCount(); 20691bc7980041628fb807ee19f5588abe5615be26bJason Monk extraScreenPreference.setSummary(getResources().getQuantityString( 20791bc7980041628fb807ee19f5588abe5615be26bJason Monk R.plurals.additional_permissions_more, count, count)); 208267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov screen.addPreference(extraScreenPreference); 209267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 21039e9a82e0d5ea964f6ad187669e4358da40a132aJason Monk if (screen.getPreferenceCount() != 0) { 211a11e73b95ac5d664d57e860fa41a00c7a50720b7Todd Volkert setLoading(false /* loading */, true /* animate */); 21239e9a82e0d5ea964f6ad187669e4358da40a132aJason Monk } 213267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 214267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 215b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri public static class AdditionalPermissionsFragment extends SettingsWithHeader { 216267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov @Override 217267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov public void onCreate(Bundle icicle) { 218a11e73b95ac5d664d57e860fa41a00c7a50720b7Todd Volkert setLoading(true /* loading */, false /* animate */); 219267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov super.onCreate(icicle); 220f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk getActivity().setTitle(R.string.additional_permissions); 221f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk setHasOptionsMenu(true); 222267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 223267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov 224267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov @Override 225f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk public void onDestroy() { 226f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk getActivity().setTitle(R.string.app_permissions); 227f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk super.onDestroy(); 228267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 229f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk 230f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk @Override 231f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk public boolean onOptionsItemSelected(MenuItem item) { 232f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk switch (item.getItemId()) { 233f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk case android.R.id.home: 234f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk getFragmentManager().popBackStack(); 235f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk return true; 236f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk } 237f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk return super.onOptionsItemSelected(item); 238f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk } 239f589a098e175c9779aa4ba9d4c40eea6cdafde2eJason Monk 240f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert @Override 24130366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 24230366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert super.onViewCreated(view, savedInstanceState); 243b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri bindPermissionUi(this, getView()); 244b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri } 245b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri 246b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri private static void bindPermissionUi(SettingsWithHeader fragment, @Nullable View rootView) { 247b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri if (fragment == null || rootView == null) { 248b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri return; 249b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri } 250b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri fragment.setHeader(null, null, null, 251b22473b280b2b893167ffaae24e9b1c43d343a3fKeyvan Amiri fragment.getString(R.string.additional_permissions_decor_title)); 25230366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert } 25330366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert 25430366743234bbdcbd2f6f638e3d6c364207a9400Todd Volkert @Override 255f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { 256f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert setPreferenceScreen(((ManagePermissionsFragment) getTargetFragment()).mExtraScreen); 257a11e73b95ac5d664d57e860fa41a00c7a50720b7Todd Volkert setLoading(false /* loading */, true /* animate */); 258f2736bd4fb3df44ac03385162b9f8d1bf4cb9b61Todd Volkert } 259267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov } 260267c2bd39c248eea2679c0a8efa334d3155e262cSvet Ganov} 261