summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout/preference.xml79
-rw-r--r--res/layout/preference_app.xml79
-rwxr-xr-xres/values/styles.xml8
-rw-r--r--res/values/themes.xml5
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java81
-rw-r--r--src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java1
6 files changed, 218 insertions, 35 deletions
diff --git a/res/layout/preference.xml b/res/layout/preference.xml
new file mode 100644
index 00000000..4f941f79
--- /dev/null
+++ b/res/layout/preference.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<!-- Based off frameworks/base/core/res/res/layout/preference_material.xml
+ except that this has the negative margin on the image removed
+ and has a set icon size (and some padding to realign). -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:gravity="center_vertical"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:background="?android:attr/activatedBackgroundIndicator"
+ android:clipToPadding="false">
+
+ <LinearLayout
+ android:id="@*android:id/icon_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="start|center_vertical"
+ android:orientation="horizontal"
+ android:paddingEnd="32dp"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp">
+ <com.android.internal.widget.PreferenceImageView
+ android:id="@android:id/icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:scaleType="fitCenter" />
+ </LinearLayout>
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp">
+
+ <TextView android:id="@android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:ellipsize="marquee" />
+
+ <TextView android:id="@android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@android:id/title"
+ android:layout_alignStart="@android:id/title"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textColor="?android:attr/textColorSecondary"
+ android:maxLines="10" />
+
+ </RelativeLayout>
+
+ <!-- Preference should place its actual preference widget here. -->
+ <LinearLayout android:id="@android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="end|center_vertical"
+ android:paddingStart="16dp"
+ android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/res/layout/preference_app.xml b/res/layout/preference_app.xml
new file mode 100644
index 00000000..8dc8464e
--- /dev/null
+++ b/res/layout/preference_app.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<!-- Based off frameworks/base/core/res/res/layout/preference_material.xml
+ except that this has the negative margin on the image removed
+ and has a set icon size (and some padding to align). -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
+ android:gravity="center_vertical"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:background="?android:attr/activatedBackgroundIndicator"
+ android:clipToPadding="false">
+
+ <LinearLayout
+ android:id="@*android:id/icon_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="start|center_vertical"
+ android:orientation="horizontal"
+ android:paddingEnd="20dp"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp">
+ <com.android.internal.widget.PreferenceImageView
+ android:id="@android:id/icon"
+ android:layout_width="36dp"
+ android:layout_height="36dp"
+ android:scaleType="fitCenter" />
+ </LinearLayout>
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp">
+
+ <TextView android:id="@android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:ellipsize="marquee" />
+
+ <TextView android:id="@android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@android:id/title"
+ android:layout_alignStart="@android:id/title"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textColor="?android:attr/textColorSecondary"
+ android:maxLines="10" />
+
+ </RelativeLayout>
+
+ <!-- Preference should place its actual preference widget here. -->
+ <LinearLayout android:id="@android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="end|center_vertical"
+ android:paddingStart="16dp"
+ android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index c67f043a..888f9d02 100755
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -26,4 +26,12 @@
<style name="Theme.Header.Settings" parent="@android:style/Theme.Material.Settings">
</style>
+
+ <style name="Preference">
+ <item name="android:layout">@layout/preference</item>
+ </style>
+
+ <style name="ActionBar" parent="@android:style/Widget.Material.ActionBar.Solid">
+ <item name="android:contentInsetStart">72dp</item>
+ </style>
</resources>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 9e8f0298..83ca6ebb 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -16,7 +16,10 @@
-->
<resources>
- <style name="Settings" parent="@android:style/Theme.Material.Settings" />
+ <style name="Settings" parent="@android:style/Theme.Material.Settings">
+ <item name="android:actionBarStyle">@style/ActionBar</item>
+ <item name="@*android:preferenceStyle">@style/Preference</item>
+ </style>
<style name="GrantPermissions"
parent="@android:style/Theme.Material.DayNight.Dialog.NoActionBar" />
diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java
index 24f2c9e1..2122ad26 100644
--- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java
@@ -20,8 +20,6 @@ import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
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;
@@ -31,13 +29,12 @@ import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import android.view.View;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.model.PermissionApps;
+import com.android.packageinstaller.permission.model.PermissionApps.PmCache;
import com.android.packageinstaller.permission.model.PermissionGroup;
import com.android.packageinstaller.permission.model.PermissionGroups;
-import com.android.packageinstaller.permission.model.PermissionApps.PmCache;
import com.android.packageinstaller.permission.utils.Utils;
import java.util.List;
@@ -48,6 +45,8 @@ public final class ManagePermissionsFragment extends PreferenceFragment
private static final String OS_PKG = "android";
+ private static final String EXTRA_PREFS_KEY = "extra_prefs_key";
+
private PermissionGroups mPermissions;
private PreferenceScreen mExtraScreen;
@@ -147,11 +146,6 @@ public final class ManagePermissionsFragment extends PreferenceFragment
if (screen == null) {
screen = getPreferenceManager().createPreferenceScreen(activity);
setPreferenceScreen(screen);
- } else {
- screen.removeAll();
- if (mExtraScreen != null) {
- mExtraScreen.removeAll();
- }
}
// Use this to speed up getting the info for all of the PermissionApps below.
@@ -164,13 +158,29 @@ public final class ManagePermissionsFragment extends PreferenceFragment
continue;
}
- final Preference preference = new Preference(activity);
- preference.setOnPreferenceClickListener(this);
- preference.setKey(group.getName());
- preference.setIcon(Utils.applyTint(getContext(), group.getIcon(),
- android.R.attr.colorControlNormal));
- preference.setTitle(group.getLabel());
- preference.setPersistent(false);
+ Preference preference = findPreference(group.getName());
+ if (preference == null && mExtraScreen != null) {
+ preference = mExtraScreen.findPreference(group.getName());
+ }
+ if (preference == null) {
+ preference = new Preference(activity, null);
+ preference.setOnPreferenceClickListener(this);
+ preference.setKey(group.getName());
+ preference.setIcon(Utils.applyTint(activity, group.getIcon(),
+ android.R.attr.colorControlNormal));
+ preference.setTitle(group.getLabel());
+ preference.setPersistent(false);
+ if (group.getDeclaringPackage().equals(OS_PKG)) {
+ screen.addPreference(preference);
+ } else {
+ if (mExtraScreen == null) {
+ mExtraScreen = getPreferenceManager().createPreferenceScreen(activity);
+ }
+ mExtraScreen.addPreference(preference);
+ }
+ }
+ final Preference finalPref = preference;
+
new PermissionApps(getContext(), group.getName(), new PermissionApps.Callback() {
@Override
public void onPermissionsLoaded(PermissionApps permissionApps) {
@@ -179,23 +189,16 @@ public final class ManagePermissionsFragment extends PreferenceFragment
}
int granted = permissionApps.getGrantedCount();
int total = permissionApps.getTotalCount();
- preference.setSummary(getString(R.string.app_permissions_group_summary,
+ finalPref.setSummary(getString(R.string.app_permissions_group_summary,
granted, total));
}
}, cache).refresh(false);
-
- if (group.getDeclaringPackage().equals(OS_PKG)) {
- screen.addPreference(preference);
- } else {
- if (mExtraScreen == null) {
- mExtraScreen = getPreferenceManager().createPreferenceScreen(activity);
- }
- mExtraScreen.addPreference(preference);
- }
}
- if (mExtraScreen != null && mExtraScreen.getPreferenceCount() > 0) {
+ if (mExtraScreen != null && mExtraScreen.getPreferenceCount() > 0
+ && screen.findPreference(EXTRA_PREFS_KEY) == null) {
Preference extraScreenPreference = new Preference(activity);
+ extraScreenPreference.setKey(EXTRA_PREFS_KEY);
extraScreenPreference.setIcon(R.drawable.ic_toc);
extraScreenPreference.setTitle(R.string.additional_permissions);
extraScreenPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@@ -216,20 +219,30 @@ public final class ManagePermissionsFragment extends PreferenceFragment
}
}
- public static class AdditionalPermissionsFragment extends SettingsWithHeader {
+ public static class AdditionalPermissionsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ getActivity().setTitle(R.string.additional_permissions);
setPreferenceScreen(((ManagePermissionsFragment) getTargetFragment()).mExtraScreen);
+ setHasOptionsMenu(true);
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- Resources resources = getResources();
- Theme theme = getActivity().getTheme();
- setHeader(resources.getDrawable(R.drawable.ic_toc, theme),
- getString(R.string.additional_permissions), null);
+ public void onDestroy() {
+ getActivity().setTitle(R.string.app_permissions);
+ super.onDestroy();
}
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ getFragmentManager().popBackStack();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
}
}
diff --git a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java
index eb56e754..3c05c463 100644
--- a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java
@@ -195,6 +195,7 @@ public final class PermissionAppsFragment extends PreferenceFragment implements
}
if (pref == null) {
pref = new SwitchPreference(context);
+ pref.setLayoutResource(R.layout.preference_app);
pref.setOnPreferenceChangeListener(this);
pref.setKey(app.getKey());
pref.setIcon(app.getIcon());