summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/userstatus/UserSessionFragment.java
diff options
context:
space:
mode:
authorParménides GV <parmegv@sdf.org>2015-04-29 12:25:24 +0200
committerParménides GV <parmegv@sdf.org>2015-04-29 12:26:23 +0200
commitf008b5ec8e1c74968e4a605d2de5423edf91b854 (patch)
treea6e8906aa5d09c24a48f533f6a057a84ee16265e /app/src/main/java/se/leap/bitmaskclient/userstatus/UserSessionFragment.java
parent6cc1443a27a4be762e4b53deb464d15a99d698ac (diff)
Creating a user session fragment.
I've separated the user session management to it, and encapsulated ProviderAPICommand into its own class. Putting the fragment statically in dashboard.xml isn't working, Android complains about it being duplicated, so I'm going to add it dynamically.
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/userstatus/UserSessionFragment.java')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/userstatus/UserSessionFragment.java178
1 files changed, 178 insertions, 0 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/userstatus/UserSessionFragment.java b/app/src/main/java/se/leap/bitmaskclient/userstatus/UserSessionFragment.java
new file mode 100644
index 00000000..02b9fbeb
--- /dev/null
+++ b/app/src/main/java/se/leap/bitmaskclient/userstatus/UserSessionFragment.java
@@ -0,0 +1,178 @@
+package se.leap.bitmaskclient.userstatus;
+
+import android.app.*;
+import android.os.*;
+import android.view.*;
+import android.widget.*;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.*;
+
+import butterknife.*;
+import se.leap.bitmaskclient.*;
+import se.leap.bitmaskclient.eip.EipStatus;
+
+public class UserSessionFragment extends Fragment implements Observer, SessionDialog.SessionDialogInterface {
+
+ private static View view;
+
+ public static String TAG = UserSessionFragment.class.getSimpleName();
+ private static Dashboard dashboard;
+ private ProviderAPIResultReceiver providerAPI_result_receiver;
+
+ @InjectView(R.id.user_session_status)
+ TextView user_session_status_text_view;
+ @InjectView(R.id.user_session_status_progress)
+ ProgressBar user_session_status_progress_bar;
+ @InjectView(R.id.user_session_button)
+ Button main_button;
+
+ private UserSessionStatus user_session_status;
+ private boolean allows_registration = false;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ user_session_status = UserSessionStatus.getInstance(getResources());
+ user_session_status.addObserver(this);
+
+ handleNewUserSessionStatus(user_session_status);
+ }
+
+ @Override
+ public void onSaveInstanceState(@NotNull Bundle outState) {
+ if (user_session_status_text_view != null && user_session_status_text_view.getVisibility() == TextView.VISIBLE)
+ outState.putSerializable(UserSessionStatus.TAG, user_session_status.sessionStatus());
+
+ super.onSaveInstanceState(outState);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_user_session, container, false);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ Fragment fragment = (getFragmentManager().findFragmentById(R.id.user_session_fragment));
+ FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
+ ft.remove(fragment);
+ ft.commit();
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ dashboard = (Dashboard) activity;
+
+ providerAPI_result_receiver = new ProviderAPIResultReceiver(new Handler());
+ providerAPI_result_receiver.setReceiver(dashboard);
+ }
+
+ public void restoreSessionStatus(Bundle savedInstanceState) {
+ if (savedInstanceState != null)
+ if (savedInstanceState.containsKey(UserSessionStatus.TAG)) {
+ UserSessionStatus.SessionStatus status = (UserSessionStatus.SessionStatus) savedInstanceState.getSerializable(UserSessionStatus.TAG);
+ user_session_status.updateStatus(status, getResources());
+ }
+ }
+
+ @OnClick(R.id.user_session_button)
+ public void handleMainButton() {
+ if(user_session_status.isLoggedIn())
+ logOut();
+ else if(user_session_status.isLoggedOut())
+ dashboard.sessionDialog(Bundle.EMPTY);
+ else if(user_session_status.inProgress())
+ cancelLoginOrSignup();
+ }
+
+ @Override
+ public void update(Observable observable, Object data) {
+ if (observable instanceof UserSessionStatus) {
+ UserSessionStatus status = (UserSessionStatus) observable;
+ handleNewUserSessionStatus(status);
+ }
+ }
+
+ private void handleNewUserSessionStatus(UserSessionStatus status) {
+ user_session_status = status;
+ if (allows_registration) {
+ if (user_session_status.inProgress())
+ showUserSessionProgressBar();
+ else
+ hideUserSessionProgressBar();
+ changeSessionStatusMessage();
+ updateButton();
+ }
+ }
+
+ private void showUserSessionProgressBar() {
+ dashboard.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ user_session_status_progress_bar.setVisibility(ProgressBar.VISIBLE);
+ }
+ });
+ }
+
+ private void hideUserSessionProgressBar() {
+ dashboard.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ user_session_status_progress_bar.setVisibility(ProgressBar.GONE);
+ }
+ });
+ }
+
+ private void changeSessionStatusMessage() {
+ final String message = user_session_status.toString();
+ dashboard.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ user_session_status_text_view.setText(message);
+ }
+ });
+ }
+
+ private void updateButton() {
+ if(User.loggedIn())
+ main_button.setText(getString(R.string.logout_button));
+ else if(allows_registration)
+ main_button.setText(getString(R.string.login_button));
+ }
+
+
+ @Override
+ public void signUp(String username, String password) {
+ User.setUserName(username);
+ Bundle parameters = bundlePassword(password);
+ ProviderAPICommand.execute(parameters, ProviderAPI.SIGN_UP, providerAPI_result_receiver);
+ }
+
+ @Override
+ public void logIn(String username, String password) {
+ User.setUserName(username);
+ Bundle parameters = bundlePassword(password);
+ ProviderAPICommand.execute(parameters, ProviderAPI.LOG_IN, providerAPI_result_receiver);
+ }
+
+ public void logOut() {
+ ProviderAPICommand.execute(Bundle.EMPTY, ProviderAPI.LOG_OUT, providerAPI_result_receiver);
+ }
+
+ public void cancelLoginOrSignup() {
+ EipStatus.getInstance().setConnectedOrDisconnected();
+ }
+
+ private Bundle bundlePassword(String password) {
+ Bundle parameters = new Bundle();
+ if (!password.isEmpty())
+ parameters.putString(SessionDialog.PASSWORD, password);
+ return parameters;
+ }
+}