]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
android: Switch to AppCompat/Material theme for dialogs
authorTobias Brunner <tobias@strongswan.org>
Fri, 15 Apr 2016 15:36:31 +0000 (17:36 +0200)
committerTobias Brunner <tobias@strongswan.org>
Wed, 27 Apr 2016 12:24:25 +0000 (14:24 +0200)
There is no AppCompatProgressDialog class as the use of ProgressDialog
is discouraged (instead progress bars should be placed in the layout directly).
To display the current ProgressDialog instances correctly on systems < 21 we
modify the window background color.

src/frontends/android/app/src/main/AndroidManifest.xml
src/frontends/android/app/src/main/java/org/strongswan/android/ui/CertificateDeleteConfirmationDialog.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/MainActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificateImportActivity.java
src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.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/VpnStateFragment.java
src/frontends/android/app/src/main/res/values-v15/styles.xml [new file with mode: 0644]
src/frontends/android/app/src/main/res/values-v21/styles.xml [new file with mode: 0644]
src/frontends/android/app/src/main/res/values/styles.xml

index 41f1037fd61e6117da8ef8bc1215924112728b16..da465ba74084c09e948c3aa8ea7924f32cd56a7f 100644 (file)
@@ -66,7 +66,7 @@
         <activity
             android:name=".ui.TrustedCertificateImportActivity"
             android:label="@string/import_certificate"
-            android:theme="@style/Theme.AppCompat.Dialog" >
+            android:theme="@style/AlertDialogTheme" >
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
index c381900c68aef69b5f160c93be2b7e6ae7b34f08..e8d12fd7e3f0c48dbf44e30d4f8ff3bef9f37083 100644 (file)
 
 package org.strongswan.android.ui;
 
-import org.strongswan.android.R;
-
 import android.app.Activity;
-import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.DialogFragment;
 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;
 
 /**
  * Class that displays a confirmation dialog to delete a selected local
  * certificate.
  */
-public class CertificateDeleteConfirmationDialog extends DialogFragment
+public class CertificateDeleteConfirmationDialog extends AppCompatDialogFragment
 {
        public static final String ALIAS = "alias";
        OnCertificateDeleteListener mListener;
index 31ce5b9ffa1ceb3b129880066acb0774a79d9c0f..3d53240566417106eba0690cd88cd2df42740b16 100644 (file)
 
 package org.strongswan.android.ui;
 
-import android.app.Activity;
-import android.app.AlertDialog.Builder;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
@@ -35,7 +32,9 @@ import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.IBinder;
 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.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -237,7 +236,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec
 
                        ConfirmationDialog dialog = new ConfirmationDialog();
                        dialog.setArguments(profileInfo);
-                       dialog.show(this.getFragmentManager(), DIALOG_TAG);
+                       dialog.show(this.getSupportFragmentManager(), DIALOG_TAG);
                        return;
                }
                startVpnProfile(profileInfo);
@@ -255,7 +254,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec
                {
                        LoginDialog login = new LoginDialog();
                        login.setArguments(profileInfo);
-                       login.show(getFragmentManager(), DIALOG_TAG);
+                       login.show(getSupportFragmentManager(), DIALOG_TAG);
                        return;
                }
                prepareVpnService(profileInfo);
@@ -332,7 +331,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec
         * Class that displays a confirmation dialog if a VPN profile is already connected
         * and then initiates the selected VPN profile if the user confirms the dialog.
         */
-       public static class ConfirmationDialog extends DialogFragment
+       public static class ConfirmationDialog extends AppCompatDialogFragment
        {
                @Override
                public Dialog onCreateDialog(Bundle savedInstanceState)
@@ -351,7 +350,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec
                                button = R.string.reconnect;
                        }
 
-                       return new Builder(getActivity())
+                       return new AlertDialog.Builder(getActivity())
                                .setIcon(icon)
                                .setTitle(String.format(getString(title), profileInfo.getString(PROFILE_NAME)))
                                .setMessage(message)
