From 1ddd4b99043d32e4365f1225129af13c041d74d0 Mon Sep 17 00:00:00 2001 From: Denys Podymskyy Date: Tue, 22 Sep 2020 11:06:04 +0300 Subject: [PATCH] Fixed hanging in case of unknown fields are received in Network list request --- .../android/activity/MainActivity.java | 55 ++++++++++--------- .../getbubblenow/android/model/Network.java | 10 ++-- .../android/repository/DataRepository.java | 7 +++ 3 files changed, 40 insertions(+), 32 deletions(-) diff --git a/ui/src/main/java/com/getbubblenow/android/activity/MainActivity.java b/ui/src/main/java/com/getbubblenow/android/activity/MainActivity.java index f6a643d..1c38fd9 100644 --- a/ui/src/main/java/com/getbubblenow/android/activity/MainActivity.java +++ b/ui/src/main/java/com/getbubblenow/android/activity/MainActivity.java @@ -1,6 +1,7 @@ package com.getbubblenow.android.activity; import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatButton; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.MutableLiveData; @@ -15,7 +16,6 @@ import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; -import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; @@ -67,8 +67,8 @@ public class MainActivity extends BaseActivityBubble { private MainViewModel mainViewModel; private TextView bubbleStatus; private TextView titleMyBubble; - private Button connectButton; - private Button launchNewBubbleButton; + private AppCompatButton connectButton; + private AppCompatButton launchNewBubbleButton; private ImageView imageMyBubble; private ImageView mark; private ImageButton accountButton; @@ -184,6 +184,7 @@ public class MainActivity extends BaseActivityBubble { showNetworkNotAvailableMessage(); requestBubbleStatusContinuously(); } else { + disableButtons(); showErrorDialog(statusResource.message); } break; @@ -191,6 +192,13 @@ public class MainActivity extends BaseActivityBubble { }); } + private void disableButtons() { + launchNewBubbleButton.setBackgroundDrawable(getDrawable(R.drawable.sign_in_disable)); + launchNewBubbleButton.setEnabled(false); + connectButton.setBackgroundDrawable(getDrawable(R.drawable.sign_in_disable)); + connectButton.setEnabled(false); + } + private boolean networkByUuidExist(final Iterable networkList, final String uuid) { for (final Network network : networkList) { if (uuid.equals(network.getUuid())) { @@ -250,14 +258,7 @@ public class MainActivity extends BaseActivityBubble { checkBubbleCurrentStatus(); break; case ERROR: - closeLoadingDialog(); - if (NO_INTERNET_CONNECTION.equals(statusResource.message)) { - showNetworkNotAvailableMessage(); - } else if (LOGIN_FAILED.equals(statusResource.message)) { - Toast.makeText(this, getString(R.string.login_failed), Toast.LENGTH_LONG).show(); - } else { - showErrorDialog(statusResource.message); - } + onError(statusResource); break; } }); @@ -298,14 +299,7 @@ public class MainActivity extends BaseActivityBubble { case AUTH: break; case ERROR: - closeLoadingDialog(); - if (NO_INTERNET_CONNECTION.equals(stringStatusResource.message)) { - showNetworkNotAvailableMessage(); - } else if (LOGIN_FAILED.equals(stringStatusResource.message)) { - Toast.makeText(this, getString(R.string.login_failed), Toast.LENGTH_LONG).show(); - } else { - showErrorDialog(stringStatusResource.message); - } + onError(stringStatusResource); break; } } @@ -415,19 +409,26 @@ public class MainActivity extends BaseActivityBubble { case AUTH: break; case ERROR: - closeLoadingDialog(); - if (NO_INTERNET_CONNECTION.equals(objectStatusResource.message)) { - showNetworkNotAvailableMessage(); - } else if (LOGIN_FAILED.equals(objectStatusResource.message)) { - Toast.makeText(this, getString(R.string.login_failed), Toast.LENGTH_LONG).show(); - } else { - showErrorDialog(objectStatusResource.message); - } + onError(objectStatusResource); break; } }); } + private void onError(final StatusResource statusResource) { + closeLoadingDialog(); + if (NO_INTERNET_CONNECTION.equals(statusResource.message)) { + showNetworkNotAvailableMessage(); + } else { + disableButtons(); + if (LOGIN_FAILED.equals(statusResource.message)) { + Toast.makeText(this, getString(R.string.login_failed), Toast.LENGTH_LONG).show(); + } else { + showErrorDialog(statusResource.message); + } + } + } + @Override protected void onActivityResult(final int requestCode, final int resultCode, @Nullable final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_VPN_PERMISSION) { diff --git a/ui/src/main/java/com/getbubblenow/android/model/Network.java b/ui/src/main/java/com/getbubblenow/android/model/Network.java index 4579e53..841d80a 100644 --- a/ui/src/main/java/com/getbubblenow/android/model/Network.java +++ b/ui/src/main/java/com/getbubblenow/android/model/Network.java @@ -14,7 +14,7 @@ public class Network { private String uuid; @SerializedName("related") @Expose - private String related; + private transient String related; @SerializedName("name") @Expose private String name; @@ -38,7 +38,7 @@ public class Network { private String installType; @SerializedName("sshKey") @Expose - private String sshKey; + private transient String sshKey; @SerializedName("computeSizeType") @Expose private String computeSizeType; @@ -50,7 +50,7 @@ public class Network { private String storage; @SerializedName("description") @Expose - private String description; + private transient String description; @SerializedName("locale") @Expose private String locale; @@ -62,10 +62,10 @@ public class Network { private boolean sendMetrics; @SerializedName("tags") @Expose - private String tags; + private transient String tags; @SerializedName("forkHost") @Expose - private String forkHost; + private transient String forkHost; @SerializedName("state") @Expose private String state; diff --git a/ui/src/main/java/com/getbubblenow/android/repository/DataRepository.java b/ui/src/main/java/com/getbubblenow/android/repository/DataRepository.java index 5189f82..0ce3fb2 100644 --- a/ui/src/main/java/com/getbubblenow/android/repository/DataRepository.java +++ b/ui/src/main/java/com/getbubblenow/android/repository/DataRepository.java @@ -1016,7 +1016,14 @@ public final class DataRepository { liveData.postValue(StatusResource.error(LOGIN_FAILED)); } } + return; } + + final String stackTrace = Arrays.toString(throwable.getStackTrace()); + String message = "Unknown error is occurred"; + Log.e("ERR", message, throwable); + message += "\nSTACK_TRACE:\n" + stackTrace; + liveData.postValue(StatusResource.error(message)); } private String bodyToString(final Request request) {