From: Markus Pfeiffer Date: Tue, 21 Nov 2023 14:37:22 +0000 (+0100) Subject: android: Make selected apps read-only X-Git-Tag: android-2.5.0^2~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=150dc5ab6401062797a7dc936e35cb7c91e38d8f;p=thirdparty%2Fstrongswan.git android: Make selected apps read-only Also prevent users from changing selected apps in read-only VPN profiles. --- diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/data/VpnProfileDataSource.java b/src/frontends/android/app/src/main/java/org/strongswan/android/data/VpnProfileDataSource.java index f5bc692ccc..48aa58c35c 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/data/VpnProfileDataSource.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/data/VpnProfileDataSource.java @@ -49,6 +49,7 @@ public interface VpnProfileDataSource String KEY_IKE_PROPOSAL = "ike_proposal"; String KEY_ESP_PROPOSAL = "esp_proposal"; String KEY_DNS_SERVERS = "dns_servers"; + String KEY_READ_ONLY = "read_only"; /** * Open the VPN profile data source. The database is automatically created diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsListFragment.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsListFragment.java index e2d949a68c..5ef78b2959 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsListFragment.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsListFragment.java @@ -60,9 +60,11 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo super.onViewCreated(view, savedInstanceState); 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.setReadOnly(readOnly); setListAdapter(mAdapter); setListShown(false); @@ -101,6 +103,11 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo @Override public void onListItemClick(ListView l, View v, int position, long id) { + if (mAdapter.isReadOnly()) + { + return; + } + super.onListItemClick(l, v, position, id); SelectedApplicationEntry item = (SelectedApplicationEntry)getListView().getItemAtPosition(position); item.setSelected(!item.isSelected()); diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java index 6746711a5b..b01e67f881 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java @@ -377,6 +377,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity { Intent intent = new Intent(VpnProfileDetailActivity.this, SelectedApplicationsActivity.class); intent.putExtra(VpnProfileDataSource.KEY_SELECTED_APPS_LIST, new ArrayList<>(mSelectedApps)); + intent.putExtra(VpnProfileDataSource.KEY_READ_ONLY, mProfile.isReadOnly()); mSelectApplications.launch(intent); } }); diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/adapter/SelectedApplicationsAdapter.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/adapter/SelectedApplicationsAdapter.java index c98e4ab83c..9ac720d3b7 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/adapter/SelectedApplicationsAdapter.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/adapter/SelectedApplicationsAdapter.java @@ -35,11 +35,12 @@ import java.util.List; public class SelectedApplicationsAdapter extends BaseAdapter implements Filterable { - private Context mContext; + private final Context mContext; private final Object mLock = new Object(); - private List mData; + private final List mData; private List mDataFiltered; private SelectedApplicationsFilter mFilter; + private boolean mReadOnly; public SelectedApplicationsAdapter(Context context) { @@ -100,9 +101,10 @@ public class SelectedApplicationsAdapter extends BaseAdapter implements Filterab SelectedApplicationEntry item = getItem(position); CheckableLinearLayout checkable = (CheckableLinearLayout)view; 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()); - TextView text = (TextView)view.findViewById(R.id.app_name); + TextView text = view.findViewById(R.id.app_name); text.setText(item.toString()); return view; } @@ -117,6 +119,16 @@ public class SelectedApplicationsAdapter extends BaseAdapter implements Filterab return mFilter; } + public boolean isReadOnly() + { + return mReadOnly; + } + + public void setReadOnly(final boolean readOnly) + { + this.mReadOnly = readOnly; + } + private class SelectedApplicationsFilter extends Filter {