@@ -379,7 +378,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec
         * Class that displays a login dialog and initiates the selected VPN
         * profile if the user confirms the dialog.
         */
-       public static class LoginDialog extends DialogFragment
+       public static class LoginDialog extends AppCompatDialogFragment
        {
                @Override
                public Dialog onCreateDialog(Bundle savedInstanceState)
@@ -391,7 +390,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec
                        username.setText(profileInfo.getString(VpnProfileDataSource.KEY_USERNAME));
                        final EditText password = (EditText)view.findViewById(R.id.password);
 
-                       Builder adb = new Builder(getActivity());
+                       AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
                        adb.setView(view);
                        adb.setTitle(getString(R.string.login_title));
                        adb.setPositiveButton(R.string.login_confirm, new DialogInterface.OnClickListener()
@@ -420,17 +419,17 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec
         * Class representing an error message which is displayed if VpnService is
         * not supported on the current device.
         */
-       public static class VpnNotSupportedError extends DialogFragment
+       public static class VpnNotSupportedError extends AppCompatDialogFragment
        {
                static final String ERROR_MESSAGE_ID = "org.strongswan.android.VpnNotSupportedError.MessageId";
 
-               public static void showWithMessage(Activity activity, int messageId)
+               public static void showWithMessage(AppCompatActivity activity, int messageId)
                {
                        Bundle bundle = new Bundle();
                        bundle.putInt(ERROR_MESSAGE_ID, messageId);
                        VpnNotSupportedError dialog = new VpnNotSupportedError();
                        dialog.setArguments(bundle);
-                       dialog.show(activity.getFragmentManager(), DIALOG_TAG);
+                       dialog.show(activity.getSupportFragmentManager(), DIALOG_TAG);
                }
 
                @Override
@@ -438,7 +437,7 @@ public class MainActivity extends AppCompatActivity implements OnVpnProfileSelec
                {
                        final Bundle arguments = getArguments();
                        final int messageId = arguments.getInt(ERROR_MESSAGE_ID);
-                       return new Builder(getActivity())
+                       return new AlertDialog.Builder(getActivity())
                                .setTitle(R.string.vpn_not_supported_title)
                                .setMessage(messageId)
                                .setCancelable(false)
index 8e3930788da2fbdd1277af6a3eebfd30dbef0a88..6b8eb2ee8a44bba75945c4db820452c3c5c5a195 100644 (file)
@@ -17,16 +17,16 @@ package org.strongswan.android.ui;
 
 import android.annotation.TargetApi;
 import android.app.Activity;
-import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentTransaction;
 import android.content.DialogInterface;
 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;
@@ -119,7 +119,7 @@ public class TrustedCertificateImportActivity extends AppCompatActivity
                Bundle args = new Bundle();
                args.putSerializable(VpnProfileDataSource.KEY_CERTIFICATE, certificate);
                dialog.setArguments(args);
-               FragmentTransaction ft = getFragmentManager().beginTransaction();
+               FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.add(dialog, DIALOG_TAG);
                ft.commit();
        }
@@ -179,7 +179,7 @@ public class TrustedCertificateImportActivity extends AppCompatActivity
         * Class that displays a confirmation dialog when a certificate should get
         * imported. If the user confirms the import we try to store it.
         */
-       public static class ConfirmImportDialog extends DialogFragment
+       public static class ConfirmImportDialog extends AppCompatDialogFragment
        {
                @Override
                public Dialog onCreateDialog(Bundle savedInstanceState)
index 5f666250e4c2b103a4bc49e63481ada640503377..bba61bae2eb595cc79a6561180a40477878bfbd2 100644 (file)
@@ -158,7 +158,7 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr
                                args.putString(CertificateDeleteConfirmationDialog.ALIAS, selected.getAlias());
                                CertificateDeleteConfirmationDialog dialog = new CertificateDeleteConfirmationDialog();
                                dialog.setArguments(args);
-                               dialog.show(this.getFragmentManager(), DIALOG_TAG);
+                               dialog.show(getSupportFragmentManager(), DIALOG_TAG);
                        }
                }
        }
index 24690de76fa9f9284776eabdff2b0c859c38a23b..bcc226b1f0d1b08892d485f6bc0d64e0b120f671 100644 (file)
@@ -17,9 +17,7 @@
 
 package org.strongswan.android.ui;
 
-import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -28,7 +26,9 @@ import android.os.Bundle;
 import android.security.KeyChain;
 import android.security.KeyChainAliasCallback;
 import android.security.KeyChainException;
+import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AppCompatActivity;
+import android.support.v7.app.AppCompatDialogFragment;
 import android.text.Html;
 import android.util.Log;
 import android.view.Menu;
@@ -146,7 +146,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
                        @Override
                        public void onClick(View v)
                        {
-                               new TncNoticeDialog().show(VpnProfileDetailActivity.this.getFragmentManager(), "TncNotice");
+                               new TncNoticeDialog().show(VpnProfileDetailActivity.this.getSupportFragmentManager(), "TncNotice");
                        }
                });
 
