Skip to content

Commit 9368f50

Browse files
committed
Show VPN app only in always on vpn fragment
Bug: 29173464 Change-Id: I3a0ac61b50e763942a075e9faf8afe9df63739ab
1 parent d9f1289 commit 9368f50

File tree

2 files changed

+39
-15
lines changed

2 files changed

+39
-15
lines changed

app/src/main/java/com/afwsamples/testdpc/common/SelectAppFragment.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ public abstract class SelectAppFragment extends Fragment implements View.OnClick
4545

4646
private EditText mCurrentSelectedPackage;
4747
private EditText mNewSelectedPackage;
48-
private ListView mAppList;
49-
private ArrayList<String> mAppPackages;
48+
private ListView mAppListView;
49+
private List<String> mAppPackages;
5050

5151
@Override
5252
public void onResume() {
@@ -57,7 +57,7 @@ public void onResume() {
5757
@Override
5858
public void onCreate(Bundle savedInstanceState) {
5959
super.onCreate(savedInstanceState);
60-
mAppPackages = new ArrayList<String>();
60+
mAppPackages = createAppList();
6161
}
6262

6363
@Override
@@ -67,32 +67,32 @@ public View onCreateView(LayoutInflater layoutInflater, ViewGroup container,
6767

6868
mCurrentSelectedPackage = (EditText) view.findViewById(R.id.selected_package_current);
6969
mNewSelectedPackage = (EditText) view.findViewById(R.id.selected_package_new);
70-
mAppList = (ListView) view.findViewById(R.id.select_app_list);
71-
populateApps();
72-
70+
mAppListView = (ListView) view.findViewById(R.id.select_app_list);
71+
AppInfoArrayAdapter appInfoArrayAdapter = new AppInfoArrayAdapter(getActivity(),
72+
R.id.pkg_name, mAppPackages, true);
73+
mAppListView.setAdapter(appInfoArrayAdapter);
7374
view.findViewById(R.id.selected_package_set).setOnClickListener(this);
7475
view.findViewById(R.id.selected_package_clear).setOnClickListener(this);
75-
mAppList.setOnItemClickListener(this);
76-
76+
mAppListView.setOnItemClickListener(this);
7777
return view;
7878
}
7979

80-
private void populateApps() {
80+
/**
81+
* @return a list of apps that users are allowed to select from.
82+
*/
83+
protected List<String> createAppList() {
84+
List<String> appList = new ArrayList<>();
8185
PackageManager pm = getActivity().getPackageManager();
8286
List<ApplicationInfo> allApps = pm.getInstalledApplications(0 /* No flag */);
8387
Collections.sort(allApps, new ApplicationInfo.DisplayNameComparator(pm));
84-
mAppPackages.clear();
8588
for(ApplicationInfo info : allApps) {
8689
if ((pm.getLaunchIntentForPackage(info.packageName)) != null) {
87-
mAppPackages.add(info.packageName);
90+
appList.add(info.packageName);
8891
}
8992
}
90-
AppInfoArrayAdapter appInfoArrayAdapter = new AppInfoArrayAdapter(getActivity(),
91-
R.id.pkg_name, mAppPackages, true);
92-
mAppList.setAdapter(appInfoArrayAdapter);
93+
return appList;
9394
}
9495

95-
9696
@Override
9797
public void onClick(View v) {
9898
switch (v.getId()) {

app/src/main/java/com/afwsamples/testdpc/policy/networking/AlwaysOnVpnFragment.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,22 @@
2020
import android.app.admin.DevicePolicyManager;
2121
import android.content.ComponentName;
2222
import android.content.Context;
23+
import android.content.Intent;
2324
import android.content.pm.PackageManager;
25+
import android.content.pm.ResolveInfo;
26+
import android.net.VpnService;
2427
import android.os.Build;
2528
import android.os.Bundle;
2629

2730
import com.afwsamples.testdpc.DeviceAdminReceiver;
2831
import com.afwsamples.testdpc.R;
2932
import com.afwsamples.testdpc.common.SelectAppFragment;
3033

34+
import java.util.ArrayList;
35+
import java.util.HashSet;
36+
import java.util.List;
37+
import java.util.Set;
38+
3139
/**
3240
* This fragment provides a setting for always-on VPN apps.
3341
*
@@ -42,6 +50,8 @@ public class AlwaysOnVpnFragment extends SelectAppFragment {
4250

4351
private DevicePolicyManager mDpm;
4452

53+
private static final Intent VPN_INTENT = new Intent(VpnService.SERVICE_INTERFACE);
54+
4555
@Override
4656
public void onCreate(Bundle savedInstanceState) {
4757
super.onCreate(savedInstanceState);
@@ -54,6 +64,20 @@ public void onResume() {
5464
getActivity().getActionBar().setTitle(R.string.set_always_on_vpn);
5565
}
5666

67+
@Override
68+
protected List<String> createAppList() {
69+
Set<String> apps = new HashSet<>();
70+
PackageManager pm = getActivity().getPackageManager();
71+
List<ResolveInfo> serviceInfos = pm.queryIntentServices(VPN_INTENT, 0);
72+
for (ResolveInfo serviceInfo : serviceInfos) {
73+
if (serviceInfo.serviceInfo == null) {
74+
continue;
75+
}
76+
apps.add(serviceInfo.serviceInfo.packageName);
77+
}
78+
return new ArrayList<>(apps);
79+
}
80+
5781
@Override
5882
protected void setSelectedPackage(String pkg) {
5983
try {

0 commit comments

Comments
 (0)