summaryrefslogtreecommitdiff
path: root/main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.java
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2019-11-20 17:48:31 +0100
committerArne Schwabe <arne@rfc2549.org>2019-11-20 17:48:31 +0100
commit3b4ce6d5588c87bcc621a0054166c81de31d63aa (patch)
treed0333bb594e9e57c71c8d1a6e682f61fc878ecf5 /main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.java
parent7d9cb2f62b12453c592d949974c131f5bf1ca7c1 (diff)
Implement importing profiles from Access Server
Diffstat (limited to 'main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.java')
-rw-r--r--main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.java277
1 files changed, 139 insertions, 138 deletions
diff --git a/main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.java b/main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.java
index eaccd201..eb81e62e 100644
--- a/main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.java
+++ b/main/src/ui/java/de/blinkt/openvpn/fragments/VPNProfileList.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2016 Arne Schwabe
+ * Copyright (c) 2012-2019 Arne Schwabe
* Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
*/
@@ -19,7 +19,9 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
+
import androidx.annotation.RequiresApi;
+import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.ListFragment;
import android.text.Html;
@@ -62,22 +64,24 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
public final static int RESULT_VPN_DELETED = Activity.RESULT_FIRST_USER;
public final static int RESULT_VPN_DUPLICATE = Activity.RESULT_FIRST_USER + 1;
-
+ // Shortcut version is increased to refresh all shortcuts
+ final static int SHORTCUT_VERSION = 1;
private static final int MENU_ADD_PROFILE = Menu.FIRST;
-
private static final int START_VPN_CONFIG = 92;
private static final int SELECT_PROFILE = 43;
private static final int IMPORT_PROFILE = 231;
private static final int FILE_PICKER_RESULT_KITKAT = 392;
-
private static final int MENU_IMPORT_PROFILE = Menu.FIRST + 1;
private static final int MENU_CHANGE_SORTING = Menu.FIRST + 2;
+ private static final int MENU_IMPORT_AS = Menu.FIRST + 3;
private static final String PREF_SORT_BY_LRU = "sortProfilesByLRU";
+ protected VpnProfile mEditProfile = null;
private String mLastStatusMessage;
+ private ArrayAdapter<VpnProfile> mArrayadapter;
@Override
public void updateState(String state, String logmessage, final int localizedResId, ConnectionStatus level) {
- getActivity().runOnUiThread(() -> {
+ requireActivity().runOnUiThread(() -> {
mLastStatusMessage = VpnStatus.getLastCleanLogMessage(getActivity());
mArrayadapter.notifyDataSetChanged();
});
@@ -87,51 +91,6 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
public void setConnectedVPN(String uuid) {
}
- private class VPNArrayAdapter extends ArrayAdapter<VpnProfile> {
-
- public VPNArrayAdapter(Context context, int resource,
- int textViewResourceId) {
- super(context, resource, textViewResourceId);
- }
-
- @Override
- public View getView(final int position, View convertView, ViewGroup parent) {
- View v = super.getView(position, convertView, parent);
-
- final VpnProfile profile = (VpnProfile) getListAdapter().getItem(position);
-
- View titleview = v.findViewById(R.id.vpn_list_item_left);
- titleview.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- startOrStopVPN(profile);
- }
- });
-
- View settingsview = v.findViewById(R.id.quickedit_settings);
- settingsview.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- editVPN(profile);
-
- }
- });
-
- TextView subtitle = (TextView) v.findViewById(R.id.vpn_item_subtitle);
- if (profile.getUUIDString().equals(VpnStatus.getLastConnectedVPNProfile())) {
- subtitle.setText(mLastStatusMessage);
- subtitle.setVisibility(View.VISIBLE);
- } else {
- subtitle.setText("");
- subtitle.setVisibility(View.GONE);
- }
-
-
- return v;
- }
- }
-
private void startOrStopVPN(VpnProfile profile) {
if (VpnStatus.isVPNActive() && profile.getUUIDString().equals(VpnStatus.getLastConnectedVPNProfile())) {
Intent disconnectVPN = new Intent(getActivity(), DisconnectVPN.class);
@@ -141,22 +100,12 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
}
}
-
- private ArrayAdapter<VpnProfile> mArrayadapter;
-
- protected VpnProfile mEditProfile = null;
-
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
-
- // Shortcut version is increased to refresh all shortcuts
- final static int SHORTCUT_VERSION = 1;
-
@RequiresApi(api = Build.VERSION_CODES.N_MR1)
void updateDynamicShortcuts() {
PersistableBundle versionExtras = new PersistableBundle();
@@ -267,28 +216,6 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
.build();
}
- class MiniImageGetter implements ImageGetter {
-
-
- @Override
- public Drawable getDrawable(String source) {
- Drawable d = null;
- if ("ic_menu_add".equals(source))
- d = getActivity().getResources().getDrawable(R.drawable.ic_menu_add_grey);
- else if ("ic_menu_archive".equals(source))
- d = getActivity().getResources().getDrawable(R.drawable.ic_menu_import_grey);
-
-
- if (d != null) {
- d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
- return d;
- } else {
- return null;
- }
- }
- }
-
-
@Override
public void onResume() {
super.onResume();
@@ -334,55 +261,6 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
setListAdapter();
}
- static class VpnProfileNameComparator implements Comparator<VpnProfile> {
-
- @Override
- public int compare(VpnProfile lhs, VpnProfile rhs) {
- if (lhs == rhs)
- // Catches also both null
- return 0;
-
- if (lhs == null)
- return -1;
- if (rhs == null)
- return 1;
-
- if (lhs.mName == null)
- return -1;
- if (rhs.mName == null)
- return 1;
-
- return lhs.mName.compareTo(rhs.mName);
- }
-
- }
-
- static class VpnProfileLRUComparator implements Comparator<VpnProfile> {
-
- VpnProfileNameComparator nameComparator = new VpnProfileNameComparator();
-
- @Override
- public int compare(VpnProfile lhs, VpnProfile rhs) {
- if (lhs == rhs)
- // Catches also both null
- return 0;
-
- if (lhs == null)
- return -1;
- if (rhs == null)
- return 1;
-
- // Copied from Long.compare
- if (lhs.mLastUsed > rhs.mLastUsed)
- return -1;
- if (lhs.mLastUsed < rhs.mLastUsed)
- return 1;
- else
- return nameComparator.compare(lhs, rhs);
- }
- }
-
-
private void setListAdapter() {
if (mArrayadapter == null) {
mArrayadapter = new VPNArrayAdapter(getActivity(), R.layout.vpn_list_item, R.id.vpn_item_title);
@@ -408,7 +286,6 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
mArrayadapter.notifyDataSetChanged();
}
-
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.add(0, MENU_ADD_PROFILE, 0, R.string.menu_add_profile)
@@ -429,8 +306,13 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
.setTitleCondensed(getString(R.string.sort))
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- }
+ menu.add(0, MENU_IMPORT_AS, 0, R.string.import_from_as)
+ .setIcon(R.drawable.ic_menu_import)
+ .setAlphabeticShortcut('p')
+ .setTitleCondensed("Import AS")
+ .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
@@ -442,13 +324,21 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
return startImportConfigFilePicker();
} else if (itemId == MENU_CHANGE_SORTING) {
return changeSorting();
+ } else if (itemId == MENU_IMPORT_AS) {
+ return startASProfileImport();
} else {
return super.onOptionsItemSelected(item);
}
}
+ private boolean startASProfileImport() {
+ ImportASConfig asImportFrag = ImportASConfig.newInstance();
+ asImportFrag.show(requireFragmentManager(), "dialog");
+ return true;
+ }
+
private boolean changeSorting() {
- SharedPreferences prefs = Preferences.getDefaultSharedPreferences(getActivity());
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(requireActivity());
boolean oldValue = prefs.getBoolean(PREF_SORT_BY_LRU, false);
SharedPreferences.Editor prefsedit = prefs.edit();
if (oldValue) {
@@ -477,7 +367,7 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
private boolean startImportConfigFilePicker() {
boolean startOldFileDialog = true;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && !Utils.alwaysUseOldFileChooser(getActivity() ))
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && !Utils.alwaysUseOldFileChooser(getActivity()))
startOldFileDialog = !startFilePicker();
if (startOldFileDialog)
@@ -504,7 +394,6 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
startActivityForResult(intent, SELECT_PROFILE);
}
-
private void onAddOrDuplicateProfile(final VpnProfile mCopyProfile) {
Context context = getActivity();
if (context != null) {
@@ -560,7 +449,6 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
return ProfileManager.getInstance(getActivity());
}
-
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
@@ -612,7 +500,6 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
startActivityForResult(startImport, IMPORT_PROFILE);
}
-
private void editVPN(VpnProfile profile) {
mEditProfile = profile;
Intent vprefintent = new Intent(getActivity(), VPNPreferences.class)
@@ -630,4 +517,118 @@ public class VPNProfileList extends ListFragment implements OnClickListener, Vpn
intent.setAction(Intent.ACTION_MAIN);
startActivity(intent);
}
+
+ static class VpnProfileNameComparator implements Comparator<VpnProfile> {
+
+ @Override
+ public int compare(VpnProfile lhs, VpnProfile rhs) {
+ if (lhs == rhs)
+ // Catches also both null
+ return 0;
+
+ if (lhs == null)
+ return -1;
+ if (rhs == null)
+ return 1;
+
+ if (lhs.mName == null)
+ return -1;
+ if (rhs.mName == null)
+ return 1;
+
+ return lhs.mName.compareTo(rhs.mName);
+ }
+
+ }
+
+ static class VpnProfileLRUComparator implements Comparator<VpnProfile> {
+
+ VpnProfileNameComparator nameComparator = new VpnProfileNameComparator();
+
+ @Override
+ public int compare(VpnProfile lhs, VpnProfile rhs) {
+ if (lhs == rhs)
+ // Catches also both null
+ return 0;
+
+ if (lhs == null)
+ return -1;
+ if (rhs == null)
+ return 1;
+
+ // Copied from Long.compare
+ if (lhs.mLastUsed > rhs.mLastUsed)
+ return -1;
+ if (lhs.mLastUsed < rhs.mLastUsed)
+ return 1;
+ else
+ return nameComparator.compare(lhs, rhs);
+ }
+ }
+
+ private class VPNArrayAdapter extends ArrayAdapter<VpnProfile> {
+
+ public VPNArrayAdapter(Context context, int resource,
+ int textViewResourceId) {
+ super(context, resource, textViewResourceId);
+ }
+
+ @Override
+ public View getView(final int position, View convertView, ViewGroup parent) {
+ View v = super.getView(position, convertView, parent);
+
+ final VpnProfile profile = (VpnProfile) getListAdapter().getItem(position);
+
+ View titleview = v.findViewById(R.id.vpn_list_item_left);
+ titleview.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startOrStopVPN(profile);
+ }
+ });
+
+ View settingsview = v.findViewById(R.id.quickedit_settings);
+ settingsview.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ editVPN(profile);
+
+ }
+ });
+
+ TextView subtitle = (TextView) v.findViewById(R.id.vpn_item_subtitle);
+ if (profile.getUUIDString().equals(VpnStatus.getLastConnectedVPNProfile())) {
+ subtitle.setText(mLastStatusMessage);
+ subtitle.setVisibility(View.VISIBLE);
+ } else {
+ subtitle.setText("");
+ subtitle.setVisibility(View.GONE);
+ }
+
+
+ return v;
+ }
+ }
+
+ class MiniImageGetter implements ImageGetter {
+
+
+ @Override
+ public Drawable getDrawable(String source) {
+ Drawable d = null;
+ if ("ic_menu_add".equals(source))
+ d = getActivity().getResources().getDrawable(R.drawable.ic_menu_add_grey);
+ else if ("ic_menu_archive".equals(source))
+ d = getActivity().getResources().getDrawable(R.drawable.ic_menu_import_grey);
+
+
+ if (d != null) {
+ d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
+ return d;
+ } else {
+ return null;
+ }
+ }
+ }
}