android: Make selected apps read-only
Also prevent users from changing selected apps in read-only VPN profiles.
This commit is contained in:
committed by
Tobias Brunner
parent
3391f7a465
commit
150dc5ab64
+1
@@ -49,6 +49,7 @@ public interface VpnProfileDataSource
|
|||||||
String KEY_IKE_PROPOSAL = "ike_proposal";
|
String KEY_IKE_PROPOSAL = "ike_proposal";
|
||||||
String KEY_ESP_PROPOSAL = "esp_proposal";
|
String KEY_ESP_PROPOSAL = "esp_proposal";
|
||||||
String KEY_DNS_SERVERS = "dns_servers";
|
String KEY_DNS_SERVERS = "dns_servers";
|
||||||
|
String KEY_READ_ONLY = "read_only";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open the VPN profile data source. The database is automatically created
|
* Open the VPN profile data source. The database is automatically created
|
||||||
|
|||||||
+8
-1
@@ -60,9 +60,11 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo
|
|||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
|
|
||||||
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
|
final boolean readOnly = getActivity().getIntent().getBooleanExtra(VpnProfileDataSource.KEY_READ_ONLY, false);
|
||||||
|
getListView().setChoiceMode(readOnly ? ListView.CHOICE_MODE_NONE : ListView.CHOICE_MODE_MULTIPLE);
|
||||||
|
|
||||||
mAdapter = new SelectedApplicationsAdapter(getActivity());
|
mAdapter = new SelectedApplicationsAdapter(getActivity());
|
||||||
|
mAdapter.setReadOnly(readOnly);
|
||||||
setListAdapter(mAdapter);
|
setListAdapter(mAdapter);
|
||||||
setListShown(false);
|
setListShown(false);
|
||||||
|
|
||||||
@@ -101,6 +103,11 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo
|
|||||||
@Override
|
@Override
|
||||||
public void onListItemClick(ListView l, View v, int position, long id)
|
public void onListItemClick(ListView l, View v, int position, long id)
|
||||||
{
|
{
|
||||||
|
if (mAdapter.isReadOnly())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
super.onListItemClick(l, v, position, id);
|
super.onListItemClick(l, v, position, id);
|
||||||
SelectedApplicationEntry item = (SelectedApplicationEntry)getListView().getItemAtPosition(position);
|
SelectedApplicationEntry item = (SelectedApplicationEntry)getListView().getItemAtPosition(position);
|
||||||
item.setSelected(!item.isSelected());
|
item.setSelected(!item.isSelected());
|
||||||
|
|||||||
+1
@@ -377,6 +377,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
|
|||||||
{
|
{
|
||||||
Intent intent = new Intent(VpnProfileDetailActivity.this, SelectedApplicationsActivity.class);
|
Intent intent = new Intent(VpnProfileDetailActivity.this, SelectedApplicationsActivity.class);
|
||||||
intent.putExtra(VpnProfileDataSource.KEY_SELECTED_APPS_LIST, new ArrayList<>(mSelectedApps));
|
intent.putExtra(VpnProfileDataSource.KEY_SELECTED_APPS_LIST, new ArrayList<>(mSelectedApps));
|
||||||
|
intent.putExtra(VpnProfileDataSource.KEY_READ_ONLY, mProfile.isReadOnly());
|
||||||
mSelectApplications.launch(intent);
|
mSelectApplications.launch(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
+16
-4
@@ -35,11 +35,12 @@ import java.util.List;
|
|||||||
|
|
||||||
public class SelectedApplicationsAdapter extends BaseAdapter implements Filterable
|
public class SelectedApplicationsAdapter extends BaseAdapter implements Filterable
|
||||||
{
|
{
|
||||||
private Context mContext;
|
private final Context mContext;
|
||||||
private final Object mLock = new Object();
|
private final Object mLock = new Object();
|
||||||
private List<SelectedApplicationEntry> mData;
|
private final List<SelectedApplicationEntry> mData;
|
||||||
private List<SelectedApplicationEntry> mDataFiltered;
|
private List<SelectedApplicationEntry> mDataFiltered;
|
||||||
private SelectedApplicationsFilter mFilter;
|
private SelectedApplicationsFilter mFilter;
|
||||||
|
private boolean mReadOnly;
|
||||||
|
|
||||||
public SelectedApplicationsAdapter(Context context)
|
public SelectedApplicationsAdapter(Context context)
|
||||||
{
|
{
|
||||||
@@ -100,9 +101,10 @@ public class SelectedApplicationsAdapter extends BaseAdapter implements Filterab
|
|||||||
SelectedApplicationEntry item = getItem(position);
|
SelectedApplicationEntry item = getItem(position);
|
||||||
CheckableLinearLayout checkable = (CheckableLinearLayout)view;
|
CheckableLinearLayout checkable = (CheckableLinearLayout)view;
|
||||||
checkable.setChecked(item.isSelected());
|
checkable.setChecked(item.isSelected());
|
||||||
ImageView icon = (ImageView)view.findViewById(R.id.app_icon);
|
checkable.setEnabled(!mReadOnly);
|
||||||
|
ImageView icon = view.findViewById(R.id.app_icon);
|
||||||
icon.setImageDrawable(item.getIcon());
|
icon.setImageDrawable(item.getIcon());
|
||||||
TextView text = (TextView)view.findViewById(R.id.app_name);
|
TextView text = view.findViewById(R.id.app_name);
|
||||||
text.setText(item.toString());
|
text.setText(item.toString());
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
@@ -117,6 +119,16 @@ public class SelectedApplicationsAdapter extends BaseAdapter implements Filterab
|
|||||||
return mFilter;
|
return mFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isReadOnly()
|
||||||
|
{
|
||||||
|
return mReadOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReadOnly(final boolean readOnly)
|
||||||
|
{
|
||||||
|
this.mReadOnly = readOnly;
|
||||||
|
}
|
||||||
|
|
||||||
private class SelectedApplicationsFilter extends Filter
|
private class SelectedApplicationsFilter extends Filter
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user