Merge "Add additional permissions button to manage perms" into mnc-dev

This commit is contained in:
Jason Monk
2015-05-13 18:40:49 +00:00
committed by Android (Google) Code Review
3 changed files with 109 additions and 11 deletions

24
res/drawable/ic_toc.xml Normal file
View File

@@ -0,0 +1,24 @@
<!--
Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="48.0"
android:viewportHeight="48.0">
<path
android:fillColor="#FF000000"
android:pathData="M6.0,18.0l28.0,0.0l0.0,-4.0L6.0,14.0l0.0,4.0zm0.0,8.0l28.0,0.0l0.0,-4.0L6.0,22.0l0.0,4.0zm0.0,8.0l28.0,0.0l0.0,-4.0L6.0,30.0l0.0,4.0zm32.0,0.0l4.0,0.0l0.0,-4.0l-4.0,0.0l0.0,4.0zm0.0,-20.0l0.0,4.0l4.0,0.0l0.0,-4.0l-4.0,0.0zm0.0,12.0l4.0,0.0l0.0,-4.0l-4.0,0.0l0.0,4.0z"/>
</vector>

View File

@@ -6592,4 +6592,10 @@
<!-- Turn on settings for system ui tuner [CHAR LIMIT=40] -->
<string name="system_ui_settings">Show SystemUI Tuner</string>
<!-- Label for button that leads to more permissions [CHAR LIMIT=40] -->
<string name="additional_permissions">Additional permissions</string>
<!-- Description of how many more permissions to view on next page [CHAR LIMIT=30] -->
<string name="additional_permissions_more"><xliff:g id="count" example="2">%1$d</xliff:g> more</string>
</resources>

View File

@@ -15,16 +15,22 @@
*/
package com.android.settings.applications;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen;
import android.util.Log;
import android.view.View;
import com.android.internal.logging.MetricsLogger;
import com.android.settings.AppHeader;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settingslib.applications.PermissionsInfo;
@@ -33,12 +39,16 @@ import com.android.settingslib.applications.PermissionsInfo.PermissionGroup;
import java.util.List;
public class ManagePermissions extends SettingsPreferenceFragment
implements PermissionsInfo.Callback, OnPreferenceClickListener {
implements PermissionsInfo.Callback {
private static final String TAG = "ManagePermissions";
private static final String OS_PKG = "android";
private PermissionsInfo mPermissionsInfo;
private PreferenceScreen mExtraScreen;
@Override
public void onResume() {
super.onResume();
@@ -54,25 +64,66 @@ public class ManagePermissions extends SettingsPreferenceFragment
}
private void refreshUi() {
Activity activity = getActivity();
PreferenceScreen screen = getPreferenceScreen();
if (screen == null) {
screen = getPreferenceManager().createPreferenceScreen(getActivity());
screen = getPreferenceManager().createPreferenceScreen(activity);
setPreferenceScreen(screen);
} else {
screen.removeAll();
if (mExtraScreen != null) {
mExtraScreen.removeAll();
}
}
final int count = screen.getPreferenceCount();
if (count == 0) {
final Preference extraScreenPreference = new Preference(activity);
extraScreenPreference.setIcon(R.drawable.ic_toc);
extraScreenPreference.setTitle(R.string.additional_permissions);
List<PermissionGroup> groups = mPermissionsInfo.getGroups();
for (PermissionGroup group : groups) {
if (group.possibleApps.size() == 0) continue;
PermissionPreference pref = new PermissionPreference(getActivity(), group);
PermissionPreference pref = new PermissionPreference(activity, group);
pref.refreshUi();
if (group.packageName.equals(OS_PKG)) {
screen.addPreference(pref);
} else {
if (mExtraScreen == null) {
mExtraScreen = getPreferenceManager().createPreferenceScreen(activity);
}
mExtraScreen.addPreference(pref);
}
}
if (mExtraScreen != null) {
extraScreenPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
frag.setTargetFragment(ManagePermissions.this, 0);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.main_content, frag);
ft.addToBackStack("AdditionalPerms");
ft.commit();
return true;
}
});
extraScreenPreference.setSummary(getString(R.string.additional_permissions_more,
mExtraScreen.getPreferenceCount()));
screen.addPreference(extraScreenPreference);
}
} else {
for (int i = 0; i < count; i++) {
((PermissionPreference) screen.getPreference(i)).refreshUi();
updatePrefs(screen);
if (mExtraScreen != null) {
updatePrefs(mExtraScreen);
}
}
}
private void updatePrefs(PreferenceScreen screen) {
for (int i = 0; i < screen.getPreferenceCount(); i++) {
Preference pref = screen.getPreference(i);
if (pref instanceof PermissionPreference) {
((PermissionPreference) pref).refreshUi();
}
}
}
@@ -82,11 +133,6 @@ public class ManagePermissions extends SettingsPreferenceFragment
refreshUi();
}
@Override
public boolean onPreferenceClick(Preference preference) {
return true;
}
@Override
protected int getMetricsCategory() {
return MetricsLogger.MANAGE_PERMISSIONS;
@@ -121,4 +167,26 @@ public class ManagePermissions extends SettingsPreferenceFragment
}
}
public static class AdditionalPermissionsFragment extends SettingsPreferenceFragment {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setPreferenceScreen(((ManagePermissions) getTargetFragment()).mExtraScreen);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Resources resources = getResources();
Theme theme = getActivity().getTheme();
AppHeader.createAppHeader(this, resources.getDrawable(R.drawable.ic_toc, theme),
getString(R.string.additional_permissions), null, android.R.color.white);
}
@Override
protected int getMetricsCategory() {
return MetricsLogger.MANAGE_PERMISSIONS;
}
}
}