android: Switch to AppCompat/Material theme and use custom Toolbar as AppBar

Also includes some whitespace/formatting changes due to the switch to
Android Studio.
This commit is contained in:
Tobias Brunner 2015-11-25 17:05:56 +01:00
parent 9dd6d1e6db
commit 6b31828269
16 changed files with 185 additions and 158 deletions

View File

@ -66,7 +66,7 @@
<activity
android:name=".ui.TrustedCertificateImportActivity"
android:label="@string/import_certificate"
android:theme="@android:style/Theme.Holo.Dialog.NoActionBar" >
android:theme="@style/Theme.AppCompat.Dialog" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />

View File

@ -15,21 +15,21 @@
package org.strongswan.android.ui;
import java.io.File;
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;
import org.strongswan.android.R;
import org.strongswan.android.data.LogContentProvider;
import org.strongswan.android.logic.CharonVpnService;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import java.io.File;
public class LogActivity extends Activity
public class LogActivity extends AppCompatActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
@ -37,7 +37,7 @@ public class LogActivity extends Activity
super.onCreate(savedInstanceState);
setContentView(R.layout.log_activity);
getActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
@ -74,7 +74,7 @@ public class LogActivity extends Activity
}
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { MainActivity.CONTACT_EMAIL });
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{MainActivity.CONTACT_EMAIL});
intent.putExtra(Intent.EXTRA_SUBJECT, String.format(getString(R.string.log_mail_subject), version));
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_STREAM, LogContentProvider.createContentUri());

View File

