Browse Source

Merge pull request #12290 from nextcloud/bugfix/choose-remote-folder-in-auto-upload-has-wrong-buttons

Bugfix Choose Remote Folder In Auto Upload Has Wrong Buttons
Alper Öztürk 1 year ago
parent
commit
91a689aeb3

BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testChooseLocationAction.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testMoveOrCopy.png


+ 24 - 0
app/src/androidTest/java/com/owncloud/android/ui/activity/FolderPickerActivityIT.java

@@ -21,6 +21,9 @@ package com.owncloud.android.ui.activity;
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
  */
  */
 
 
+import android.content.Intent;
+import android.view.View;
+
 import com.owncloud.android.AbstractIT;
 import com.owncloud.android.AbstractIT;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
@@ -135,4 +138,25 @@ public class FolderPickerActivityIT extends AbstractIT {
         waitForIdleSync();
         waitForIdleSync();
         screenshot(sut);
         screenshot(sut);
     }
     }
+
+    @Test
+    @ScreenshotTest
+    public void testMoveOrCopy() {
+        Intent intent = new Intent();
+        FolderPickerActivity targetActivity = activityRule.launchActivity(intent);
+
+        waitForIdleSync();
+        screenshot(targetActivity);
+    }
+
+    @Test
+    @ScreenshotTest
+    public void testChooseLocationAction() {
+        Intent intent = new Intent();
+        intent.putExtra(FolderPickerActivity.EXTRA_ACTION, FolderPickerActivity.CHOOSE_LOCATION);
+        FolderPickerActivity targetActivity = activityRule.launchActivity(intent);
+
+        waitForIdleSync();
+        screenshot(targetActivity);
+    }
 }
 }

+ 53 - 22
app/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt

@@ -74,8 +74,10 @@ open class FolderPickerActivity :
     private var mSearchOnlyFolders = false
     private var mSearchOnlyFolders = false
     var isDoNotEnterEncryptedFolder = false
     var isDoNotEnterEncryptedFolder = false
         private set
         private set
+
     private var mCancelBtn: MaterialButton? = null
     private var mCancelBtn: MaterialButton? = null
     private var mCopyBtn: MaterialButton? = null
     private var mCopyBtn: MaterialButton? = null
+    private var mChooseBtn: MaterialButton? = null
     private var mMoveBtn: MaterialButton? = null
     private var mMoveBtn: MaterialButton? = null
 
 
     private var caption: String? = null
     private var caption: String? = null
@@ -107,10 +109,8 @@ open class FolderPickerActivity :
             View.GONE
             View.GONE
         mAction = intent.getStringExtra(EXTRA_ACTION)
         mAction = intent.getStringExtra(EXTRA_ACTION)
 
 
-        if (mAction != null) {
-            caption = resources.getText(R.string.folder_picker_choose_caption_text).toString()
-            mSearchOnlyFolders = true
-            isDoNotEnterEncryptedFolder = true
+        if (mAction != null && mAction == CHOOSE_LOCATION) {
+            setupUIForChooseButton()
         } else {
         } else {
             caption = themeUtils.getDefaultDisplayNameForRootFolder(this)
             caption = themeUtils.getDefaultDisplayNameForRootFolder(this)
         }
         }
@@ -126,12 +126,27 @@ open class FolderPickerActivity :
 
 
         // sets message for empty list of folders
         // sets message for empty list of folders
         setBackgroundText()
         setBackgroundText()
-
         handleOnBackPressed()
         handleOnBackPressed()
 
 
         Log_OC.d(TAG, "onCreate() end")
         Log_OC.d(TAG, "onCreate() end")
     }
     }
 
 
