Browse Source

Move user filtering to deep link handler

Signed-off-by: Chris Narkiewicz <hello@ezaquarii.com>
Chris Narkiewicz 4 years ago
parent
commit
a887a4c32b

+ 5 - 2
src/main/java/com/nextcloud/client/files/DeepLinkHandler.kt

@@ -12,7 +12,7 @@ class DeepLinkHandler(
     private val userAccountManager: UserAccountManager
 ) {
 
-    data class Match(val serverBaseUrl: String, val fileId: String)
+    data class Match(val users: List<User>, val fileId: String)
 
     companion object {
         val DEEP_LINK_PATTERN = Regex("""(.*?)(/index\.php)?/f/([0-9]+)$""")
@@ -26,9 +26,12 @@ class DeepLinkHandler(
         if (match != null) {
             val baseServerUrl = match.groupValues[BASE_URL_GROUP_INDEX]
             val fielId = match.groupValues[FILE_ID_GROUP_INDEX]
-            return Match(baseServerUrl, fielId)
+            return Match(users = getUsers(baseServerUrl), fileId = fielId)
         } else {
             return null
         }
     }
+
+    private fun getUsers(serverBaseUrl: String): List<User> =
+        userAccountManager.allUsers.filter { it.server.uri.toString() == serverBaseUrl }
 }

+ 26 - 54
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -124,8 +124,6 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import javax.annotation.Nullable;
 import javax.inject.Inject;
@@ -2292,12 +2290,6 @@ public class FileDisplayActivity extends FileActivity
             transaction.replace(R.id.left_fragment_container, fragment, TAG_LIST_OF_FILES);
             transaction.commit();
         }
-//        else {
-//            Log_OC.d(this, "Switch to OCFileListFragment");
-//
-//            fragment = new OCFileListFragment();
-//        }
-
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)
@@ -2424,14 +2416,37 @@ public class FileDisplayActivity extends FileActivity
     private void openDeepLink(Uri uri) {
         DeepLinkHandler linkHandler = new DeepLinkHandler(getApplicationContext(), getUserAccountManager());
         DeepLinkHandler.Match match = linkHandler.parseDeepLink(uri);
-        if (match != null) {
-            findAccountAndOpenFile(match.getServerBaseUrl(), match.getFileId());
-        } else {
+        if (match == null) {
             dismissLoadingDialog();
             DisplayUtils.showSnackMessage(this, getString(R.string.invalid_url));
+        } else if (match.getUsers().size() == 0) {
+            dismissLoadingDialog();
+            DisplayUtils.showSnackMessage(this, getString(R.string.associated_account_not_found));
+        } else if (match.getUsers().size() == 1) {
+            openFile(match.getUsers().get(0), match.getFileId());
+        } else {
+            selectUserAndOpenFile(match.getUsers(), match.getFileId());
         }
     }
 
+    private void selectUserAndOpenFile(List<User> users, String fileId) {
+        final CharSequence[] userNames = new CharSequence[users.size()];
+        for (int i = 0; i < userNames.length; i++) {
+            userNames[i] = users.get(i).getAccountName();
+        }
+        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+        builder
+            .setTitle(R.string.common_choose_account)
+            .setItems(userNames, (dialog, which) -> {
+                User user = users.get(which);
+                openFile(user, fileId);
+                showLoadingDialog(getString(R.string.retrieving_file));
+            });
+        final AlertDialog dialog = builder.create();
+        dismissLoadingDialog();
+        dialog.show();
+    }
+
     private void openFile(User user, String fileId) {
         setUser(user);
         updateAccountList();
@@ -2455,47 +2470,4 @@ public class FileDisplayActivity extends FileActivity
         fetchRemoteFileTask.execute();
 
     }
-
-    private void findAccountAndOpenFile(String uri, String fileId) {
-
-        ArrayList<User> validUsers = new ArrayList<>();
-
-        for (User user : getUserAccountManager().getAllUsers()) {
-            if (user.getServer().getUri().toString().equals(uri)) {
-                validUsers.add(user);
-            }
-        }
-
-        if (validUsers.size() == 0) {
-            dismissLoadingDialog();
-            DisplayUtils.showSnackMessage(this, getString(R.string.associated_account_not_found));
-            return;
-        }
-
-        if (validUsers.size() == 1) {
-            openFile(validUsers.get(0), fileId);
-            return;
-        }
-
-        ArrayList<String> validUserNames = new ArrayList<>();
-
-        for (User user : validUsers) {
-            validUserNames.add(user.getAccountName());
-        }
-
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        builder
-            .setTitle(R.string.common_choose_account)
-            .setItems(validUserNames.toArray(new CharSequence[validUserNames.size()]),
-                      (dialog, which) -> {
-                          // TODO: refactor to use User model directly
-                          String accountName = validUsers.get(which).getAccountName();
-                          User user = getUserAccountManager().getUser(accountName).orElseThrow(RuntimeException::new);
-                          openFile(user, fileId);
-                          showLoadingDialog(getString(R.string.retrieving_file));
-                      });
-        AlertDialog dialog = builder.create();
-        dismissLoadingDialog();
-        dialog.show();
-    }
 }