Skip to content

Commit 4c29786

Browse files
Merge pull request nextcloud#15351 from nextcloud/fix/file-display-activity-intent-handling
fix: file display activity intent handling
2 parents 7febaa0 + 0181865 commit 4c29786

1 file changed

Lines changed: 88 additions & 64 deletions

File tree

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

Lines changed: 88 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,18 @@ class FileDisplayActivity :
235235
this.fileIDForImmediatePreview = fileIDForImmediatePreview
236236
}
237237

238+
@SuppressLint("UnsafeIntentLaunch")
238239
override fun onCreate(savedInstanceState: Bundle?) {
239240
Log_OC.v(TAG, "onCreate() start")
240241
// Set the default theme to replace the launch screen theme.
241242
setTheme(R.style.Theme_ownCloud_Toolbar_Drawer)
242243

243244
super.onCreate(savedInstanceState)
245+
246+
intent?.let {
247+
handleCommonIntents(it)
248+
}
249+
244250
loadSavedInstanceState(savedInstanceState)
245251

246252
/** USER INTERFACE */
@@ -253,10 +259,6 @@ class FileDisplayActivity :
253259
showSortListGroup(savedInstanceState.getBoolean(KEY_IS_SORT_GROUP_VISIBLE))
254260
}
255261

256-
if (Intent.ACTION_VIEW == intent.action) {
257-
handleOpenFileViaIntent(intent)
258-
}
259-
260262
mPlayerConnection = PlayerServiceConnection(this)
261263

262264
checkStoragePath()
@@ -377,17 +379,6 @@ class FileDisplayActivity :
377379
syncAndUpdateFolder(true)
378380
}
379381

380-
if (OPEN_FILE == intent.action) {
381-
supportFragmentManager.executePendingTransactions()
382-
onOpenFileIntent(intent)
383-
} else if (RESTART == intent.action) {
384-
// most likely switched to different account
385-
DisplayUtils.showSnackMessage(
386-
this,
387-
String.format(getString(R.string.logged_in_as), accountManager.user.accountName)
388-
)
389-
}
390-
391382
upgradeNotificationForInstantUpload()
392383
checkOutdatedServer()
393384
checkNotifications()
@@ -533,71 +524,104 @@ class FileDisplayActivity :
533524
resetTitleBarAndScrolling()
534525
}
535526

536-
// Is called with the flag FLAG_ACTIVITY_SINGLE_TOP and set the new file and intent
527+
// region Handle Intents
528+
@SuppressLint("UnsafeIntentLaunch")
537529
override fun onNewIntent(intent: Intent) {
538530
super.onNewIntent(intent)
539531
setIntent(intent)
532+
handleCommonIntents(intent)
533+
handleSpecialIntents(intent)
534+
}
540535

