Skip to content

Commit 2b27d62

Browse files
author
Sudheer Shanka
committed
Refactor classes to remove code duplication.
Removed InputMethodInfoArrayAdapter and AccessibilityServiceInfoArrayAdapter and added AvailableComponentsInfoArrayAdapter. Bug: 23420251 Change-Id: I33fcea4e9149b87110d16c15d490092272b2c154
1 parent 8b0fba6 commit 2b27d62

File tree

6 files changed

+238
-279
lines changed

6 files changed

+238
-279
lines changed
Lines changed: 22 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,81 +14,69 @@
1414
* limitations under the License.
1515
*/
1616

17-
package com.afwsamples.testdpc.policy.inputmethod;
17+
package com.afwsamples.testdpc.policy;
1818

1919
import android.content.Context;
2020
import android.content.pm.ApplicationInfo;
2121
import android.content.pm.ResolveInfo;
2222
import android.graphics.drawable.Drawable;
2323
import android.os.Build;
2424
import android.text.TextUtils;
25-
import android.view.inputmethod.InputMethodInfo;
2625

27-
import com.afwsamples.testdpc.DeviceAdminReceiver;
26+
import com.afwsamples.testdpc.R;
2827
import com.afwsamples.testdpc.common.ToggleComponentsArrayAdapter;
2928

3029
import java.util.ArrayList;
3130
import java.util.List;
3231

