Browse Source

Merge pull request #7211 from nextcloud/npeInStatus

Only access data if operation succeeded
Andy Scherzinger 4 years ago
parent
commit
18e0639e28

+ 8 - 5
src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java

@@ -164,29 +164,32 @@ public class DialogFragmentIT extends AbstractIT {
         activity.runOnUiThread(() -> sut.setStatus(new Status(StatusType.DND,
                                                               "Busy fixing 🐛…",
                                                               "",
-                                                              -1)));
+                                                              -1),
+                                                   targetContext));
         shortSleep();
         screenshot(sut, "dnd");
 
         activity.runOnUiThread(() -> sut.setStatus(new Status(StatusType.ONLINE,
                                                               "",
                                                               "",
-                                                              -1)));
+                                                              -1),
+                                                   targetContext));
         shortSleep();
         screenshot(sut, "online");
 
         activity.runOnUiThread(() -> sut.setStatus(new Status(StatusType.ONLINE,
                                                               "Let's have some fun",
                                                               "🎉",
-                                                              -1)));
+                                                              -1),
+                                                   targetContext));
         shortSleep();
         screenshot(sut, "fun");
 
-        activity.runOnUiThread(() -> sut.setStatus(new Status(StatusType.OFFLINE, "", "", -1)));
+        activity.runOnUiThread(() -> sut.setStatus(new Status(StatusType.OFFLINE, "", "", -1), targetContext));
         shortSleep();
         screenshot(sut, "offline");
 
-        activity.runOnUiThread(() -> sut.setStatus(new Status(StatusType.AWAY, "Vacation", "🌴", -1)));
+        activity.runOnUiThread(() -> sut.setStatus(new Status(StatusType.AWAY, "Vacation", "🌴", -1), targetContext));
         shortSleep();
         screenshot(sut, "away");
     }

+ 2 - 1
src/main/java/com/nextcloud/ui/ChooseAccountDialogFragment.kt

@@ -22,6 +22,7 @@ package com.nextcloud.ui
 
 import android.annotation.SuppressLint
 import android.app.Dialog
+import android.content.Context
 import android.graphics.drawable.Drawable
 import android.os.Bundle
 import android.view.LayoutInflater
@@ -199,7 +200,7 @@ class ChooseAccountDialogFragment :
         // Un-needed for this context
     }
 
-    fun setStatus(newStatus: Status) {
+    fun setStatus(newStatus: Status, context: Context) {
         currentStatus = newStatus
 
         val size = DisplayUtils.convertDpToPixel(STATUS_SIZE_IN_DP, context)

+ 9 - 4
src/main/java/com/owncloud/android/ui/asynctasks/RetrieveStatusAsyncTask.java

@@ -34,6 +34,8 @@ import com.owncloud.android.lib.resources.users.StatusType;
 
 import java.lang.ref.WeakReference;
 
+import androidx.lifecycle.Lifecycle;
+
 public class RetrieveStatusAsyncTask extends AsyncTask<Void, Void, Status> {
     private final User user;
     private final WeakReference<ChooseAccountDialogFragment> chooseAccountDialogFragment;
@@ -53,8 +55,11 @@ public class RetrieveStatusAsyncTask extends AsyncTask<Void, Void, Status> {
             NextcloudClient client = clientFactory.createNextcloudClient(user);
             RemoteOperationResult result = new GetStatusRemoteOperation().execute(client);
 
-            return (com.owncloud.android.lib.resources.users.Status) result.getSingleData();
-
+            if (result.isSuccess()) {
+                return (com.owncloud.android.lib.resources.users.Status) result.getSingleData();
+            } else {
+                return new com.owncloud.android.lib.resources.users.Status(StatusType.OFFLINE, "", "", -1);
+            }
         } catch (ClientFactory.CreationException e) {
             return new com.owncloud.android.lib.resources.users.Status(StatusType.OFFLINE, "", "", -1);
         }
@@ -64,8 +69,8 @@ public class RetrieveStatusAsyncTask extends AsyncTask<Void, Void, Status> {
     protected void onPostExecute(com.owncloud.android.lib.resources.users.Status status) {
         ChooseAccountDialogFragment fragment = chooseAccountDialogFragment.get();
 
-        if (fragment != null) {
-            fragment.setStatus(status);
+        if (fragment != null && fragment.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) {
+            fragment.setStatus(status, fragment.requireContext());
         }
 
     }