+    private fun setupUIForChooseButton() {
+        caption = resources.getText(R.string.folder_picker_choose_caption_text).toString()
+        mSearchOnlyFolders = true
+        isDoNotEnterEncryptedFolder = true
+
+        mCopyBtn?.visibility = View.GONE
+        mMoveBtn?.visibility = View.GONE
+        mChooseBtn?.visibility = View.VISIBLE
+
+        val chooseButtonSpacer = findViewById<View>(R.id.choose_button_spacer)
+        val moveOrCopyButtonSpacer = findViewById<View>(R.id.move_or_copy_button_spacer)
+
+        chooseButtonSpacer.visibility = View.VISIBLE
+        moveOrCopyButtonSpacer.visibility = View.GONE
+    }
+
     private fun handleOnBackPressed() {
     private fun handleOnBackPressed() {
         onBackPressedDispatcher.addCallback(
         onBackPressedDispatcher.addCallback(
             this,
             this,
@@ -389,34 +404,43 @@ open class FolderPickerActivity :
         mCancelBtn = findViewById(R.id.folder_picker_btn_cancel)
         mCancelBtn = findViewById(R.id.folder_picker_btn_cancel)
         mCopyBtn = findViewById(R.id.folder_picker_btn_copy)
         mCopyBtn = findViewById(R.id.folder_picker_btn_copy)
         mMoveBtn = findViewById(R.id.folder_picker_btn_move)
         mMoveBtn = findViewById(R.id.folder_picker_btn_move)
+        mChooseBtn = findViewById(R.id.folder_picker_btn_choose)
+
+        mCopyBtn?.let {
+            viewThemeUtils.material.colorMaterialButtonPrimaryFilled(it)
+            it.setOnClickListener(this)
+        }
 
 
-        if (mCopyBtn != null) {
-            viewThemeUtils.material.colorMaterialButtonPrimaryFilled(mCopyBtn!!)
-            mCopyBtn!!.setOnClickListener(this)
+        mMoveBtn?.let {
+            viewThemeUtils.material.colorMaterialButtonPrimaryTonal(it)
+            it.setOnClickListener(this)
         }
         }
-        if (mMoveBtn != null) {
-            viewThemeUtils.material.colorMaterialButtonPrimaryTonal(mMoveBtn!!)
-            mMoveBtn!!.setOnClickListener(this)
+
+        mChooseBtn?.let {
+            viewThemeUtils.material.colorMaterialButtonPrimaryTonal(it)
+            it.setOnClickListener(this)
         }
         }
 
 
-        if (mCancelBtn != null) {
+        mCancelBtn?.let {
             if (this is FilePickerActivity) {
             if (this is FilePickerActivity) {
-                viewThemeUtils.material.colorMaterialButtonPrimaryFilled(mCancelBtn!!)
+                viewThemeUtils.material.colorMaterialButtonPrimaryFilled(it)
             } else {
             } else {
-                viewThemeUtils.material.colorMaterialButtonText(mCancelBtn!!)
+                viewThemeUtils.material.colorMaterialButtonText(it)
             }
             }
-            mCancelBtn!!.setOnClickListener(this)
+
+            it.setOnClickListener(this)
         }
         }
     }
     }
 
 
     override fun onClick(v: View) {
     override fun onClick(v: View) {
         when (v) {
         when (v) {
+            mChooseBtn -> processOperation(v)
             mCancelBtn -> finish()
             mCancelBtn -> finish()
-            mCopyBtn, mMoveBtn -> copyOrMove(v)
+            mCopyBtn, mMoveBtn -> processOperation(v)
         }
         }
     }
     }
 
 
-    private fun copyOrMove(v: View) {
+    private fun processOperation(v: View) {
         val i = intent
         val i = intent
         val resultData = Intent()
         val resultData = Intent()
         resultData.putExtra(EXTRA_FOLDER, listOfFilesFragment?.currentFile)
         resultData.putExtra(EXTRA_FOLDER, listOfFilesFragment?.currentFile)
@@ -426,13 +450,10 @@ open class FolderPickerActivity :
         }
         }
 
 
         mTargetFilePaths?.let {
         mTargetFilePaths?.let {
-            val action = when (v) {
-                mCopyBtn -> OperationsService.ACTION_COPY_FILE
-                mMoveBtn -> OperationsService.ACTION_MOVE_FILE
-                else -> throw IllegalArgumentException("Unknown operation")
+            if (v == mCopyBtn || v == mMoveBtn) {
+                moveOrCopyFiles(v, it)
             }
             }
 
 
-            fileOperationsHelper.moveOrCopyFiles(action, it, file)
             resultData.putStringArrayListExtra(EXTRA_FILE_PATHS, it)
             resultData.putStringArrayListExtra(EXTRA_FILE_PATHS, it)
         }
         }
 
 
@@ -440,6 +461,16 @@ open class FolderPickerActivity :
         finish()
         finish()
     }
     }
 
 
