diff options
author | Jason Monk <jmonk@google.com> | 2015-03-26 14:43:41 -0400 |
---|---|---|
committer | Jason Monk <jmonk@google.com> | 2015-03-27 10:43:11 -0400 |
commit | dbc3e510110d707aeb9ea9dbf350e69b4d79ad79 (patch) | |
tree | 0cd25e8c129eaba4d51b9ccb3c7dd184abc7a49f | |
parent | 46c55104384a9138d51c18c24114885af842afde (diff) | |
download | android_packages_apps_PackageInstaller-dbc3e510110d707aeb9ea9dbf350e69b4d79ad79.tar.gz android_packages_apps_PackageInstaller-dbc3e510110d707aeb9ea9dbf350e69b4d79ad79.tar.bz2 android_packages_apps_PackageInstaller-dbc3e510110d707aeb9ea9dbf350e69b4d79ad79.zip |
Minor updates to permission request dialog
- Show correct icon and tinting for it
- Bold/color the app name
- Update the string, location and themeing of the checkbox, although
its not actually hooked up yet.
Change-Id: Ia7da81abb3d427f6d37ea29e8a38531cb743e878
6 files changed, 76 insertions, 16 deletions
diff --git a/res/layout/grant_permissions.xml b/res/layout/grant_permissions.xml index 7c6bfb7a..2004447f 100644 --- a/res/layout/grant_permissions.xml +++ b/res/layout/grant_permissions.xml @@ -27,6 +27,7 @@ android:id="@+id/permission_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:tint="?android:attr/colorAccent" android:paddingTop="6dip" android:paddingEnd="10dip"> </ImageView> @@ -43,13 +44,17 @@ android:id="@+id/do_not_ask_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_below="@id/permission_message" + android:layout_marginTop="12dp" + android:text="@string/never_ask_again" + style="?android:attr/textAppearanceSmall" android:visibility="gone"> </CheckBox> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_below="@id/permission_message" + android:layout_below="@id/do_not_ask_checkbox" android:orientation="horizontal" android:paddingTop="4dip"> diff --git a/res/values/strings.xml b/res/values/strings.xml index a8254f49..52fe050d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -199,5 +199,8 @@ <!-- Title for page of managing application permissions --> <string name="app_permissions">App permissions</string> + <!-- Checkbox that allows user to not be questioned about this permission + request again --> + <string name="never_ask_again">Never ask again</string> </resources> diff --git a/src/com/android/packageinstaller/permission/AppPermissions.java b/src/com/android/packageinstaller/permission/AppPermissions.java index 899c888d..8d81d682 100644 --- a/src/com/android/packageinstaller/permission/AppPermissions.java +++ b/src/com/android/packageinstaller/permission/AppPermissions.java @@ -18,13 +18,17 @@ package com.android.packageinstaller.permission; import android.content.Context; import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; +import android.content.res.Resources.NotFoundException; +import android.graphics.drawable.Drawable; import android.os.Build; import android.os.UserHandle; import android.util.ArrayMap; import android.util.Log; + import com.android.internal.util.ArrayUtils; import java.util.ArrayList; @@ -109,10 +113,12 @@ public final class AppPermissions { continue; } + final String iconPkg = (groupInfo != null) + ? groupInfo.packageName : permInfo.packageName; final int iconResId = (groupInfo != null) ? groupInfo.icon : permInfo.icon; group = new PermissionGroup(mContext, mPackageInfo.packageName, - groupName, groupLabel, iconResId); + groupName, groupLabel, iconPkg, iconResId); mGroups.put(groupName, group); } @@ -152,6 +158,7 @@ public final class AppPermissions { private final String mName; private final CharSequence mLabel; private final ArrayMap<String, Permission> mPermissions = new ArrayMap<>(); + private final String mIconPkg; private final int mIconResId; private boolean mHasRuntimePermissions; @@ -160,6 +167,10 @@ public final class AppPermissions { return mName; } + public String getIconPkg() { + return mIconPkg; + } + public int getIconResId() { return mIconResId; } @@ -169,11 +180,12 @@ public final class AppPermissions { } public PermissionGroup(Context context, String packageName, - String name, CharSequence label, int iconResId) { + String name, CharSequence label, String iconPkg, int iconResId) { mPackageName = packageName; mContext = context; mName = name; mLabel = label; + mIconPkg = iconPkg; mIconResId = iconResId; } @@ -294,4 +306,13 @@ public final class AppPermissions { mGranted = granted; } } + + public static Drawable loadDrawable(PackageManager pm, String pkg, int resId) { + try { + return pm.getResourcesForApplication(pkg).getDrawable(resId, null); + } catch (NotFoundException | NameNotFoundException e) { + Log.d(LOG_TAG, "Couldn't get resource", e); + return null; + } + } } diff --git a/src/com/android/packageinstaller/permission/GrantPermissionFragment.java b/src/com/android/packageinstaller/permission/GrantPermissionFragment.java index 65b60687..3fe37114 100644 --- a/src/com/android/packageinstaller/permission/GrantPermissionFragment.java +++ b/src/com/android/packageinstaller/permission/GrantPermissionFragment.java @@ -17,14 +17,16 @@ package com.android.packageinstaller.permission; import android.app.DialogFragment; +import android.content.DialogInterface; +import android.graphics.drawable.Drawable; import android.os.Bundle; - import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; + import com.android.packageinstaller.R; public final class GrantPermissionFragment extends DialogFragment { @@ -32,14 +34,15 @@ public final class GrantPermissionFragment extends DialogFragment { public static final String ARG_GROUP_COUNT = "ARG_GROUP_COUNT"; public static final String ARG_GROUP_INDEX = "ARG_GROUP_INDEX"; public static final String ARG_GROUP_ICON_RES_ID = "ARG_GROUP_ICON"; + public static final String ARG_GROUP_ICON_PKG = "ARG_GROUP_ICON_PKG"; public static final String ARG_GROUP_MESSAGE = "ARG_GROUP_MESSAGE"; public interface OnRequestGrantPermissionGroupResult { public void onRequestGrantPermissionGroupResult(String name, boolean granted); } - public static GrantPermissionFragment newInstance(String groupName, - int groupCount, int groupIndex, int iconResId, CharSequence message) { + public static GrantPermissionFragment newInstance(String groupName, int groupCount, + int groupIndex, String iconPkg, int iconResId, CharSequence message) { GrantPermissionFragment instance = new GrantPermissionFragment(); instance.setStyle(STYLE_NORMAL, android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar); @@ -49,19 +52,23 @@ public final class GrantPermissionFragment extends DialogFragment { arguments.putInt(ARG_GROUP_COUNT, groupCount); arguments.putInt(ARG_GROUP_INDEX, groupIndex); arguments.putInt(ARG_GROUP_ICON_RES_ID, iconResId); + arguments.putString(ARG_GROUP_ICON_PKG, iconPkg); arguments.putCharSequence(ARG_GROUP_MESSAGE, message); instance.setArguments(arguments); return instance; } + private String mGroupName; + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View content = inflater.inflate(R.layout.grant_permissions, container, false); - final String groupName = getArguments().getString(ARG_GROUP_NAME); - final String message = getArguments().getString(ARG_GROUP_MESSAGE); + mGroupName = getArguments().getString(ARG_GROUP_NAME); + final CharSequence message = getArguments().getCharSequence(ARG_GROUP_MESSAGE); + final String iconPkg = getArguments().getString(ARG_GROUP_ICON_PKG); final int iconResId = getArguments().getInt(ARG_GROUP_ICON_RES_ID); final int groupCount = getArguments().getInt(ARG_GROUP_COUNT); final int groupIndex = getArguments().getInt(ARG_GROUP_INDEX); @@ -78,17 +85,19 @@ public final class GrantPermissionFragment extends DialogFragment { public void onClick(View view) { if (view == allowButton) { ((OnRequestGrantPermissionGroupResult) getActivity()) - .onRequestGrantPermissionGroupResult(groupName, true); + .onRequestGrantPermissionGroupResult(mGroupName, true); } else if (view == denyButton) { ((OnRequestGrantPermissionGroupResult) getActivity()) - .onRequestGrantPermissionGroupResult(groupName, false); + .onRequestGrantPermissionGroupResult(mGroupName, false); } else if (view == doNotAskCheckbox) { //TODO: Implement me. } } }; - iconView.setImageResource(iconResId); + Drawable icon = AppPermissions.loadDrawable(getActivity().getPackageManager(), iconPkg, + iconResId); + iconView.setImageDrawable(icon); messageView.setText(message); @@ -106,4 +115,10 @@ public final class GrantPermissionFragment extends DialogFragment { return content; } + + @Override + public void onDismiss(DialogInterface dialog) { + ((OnRequestGrantPermissionGroupResult) getActivity()) + .onRequestGrantPermissionGroupResult(mGroupName, false); + } } diff --git a/src/com/android/packageinstaller/permission/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/GrantPermissionsActivity.java index 4c3eb247..4f6486cb 100644 --- a/src/com/android/packageinstaller/permission/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/GrantPermissionsActivity.java @@ -25,8 +25,12 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PermissionInfo; +import android.graphics.Color; import android.hardware.camera2.utils.ArrayUtils; import android.os.Bundle; +import android.text.SpannableString; +import android.text.style.ForegroundColorSpan; +import android.text.style.StyleSpan; import android.util.ArrayMap; import android.util.Log; import android.util.SparseArray; @@ -114,14 +118,25 @@ public class GrantPermissionsActivity extends Activity implements transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); transaction.commit(); - CharSequence message = getString(R.string.permission_warning_template, - mAppPermissions.getAppLabel(), groupState.mGroup.getLabel()); + CharSequence appLabel = mAppPermissions.getAppLabel(); + SpannableString message = new SpannableString(getString( + R.string.permission_warning_template, appLabel, + groupState.mGroup.getLabel())); + // Bold/color the app name. + int appLabelStart = message.toString().indexOf(appLabel.toString(), 0); + int appLabelLength = appLabel.length(); + message.setSpan(new ForegroundColorSpan(Color.BLACK), appLabelStart, + appLabelStart + appLabelLength, 0); + message.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), appLabelStart, + appLabelStart + appLabelLength, 0); // Add the new grant fragment. - // TODO: Use a real message for the action and a real icon. We need group action APIs + // TODO: Use a real message for the action. We need group action APIs + String pkg = groupState.mGroup.getIconPkg(); + int icon = groupState.mGroup.getIconResId(); DialogFragment newFragment = GrantPermissionFragment .newInstance(groupState.mGroup.getName(), groupCount, i, - android.R.drawable.ic_dialog_info, message); + pkg, icon, message); newFragment.show(getFragmentManager(), TAG_GRANT_PERMISSION_GROUP_FRAGMENT); return true; diff --git a/src/com/android/packageinstaller/permission/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ManagePermissionsFragment.java index a9cef839..4382f551 100644 --- a/src/com/android/packageinstaller/permission/ManagePermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ManagePermissionsFragment.java @@ -93,7 +93,8 @@ public final class ManagePermissionsFragment extends SettingsWithHeader SwitchPreference preference = new SwitchPreference(activity); preference.setOnPreferenceChangeListener(this); preference.setKey(group.getName()); - preference.setIcon(group.getIconResId()); + preference.setIcon(AppPermissions.loadDrawable(pm, group.getIconPkg(), + group.getIconResId())); preference.setTitle(group.getLabel()); preference.setPersistent(false); screen.addPreference(preference); |