]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
android: Make selected apps read-only
authorMarkus Pfeiffer <markus.pfeiffer@relution.io>
Tue, 21 Nov 2023 14:37:22 +0000 (15:37 +0100)
committerTobias Brunner <tobias@strongswan.org>
Wed, 21 Feb 2024 11:24:53 +0000 (12:24 +0100)
Also prevent users from changing selected apps in read-only VPN profiles.

src/frontends/android/app/src/main/java/org/strongswan/android/data/VpnProfileDataSource.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsListFragment.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/VpnProfileDetailActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/adapter/SelectedApplicationsAdapter.java

index f5bc692cccaeaeb04c26084c477ac0c9242cd2fd..48aa58c35c55cff77ed0e6b48a6f8382ce9d3835 100644 (file)
@@ -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
index e2d949a68c8bde4ee023b76d39eac8f2ce7be583..5ef78b29592ee3dc7995ddb71978d88c0dbce28a 100644 (file)
@@ -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());
index 6746711a5bc8ffe2f1b778bce5b117a5c82ffe01..b01e67f88169c43f8007b9931b88f6a64530407b 100644 (file)
@@ -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);
                        }
                });
index c98e4ab83c4c35ecc8fd55fdf5a0471f9790c0a7..9ac720d3b71baa2ecc0773ad7f3ab580c4995124 100644 (file)
@@ -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<SelectedApplicationEntry> mData;
+       private final List<SelectedApplicationEntry> mData;
        private List<SelectedApplicationEntry> 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
        {