android: Avoid ProgressDialogs in VPN state fragment

Instead we use a ProgressBar directly in the fragment and use the
existing button to cancel the process.
This commit is contained in:
Tobias Brunner
2016-05-02 16:43:15 +02:00
parent 353526601a
commit 6e398a81f2
7 changed files with 32 additions and 84 deletions
@@ -1,8 +1,8 @@
/* /*
* Copyright (C) 2012-2013 Tobias Brunner * Copyright (C) 2012-2016 Tobias Brunner
* Copyright (C) 2012 Giuliano Grassi * Copyright (C) 2012 Giuliano Grassi
* Copyright (C) 2012 Ralf Sager * Copyright (C) 2012 Ralf Sager
* Hochschule fuer Technik Rapperswil * HSR Hochschule fuer Technik Rapperswil
* *
* This program is free software; you can redistribute it and/or modify it * 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 * under the terms of the GNU General Public License as published by the
@@ -17,7 +17,6 @@
package org.strongswan.android.ui; package org.strongswan.android.ui;
import android.app.ProgressDialog;
import android.app.Service; import android.app.Service;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@@ -34,6 +33,7 @@ import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import org.strongswan.android.R; import org.strongswan.android.R;
@@ -60,9 +60,7 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
private int mColorStateError; private int mColorStateError;
private int mColorStateSuccess; private int mColorStateSuccess;
private Button mActionButton; private Button mActionButton;
private ProgressDialog mConnectDialog; private ProgressBar mProgress;
private ProgressDialog mDisconnectDialog;
private ProgressDialog mProgressDialog;
private AlertDialog mErrorDialog; private AlertDialog mErrorDialog;
private long mErrorConnectionID; private long mErrorConnectionID;
private long mDismissedConnectionID; private long mDismissedConnectionID;
@@ -133,8 +131,9 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
} }
} }
}); });
enableActionButton(false); enableActionButton(null);
mProgress = (ProgressBar)view.findViewById(R.id.progress);
mStateView = (TextView)view.findViewById(R.id.vpn_state); mStateView = (TextView)view.findViewById(R.id.vpn_state);
mColorStateBase = mStateView.getCurrentTextColor(); mColorStateBase = mStateView.getCurrentTextColor();
mProfileView = (TextView)view.findViewById(R.id.vpn_profile_label); mProfileView = (TextView)view.findViewById(R.id.vpn_profile_label);
@@ -163,7 +162,6 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
mService.unregisterListener(this); mService.unregisterListener(this);
} }
hideErrorDialog(); hideErrorDialog();
hideProgressDialog();
} }
@Override @Override
@@ -202,33 +200,35 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
return; return;
} }
enableActionButton(false);
mProfileNameView.setText(name); mProfileNameView.setText(name);
switch (state) switch (state)
{ {
case DISABLED: case DISABLED:
showProfile(false); showProfile(false);
hideProgressDialog(); mProgress.setVisibility(View.GONE);
enableActionButton(null);
mStateView.setText(R.string.state_disabled); mStateView.setText(R.string.state_disabled);
mStateView.setTextColor(mColorStateBase); mStateView.setTextColor(mColorStateBase);
break; break;
case CONNECTING: case CONNECTING:
showProfile(true); showProfile(true);
showConnectDialog(name, gateway); mProgress.setVisibility(View.VISIBLE);
enableActionButton(getString(android.R.string.cancel));
mStateView.setText(R.string.state_connecting); mStateView.setText(R.string.state_connecting);
mStateView.setTextColor(mColorStateBase); mStateView.setTextColor(mColorStateBase);
break; break;
case CONNECTED: case CONNECTED:
showProfile(true); showProfile(true);
hideProgressDialog(); mProgress.setVisibility(View.GONE);
enableActionButton(true); enableActionButton(getString(R.string.disconnect));
mStateView.setText(R.string.state_connected); mStateView.setText(R.string.state_connected);
mStateView.setTextColor(mColorStateSuccess); mStateView.setTextColor(mColorStateSuccess);
break; break;
case DISCONNECTING: case DISCONNECTING:
showProfile(true); showProfile(true);
showDisconnectDialog(name); mProgress.setVisibility(View.VISIBLE);
enableActionButton(null);
mStateView.setText(R.string.state_disconnecting); mStateView.setText(R.string.state_disconnecting);
mStateView.setTextColor(mColorStateBase); mStateView.setTextColor(mColorStateBase);
break; break;
@@ -254,10 +254,10 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
{ /* we already show the dialog */ { /* we already show the dialog */
return true; return true;
} }
hideProgressDialog();
mProfileNameView.setText(name); mProfileNameView.setText(name);
showProfile(true); showProfile(true);
enableActionButton(false); mProgress.setVisibility(View.GONE);
enableActionButton(null);
mStateView.setText(R.string.state_error); mStateView.setText(R.string.state_error);
mStateView.setTextColor(mColorStateError); mStateView.setTextColor(mColorStateError);
switch (error) switch (error)
@@ -294,20 +294,11 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
mProfileNameView.setVisibility(show ? View.VISIBLE : View.GONE); mProfileNameView.setVisibility(show ? View.VISIBLE : View.GONE);
} }
private void enableActionButton(boolean enable) private void enableActionButton(String text)
{ {
mActionButton.setEnabled(enable); mActionButton.setText(text);
mActionButton.setVisibility(enable ? View.VISIBLE : View.GONE); mActionButton.setEnabled(text != null);
} mActionButton.setVisibility(text != null ? View.VISIBLE : View.GONE);
private void hideProgressDialog()
{
if (mProgressDialog != null)
{
mProgressDialog.dismiss();
mProgressDialog = null;
mDisconnectDialog = mConnectDialog = null;
}
} }
private void hideErrorDialog() private void hideErrorDialog()
@@ -329,50 +320,6 @@ public class VpnStateFragment extends Fragment implements VpnStateListener
updateView(); updateView();
} }
private void showConnectDialog(String profile, String gateway)
{
if (mConnectDialog != null)
{ /* already showing the dialog */
return;
}
hideProgressDialog();
mConnectDialog = new ProgressDialog(getActivity());
mConnectDialog.setTitle(String.format(getString(R.string.connecting_title), profile));
mConnectDialog.setMessage(String.format(getString(R.string.connecting_message), gateway));
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();
}
}
});
mConnectDialog.show();
mProgressDialog = mConnectDialog;
}
private void showDisconnectDialog(String profile)
{
if (mDisconnectDialog != null)
{ /* already showing the dialog */
return;
}
hideProgressDialog();
mDisconnectDialog = new ProgressDialog(getActivity());
mDisconnectDialog.setMessage(getString(R.string.state_disconnecting));
mDisconnectDialog.setIndeterminate(true);
mDisconnectDialog.setCancelable(false);
mDisconnectDialog.show();
mProgressDialog = mDisconnectDialog;
}
private void showErrorDialog(int textid) private void showErrorDialog(int textid)
{ {
final List<RemediationInstruction> instructions = mService.getRemediationInstructions(); final List<RemediationInstruction> instructions = mService.getRemediationInstructions();
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright (C) 2012-2013 Tobias Brunner Copyright (C) 2012-2016 Tobias Brunner
Copyright (C) 2012 Giuliano Grassi Copyright (C) 2012 Giuliano Grassi
Copyright (C) 2012 Ralf Sager Copyright (C) 2012 Ralf Sager
Hochschule fuer Technik Rapperswil Hochschule fuer Technik Rapperswil
@@ -72,6 +72,17 @@
</TextView> </TextView>
</GridLayout> </GridLayout>
<ProgressBar
android:id="@+id/progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:indeterminate="true"
android:visibility="gone"
style="@style/Widget.AppCompat.ProgressBar.Horizontal" />
<Button <Button
android:id="@+id/action" android:id="@+id/action"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -122,8 +122,6 @@
<string name="error_auth_failed">Benutzerauthentifizierung ist fehlgeschlagen.</string> <string name="error_auth_failed">Benutzerauthentifizierung ist fehlgeschlagen.</string>
<string name="error_assessment_failed">Sicherheitsassessment ist fehlgeschlagen.</string> <string name="error_assessment_failed">Sicherheitsassessment ist fehlgeschlagen.</string>
<string name="error_generic">Unbekannter Fehler während des Verbindens.</string> <string name="error_generic">Unbekannter Fehler während des Verbindens.</string>
<string name="connecting_title">Verbinden: %1$s</string>
<string name="connecting_message">Verbinde mit \""%1$s\".</string>
<string name="vpn_connected">VPN verbunden</string> <string name="vpn_connected">VPN verbunden</string>
<string name="vpn_profile_connected">Dieses VPN Profil ist momentan verbunden!</string> <string name="vpn_profile_connected">Dieses VPN Profil ist momentan verbunden!</string>
<string name="reconnect">Neu verbinden</string> <string name="reconnect">Neu verbinden</string>
@@ -122,8 +122,6 @@
<string name="error_auth_failed">Błąd przy autoryzacji użytkownika</string> <string name="error_auth_failed">Błąd przy autoryzacji użytkownika</string>
<string name="error_assessment_failed">Security assessment failed.</string> <string name="error_assessment_failed">Security assessment failed.</string>
<string name="error_generic">Nieznany błąd w czasie połączenia</string> <string name="error_generic">Nieznany błąd w czasie połączenia</string>
<string name="connecting_title">Łączenie: %1$s</string>
<string name="connecting_message">Tworzenie tunelu VPN z \""%1$s\".</string>
<string name="vpn_connected">Połączenie z VPN</string> <string name="vpn_connected">Połączenie z VPN</string>
<string name="vpn_profile_connected">Ten profil VPN jest obecnie połaczony!</string> <string name="vpn_profile_connected">Ten profil VPN jest obecnie połaczony!</string>
<string name="reconnect">Połączyć ponownie</string> <string name="reconnect">Połączyć ponownie</string>
@@ -119,8 +119,6 @@
<string name="error_auth_failed">Ошибка авторизации пользователя.</string> <string name="error_auth_failed">Ошибка авторизации пользователя.</string>
<string name="error_assessment_failed">Security assessment failed.</string> <string name="error_assessment_failed">Security assessment failed.</string>
<string name="error_generic">Неизвестная ошибка.</string> <string name="error_generic">Неизвестная ошибка.</string>
<string name="connecting_title">Подключение: %1$s</string>
<string name="connecting_message">Подключение к VPN с \""%1$s\".</string>
<string name="vpn_connected">Соединение с VPN установлено</string> <string name="vpn_connected">Соединение с VPN установлено</string>
<string name="vpn_profile_connected">Подключение к этому профилю VPN уже существует!</string> <string name="vpn_profile_connected">Подключение к этому профилю VPN уже существует!</string>
<string name="reconnect">Переподключить</string> <string name="reconnect">Переподключить</string>
@@ -120,8 +120,6 @@
<string name="error_auth_failed">Помилка аутентифікації користувача.</string> <string name="error_auth_failed">Помилка аутентифікації користувача.</string>
<string name="error_assessment_failed">Security assessment failed.</string> <string name="error_assessment_failed">Security assessment failed.</string>
<string name="error_generic">Невідома помилка під час підключення.</string> <string name="error_generic">Невідома помилка під час підключення.</string>
<string name="connecting_title">Підключення: %1$s</string>
<string name="connecting_message">Підключення VPN з \""%1$s\".</string>
<string name="vpn_connected">VPN підключено</string> <string name="vpn_connected">VPN підключено</string>
<string name="vpn_profile_connected">Цей VPN профіль зараз підключений!</string> <string name="vpn_profile_connected">Цей VPN профіль зараз підключений!</string>
<string name="reconnect">Перепідключитися</string> <string name="reconnect">Перепідключитися</string>
@@ -122,8 +122,6 @@
<string name="error_auth_failed">User authentication failed.</string> <string name="error_auth_failed">User authentication failed.</string>
<string name="error_assessment_failed">Security assessment failed.</string> <string name="error_assessment_failed">Security assessment failed.</string>
<string name="error_generic">Unspecified failure while connecting.</string> <string name="error_generic">Unspecified failure while connecting.</string>
<string name="connecting_title">Connecting: %1$s</string>
<string name="connecting_message">Establishing VPN with \""%1$s\".</string>
<string name="vpn_connected">VPN connected</string> <string name="vpn_connected">VPN connected</string>
<string name="vpn_profile_connected">This VPN profile is currently connected!</string> <string name="vpn_profile_connected">This VPN profile is currently connected!</string>
<string name="reconnect">Reconnect</string> <string name="reconnect">Reconnect</string>