summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/drawable/ic_toc.xml24
-rw-r--r--res/values/strings.xml6
-rw-r--r--src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java72
-rw-r--r--src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java6
4 files changed, 96 insertions, 12 deletions
diff --git a/res/drawable/ic_toc.xml b/res/drawable/ic_toc.xml
new file mode 100644
index 00000000..66c476be
--- /dev/null
+++ b/res/drawable/ic_toc.xml
@@ -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>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 219ab431..4af162f1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -206,4 +206,10 @@
<!-- Label when app requests no permissions -->
<string name="no_permissions">No permissions</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>
diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
index 8fc78a54..8c026946 100644
--- a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
@@ -19,6 +19,7 @@ package com.android.packageinstaller.permission.ui;
import android.annotation.Nullable;
import android.app.ActionBar;
import android.app.Activity;
+import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
@@ -28,6 +29,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.provider.Settings;
@@ -42,17 +44,21 @@ import android.widget.TextView;
import android.widget.Toast;
import com.android.packageinstaller.R;
-import com.android.packageinstaller.permission.utils.Utils;
import com.android.packageinstaller.permission.model.AppPermissions;
import com.android.packageinstaller.permission.model.PermissionGroup;
+import com.android.packageinstaller.permission.utils.Utils;
public final class AppPermissionsFragment extends SettingsWithHeader
implements OnPreferenceChangeListener {
+
private static final String LOG_TAG = "ManagePermsFragment";
+ private static final String OS_PKG = "android";
+
private static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
private AppPermissions mAppPermissions;
+ private PreferenceScreen mExtraScreen;
public static AppPermissionsFragment newInstance(String packageName) {
AppPermissionsFragment instance = new AppPermissionsFragment();
@@ -153,6 +159,10 @@ public final class AppPermissionsFragment extends SettingsWithHeader
}
});
+ final Preference extraPerms = new Preference(activity);
+ extraPerms.setIcon(R.drawable.ic_toc);
+ extraPerms.setTitle(R.string.additional_permissions);
+
for (PermissionGroup group : mAppPermissions.getPermissionGroups()) {
// We currently will not show permissions fixed by the system
// which is what the system does for system components.
@@ -167,7 +177,31 @@ public final class AppPermissionsFragment extends SettingsWithHeader
preference.setTitle(group.getLabel());
preference.setPersistent(false);
preference.setEnabled(!group.isPolicyFixed());
- screen.addPreference(preference);
+ if (group.getIconPkg().equals(OS_PKG)) {
+ screen.addPreference(preference);
+ } else {
+ if (mExtraScreen == null) {
+ mExtraScreen = getPreferenceManager().createPreferenceScreen(activity);
+ }
+ mExtraScreen.addPreference(preference);
+ }
+ }
+ if (mExtraScreen != null) {
+ extraPerms.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
+ frag.setTargetFragment(AppPermissionsFragment.this, 0);
+ FragmentTransaction ft = getFragmentManager().beginTransaction();
+ ft.replace(android.R.id.content, frag);
+ ft.addToBackStack("AdditionalPerms");
+ ft.commit();
+ return true;
+ }
+ });
+ extraPerms.setSummary(getString(R.string.additional_permissions_more,
+ mExtraScreen.getPreferenceCount()));
+ screen.addPreference(extraPerms);
}
setPreferenceScreen(screen);
@@ -194,14 +228,23 @@ public final class AppPermissionsFragment extends SettingsWithHeader
private void updateUi() {
mAppPermissions.refresh();
- final int preferenceCount = getPreferenceScreen().getPreferenceCount();
+ updatePrefs(getPreferenceScreen());
+ if (mExtraScreen != null) {
+ updatePrefs(mExtraScreen);
+ }
+ }
+
+ private void updatePrefs(PreferenceScreen screen) {
+ final int preferenceCount = screen.getPreferenceCount();
for (int i = 0; i < preferenceCount; i++) {
- SwitchPreference preference = (SwitchPreference)
- getPreferenceScreen().getPreference(i);
- PermissionGroup group = mAppPermissions
- .getPermissionGroup(preference.getKey());
- if (group != null) {
- preference.setChecked(group.areRuntimePermissionsGranted());
+ Preference preference = screen.getPreference(i);
+ if (preference instanceof SwitchPreference) {
+ SwitchPreference switchPref = (SwitchPreference) preference;
+ PermissionGroup group = mAppPermissions
+ .getPermissionGroup(switchPref.getKey());
+ if (group != null) {
+ switchPref.setChecked(group.areRuntimePermissionsGranted());
+ }
}
}
}
@@ -215,4 +258,15 @@ public final class AppPermissionsFragment extends SettingsWithHeader
return null;
}
}
+
+ public static class AdditionalPermissionsFragment extends SettingsWithHeader {
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ AppPermissionsFragment target = (AppPermissionsFragment) getTargetFragment();
+ setPreferenceScreen(target.mExtraScreen);
+ // Copy the header.
+ setHeader(target.mIcon, target.mLabel, target.mInfoIntent);
+ }
+ }
} \ No newline at end of file
diff --git a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java
index c0285cd4..d9def799 100644
--- a/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java
+++ b/src/com/android/packageinstaller/permission/ui/SettingsWithHeader.java
@@ -33,9 +33,9 @@ import com.android.packageinstaller.R;
public abstract class SettingsWithHeader extends PreferenceFragment implements OnClickListener {
private View mHeader;
- private Intent mInfoIntent;
- private Drawable mIcon;
- private CharSequence mLabel;
+ protected Intent mInfoIntent;
+ protected Drawable mIcon;
+ protected CharSequence mLabel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,