Skip to content

Commit 8b0fba6

Browse files
author
Sudheer Shanka
committed
Fix the usage of viewholder pattern in AppPermissionsArrayAdapter.
Bug: 24807355 Change-Id: I48150cb14c6d0bd868495faaf129b44b5d93dcc5
1 parent 7250083 commit 8b0fba6

File tree

1 file changed

+47
-44
lines changed

1 file changed

+47
-44
lines changed

app/src/main/java/com/afwsamples/testdpc/profilepolicy/permission/AppPermissionsArrayAdapter.java

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
package com.afwsamples.testdpc.profilepolicy.permission;
1818

1919
import android.app.admin.DevicePolicyManager;
20+
import android.content.ComponentName;
2021
import android.content.Context;
2122
import android.view.LayoutInflater;
2223
import android.view.View;
2324
import android.view.ViewGroup;
25+
import android.view.ViewParent;
2426
import android.widget.ArrayAdapter;
2527
import android.widget.RadioGroup;
2628
import android.widget.TextView;
@@ -34,28 +36,41 @@
3436
* Renders a list app permissions with allow/deny radio buttons.
3537
*/
3638
public class AppPermissionsArrayAdapter
37-
extends ArrayAdapter<AppPermissionsArrayAdapter.AppPermission> {
39+
extends ArrayAdapter<AppPermissionsArrayAdapter.AppPermission>
40+
implements RadioGroup.OnCheckedChangeListener {
3841

3942
private final DevicePolicyManager mDpm;
43+
private final ComponentName mAdminComponentName;
4044

4145
public AppPermissionsArrayAdapter(Context context, int resource,
42-
List<AppPermission> objects) {
46+
List<AppPermission> objects) {
4347
super(context, resource, objects);
4448
mDpm = (DevicePolicyManager) getContext().getSystemService(Context.DEVICE_POLICY_SERVICE);
49+
mAdminComponentName = DeviceAdminReceiver.getComponentName(context);
4550
}
4651

4752
@Override
4853
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)) {
5256
convertView = LayoutInflater.from(getContext()).inflate(R.layout.permission_row,
5357
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();
5468
}
5569

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) {
5974
case DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED:
6075
viewHolder.permissionGroup.check(R.id.permission_allow);
6176
break;
@@ -66,36 +81,29 @@ public View getView(final int position, View convertView, ViewGroup parent) {
6681
viewHolder.permissionGroup.check(R.id.permission_deny);
6782
break;
6883
}
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);
9684
return convertView;
9785
}
9886

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+
99107
/**
100108
* A wrapper class for app permissions.
101109
*/
@@ -112,14 +120,9 @@ public AppPermission(String pkgName, String permissionName, int permissionState)
112120
}
113121
}
114122

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;
124127
}
125128
}

0 commit comments

Comments
 (0)