@@ -98,6 +98,20 @@ static class MyPermissionGroupInfo extends PermissionGroupInfo {
9898 MyPermissionGroupInfo (PermissionGroupInfo info ) {
9999 super (info );
100100 }
101+
102+ public Drawable loadGroupIcon (PackageManager pm ) {
103+ if (icon != 0 ) {
104+ return loadIcon (pm );
105+ } else {
106+ ApplicationInfo appInfo ;
107+ try {
108+ appInfo = pm .getApplicationInfo (packageName , 0 );
109+ return appInfo .loadIcon (pm );
110+ } catch (NameNotFoundException e ) {
111+ }
112+ }
113+ return null ;
114+ }
101115 }
102116
103117 static class MyPermissionInfo extends PermissionInfo {
@@ -155,16 +169,7 @@ public void setPermission(MyPermissionGroupInfo grp, MyPermissionInfo perm,
155169 PackageManager pm = getContext ().getPackageManager ();
156170 Drawable icon = null ;
157171 if (first ) {
158- if (grp .icon != 0 ) {
159- icon = grp .loadIcon (pm );
160- } else {
161- ApplicationInfo appInfo ;
162- try {
163- appInfo = pm .getApplicationInfo (grp .packageName , 0 );
164- icon = appInfo .loadIcon (pm );
165- } catch (NameNotFoundException e ) {
166- }
167- }
172+ icon = grp .loadGroupIcon (pm );
168173 }
169174 CharSequence label = perm .mLabel ;
170175 if (perm .mNew && newPermPrefix != null ) {
@@ -191,10 +196,28 @@ public void onClick(View v) {
191196 if (mDialog != null ) {
192197 mDialog .dismiss ();
193198 }
199+ PackageManager pm = getContext ().getPackageManager ();
194200 AlertDialog .Builder builder = new AlertDialog .Builder (getContext ());
195201 builder .setTitle (mGroup .mLabel );
196- builder .setMessage (mPerm .loadDescription (getContext ().getPackageManager ()));
202+ if (mPerm .descriptionRes != 0 ) {
203+ builder .setMessage (mPerm .loadDescription (pm ));
204+ } else {
205+ CharSequence appName ;
206+ try {
207+ ApplicationInfo app = pm .getApplicationInfo (mPerm .packageName , 0 );
208+ appName = app .loadLabel (pm );
209+ } catch (NameNotFoundException e ) {
210+ appName = mPerm .packageName ;
211+ }
212+ StringBuilder sbuilder = new StringBuilder (128 );
213+ sbuilder .append (getContext ().getString (
214+ R .string .perms_description_app , appName ));
215+ sbuilder .append ("\n \n " );
216+ sbuilder .append (mPerm .name );
217+ builder .setMessage (sbuilder .toString ());
218+ }
197219 builder .setCancelable (true );
220+ builder .setIcon (mGroup .loadGroupIcon (pm ));
198221 mDialog = builder .show ();
199222 mDialog .setCanceledOnTouchOutside (true );
200223 }
@@ -611,9 +634,26 @@ private void setPermissions(List<MyPermissionInfo> permList) {
611634 }
612635
613636 for (MyPermissionGroupInfo pgrp : mPermGroups .values ()) {
614- pgrp .mLabel = pgrp .loadLabel (mPm );
637+ if (pgrp .labelRes != 0 || pgrp .nonLocalizedLabel != null ) {
638+ pgrp .mLabel = pgrp .loadLabel (mPm );
639+ } else {
640+ ApplicationInfo app ;
641+ try {
642+ app = mPm .getApplicationInfo (pgrp .packageName , 0 );
643+ pgrp .mLabel = app .loadLabel (mPm );
644+ } catch (NameNotFoundException e ) {
645+ pgrp .mLabel = pgrp .loadLabel (mPm );
646+ }
647+ }
615648 mPermGroupsList .add (pgrp );
616649 }
617650 Collections .sort (mPermGroupsList , mPermGroupComparator );
651+ if (false ) {
652+ for (MyPermissionGroupInfo grp : mPermGroupsList ) {
653+ Log .i ("foo" , "Group " + grp .name + " personal="
654+ + ((grp .flags &PermissionGroupInfo .FLAG_PERSONAL_INFO ) != 0 )
655+ + " priority=" + grp .priority );
656+ }
657+ }
618658 }
619659}
0 commit comments