Эх сурвалжийг харах

Use proper dialog instantiation

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 5 жил өмнө
parent
commit
7ca6f304ed

+ 12 - 16
src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.java

@@ -64,10 +64,6 @@ public class ConflictsResolveActivity extends FileActivity implements OnConflict
     private OCUpload conflictUpload;
     private int localBehaviour = FileUploader.LOCAL_BEHAVIOUR_FORGET;
 
-
-    // TODO rotate when conflict dialog open
-    // TODO cancel leads to white activity?!
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -168,18 +164,18 @@ public class ConflictsResolveActivity extends FileActivity implements OnConflict
         Fragment prev = getSupportFragmentManager().findFragmentByTag("conflictDialog");
 
         FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
-        if (prev == null) {
-            if (getStorageManager().fileExists(file.getRemotePath())) {
-                ConflictsResolveDialog dialog = new ConflictsResolveDialog(this,
-                                                                           getFile(),
-                                                                           conflictUpload,
-                                                                           userOptional.get()
-                );
-                dialog.show(fragmentTransaction, "conflictDialog");
-            } else {
-                // Account was changed to a different one - just finish
-                finish();
-            }
+        if (prev != null) {
+            fragmentTransaction.remove(prev);
+        }
+
+        if (getStorageManager().fileExists(file.getRemotePath())) {
+            ConflictsResolveDialog dialog = ConflictsResolveDialog.newInstance(getFile(),
+                                                                               conflictUpload,
+                                                                               userOptional.get());
+            dialog.show(fragmentTransaction, "conflictDialog");
+        } else {
+            // Account was changed to a different one - just finish
+            finish();
         }
     }
 

+ 34 - 14
src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.java

@@ -22,6 +22,7 @@
 package com.owncloud.android.ui.dialog;
 
 import android.app.Dialog;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -67,8 +68,8 @@ public class ConflictsResolveDialog extends DialogFragment {
     private User user;
     private List<ThumbnailsCacheManager.ThumbnailGenerationTask> asyncTasks = new ArrayList<>();
 
-    private static final String KEY_FILE = "file";
-    private static final String KEY_OCFILE = "ocfile";
+    private static final String KEY_NEW_FILE = "file";
+    private static final String KEY_EXISTING_FILE = "ocfile";
     private static final String KEY_USER = "user";
 
     public enum Decision {
@@ -78,13 +79,27 @@ public class ConflictsResolveDialog extends DialogFragment {
         KEEP_SERVER,
     }
 
-    public ConflictsResolveDialog(OnConflictDecisionMadeListener listener,
-                                  OCFile file,
-                                  OCUpload conflictUpload, User user) {
-        this.listener = listener;
-        this.existingFile = file;
-        this.newFile = new File(conflictUpload.getLocalPath());
-        this.user = user;
+    public static ConflictsResolveDialog newInstance(OCFile existingFile, OCUpload conflictUpload, User user) {
+        ConflictsResolveDialog dialog = new ConflictsResolveDialog();
+
+        Bundle args = new Bundle();
+        args.putParcelable(KEY_EXISTING_FILE, existingFile);
+        args.putSerializable(KEY_NEW_FILE, new File(conflictUpload.getLocalPath()));
+        args.putParcelable(KEY_USER, user);
+        dialog.setArguments(args);
+
+        return dialog;
+    }
+
+    @Override
+    public void onAttach(@NonNull Context context) {
+        super.onAttach(context);
+
+        try {
+            listener = (OnConflictDecisionMadeListener) context;
+        } catch (ClassCastException e) {
+            throw new ClassCastException("Activity of this dialog must implement OnConflictDecisionMadeListener");
+        }
     }
 
     @Override
@@ -108,10 +123,15 @@ public class ConflictsResolveDialog extends DialogFragment {
         super.onCreate(savedInstanceState);
 
         if (savedInstanceState != null) {
-            newFile = (File) savedInstanceState.getSerializable(KEY_FILE);
-            existingFile = savedInstanceState.getParcelable(KEY_OCFILE);
+            existingFile = savedInstanceState.getParcelable(KEY_EXISTING_FILE);
+            newFile = (File) savedInstanceState.getSerializable(KEY_NEW_FILE);
             user = savedInstanceState.getParcelable(KEY_USER);
-            listener = (OnConflictDecisionMadeListener) getActivity();
+        } else if (getArguments() != null) {
+            existingFile = getArguments().getParcelable(KEY_EXISTING_FILE);
+            newFile = (File) getArguments().getSerializable(KEY_NEW_FILE);
+            user = getArguments().getParcelable(KEY_USER);
+        } else {
+            Toast.makeText(getContext(), "Failed to create conflict dialog", Toast.LENGTH_LONG).show();
         }
     }
 
@@ -119,8 +139,8 @@ public class ConflictsResolveDialog extends DialogFragment {
     public void onSaveInstanceState(@NonNull Bundle outState) {
         super.onSaveInstanceState(outState);
 
-        outState.putSerializable(KEY_FILE, newFile);
-        outState.putParcelable(KEY_OCFILE, existingFile);
+        outState.putParcelable(KEY_EXISTING_FILE, existingFile);
+        outState.putSerializable(KEY_NEW_FILE, newFile);
         outState.putParcelable(KEY_USER, user);
     }