3332
/**
34-
* Displays a list of installed input methods with a checkbox for enabling the component. All system
35-
* input methods are enabled by default and can't be disabled.
33+
* Displays a list of available components with a checkbox for enabling the component.
34+
* All components belonging to system packages are enabled by default and can't be disabled.
3635
*/
37-
public class InputMethodInfoArrayAdapter extends ToggleComponentsArrayAdapter {
36+
public class AvailableComponentsInfoArrayAdapter extends ToggleComponentsArrayAdapter {
37+
private List<String> mPermittedPackageNames = null;
3838

39-
private List<String> mPermittedInputType = null;
40-
41-
public InputMethodInfoArrayAdapter(Context context, int resource, List<ResolveInfo> objects) {
42-
super(context, resource, objects);
43-
}
44-
45-
public static List<ResolveInfo> getResolveInfoListFromInputMethodsInfoList(
46-
List<InputMethodInfo> inputMethodsInfoList) {
47-
List<ResolveInfo> inputMethodsResolveInfoList = new ArrayList<ResolveInfo>();
48-
for (InputMethodInfo inputMethodInfo: inputMethodsInfoList) {
49-
ResolveInfo resolveInfo = new ResolveInfo();
50-
resolveInfo.serviceInfo = inputMethodInfo.getServiceInfo();
51-
resolveInfo.resolvePackageName = inputMethodInfo.getPackageName();
52-
inputMethodsResolveInfoList.add(resolveInfo);
53-
}
54-
return inputMethodsResolveInfoList;
39+
public AvailableComponentsInfoArrayAdapter(Context context,
40+
List<ResolveInfo> resolveInfoList, List<String> permittedPackageNames) {
41+
super(context, R.id.pkg_name, resolveInfoList);
42+
mPermittedPackageNames = permittedPackageNames;
5543
}
5644

5745
/**
58-
* There are three cases where a given input method in a profile is enabled.
59-
* 1) There is no restriction for the permitted input methods.
60-
* 2) A given input method's package name exist in the permitted input method list.
61-
* 3) A given input method is a system input method.
46+
* There are three cases where a given component in a profile is enabled.
47+
* 1) There is no restriction on the given component.
48+
* 2) The given component's package name exist in the permitted package list.
49+
* 3) The given component belong to a system package.
6250
*/
6351
@Override
6452
public boolean isComponentEnabled(ResolveInfo resolveInfo) {
6553
if (resolveInfo != null && resolveInfo.serviceInfo != null && !TextUtils.isEmpty(
6654
resolveInfo.serviceInfo.packageName)) {
67-
if (mPermittedInputType == null || isSystemApp(
55+
if (mPermittedPackageNames == null || isSystemApp(
6856
resolveInfo.serviceInfo.applicationInfo)) {
6957
return true;
7058
} else {
71-
return mPermittedInputType.contains(resolveInfo.serviceInfo.packageName);
59+
return mPermittedPackageNames.contains(resolveInfo.serviceInfo.packageName);
7260
}
7361
}
7462
return false;
7563
}
7664

7765
@Override
7866
protected boolean canModifyComponent(int position) {
79-
// System input methods are always enabled.
67+
// Components in a system package are always enabled.
8068
return !isSystemApp(getApplicationInfo(position));
8169
}
8270

83-
public ArrayList<String> getSelectedInputMethods() {
84-
ArrayList<String> selectedInputMethodsArrayList = new ArrayList<String>();
71+
public ArrayList<String> getSelectedComponents() {
72+
ArrayList<String> selectedComponentsArrayList = new ArrayList<String>();
8573
int size = getCount();
8674
for (int i = 0; i < size; i++) {
8775
if (mIsComponentCheckedList.get(i)) {
88-
selectedInputMethodsArrayList.add(getItem(i).serviceInfo.packageName);
76+
selectedComponentsArrayList.add(getItem(i).serviceInfo.packageName);
8977
}
9078
}
91-
return selectedInputMethodsArrayList;
79+
return selectedComponentsArrayList;
9280
}
9381

9482
@Override
@@ -110,8 +98,6 @@ protected Drawable getApplicationIcon(ApplicationInfo applicationInfo) {
11098

11199
@Override
112100
protected void initIsComponentEnabledList() {
113-
mPermittedInputType = mDevicePolicyManager.getPermittedInputMethods(
114-
DeviceAdminReceiver.getComponentName(getContext()));
115101
int size = getCount();
116102
for (int i = 0; i < size; i++) {
117103
mIsComponentCheckedList.add(isComponentEnabled(getItem(i)));
@@ -122,4 +108,4 @@ protected void initIsComponentEnabledList() {
122108
public CharSequence getDisplayName(int position) {
123109
return getItem(position).loadLabel(mPackageManager);
124110
}
125-
}
111+
}
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
/*
2+
* Copyright (C) 2015 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.afwsamples.testdpc.policy;
18+
19+
import android.app.Activity;
20+
import android.app.AlertDialog;
21+
import android.content.pm.PackageManager;
22+
import android.content.pm.ResolveInfo;
23+
import android.os.AsyncTask;
24+
import android.view.View;
25+
import android.widget.AdapterView;
26+
import android.widget.Button;
27+
import android.widget.ListView;
28+
29+
import com.afwsamples.testdpc.R;
30+
31+
import java.util.ArrayList;
32+
import java.util.Collections;
33+
import java.util.List;
34+
35+
public abstract class GetAvailableComponentsTask<T> extends AsyncTask<Void, Void, List<T>> {
36+
private final Activity mActivity;
37+
private final int mTitleResId;
38+
39+
private View mProgressView;
40+
private ListView mListView;
41+
private AlertDialog mAlertDialog;
42+
private Button mPositiveButton;
43+
private Button mNegativeButton;
44+
private Button mNeutralButton;
45+
46+
public GetAvailableComponentsTask(Activity activity, int titleResId) {
47+
mActivity = activity;
48+
mTitleResId = titleResId;
49+
}
50+
51+
@Override
52+
protected void onPreExecute() {
53+
View rootView = View.inflate(mActivity, R.layout.available_components_list, null);
54+
mAlertDialog = new AlertDialog.Builder(mActivity)
55+
.setTitle(mTitleResId)
56+
.setView(rootView)
57+
.setPositiveButton(android.R.string.ok, null)
58+
.setNeutralButton(R.string.allow_all, null)
59+
.setNegativeButton(android.R.string.cancel, null)
60+
.show();
61+
mProgressView = rootView.findViewById(R.id.progress_layout);
62+
mListView = (ListView) rootView.findViewById(android.R.id.list);
63+
64+
mPositiveButton = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
65+
mNeutralButton = mAlertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
66+
mNegativeButton = mAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
67+
68+
showProgressBar(true);
69+
}
70+
71+
@Override
72+
protected void onPostExecute(List<T> availableComponentsList) {
73+
if (mActivity == null || mActivity.isFinishing()) {
74+
return;
75+
}
76+
final List<ResolveInfo> availableComponentsResolveInfoList =
77+
getResolveInfoListFromAvailableComponents(availableComponentsList);
78+
PackageManager packageManager = mActivity.getPackageManager();
79+
Collections.sort(availableComponentsResolveInfoList,
80+
new ResolveInfo.DisplayNameComparator(packageManager));
81+
final List<String> permittedComponentsList = getPermittedComponentsList();
82+
final AvailableComponentsInfoArrayAdapter availableComponentsInfoArrayAdapter
83+
= new AvailableComponentsInfoArrayAdapter(mActivity,
84+
availableComponentsResolveInfoList, permittedComponentsList);
85+
mListView.setAdapter(availableComponentsInfoArrayAdapter);
86+
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
87+
@Override
88+
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
89+
availableComponentsInfoArrayAdapter.onItemClick(parent, view, pos, id);
90+
}
91+
});
92+
93+
showProgressBar(false);
94+
mPositiveButton.setOnClickListener(new View.OnClickListener() {
95+
@Override
96+
public void onClick(View view) {
97+
ArrayList<String> selectedComponents =
98+
availableComponentsInfoArrayAdapter.getSelectedComponents();
99+
if (selectedComponents != null) {
100+
setPermittedComponentsList(selectedComponents);
101+
}
102+
mAlertDialog.dismiss();
103+
}
104+
});
105+
mNeutralButton.setOnClickListener(new View.OnClickListener() {
106+
@Override
107+
public void onClick(View view) {
108+
setPermittedComponentsList(null);
109+
mAlertDialog.dismiss();
110+
}
111+
});
112+
}
113+
114+
private void showProgressBar(boolean show) {
115+
if (show) {
116+
mProgressView.setVisibility(View.VISIBLE);
117+
mListView.setVisibility(View.GONE);
118+
} else {
119+
mProgressView.setVisibility(View.GONE);
120+
mListView.setVisibility(View.VISIBLE);
121+
}
122+
mPositiveButton.setEnabled(!show);
123+
mNeutralButton.setEnabled(!show);
124+
mNegativeButton.setEnabled(!show);
125+
}
126+
127+
protected abstract List<ResolveInfo> getResolveInfoListFromAvailableComponents(
128+
List<T> availableComponentsList);
129+
130+
protected abstract List<String> getPermittedComponentsList();
131+
132+
protected abstract void setPermittedComponentsList(List<String> permittedComponentsList);
133+
}

0 commit comments

Comments
 (0)