17
17
package com .afwsamples .testdpc .profilepolicy .permission ;
18
18
19
19
import android .app .admin .DevicePolicyManager ;
20
+ import android .content .ComponentName ;
20
21
import android .content .Context ;
21
22
import android .view .LayoutInflater ;
22
23
import android .view .View ;
23
24
import android .view .ViewGroup ;
25
+ import android .view .ViewParent ;
24
26
import android .widget .ArrayAdapter ;
25
27
import android .widget .RadioGroup ;
26
28
import android .widget .TextView ;
34
36
* Renders a list app permissions with allow/deny radio buttons.
35
37
*/
36
38
public class AppPermissionsArrayAdapter
37
- extends ArrayAdapter <AppPermissionsArrayAdapter .AppPermission > {
39
+ extends ArrayAdapter <AppPermissionsArrayAdapter .AppPermission >
40
+ implements RadioGroup .OnCheckedChangeListener {
38
41
39
42
private final DevicePolicyManager mDpm ;
43
+ private final ComponentName mAdminComponentName ;
40
44
41
45
public AppPermissionsArrayAdapter (Context context , int resource ,
42
- List <AppPermission > objects ) {
46
+ List <AppPermission > objects ) {
43
47
super (context , resource , objects );
44
48
mDpm = (DevicePolicyManager ) getContext ().getSystemService (Context .DEVICE_POLICY_SERVICE );
49
+ mAdminComponentName = DeviceAdminReceiver .getComponentName (context );
45
50
}
46
51
47
52
@ Override
48
53
public View getView (final int position , View convertView , ViewGroup parent ) {
49
- AppPermissionsArrayAdapter .AppPermission permission = getItem (position );
50
-
51
- if (convertView == null ) {
54
+ AppPermissionsViewHolder viewHolder ;
55
+ if (convertView == null || !(convertView .getTag () instanceof AppPermissionsViewHolder )) {
52
56
convertView = LayoutInflater .from (getContext ()).inflate (R .layout .permission_row ,
53
57
parent , false );
58
+
59
+ viewHolder = new AppPermissionsViewHolder ();
60
+ viewHolder .permissionName = (TextView ) convertView .findViewById (R .id .permission_name );
61
+ viewHolder .permissionGroup =
62
+ (RadioGroup ) convertView .findViewById (R .id .permission_group );
63
+ viewHolder .permissionGroup .setOnCheckedChangeListener (this );
64
+
65
+ convertView .setTag (viewHolder );
66
+ } else {
67
+ viewHolder = (AppPermissionsViewHolder ) convertView .getTag ();
54
68
}
55
69
56
- ViewHolder viewHolder = new ViewHolder (convertView );
57
- viewHolder .permissionName .setText (permission .permissionName );
58
- switch (permission .permissionState ) {
70
+ viewHolder .appPermission = getItem (position );
71
+ viewHolder .permissionName .setText (viewHolder .appPermission .permissionName );
72
+ viewHolder .permissionGroup .setTag (viewHolder .appPermission );
73
+ switch (viewHolder .appPermission .permissionState ) {
59
74
case DevicePolicyManager .PERMISSION_GRANT_STATE_GRANTED :
60
75
viewHolder .permissionGroup .check (R .id .permission_allow );
61
76
break ;
@@ -66,36 +81,29 @@ public View getView(final int position, View convertView, ViewGroup parent) {
66
81
viewHolder .permissionGroup .check (R .id .permission_deny );
67
82
break ;
68
83
}
69
- viewHolder .permissionGroup .setOnCheckedChangeListener (
70
- new RadioGroup .OnCheckedChangeListener () {
71
- @ Override
72
- public void onCheckedChanged (RadioGroup radioGroup , int i ) {
73
- AppPermission permission = getItem (position );
74
- switch (i ) {
75
- case R .id .permission_allow :
76
- permission .permissionState =
77
- DevicePolicyManager .PERMISSION_GRANT_STATE_GRANTED ;
78
- break ;
79
- case R .id .permission_default :
80
- permission .permissionState =
81
- DevicePolicyManager .PERMISSION_GRANT_STATE_DEFAULT ;
82
- break ;
83
- case R .id .permission_deny :
84
- permission .permissionState =
85
- DevicePolicyManager .PERMISSION_GRANT_STATE_DENIED ;
86
- break ;
87
- }
88
- mDpm .setPermissionGrantState (
89
- DeviceAdminReceiver .getComponentName (getContext ()),
90
- permission .pkgName , permission .permissionName ,
91
- permission .permissionState );
92
- }
93
- });
94
-
95
- convertView .setTag (viewHolder );
96
84
return convertView ;
97
85
}
98
86
87
+ @ Override
88
+ public void onCheckedChanged (RadioGroup radioGroup , int checkedId ) {
89
+ final AppPermission appPermission = (AppPermission ) radioGroup .getTag ();
90
+ switch (checkedId ) {
91
+ case R .id .permission_allow : {
92
+ appPermission .permissionState = DevicePolicyManager .PERMISSION_GRANT_STATE_GRANTED ;
93
+ } break ;
94
+ case R .id .permission_default : {
95
+ appPermission .permissionState = DevicePolicyManager .PERMISSION_GRANT_STATE_DEFAULT ;
96
+ } break ;
97
+ case R .id .permission_deny : {
98
+ appPermission .permissionState = DevicePolicyManager .PERMISSION_GRANT_STATE_DENIED ;
99
+ } break ;
100
+ }
101
+ mDpm .setPermissionGrantState (mAdminComponentName ,
102
+ appPermission .pkgName ,
103
+ appPermission .permissionName ,
104
+ appPermission .permissionState );
105
+ }
106
+
99
107
/**
100
108
* A wrapper class for app permissions.
101
109
*/
@@ -112,14 +120,9 @@ public AppPermission(String pkgName, String permissionName, int permissionState)
112
120
}
113
121
}
114
122
115
- private final class ViewHolder {
116
- final public TextView permissionName ;
117
- final public RadioGroup permissionGroup ;
118
-
119
- public ViewHolder (View view )
120
- {
121
- this .permissionName = (TextView ) view .findViewById (R .id .permission_name );
122
- this .permissionGroup = (RadioGroup ) view .findViewById (R .id .permission_group );
123
- }
123
+ private final class AppPermissionsViewHolder {
124
+ TextView permissionName ;
125
+ RadioGroup permissionGroup ;
126
+ AppPermission appPermission ;
124
127
}
125
128
}
0 commit comments