541-
if (ACTION_DETAILS.equals(intent.action, ignoreCase = true)) {
542-
val file = intent.getParcelableArgument(EXTRA_FILE, OCFile::class.java)
543-
setFile(file)
544-
setIntent(intent)
545-
showDetails(file)
546-
} else if (Intent.ACTION_VIEW == intent.action) {
547-
handleOpenFileViaIntent(intent)
548-
} else if (OPEN_FILE == intent.action) {
549-
onOpenFileIntent(intent)
550-
} else if (RESTART == intent.action) {
551-
finish()
552-
startActivity(intent)
553-
} else {
554-
// Verify the action and get the query
555-
if (Intent.ACTION_SEARCH == intent.action) {
556-
setIntent(intent)
557-
558-
val searchEvent =
559-
intent.getParcelableArgument(OCFileListFragment.SEARCH_EVENT, SearchEvent::class.java)
560-
if (searchEvent != null) {
561-
if (SearchRemoteOperation.SearchType.PHOTO_SEARCH == searchEvent.searchType) {
562-
Log_OC.d(this, "Switch to photo search fragment")
563-
564-
val photoFragment = GalleryFragment()
565-
val bundle = Bundle()
566-
bundle.putParcelable(OCFileListFragment.SEARCH_EVENT, searchEvent)
567-
photoFragment.setArguments(bundle)
568-
this.leftFragment = photoFragment
569-
} else if (searchEvent.searchType == SearchRemoteOperation.SearchType.SHARED_FILTER) {
570-
Log_OC.d(this, "Switch to shared fragment")
571-
val sharedListFragment = SharedListFragment()
572-
val bundle = Bundle()
573-
bundle.putParcelable(OCFileListFragment.SEARCH_EVENT, searchEvent)
574-
sharedListFragment.setArguments(bundle)
575-
this.leftFragment = sharedListFragment
576-
} else {
577-
Log_OC.d(this, "Switch to oc file search fragment")
536+
private fun handleSpecialIntents(intent: Intent) {
537+
val action = intent.action
578538

579-
val photoFragment = OCFileListFragment()
580-
val bundle = Bundle()
581-
bundle.putParcelable(OCFileListFragment.SEARCH_EVENT, searchEvent)
582-
photoFragment.setArguments(bundle)
583-
this.leftFragment = photoFragment
584-
}
585-
}
586-
} else if (ALL_FILES == intent.action) {
539+
when {
540+
ACTION_DETAILS.equals(action, ignoreCase = true) -> {
541+
val file = intent.getParcelableArgument(EXTRA_FILE, OCFile::class.java)
542+
setFile(file)
543+
showDetails(file)
544+
}
545+
546+
Intent.ACTION_SEARCH == action -> handleSearchIntent(intent)
547+
548+
ALL_FILES == action -> {
587549
Log_OC.d(this, "Switch to oc file fragment")
588550
menuItemId = R.id.nav_all_files
589-
this.leftFragment = OCFileListFragment()
551+
leftFragment = OCFileListFragment()
590552
supportFragmentManager.executePendingTransactions()
591553
browseToRoot()
592-
} else if (LIST_GROUPFOLDERS == intent.action) {
554+
}
555+
556+
LIST_GROUPFOLDERS == action -> {
593557
Log_OC.d(this, "Switch to list groupfolders fragment")
594558
menuItemId = R.id.nav_groupfolders
595-
this.leftFragment = GroupfolderListFragment()
559+
leftFragment = GroupfolderListFragment()
596560
supportFragmentManager.executePendingTransactions()
597561
}
598562
}
599563
}
600564

565+
@SuppressLint("UnsafeIntentLaunch")
566+
private fun handleCommonIntents(intent: Intent) {
567+
when (intent.action) {
568+
Intent.ACTION_VIEW -> handleOpenFileViaIntent(intent)
569+
OPEN_FILE -> {
570+
supportFragmentManager.executePendingTransactions()
571+
onOpenFileIntent(intent)
572+
}
573+
RESTART -> {
574+
val accountName = accountManager.user.accountName
575+
val message = getString(R.string.logged_in_as)
576+
val snackBarMessage = String.format(message, accountName)
577+
DisplayUtils.showSnackMessage(this, snackBarMessage)
578+
579+
finish()
580+
startActivity(intent)
581+
}
582+
}
583+
}
584+
585+
private fun handleSearchIntent(intent: Intent) {
586+
val searchEvent = intent.getParcelableArgument(
587+
OCFileListFragment.SEARCH_EVENT,
588+
SearchEvent::class.java
589+
) ?: return
590+
591+
when (searchEvent.searchType) {
592+
SearchRemoteOperation.SearchType.PHOTO_SEARCH -> {
593+
Log_OC.d(this, "Switch to photo search fragment")
594+
val bundle = Bundle().apply {
595+
putParcelable(OCFileListFragment.SEARCH_EVENT, searchEvent)
596+
}
597+
leftFragment = GalleryFragment().apply {
598+
arguments = bundle
599+
}
600+
}
601+
602+
SearchRemoteOperation.SearchType.SHARED_FILTER -> {
603+
Log_OC.d(this, "Switch to shared fragment")
604+
val bundle = Bundle().apply {
605+
putParcelable(OCFileListFragment.SEARCH_EVENT, searchEvent)
606+
}
607+
leftFragment = SharedListFragment().apply {
608+
arguments = bundle
609+
}
610+
}
611+
612+
else -> {
613+
Log_OC.d(this, "Switch to oc file search fragment")
614+
val bundle = Bundle().apply {
615+
putParcelable(OCFileListFragment.SEARCH_EVENT, searchEvent)
616+
}
617+
leftFragment = OCFileListFragment().apply {
618+
arguments = bundle
619+
}
620+
}
621+
}
622+
}
623+
// endregion
624+
601625
private fun onOpenFileIntent(intent: Intent) {
602626
val extra = intent.getStringExtra(EXTRA_FILE)
603627
val file = storageManager.getFileByDecryptedRemotePath(extra)

0 commit comments

Comments
 (0)