@@ -633,7 +633,7 @@ public class VpnProfileDetailActivity extends AppCompatActivity
        /**
         * Dialog with notification message if EAP-TNC is used.
         */
-       public static class TncNoticeDialog extends DialogFragment
+       public static class TncNoticeDialog extends AppCompatDialogFragment
        {
                @Override
                public Dialog onCreateDialog(Bundle savedInstanceState)
index 160ba951bb4ee04db04e547db2889e1c4421373a..f3859996bbd6ed8d6bbc52b066b4bce3b18c8f17 100644 (file)
 
 package org.strongswan.android.ui;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.strongswan.android.R;
-import org.strongswan.android.data.VpnProfile;
-import org.strongswan.android.logic.VpnStateService;
-import org.strongswan.android.logic.VpnStateService.ErrorState;
-import org.strongswan.android.logic.VpnStateService.State;
-import org.strongswan.android.logic.VpnStateService.VpnStateListener;
-import org.strongswan.android.logic.imc.ImcState;
-import org.strongswan.android.logic.imc.RemediationInstruction;
-
-import android.app.AlertDialog;
 import android.app.Fragment;
 import android.app.ProgressDialog;
 import android.app.Service;
@@ -40,6 +27,7 @@ import android.content.Intent;
 import android.content.ServiceConnection;
 import android.os.Bundle;
 import android.os.IBinder;
+import android.support.v7.app.AlertDialog;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -47,6 +35,18 @@ import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.TextView;
 
+import org.strongswan.android.R;
+import org.strongswan.android.data.VpnProfile;
+import org.strongswan.android.logic.VpnStateService;
+import org.strongswan.android.logic.VpnStateService.ErrorState;
+import org.strongswan.android.logic.VpnStateService.State;
+import org.strongswan.android.logic.VpnStateService.VpnStateListener;
+import org.strongswan.android.logic.imc.ImcState;
+import org.strongswan.android.logic.imc.RemediationInstruction;
+
+import java.util.ArrayList;
+import java.util.List;
+
 public class VpnStateFragment extends Fragment implements VpnStateListener
 {
        private static final String KEY_ERROR_CONNECTION_ID = "error_connection_id";
@@ -64,7 +64,8 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
        private long mErrorConnectionID;
        private long mDismissedConnectionID;
        private VpnStateService mService;
-       private final ServiceConnection mServiceConnection = new ServiceConnection() {
+       private final ServiceConnection mServiceConnection = new ServiceConnection()
+       {
                @Override
                public void onServiceDisconnected(ComponentName name)
                {
@@ -334,18 +335,18 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
                mConnectDialog.setIndeterminate(true);
                mConnectDialog.setCancelable(false);
                mConnectDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
-                         getString(android.R.string.cancel),
-                         new DialogInterface.OnClickListener()
-                         {
-                                 @Override
-                                 public void onClick(DialogInterface dialog, int which)
-                                 {
-                                         if (mService != null)
-                                         {
-                                                 mService.disconnect();
-                                         }
-                                 }
-                         });
+                                                                getString(android.R.string.cancel),
+                                                                new DialogInterface.OnClickListener()
+                                                                {
+                                                                        @Override
+                                                                        public void onClick(DialogInterface dialog, int which)
+                                                                        {
+                                                                                if (mService != null)
+                                                                                {
+                                                                                        mService.disconnect();
+                                                                                }
+                                                                        }
+                                                                });
                mConnectDialog.show();
                mProgressDialog = mConnectDialog;
        }
@@ -374,7 +375,8 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
                mErrorDialog = new AlertDialog.Builder(getActivity())
                        .setMessage(getString(R.string.error_introduction) + " " + getString(textid))
                        .setCancelable(false)
-                       .setNeutralButton(text, new DialogInterface.OnClickListener() {
+                       .setNeutralButton(text, new DialogInterface.OnClickListener()
+                       {
                                @Override
                                public void onClick(DialogInterface dialog, int which)
                                {
@@ -394,7 +396,8 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
                                        startActivity(intent);
                                }
                        })
-                       .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                       .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener()
+                       {
                                @Override
                                public void onClick(DialogInterface dialog, int id)
                                {
@@ -402,7 +405,8 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
                                        dialog.dismiss();
                                }
                        }).create();
-               mErrorDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
+               mErrorDialog.setOnDismissListener(new DialogInterface.OnDismissListener()
+               {
                        @Override
                        public void onDismiss(DialogInterface dialog)
                        {
diff --git a/src/frontends/android/app/src/main/res/values-v15/styles.xml b/src/frontends/android/app/src/main/res/values-v15/styles.xml
new file mode 100644 (file)
index 0000000..90c58a7
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2016 Tobias Brunner
+    HSR Hochschule fuer Technik Rapperswil
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation; either version 2 of the License, or (at your
+    option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+
+    This program is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+-->
+<resources>
+
+    <style name="ApplicationTheme" parent="ApplicationTheme.Base">
+    </style>
+
+    <style name="AlertDialogTheme" parent="AlertDialogTheme.Base">
+        <item name="android:windowBackground">@android:color/transparent</item>
+    </style>
+
+</resources>
\ No newline at end of file
diff --git a/src/frontends/android/app/src/main/res/values-v21/styles.xml b/src/frontends/android/app/src/main/res/values-v21/styles.xml
new file mode 100644 (file)
index 0000000..32de06b
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2016 Tobias Brunner
+    HSR Hochschule fuer Technik Rapperswil
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation; either version 2 of the License, or (at your
+    option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+
+    This program is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+-->
+<resources>
+
+    <style name="ApplicationTheme" parent="ApplicationTheme.Base">
+    </style>
+
+    <style name="AlertDialogTheme" parent="AlertDialogTheme.Base">
+    </style>
+
+</resources>
\ No newline at end of file
index 8ae09ff829841b97b99a1fd28dcc7f769bc3af2c..aa77e54ee24f595ed54f84a739cdd37615d9eb6c 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-    Copyright (C) 2012 Tobias Brunner
-    Hochschule fuer Technik Rapperswil
+    Copyright (C) 2012-2016 Tobias Brunner
+    HSR Hochschule fuer Technik Rapperswil
 
     This program is free software; you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <style name="ApplicationTheme" parent="Theme.AppCompat">
+    <style name="ApplicationTheme.Base" parent="Theme.AppCompat">
+        <item name="android:alertDialogTheme">@style/AlertDialogTheme</item>
+    </style>
+
+    <style name="AlertDialogTheme.Base" parent="Theme.AppCompat.Dialog.Alert">
     </style>
 
 </resources>