Skip to content

Commit e169423

Browse files
committed
feat(doc-scan): Rename file from external scanner
Before, the filename from FairScan just was <unixTimestamp>.pdf. Now, we are giving it our own timestamped name, just like we do for images and videos captured via the camera intent. This uses the same fileDisplayNameTransformer as PR #16298 Signed-off-by: Philipp Hasper <vcs@hasper.info>
1 parent acf7603 commit e169423

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import android.view.inputmethod.InputMethodManager
4444
import androidx.activity.OnBackPressedCallback
4545
import androidx.annotation.VisibleForTesting
4646
import androidx.appcompat.widget.SearchView
47+
import androidx.core.content.FileProvider
4748
import androidx.core.view.MenuItemCompat
4849
import androidx.core.view.isVisible
4950
import androidx.fragment.app.Fragment
@@ -155,10 +156,12 @@ import com.owncloud.android.utils.PermissionUtil.requestNotificationPermission
155156
import com.owncloud.android.utils.PermissionUtil.requestStoragePermissionIfNeeded
156157
import com.owncloud.android.utils.PushUtils
157158
import com.owncloud.android.utils.StringUtils
159+
import com.owncloud.android.utils.UriUtils
158160
import com.owncloud.android.utils.theme.CapabilityUtils
159161
import kotlinx.coroutines.Dispatchers
160162
import kotlinx.coroutines.launch
161163
import kotlinx.coroutines.withContext
164+
import org.apache.commons.io.FilenameUtils
162165
import org.greenrobot.eventbus.EventBus
163166
import org.greenrobot.eventbus.Subscribe
164167
import org.greenrobot.eventbus.ThreadMode
@@ -970,10 +973,13 @@ class FileDisplayActivity :
970973
*/
971974
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
972975
if (data != null &&
973-
requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS &&
976+
(
977+
requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS ||
978+
requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS_AUTO_RENAME
979+
) &&
974980
(resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)
975981
) {
976-
requestUploadOfContentFromApps(data, resultCode)
982+
requestUploadOfContentFromApps(requestCode, resultCode, data)
977983
} else if (data != null &&
978984
requestCode == REQUEST_CODE__SELECT_FILES_FROM_FILE_SYSTEM &&
979985
(
@@ -1107,7 +1113,7 @@ class FileDisplayActivity :
11071113
}
11081114
}
11091115

1110-
private fun requestUploadOfContentFromApps(contentIntent: Intent, resultCode: Int) {
1116+
private fun requestUploadOfContentFromApps(requestCode: Int, resultCode: Int, contentIntent: Intent) {
11111117
val streamsToUpload = ArrayList<Parcelable?>()
11121118

11131119
if (contentIntent.clipData != null && (contentIntent.clipData?.itemCount ?: 0) > 0) {
@@ -1129,6 +1135,17 @@ class FileDisplayActivity :
11291135

11301136
val currentDir = getCurrentDir()
11311137
val remotePath = if (currentDir != null) currentDir.remotePath else OCFile.ROOT_PATH
1138+
var fileDisplayNameTransformer: androidx.core.util.Function<Uri, String?>? = null
1139+
if (requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS_AUTO_RENAME) {
1140+
fileDisplayNameTransformer = { uri: Uri ->
1141+
val displayName = UriUtils.getDisplayNameForUri(uri, applicationContext)
1142+
if (displayName != null && displayName.isNotEmpty()) {
1143+
FileOperationsHelper.getTimestampedFileName("." + FilenameUtils.getExtension(displayName))
1144+
} else {
1145+
null
1146+
}
1147+
}
1148+
}
11321149

11331150
val uploader = UriUploader(
11341151
this,
@@ -1139,7 +1156,8 @@ class FileDisplayActivity :
11391156
),
11401157
behaviour,
11411158
false, // Not show waiting dialog while file is being copied from private storage
1142-
null // Not needed copy temp task listener
1159+
null, // Not needed copy temp task listener
1160+
fileDisplayNameTransformer
11431161
)
11441162

11451163
uploader.uploadUris()
@@ -3139,6 +3157,9 @@ class FileDisplayActivity :
31393157
@JvmField
31403158
val REQUEST_CODE__UPLOAD_FROM_VIDEO_CAMERA: Int = REQUEST_CODE__LAST_SHARED + 6
31413159

3160+
@JvmField
3161+
val REQUEST_CODE__SELECT_CONTENT_FROM_APPS_AUTO_RENAME: Int = REQUEST_CODE__LAST_SHARED + 7
3162+
31423163
protected val DELAY_TO_REQUEST_REFRESH_OPERATION_LATER: Long = DELAY_TO_REQUEST_OPERATIONS_LATER + 350
31433164

31443165
private val TAG: String = FileDisplayActivity::class.java.getSimpleName()

app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ public void scanDocUpload() {
584584
public void scanDocUploadFromApp() {
585585
requireActivity().startActivityForResult(
586586
mFairScanIntent,
587-
FileDisplayActivity.REQUEST_CODE__SELECT_CONTENT_FROM_APPS);
587+
FileDisplayActivity.REQUEST_CODE__SELECT_CONTENT_FROM_APPS_AUTO_RENAME);
588588
}
589589

590590
@Override

app/src/main/java/com/owncloud/android/ui/helpers/UriUploader.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ package com.owncloud.android.ui.helpers
1313
import android.content.ContentResolver
1414
import android.net.Uri
1515
import android.os.Parcelable
16+
import androidx.core.util.Function
1617
import com.nextcloud.client.account.User
1718
import com.nextcloud.client.jobs.upload.FileUploadHelper
1819
import com.owncloud.android.R
@@ -42,14 +43,16 @@ import com.owncloud.android.utils.UriUtils.getDisplayNameForUri
4243
"Detekt.SpreadOperator",
4344
"Detekt.TooGenericExceptionCaught"
4445
) // legacy code
45-
class UriUploader(
46+
class UriUploader @JvmOverloads constructor(
4647
private val mActivity: FileActivity,
4748
private val mUrisToUpload: List<Parcelable?>,
4849
private val mUploadPath: String,
4950
private val user: User,
5051
private val mBehaviour: Int,
5152
private val mShowWaitingDialog: Boolean,
52-
private val mCopyTmpTaskListener: OnCopyTmpFilesTaskListener?
53+
private val mCopyTmpTaskListener: OnCopyTmpFilesTaskListener?,
54+
/** If non-null, this function is called to determine the desired display name (i.e. filename) after upload**/
55+
private val mFileDisplayNameTransformer: Function<Uri, String?>? = null
5356
) {
5457

5558
enum class UriUploaderResultCode {
@@ -113,7 +116,8 @@ class UriUploader(
113116
}
114117

115118
private fun getRemotePathForUri(sourceUri: Uri): String {
116-
val displayName = getDisplayNameForUri(sourceUri, mActivity)
119+
val displayName = mFileDisplayNameTransformer?.apply(sourceUri)
120+
?: getDisplayNameForUri(sourceUri, mActivity)
117121
require(displayName != null) { "Display name cannot be null" }
118122
return mUploadPath + displayName
119123
}

0 commit comments

Comments
 (0)