@ -17,19 +17,7 @@
package org.strongswan.android.ui;
import org.strongswan.android.R;
import org.strongswan.android.data.VpnProfile;
import org.strongswan.android.data.VpnProfileDataSource;
import org.strongswan.android.data.VpnType.VpnTypeFeature;
import org.strongswan.android.logic.CharonVpnService;
import org.strongswan.android.logic.TrustedCertificateManager;
import org.strongswan.android.logic.VpnStateService;
import org.strongswan.android.logic.VpnStateService.State;
import org.strongswan.android.ui.VpnProfileListFragment.OnVpnProfileSelectedListener;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.app.DialogFragment;
@ -46,6 +34,8 @@ import android.net.VpnService;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@ -54,12 +44,24 @@ import android.view.Window;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements OnVpnProfileSelectedListener
import org.strongswan.android.R;
import org.strongswan.android.data.VpnProfile;
import org.strongswan.android.data.VpnProfileDataSource;
import org.strongswan.android.data.VpnType.VpnTypeFeature;
import org.strongswan.android.logic.CharonVpnService;
import org.strongswan.android.logic.TrustedCertificateManager;
import org.strongswan.android.logic.VpnStateService;
import org.strongswan.android.logic.VpnStateService.State;
import org.strongswan.android.ui.VpnProfileListFragment.OnVpnProfileSelectedListener;
public class MainActivity extends AppCompatActivity implements OnVpnProfileSelectedListener
{
public static final String CONTACT_EMAIL = "android@strongswan.org";
public static final String START_PROFILE = "org.strongswan.android.action.START_PROFILE";
public static final String EXTRA_VPN_PROFILE_ID = "org.strongswan.android.VPN_PROFILE_ID";
/** Use "bring your own device" (BYOD) features */
/**
* Use "bring your own device" (BYOD) features
*/
public static final boolean USE_BYOD = true;
private static final int PREPARE_VPN_SERVICE = 0;
private static final String PROFILE_NAME = "org.strongswan.android.MainActivity.PROFILE_NAME";
@ -69,7 +71,8 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
private Bundle mProfileInfo;
private VpnStateService mService;
private final ServiceConnection mServiceConnection = new ServiceConnection() {
private final ServiceConnection mServiceConnection = new ServiceConnection()
{
@Override
public void onServiceDisconnected(ComponentName name)
{
@ -91,16 +94,18 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar bar = getSupportActionBar();
bar.setDisplayShowHomeEnabled(true);
bar.setDisplayShowTitleEnabled(false);
bar.setIcon(R.drawable.ic_launcher);
this.bindService(new Intent(this, VpnStateService.class),
mServiceConnection, Service.BIND_AUTO_CREATE);
ActionBar bar = getActionBar();
bar.setDisplayShowTitleEnabled(false);
/* load CA certificates in a background task */
new LoadCertificatesTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
@ -157,6 +162,7 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
/**
* Prepare the VpnService. If this succeeds the current VPN profile is
* started.
*
* @param profileInfo a bundle containing the information about the profile to be started
*/
protected void prepareVpnService(Bundle profileInfo)
@ -239,6 +245,7 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
/**
* Start the given VPN profile asking the user for a password if required.
*
* @param profileInfo data about the profile
*/
private void startVpnProfile(Bundle profileInfo)
@ -257,6 +264,7 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
/**
* Start the VPN profile referred to by the given intent. Displays an error
* if the profile doesn't exist.
*
* @param intent Intent that caused us to start this
*/
private void startVpnProfile(Intent intent)
@ -291,11 +299,13 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
{
setProgressBarIndeterminateVisibility(true);
}
@Override
protected TrustedCertificateManager doInBackground(Void... params)
{
return TrustedCertificateManager.getInstance().load();
}
@Override
protected void onPostExecute(TrustedCertificateManager result)
{
@ -341,11 +351,12 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
button = R.string.reconnect;
}
return new AlertDialog.Builder(getActivity())
return new Builder(getActivity())
.setIcon(icon)
.setTitle(String.format(getString(title), profileInfo.getString(PROFILE_NAME)))
.setMessage(message)
.setPositiveButton(button, new DialogInterface.OnClickListener() {
.setPositiveButton(button, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int whichButton)
{
@ -353,7 +364,8 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
activity.startVpnProfile(profileInfo);
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
@ -379,10 +391,11 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
username.setText(profileInfo.getString(VpnProfileDataSource.KEY_USERNAME));
final EditText password = (EditText)view.findViewById(R.id.password);
Builder adb = new AlertDialog.Builder(getActivity());
Builder adb = new Builder(getActivity());
adb.setView(view);
adb.setTitle(getString(R.string.login_title));
adb.setPositiveButton(R.string.login_confirm, new DialogInterface.OnClickListener() {
adb.setPositiveButton(R.string.login_confirm, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int whichButton)
{
@ -391,7 +404,8 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
activity.prepareVpnService(profileInfo);
}
});
adb.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
adb.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
@ -424,11 +438,12 @@ public class MainActivity extends Activity implements OnVpnProfileSelectedListen
{
final Bundle arguments = getArguments();
final int messageId = arguments.getInt(ERROR_MESSAGE_ID);
return new AlertDialog.Builder(getActivity())
return new Builder(getActivity())
.setTitle(R.string.vpn_not_supported_title)
.setMessage(messageId)
.setCancelable(false)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int id)
{

View File

@ -15,24 +15,24 @@
package org.strongswan.android.ui;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import org.strongswan.android.R;
import org.strongswan.android.logic.imc.RemediationInstruction;
import org.strongswan.android.ui.RemediationInstructionsFragment.OnRemediationInstructionSelectedListener;
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import java.util.ArrayList;
public class RemediationInstructionsActivity extends Activity implements OnRemediationInstructionSelectedListener
public class RemediationInstructionsActivity extends AppCompatActivity implements OnRemediationInstructionSelectedListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.remediation_instructions);
getActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (savedInstanceState != null)
{ /* only update if we're not restoring */
@ -64,7 +64,7 @@ public class RemediationInstructionsActivity extends Activity implements OnRemed
{
finish();
}
getActionBar().setTitle(getTitle());
getSupportActionBar().setTitle(getTitle());
return true;
default:
return super.onOptionsItemSelected(item);
@ -88,7 +88,7 @@ public class RemediationInstructionsActivity extends Activity implements OnRemed
frag.setArguments(args);
getFragmentManager().beginTransaction().replace(R.id.fragment_container, frag).addToBackStack(null).commit();
getActionBar().setTitle(instruction.getTitle());
getSupportActionBar().setTitle(instruction.getTitle());
}
}
}

View File

@ -15,17 +15,6 @@
package org.strongswan.android.ui;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import org.strongswan.android.R;
import org.strongswan.android.data.VpnProfileDataSource;
import org.strongswan.android.logic.TrustedCertificateManager;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
@ -37,19 +26,31 @@ import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
public class TrustedCertificateImportActivity extends Activity
import org.strongswan.android.R;
import org.strongswan.android.data.VpnProfileDataSource;
import org.strongswan.android.logic.TrustedCertificateManager;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
public class TrustedCertificateImportActivity extends AppCompatActivity
{
private static final int OPEN_DOCUMENT = 0;
private static final String DIALOG_TAG = "Dialog";
/* same as those listed in the manifest */
private static final String[] ACCEPTED_MIME_TYPES = {
"application/x-x509-ca-cert",
"application/x-x509-server-cert",
"application/x-pem-file",
"application/pkix-cert"
"application/x-x509-ca-cert",
"application/x-x509-server-cert",
"application/x-pem-file",
"application/pkix-cert"
};
@TargetApi(Build.VERSION_CODES.KITKAT)
@ -97,6 +98,7 @@ public class TrustedCertificateImportActivity extends Activity
/**
* Import the file pointed to by the given URI as a certificate.
*
* @param uri
*/
private void importCertificate(Uri uri)
@ -124,6 +126,7 @@ public class TrustedCertificateImportActivity extends Activity
/**
* Load the file from the given URI and try to parse it as X.509 certificate.
*
* @param uri
* @return certificate or null
*/
@ -151,6 +154,7 @@ public class TrustedCertificateImportActivity extends Activity
/**
* Try to store the given certificate in the KeyStore.
*
* @param certificate
* @return whether it was successfully stored
*/
@ -188,7 +192,8 @@ public class TrustedCertificateImportActivity extends Activity
.setIcon(R.drawable.ic_launcher)
.setTitle(R.string.import_certificate)
.setMessage(certificate.getSubjectDN().toString())
.setPositiveButton(R.string.import_certificate, new DialogInterface.OnClickListener() {
.setPositiveButton(R.string.import_certificate, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int whichButton)
{
@ -205,7 +210,8 @@ public class TrustedCertificateImportActivity extends Activity
getActivity().finish();
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{

View File

@ -15,26 +15,13 @@
package org.strongswan.android.ui;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Hashtable;
import java.util.List;
import java.util.Map.Entry;
import org.strongswan.android.R;
import org.strongswan.android.logic.TrustedCertificateManager;
import org.strongswan.android.logic.TrustedCertificateManager.TrustedCertificateSource;
import org.strongswan.android.security.TrustedCertificateEntry;
import org.strongswan.android.ui.adapter.TrustedCertificateAdapter;
import android.app.Activity;
import android.app.ListFragment;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.AsyncTaskLoader;
import android.content.Context;
import android.content.Loader;
import android.os.Bundle;
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.text.TextUtils;
import android.view.Menu;
import android.view.MenuInflater;
@ -44,7 +31,20 @@ import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
public class TrustedCertificateListFragment extends ListFragment implements LoaderCallbacks<List<TrustedCertificateEntry>>, OnQueryTextListener
import org.strongswan.android.R;
import org.strongswan.android.logic.TrustedCertificateManager;
import org.strongswan.android.logic.TrustedCertificateManager.TrustedCertificateSource;
import org.strongswan.android.security.TrustedCertificateEntry;
import org.strongswan.android.ui.adapter.TrustedCertificateAdapter;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Hashtable;
import java.util.List;
import java.util.Map.Entry;
public class TrustedCertificateListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<List<TrustedCertificateEntry>>, OnQueryTextListener
{
public static final String EXTRA_CERTIFICATE_SOURCE = "certificate_source";
private OnTrustedCertificateSelectedListener mListener;
@ -54,7 +54,8 @@ public class TrustedCertificateListFragment extends ListFragment implements Load
/**
* The activity containing this fragment should implement this interface
*/
public interface OnTrustedCertificateSelectedListener {
public interface OnTrustedCertificateSelectedListener
{
public void onTrustedCertificateSelected(TrustedCertificateEntry selected);
}
@ -186,7 +187,7 @@ public class TrustedCertificateListFragment extends ListFragment implements Load
public List<TrustedCertificateEntry> loadInBackground()
{
TrustedCertificateManager certman = TrustedCertificateManager.getInstance().load();
Hashtable<String,X509Certificate> certificates = certman.getCACertificates(mSource);
Hashtable<String, X509Certificate> certificates = certman.getCACertificates(mSource);
List<TrustedCertificateEntry> selected;
selected = new ArrayList<TrustedCertificateEntry>();

View File

@ -15,7 +15,16 @@
package org.strongswan.android.ui;
import java.security.KeyStore;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import org.strongswan.android.R;
import org.strongswan.android.data.VpnProfileDataSource;
@ -24,18 +33,9 @@ import org.strongswan.android.logic.TrustedCertificateManager.TrustedCertificate
import org.strongswan.android.security.TrustedCertificateEntry;
import org.strongswan.android.ui.CertificateDeleteConfirmationDialog.OnCertificateDeleteListener;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import java.security.KeyStore;
public class TrustedCertificatesActivity extends Activity implements TrustedCertificateListFragment.OnTrustedCertificateSelectedListener, OnCertificateDeleteListener
public class TrustedCertificatesActivity extends AppCompatActivity implements TrustedCertificateListFragment.OnTrustedCertificateSelectedListener, OnCertificateDeleteListener
{
public static final String SELECT_CERTIFICATE = "org.strongswan.android.action.SELECT_CERTIFICATE";
private static final String DIALOG_TAG = "Dialog";
@ -48,29 +48,29 @@ public class TrustedCertificatesActivity extends Activity implements TrustedCert
super.onCreate(savedInstanceState);
setContentView(R.layout.trusted_certificates_activity);
ActionBar actionBar = getActionBar();
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
TrustedCertificatesTabListener listener;
listener = new TrustedCertificatesTabListener(this, "system", TrustedCertificateSource.SYSTEM);
actionBar.addTab(actionBar
.newTab()
.setText(R.string.system_tab)
.setTag(listener)
.setTabListener(listener));
.newTab()
.setText(R.string.system_tab)
.setTag(listener)
.setTabListener(listener));
listener = new TrustedCertificatesTabListener(this, "user", TrustedCertificateSource.USER);
actionBar.addTab(actionBar
.newTab()
.setText(R.string.user_tab)
.setTag(listener)
.setTabListener(listener));
.newTab()
.setText(R.string.user_tab)
.setTag(listener)
.setTabListener(listener));
listener = new TrustedCertificatesTabListener(this, "local", TrustedCertificateSource.LOCAL);
actionBar.addTab(actionBar
.newTab()
.setText(R.string.local_tab)
.setTag(listener)
.setTabListener(listener));
.newTab()
.setText(R.string.local_tab)
.setTag(listener)
.setTabListener(listener));
if (savedInstanceState != null)
{
@ -83,7 +83,7 @@ public class TrustedCertificatesActivity extends Activity implements TrustedCert
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
outState.putInt("tab", getSupportActionBar().getSelectedNavigationIndex());
}
@Override
@ -151,7 +151,7 @@ public class TrustedCertificatesActivity extends Activity implements TrustedCert
else
{
TrustedCertificatesTabListener listener;
listener = (TrustedCertificatesTabListener)getActionBar().getSelectedTab().getTag();
listener = (TrustedCertificatesTabListener)getSupportActionBar().getSelectedTab().getTag();
if (listener.mTag == "local")
{
Bundle args = new Bundle();
@ -182,9 +182,9 @@ public class TrustedCertificatesActivity extends Activity implements TrustedCert
private void reloadCertificates()
{
TrustedCertificateManager.getInstance().reset();
for (int i = 0; i < getActionBar().getTabCount(); i++)
for (int i = 0; i < getSupportActionBar().getTabCount(); i++)
{
Tab tab = getActionBar().getTabAt(i);
ActionBar.Tab tab = getSupportActionBar().getTabAt(i);
TrustedCertificatesTabListener listener = (TrustedCertificatesTabListener)tab.getTag();
listener.reset();
}
@ -196,24 +196,24 @@ public class TrustedCertificatesActivity extends Activity implements TrustedCert
private final TrustedCertificateSource mSource;
private Fragment mFragment;
public TrustedCertificatesTabListener(Activity activity, String tag, TrustedCertificateSource source)
public TrustedCertificatesTabListener(AppCompatActivity activity, String tag, TrustedCertificateSource source)
{
mTag = tag;
mSource = source;
/* check to see if we already have a fragment for this tab, probably
* from a previously saved state. if so, deactivate it, because the
* initial state is that no tab is shown */
mFragment = activity.getFragmentManager().findFragmentByTag(mTag);
mFragment = activity.getSupportFragmentManager().findFragmentByTag(mTag);
if (mFragment != null && !mFragment.isDetached())
{
FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.detach(mFragment);
ft.commit();
}
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
{
if (mFragment == null)
{
@ -230,7 +230,7 @@ public class TrustedCertificatesActivity extends Activity implements TrustedCert
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft)
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)
{
if (mFragment != null)
{
@ -239,7 +239,7 @@ public class TrustedCertificatesActivity extends Activity implements TrustedCert
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft)
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft)
{
/* nothing to be done */
}

View File

@ -17,17 +17,6 @@
package org.strongswan.android.ui;
import java.security.cert.X509Certificate;
import org.strongswan.android.R;
import org.strongswan.android.data.VpnProfile;
import org.strongswan.android.data.VpnProfileDataSource;
import org.strongswan.android.data.VpnType;
import org.strongswan.android.data.VpnType.VpnTypeFeature;
import org.strongswan.android.logic.TrustedCertificateManager;
import org.strongswan.android.security.TrustedCertificateEntry;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
@ -39,6 +28,7 @@ import android.os.Bundle;
import android.security.KeyChain;
import android.security.KeyChainAliasCallback;
import android.security.KeyChainException;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.util.Log;
import android.view.Menu;
@ -57,7 +47,17 @@ import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TextView;
public class VpnProfileDetailActivity extends Activity
import org.strongswan.android.R;
import org.strongswan.android.data.VpnProfile;
import org.strongswan.android.data.VpnProfileDataSource;
import org.strongswan.android.data.VpnType;
import org.strongswan.android.data.VpnType.VpnTypeFeature;
import org.strongswan.android.logic.TrustedCertificateManager;
import org.strongswan.android.security.TrustedCertificateEntry;
import java.security.cert.X509Certificate;
public class VpnProfileDetailActivity extends AppCompatActivity
{
private static final int SELECT_TRUSTED_CERTIFICATE = 0;
private static final int MTU_MIN = 1280;
@ -94,7 +94,7 @@ public class VpnProfileDetailActivity extends Activity
super.onCreate(savedInstanceState);
/* the title is set when we load the profile, if any */
getActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mDataSource = new VpnProfileDataSource(this);
mDataSource.open();
@ -465,7 +465,7 @@ public class VpnProfileDetailActivity extends Activity
{
String useralias = null, alias = null;
getActionBar().setTitle(R.string.add_profile);
getSupportActionBar().setTitle(R.string.add_profile);
if (mId != null && mId != 0)
{
mProfile = mDataSource.getVpnProfile(mId);
@ -482,7 +482,7 @@ public class VpnProfileDetailActivity extends Activity
mBlockIPv6.setChecked(mProfile.getSplitTunneling() != null ? (mProfile.getSplitTunneling() & VpnProfile.SPLIT_TUNNELING_BLOCK_IPV6) != 0 : false);
useralias = mProfile.getUserCertificateAlias();
alias = mProfile.getCertificateAlias();
getActionBar().setTitle(mProfile.getName());
getSupportActionBar().setTitle(mProfile.getName());
}
else
{

View File

@ -15,15 +15,15 @@
package org.strongswan.android.ui;
import android.content.Intent;
import android.os.Bundle;
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 android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class VpnProfileSelectActivity extends Activity implements OnVpnProfileSelectedListener
public class VpnProfileSelectActivity extends AppCompatActivity implements OnVpnProfileSelectedListener
{
@Override
protected void onCreate(Bundle savedInstanceState)

View File

@ -13,16 +13,17 @@
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_import_certificate"
android:title="@string/import_certificate"
android:showAsAction="withText" />
app:showAsAction="withText" />
<item
android:id="@+id/menu_reload_certs"
android:title="@string/reload_trusted_certs"
android:showAsAction="withText" />
app:showAsAction="withText" />
</menu>

View File

@ -13,11 +13,12 @@
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_send_log"
android:title="@string/send_log"
android:showAsAction="ifRoom|withText" />
app:showAsAction="ifRoom|withText" />
</menu>

View File

@ -13,16 +13,17 @@
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_manage_certs"
android:title="@string/trusted_certs_title"
android:showAsAction="withText" />
app:showAsAction="withText" />
<item
android:id="@+id/menu_show_log"
android:title="@string/show_log"
android:showAsAction="withText" />
app:showAsAction="withText" />
</menu>
</menu>

View File

@ -13,16 +13,17 @@
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_accept"
android:title="@string/profile_edit_save"
android:showAsAction="always|withText" />
app:showAsAction="always|withText" />
<item
android:id="@+id/menu_cancel"
android:title="@string/profile_edit_cancel"
android:showAsAction="ifRoom" />
app:showAsAction="ifRoom" />
</menu>

View File

@ -13,10 +13,11 @@
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/add_profile"
android:title="@string/add_profile"
android:showAsAction="always|withText" />
app:showAsAction="always|withText" />
</menu>

View File

@ -16,9 +16,9 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/edit_profile"
android:title="@string/edit_profile" ></item>
android:title="@string/edit_profile" />
<item android:id="@+id/delete_profile"
android:title="@string/delete_profile" ></item>
android:title="@string/delete_profile" />
</menu>
</menu>

View File

@ -15,7 +15,7 @@
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="ApplicationTheme" parent="@android:style/Theme.Holo">
<style name="ApplicationTheme" parent="Theme.AppCompat">
</style>
</resources>