Merge branch 'android-updates'
Some fixes for Android 9 (28) and other issues. Also migrated to AndroidX. Closes strongswan/strongswan#148.
This commit is contained in:
commit
0a29ace908
|
@ -1,12 +1,12 @@
|
|||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 26
|
||||
compileSdkVersion 28
|
||||
|
||||
defaultConfig {
|
||||
applicationId "org.strongswan.android"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 26
|
||||
targetSdkVersion 28
|
||||
versionCode 64
|
||||
versionName "2.1.1"
|
||||
}
|
||||
|
@ -46,9 +46,9 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.android.support:appcompat-v7:26.0.2'
|
||||
implementation 'com.android.support:design:26.0.2'
|
||||
implementation 'com.android.support:preference-v7:26.0.2'
|
||||
implementation 'com.android.support:support-v4:26.0.2'
|
||||
implementation 'androidx.appcompat:appcompat:1.0.0'
|
||||
implementation 'androidx.preference:preference:1.0.0'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'com.google.android.material:material:1.0.0'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
|
||||
<application
|
||||
|
|
|
@ -38,8 +38,6 @@ import android.os.ParcelFileDescriptor;
|
|||
import android.preference.PreferenceManager;
|
||||
import android.security.KeyChain;
|
||||
import android.security.KeyChainException;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.system.OsConstants;
|
||||
import android.util.Log;
|
||||
|
||||
|
@ -77,6 +75,9 @@ import java.util.List;
|
|||
import java.util.Locale;
|
||||
import java.util.SortedSet;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
public class CharonVpnService extends VpnService implements Runnable, VpnStateService.VpnStateListener
|
||||
{
|
||||
private static final String TAG = CharonVpnService.class.getSimpleName();
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
|
||||
package org.strongswan.android.logic;
|
||||
|
||||
import android.support.annotation.Keep;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
@ -34,6 +32,8 @@ import java.util.concurrent.Future;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
|
||||
@Keep
|
||||
public class SimpleFetcher
|
||||
{
|
||||
|
|
|
@ -24,7 +24,6 @@ import android.os.Handler;
|
|||
import android.os.IBinder;
|
||||
import android.os.Message;
|
||||
import android.os.SystemClock;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
|
||||
import org.strongswan.android.R;
|
||||
import org.strongswan.android.data.VpnProfile;
|
||||
|
@ -41,6 +40,8 @@ import java.util.LinkedList;
|
|||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
public class VpnStateService extends Service
|
||||
{
|
||||
private final HashSet<VpnStateListener> mListeners = new HashSet<VpnStateListener>();
|
||||
|
|
|
@ -19,11 +19,12 @@ import android.app.Dialog;
|
|||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.app.AppCompatDialogFragment;
|
||||
|
||||
import org.strongswan.android.R;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatDialogFragment;
|
||||
|
||||
/**
|
||||
* Class that displays a confirmation dialog to delete a selected local
|
||||
* certificate.
|
||||
|
|
|
@ -22,10 +22,6 @@ import android.content.Intent;
|
|||
import android.content.ServiceConnection;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
|
@ -45,6 +41,11 @@ import org.strongswan.android.logic.imc.RemediationInstruction;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
public class ImcStateFragment extends Fragment implements VpnStateListener
|
||||
{
|
||||
private int mColorIsolate;
|
||||
|
|
|
@ -18,7 +18,6 @@ package org.strongswan.android.ui;
|
|||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Toast;
|
||||
|
@ -29,6 +28,8 @@ import org.strongswan.android.logic.CharonVpnService;
|
|||
|
||||
import java.io.File;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class LogActivity extends AppCompatActivity
|
||||
{
|
||||
@Override
|
||||
|
|
|
@ -19,8 +19,6 @@ import android.content.Context;
|
|||
import android.os.Bundle;
|
||||
import android.os.FileObserver;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -37,6 +35,9 @@ import java.io.FileReader;
|
|||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
public class LogFragment extends Fragment
|
||||
{
|
||||
private static String SCROLL_POSITION = "SCROLL_POSITION";
|
||||
|
|
|
@ -23,13 +23,6 @@ import android.content.Intent;
|
|||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.app.AppCompatDialogFragment;
|
||||
import android.text.format.Formatter;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
@ -44,6 +37,14 @@ import java.io.File;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.app.AppCompatDialogFragment;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
public class MainActivity extends AppCompatActivity implements OnVpnProfileSelectedListener
|
||||
{
|
||||
public static final String CONTACT_EMAIL = "android@strongswan.org";
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
package org.strongswan.android.ui;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.ListFragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -27,6 +26,8 @@ import android.widget.TextView;
|
|||
import org.strongswan.android.R;
|
||||
import org.strongswan.android.logic.imc.RemediationInstruction;
|
||||
|
||||
import androidx.fragment.app.ListFragment;
|
||||
|
||||
public class RemediationInstructionFragment extends ListFragment
|
||||
{
|
||||
public static final String ARG_REMEDIATION_INSTRUCTION = "instruction";
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
package org.strongswan.android.ui;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import org.strongswan.android.R;
|
||||
|
|
|
@ -17,7 +17,6 @@ package org.strongswan.android.ui;
|
|||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.ListFragment;
|
||||
import android.view.View;
|
||||
import android.widget.ListView;
|
||||
|
||||
|
@ -27,6 +26,8 @@ import org.strongswan.android.ui.adapter.RemediationInstructionAdapter;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import androidx.fragment.app.ListFragment;
|
||||
|
||||
public class RemediationInstructionsFragment extends ListFragment
|
||||
{
|
||||
public static final String EXTRA_REMEDIATION_INSTRUCTIONS = "instructions";
|
||||
|
|
|
@ -17,14 +17,15 @@ package org.strongswan.android.ui;
|
|||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import org.strongswan.android.data.VpnProfileDataSource;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
public class SelectedApplicationsActivity extends AppCompatActivity
|
||||
{
|
||||
private static final String LIST_TAG = "ApplicationList";
|
||||
|
|
|
@ -20,12 +20,6 @@ import android.content.Context;
|
|||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.ListFragment;
|
||||
import android.support.v4.app.LoaderManager;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v7.widget.SearchView;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Pair;
|
||||
import android.view.Menu;
|
||||
|
@ -46,6 +40,13 @@ import java.util.List;
|
|||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.SearchView;
|
||||
import androidx.fragment.app.ListFragment;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.AsyncTaskLoader;
|
||||
import androidx.loader.content.Loader;
|
||||
|
||||
public class SelectedApplicationsListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Pair<List<SelectedApplicationEntry>, List<String>>>, SearchView.OnQueryTextListener
|
||||
{
|
||||
private SelectedApplicationsAdapter mAdapter;
|
||||
|
@ -74,7 +75,7 @@ public class SelectedApplicationsListFragment extends ListFragment implements Lo
|
|||
}
|
||||
mSelection = new TreeSet<>(selection);
|
||||
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
LoaderManager.getInstance(this).initLoader(0, null, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -16,9 +16,10 @@
|
|||
package org.strongswan.android.ui;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class SettingsActivity extends AppCompatActivity
|
||||
{
|
||||
|
||||
|
|
|
@ -18,10 +18,6 @@ package org.strongswan.android.ui;
|
|||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.preference.ListPreference;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceFragmentCompat;
|
||||
import android.support.v7.preference.PreferenceManager;
|
||||
|
||||
import org.strongswan.android.R;
|
||||
import org.strongswan.android.data.VpnProfile;
|
||||
|
@ -32,6 +28,11 @@ import java.util.Collections;
|
|||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import static org.strongswan.android.utils.Constants.PREF_DEFAULT_VPN_PROFILE;
|
||||
import static org.strongswan.android.utils.Constants.PREF_DEFAULT_VPN_PROFILE_MRU;
|
||||
|
||||
|
|
|
@ -24,10 +24,6 @@ import android.content.Intent;
|
|||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.app.AppCompatDialogFragment;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.strongswan.android.R;
|
||||
|
@ -41,6 +37,11 @@ import java.security.cert.CertificateException;
|
|||
import java.security.cert.CertificateFactory;
|
||||
import java.security.cert.X509Certificate;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.app.AppCompatDialogFragment;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
public class TrustedCertificateImportActivity extends AppCompatActivity
|
||||
{
|
||||
private static final int OPEN_DOCUMENT = 0;
|
||||
|
|
|
@ -17,10 +17,6 @@ package org.strongswan.android.ui;
|
|||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.ListFragment;
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
|
@ -45,6 +41,12 @@ import java.util.Map.Entry;
|
|||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
import androidx.fragment.app.ListFragment;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.app.LoaderManager.LoaderCallbacks;
|
||||
import androidx.loader.content.AsyncTaskLoader;
|
||||
import androidx.loader.content.Loader;
|
||||
|
||||
public class TrustedCertificateListFragment extends ListFragment implements LoaderCallbacks<List<TrustedCertificateEntry>>, OnQueryTextListener
|
||||
{
|
||||
public static final String EXTRA_CERTIFICATE_SOURCE = "certificate_source";
|
||||
|
@ -79,7 +81,7 @@ public class TrustedCertificateListFragment extends ListFragment implements Load
|
|||
mSource = (TrustedCertificateSource)arguments.getSerializable(EXTRA_CERTIFICATE_SOURCE);
|
||||
}
|
||||
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
LoaderManager.getInstance(this).initLoader(0, null, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -20,16 +20,11 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
|
||||
import org.strongswan.android.R;
|
||||
import org.strongswan.android.data.VpnProfileDataSource;
|
||||
import org.strongswan.android.logic.TrustedCertificateManager;
|
||||
|
@ -39,6 +34,13 @@ import org.strongswan.android.ui.CertificateDeleteConfirmationDialog.OnCertifica
|
|||
|
||||
import java.security.KeyStore;
|
||||
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentPagerAdapter;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
public class TrustedCertificatesActivity extends AppCompatActivity implements TrustedCertificateListFragment.OnTrustedCertificateSelectedListener, OnCertificateDeleteListener
|
||||
{
|
||||
public static final String SELECT_CERTIFICATE = "org.strongswan.android.action.SELECT_CERTIFICATE";
|
||||
|
|
|
@ -25,12 +25,6 @@ import android.content.ServiceConnection;
|
|||
import android.net.VpnService;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.app.AppCompatDialogFragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
|
@ -43,6 +37,13 @@ import org.strongswan.android.data.VpnType.VpnTypeFeature;
|
|||
import org.strongswan.android.logic.VpnStateService;
|
||||
import org.strongswan.android.logic.VpnStateService.State;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.app.AppCompatDialogFragment;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
public class VpnProfileControlActivity extends AppCompatActivity
|
||||
{
|
||||
public static final String START_PROFILE = "org.strongswan.android.action.START_PROFILE";
|
||||
|
|
|
@ -27,10 +27,6 @@ import android.os.Bundle;
|
|||
import android.security.KeyChain;
|
||||
import android.security.KeyChainAliasCallback;
|
||||
import android.security.KeyChainException;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.app.AppCompatDialogFragment;
|
||||
import android.text.Editable;
|
||||
import android.text.Html;
|
||||
import android.text.SpannableString;
|
||||
|
@ -79,6 +75,12 @@ import java.util.SortedSet;
|
|||
import java.util.TreeSet;
|
||||
import java.util.UUID;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.app.AppCompatDialogFragment;
|
||||
import androidx.core.text.HtmlCompat;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
|
||||
public class VpnProfileDetailActivity extends AppCompatActivity
|
||||
{
|
||||
private static final int SELECT_TRUSTED_CERTIFICATE = 0;
|
||||
|
@ -1035,7 +1037,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
|
|||
{
|
||||
return new AlertDialog.Builder(getActivity())
|
||||
.setTitle(R.string.tnc_notice_title)
|
||||
.setMessage(Html.fromHtml(getString(R.string.tnc_notice_details)))
|
||||
.setMessage(HtmlCompat.fromHtml(getString(R.string.tnc_notice_details), HtmlCompat.FROM_HTML_MODE_LEGACY))
|
||||
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int id)
|
||||
|
|
|
@ -16,21 +16,16 @@
|
|||
package org.strongswan.android.ui;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.LoaderManager;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.AsyncTaskLoader;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.Loader;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.security.KeyChain;
|
||||
import android.security.KeyChainAliasCallback;
|
||||
import android.security.KeyChainException;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Base64;
|
||||
import android.view.Menu;
|
||||
|
@ -79,6 +74,12 @@ import java.util.UUID;
|
|||
|
||||
import javax.net.ssl.SSLHandshakeException;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.AsyncTaskLoader;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
|
||||
public class VpnProfileImportActivity extends AppCompatActivity
|
||||
{
|
||||
private static final String PKCS12_INSTALLED = "PKCS12_INSTALLED";
|
||||
|
@ -95,7 +96,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
|
|||
private TrustedCertificateEntry mUserCertEntry;
|
||||
private String mUserCertLoading;
|
||||
private boolean mHideImport;
|
||||
private android.support.v4.widget.ContentLoadingProgressBar mProgressBar;
|
||||
private androidx.core.widget.ContentLoadingProgressBar mProgressBar;
|
||||
private TextView mExistsWarning;
|
||||
private ViewGroup mBasicDataGroup;
|
||||
private TextView mName;
|
||||
|
@ -229,7 +230,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
|
|||
mUserCertLoading = savedInstanceState.getString(VpnProfileDataSource.KEY_USER_CERTIFICATE);
|
||||
if (mUserCertLoading != null)
|
||||
{
|
||||
getLoaderManager().initLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
|
||||
LoaderManager.getInstance(this).initLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
|
||||
}
|
||||
mImportUserCert.setEnabled(!savedInstanceState.getBoolean(PKCS12_INSTALLED));
|
||||
}
|
||||
|
@ -312,7 +313,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
|
|||
|
||||
Bundle args = new Bundle();
|
||||
args.putParcelable(PROFILE_URI, uri);
|
||||
getLoaderManager().initLoader(PROFILE_LOADER, args, mProfileLoaderCallbacks);
|
||||
LoaderManager.getInstance(this).initLoader(PROFILE_LOADER, args, mProfileLoaderCallbacks);
|
||||
}
|
||||
|
||||
public void handleProfile(ProfileLoadResult data)
|
||||
|
@ -400,7 +401,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
|
|||
if (mUserCertLoading == null)
|
||||
{
|
||||
mUserCertLoading = getString(R.string.profile_cert_alias, mProfile.getName());
|
||||
getLoaderManager().initLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
|
||||
LoaderManager.getInstance(this).initLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
|
||||
}
|
||||
updateUserCertView();
|
||||
}
|
||||
|
@ -902,7 +903,7 @@ public class VpnProfileImportActivity extends AppCompatActivity
|
|||
updateUserCertView();
|
||||
if (alias != null)
|
||||
{ /* otherwise the dialog was canceled, the request denied */
|
||||
getLoaderManager().restartLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
|
||||
LoaderManager.getInstance(VpnProfileImportActivity.this).restartLoader(USER_CERT_LOADER, null, mUserCertificateLoaderCallbacks);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -23,8 +23,6 @@ import android.content.Intent;
|
|||
import android.content.IntentFilter;
|
||||
import android.content.res.TypedArray;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.ActionMode;
|
||||
import android.view.LayoutInflater;
|
||||
|
@ -51,6 +49,9 @@ import java.util.Iterator;
|
|||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
|
||||
public class VpnProfileListFragment extends Fragment
|
||||
{
|
||||
private static final String SELECTED_KEY = "SELECTED";
|
||||
|
|
|
@ -17,15 +17,16 @@ package org.strongswan.android.ui;
|
|||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.content.pm.ShortcutInfoCompat;
|
||||
import android.support.v4.content.pm.ShortcutManagerCompat;
|
||||
import android.support.v4.graphics.drawable.IconCompat;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
|
||||
import org.strongswan.android.R;
|
||||
import org.strongswan.android.data.VpnProfile;
|
||||
import org.strongswan.android.ui.VpnProfileListFragment.OnVpnProfileSelectedListener;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.content.pm.ShortcutInfoCompat;
|
||||
import androidx.core.content.pm.ShortcutManagerCompat;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
|
||||
public class VpnProfileSelectActivity extends AppCompatActivity implements OnVpnProfileSelectedListener
|
||||
{
|
||||
@Override
|
||||
|
|
|
@ -24,8 +24,6 @@ import android.content.Intent;
|
|||
import android.content.ServiceConnection;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -41,6 +39,9 @@ import org.strongswan.android.logic.VpnStateService.ErrorState;
|
|||
import org.strongswan.android.logic.VpnStateService.State;
|
||||
import org.strongswan.android.logic.VpnStateService.VpnStateListener;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
public class VpnStateFragment extends Fragment implements VpnStateListener
|
||||
{
|
||||
private boolean mVisible;
|
||||
|
|
|
@ -39,7 +39,6 @@ import org.strongswan.android.utils.Constants;
|
|||
@TargetApi(Build.VERSION_CODES.N)
|
||||
public class VpnTileService extends TileService implements VpnStateService.VpnStateListener
|
||||
{
|
||||
private boolean mListening;
|
||||
private VpnProfileDataSource mDataSource;
|
||||
private VpnStateService mService;
|
||||
private final ServiceConnection mServiceConnection = new ServiceConnection()
|
||||
|
@ -54,7 +53,7 @@ public class VpnTileService extends TileService implements VpnStateService.VpnSt
|
|||
public void onServiceConnected(ComponentName name, IBinder service)
|
||||
{
|
||||
mService = ((VpnStateService.LocalBinder)service).getService();
|
||||
if (mListening)
|
||||
if (mDataSource != null)
|
||||
{
|
||||
mService.registerListener(VpnTileService.this);
|
||||
updateTile();
|
||||
|
@ -70,27 +69,27 @@ public class VpnTileService extends TileService implements VpnStateService.VpnSt
|
|||
Context context = getApplicationContext();
|
||||
context.bindService(new Intent(context, VpnStateService.class),
|
||||
mServiceConnection, Service.BIND_AUTO_CREATE);
|
||||
|
||||
mDataSource = new VpnProfileDataSource(this);
|
||||
mDataSource.open();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy()
|
||||
{
|
||||
super.onDestroy();
|
||||
|
||||
if (mService != null)
|
||||
{
|
||||
getApplicationContext().unbindService(mServiceConnection);
|
||||
}
|
||||
mDataSource.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartListening()
|
||||
{
|
||||
super.onStartListening();
|
||||
mListening = true;
|
||||
|
||||
mDataSource = new VpnProfileDataSource(this);
|
||||
mDataSource.open();
|
||||
|
||||
if (mService != null)
|
||||
{
|
||||
mService.registerListener(this);
|
||||
|
@ -102,11 +101,14 @@ public class VpnTileService extends TileService implements VpnStateService.VpnSt
|
|||
public void onStopListening()
|
||||
{
|
||||
super.onStopListening();
|
||||
mListening = false;
|
||||
|
||||
if (mService != null)
|
||||
{
|
||||
mService.unregisterListener(this);
|
||||
}
|
||||
|
||||
mDataSource.close();
|
||||
mDataSource = null;
|
||||
}
|
||||
|
||||
private VpnProfile getProfile()
|
||||
|
|
|
@ -18,10 +18,11 @@ package org.strongswan.android.ui.adapter;
|
|||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import java.text.Collator;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class SelectedApplicationEntry implements Comparable<SelectedApplicationEntry>
|
||||
{
|
||||
private final ApplicationInfo mInfo;
|
||||
|
|
|
@ -16,11 +16,12 @@
|
|||
package org.strongswan.android.ui.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.Checkable;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public class CheckableLinearLayout extends LinearLayout implements Checkable
|
||||
{
|
||||
private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
|
||||
|
|
|
@ -17,10 +17,6 @@ package org.strongswan.android.ui.widget;
|
|||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.TextInputLayout;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v4.view.ViewPropertyAnimatorListenerAdapter;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.AttributeSet;
|
||||
|
@ -31,10 +27,16 @@ import android.widget.EditText;
|
|||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import org.strongswan.android.R;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.ViewPropertyAnimatorListenerAdapter;
|
||||
|
||||
/**
|
||||
* Layout that extends {@link android.support.design.widget.TextInputLayout} with a helper text
|
||||
* Layout that extends {@link TextInputLayout} with a helper text
|
||||
* displayed below the text field when it receives the focus. Also, any error message shown with
|
||||
* {@link #setError(CharSequence)} is hidden when the text field is changed (this mirrors the
|
||||
* behavior of {@link android.widget.EditText}).
|
||||
|
@ -141,7 +143,10 @@ public class TextInputLayoutHelper extends TextInputLayout
|
|||
*/
|
||||
public void setHelperText(CharSequence text)
|
||||
{
|
||||
mHelperText.setText(text);
|
||||
if (mHelperText != null)
|
||||
{
|
||||
mHelperText.setText(text);
|
||||
}
|
||||
}
|
||||
|
||||
private void showHelper(boolean show)
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
|
||||
package org.strongswan.android.utils;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
|
@ -24,6 +22,8 @@ import java.util.Arrays;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
/**
|
||||
* Class that represents a range of IP addresses. This range could be a proper subnet, but that's
|
||||
* not necessarily the case (see {@code getPrefix} and {@code toSubnets}).
|
||||
|
|
|
@ -21,12 +21,12 @@
|
|||
android:orientation="vertical"
|
||||
android:padding="10dp" >
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/username_wrap"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/username"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -34,15 +34,15 @@
|
|||
android:inputType="none"
|
||||
android:hint="@string/login_username" />
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/password_wrap"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/password"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -50,6 +50,6 @@
|
|||
android:inputType="textPassword|textNoSuggestions"
|
||||
android:hint="@string/login_password" />
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
android:hint="@string/profile_gateway_label"
|
||||
app:helper_text="@string/profile_gateway_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/gateway"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -75,7 +75,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:hint="@string/profile_username_label" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/username"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -92,7 +92,7 @@
|
|||
android:hint="@string/profile_password_label"
|
||||
app:helper_text="@string/profile_password_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/password"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -237,7 +237,7 @@
|
|||
android:hint="@string/profile_mtu_label"
|
||||
app:helper_text="@string/profile_mtu_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/mtu"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -253,7 +253,7 @@
|
|||
android:hint="@string/profile_port_label"
|
||||
app:helper_text="@string/profile_port_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/port"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -269,7 +269,7 @@
|
|||
android:hint="@string/profile_nat_keepalive_label"
|
||||
app:helper_text="@string/profile_nat_keepalive_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/nat_keepalive"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -389,7 +389,7 @@
|
|||
android:hint="@string/profile_included_subnets_label"
|
||||
app:helper_text="@string/profile_included_subnets_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/included_subnets"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -405,7 +405,7 @@
|
|||
android:hint="@string/profile_excluded_subnets_label"
|
||||
app:helper_text="@string/profile_excluded_subnets_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/excluded_subnets"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -475,7 +475,7 @@
|
|||
android:hint="@string/profile_proposals_ike_label"
|
||||
app:helper_text="@string/profile_proposals_ike_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/ike_proposal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -491,7 +491,7 @@
|
|||
android:hint="@string/profile_proposals_esp_label"
|
||||
app:helper_text="@string/profile_proposals_esp_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/esp_proposal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
android:padding="10dp"
|
||||
android:animateLayoutChanges="true" >
|
||||
|
||||
<android.support.v4.widget.ContentLoadingProgressBar
|
||||
<androidx.core.widget.ContentLoadingProgressBar
|
||||
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
|
||||
android:id="@+id/progress_bar"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -122,7 +122,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:hint="@string/profile_username_label" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/username"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -139,7 +139,7 @@
|
|||
android:hint="@string/profile_password_label"
|
||||
app:helper_text="@string/profile_password_hint" >
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/password"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
@ -19,14 +19,14 @@
|
|||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.design.widget.TabLayout
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
android:id="@+id/tabs"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:tabGravity="fill"
|
||||
app:tabMode="fixed"/>
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
android:id="@+id/viewpager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
|
|
|
@ -4,7 +4,7 @@ buildscript {
|
|||
google()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.3.2'
|
||||
classpath 'com.android.tools.build:gradle:3.4.2'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
android.enableJetifier=true
|
||||
android.useAndroidX=true
|
|
@ -1,6 +1,6 @@
|
|||
#Mon Mar 04 17:15:25 CET 2019
|
||||
#Tue Aug 13 13:47:52 CEST 2019
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
|
||||
|
|
Loading…
Reference in New Issue