@@ -332,18 +332,34 @@ public boolean onPreferenceChange(final Preference preference, Object newValue)
332332 PermissionInfo permInfo = pm .getPermissionInfo (key , 0 );
333333 final AppPermissionGroup title_group
334334 = mAppPermissions .getPermissionGroup (permInfo .group );
335+ final boolean grantedByDefault = title_group .hasGrantedByDefaultPermission ();
336+ PreferenceScreen screen = getPreferenceScreen ();
337+ Preference group_preference = screen .findPreference ((CharSequence ) permInfo .group );
338+ AppPermissionGroup permissionGroup = getPermisssionGroup (permInfo .group );
335339 if (newValue == Boolean .TRUE ) {
340+ ((SwitchPreference )preference ).setChecked (true );
336341 title_group .grantRuntimePermissions (false , filterPermissions );
342+ ((SwitchPreference ) group_preference ).setChecked (
343+ permissionGroup .areRuntimePermissionsGranted ());
337344 } else {
338- title_group .revokeRuntimePermissions (false , filterPermissions );
345+ //When the permission is off, the application maybe will crash, so need to
346+ //add a warning dialog when the user revoke the permission.
347+ new AlertDialog .Builder (getContext ())
348+ .setMessage (grantedByDefault ? R .string .system_warning
349+ : R .string .old_sdk_deny_warning )
350+ .setNegativeButton (R .string .cancel , null )
351+ .setPositiveButton (R .string .grant_dialog_button_deny_anyway ,
352+ new OnClickListener () {
353+ @ Override
354+ public void onClick (DialogInterface dialog , int which ) {
355+ ((SwitchPreference ) preference ).setChecked (false );
356+ title_group .revokeRuntimePermissions (false , filterPermissions );
357+ ((SwitchPreference ) group_preference ).setChecked (
358+ permissionGroup .areRuntimePermissionsGranted ());
359+ }
360+ })
361+ .show ();
339362 }
340- //group preferene update
341- PreferenceScreen screen = getPreferenceScreen ();
342- Preference group_preference = screen .findPreference ((CharSequence ) permInfo .group );
343- AppPermissionGroup permissionGroup = getPermisssionGroup (permInfo .group );
344- ((SwitchPreference ) group_preference ).setChecked (
345- permissionGroup .areRuntimePermissionsGranted ());
346- ((SwitchPreference )preference ).setChecked (permissionGroup .areRuntimePermissionsGranted (filterPermissions ));
347363 } catch (NameNotFoundException e ) {
348364 Log .e (LOG_TAG , "Problem getting package info for " , e );
349365 }
0 commit comments