+    private fun moveOrCopyFiles(v: View, filePathList: ArrayList<String>) {
+        val action = if (v == mCopyBtn) {
+            OperationsService.ACTION_COPY_FILE
+        } else {
+            OperationsService.ACTION_MOVE_FILE
+        }
+
+        fileOperationsHelper.moveOrCopyFiles(action, filePathList, file)
+    }
+
     override fun onRemoteOperationFinish(operation: RemoteOperation<*>?, result: RemoteOperationResult<*>) {
     override fun onRemoteOperationFinish(operation: RemoteOperation<*>?, result: RemoteOperationResult<*>) {
         super.onRemoteOperationFinish(operation, result)
         super.onRemoteOperationFinish(operation, result)
         if (operation is CreateFolderOperation) {
         if (operation is CreateFolderOperation) {

+ 3 - 1
app/src/main/java/com/owncloud/android/ui/dialog/SyncedFolderPreferencesDialogFragment.kt

@@ -384,7 +384,9 @@ class SyncedFolderPreferencesDialogFragment : DialogFragment(), Injectable {
         }
         }
 
 
         binding.remoteFolderContainer.setOnClickListener {
         binding.remoteFolderContainer.setOnClickListener {
-            val action = Intent(activity, FolderPickerActivity::class.java)
+            val action = Intent(activity, FolderPickerActivity::class.java).apply {
+                putExtra(FolderPickerActivity.EXTRA_ACTION, FolderPickerActivity.CHOOSE_LOCATION)
+            }
             requireActivity().startActivityForResult(action, REQUEST_CODE__SELECT_REMOTE_FOLDER)
             requireActivity().startActivityForResult(action, REQUEST_CODE__SELECT_REMOTE_FOLDER)
         }
         }
         binding.localFolderContainer.setOnClickListener {
         binding.localFolderContainer.setOnClickListener {

+ 20 - 0
app/src/main/res/layout/files_folder_picker.xml

@@ -20,6 +20,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_height="match_parent"
+    xmlns:tools="http://schemas.android.com/tools"
     android:orientation="vertical">
     android:orientation="vertical">
 
 
     <include layout="@layout/toolbar_standard" />
     <include layout="@layout/toolbar_standard" />
@@ -49,6 +50,13 @@
         android:orientation="horizontal"
         android:orientation="horizontal"
 		android:padding="@dimen/standard_padding">
 		android:padding="@dimen/standard_padding">
 
 
+        <View
+            android:id="@+id/choose_button_spacer"
+            android:visibility="gone"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="1"/>
+
         <com.google.android.material.button.MaterialButton
         <com.google.android.material.button.MaterialButton
             android:id="@+id/folder_picker_btn_cancel"
             android:id="@+id/folder_picker_btn_cancel"
             style="@style/Widget.Material3.Button.TextButton"
             style="@style/Widget.Material3.Button.TextButton"
@@ -58,7 +66,19 @@
             android:layout_weight="1"
             android:layout_weight="1"
             app:cornerRadius="@dimen/button_corner_radius" />
             app:cornerRadius="@dimen/button_corner_radius" />
 
 
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/folder_picker_btn_choose"
+            android:visibility="gone"
+            tools:visibility="visible"
+            style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
+            android:layout_width="wrap_content"
+            android:layout_weight="1"
+            android:layout_height="wrap_content"
+            android:text="@string/folder_picker_choose_button_text"
+            app:cornerRadius="@dimen/button_corner_radius" />
+
         <View
         <View
+            android:id="@+id/move_or_copy_button_spacer"
             android:layout_width="0dp"
             android:layout_width="0dp"
             android:layout_height="0dp"
             android:layout_height="0dp"
             android:layout_weight="1"/>
             android:layout_weight="1"/>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -436,6 +436,7 @@
     <string name="actionbar_move_or_copy">Move or Copy</string>
     <string name="actionbar_move_or_copy">Move or Copy</string>
     <string name="file_list_empty_moving">Nothing in here. You can add a folder.</string>
     <string name="file_list_empty_moving">Nothing in here. You can add a folder.</string>
 
 
+    <string name="folder_picker_choose_button_text">Choose</string>
     <string name="folder_picker_copy_button_text">Copy</string>
     <string name="folder_picker_copy_button_text">Copy</string>
     <string name="folder_picker_move_button_text">Move</string>
     <string name="folder_picker_move_button_text">Move</string>
     <string name="folder_picker_choose_caption_text">Choose target folder</string>
     <string name="folder_picker_choose_caption_text">Choose target folder</string>