Skip to content

Commit 8d3f5d5

Browse files
Merge pull request #357 from PermanentOrg/feature/VSP-1579
Implemented checklist navigation part 1 + Refactoring
2 parents 7f7898f + b0f0df1 commit 8d3f5d5

File tree

13 files changed

+140
-29
lines changed

13 files changed

+140
-29
lines changed

.idea/deploymentTargetSelector.xml

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/org/permanent/permanent/ui/activities/MainActivity.kt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,16 @@ import org.permanent.permanent.databinding.DialogTitleTextTwoButtonsBinding
4242
import org.permanent.permanent.databinding.NavMainHeaderBinding
4343
import org.permanent.permanent.models.AccessRole
4444
import org.permanent.permanent.models.AccountEventAction
45+
import org.permanent.permanent.network.models.ChecklistItem
4546
import org.permanent.permanent.ui.PREFS_NAME
4647
import org.permanent.permanent.ui.PreferencesHelper
4748
import org.permanent.permanent.ui.archives.PARCELABLE_ARCHIVE_KEY
4849
import org.permanent.permanent.ui.computeWindowSizeClasses
4950
import org.permanent.permanent.ui.login.AuthenticationActivity
5051
import org.permanent.permanent.ui.myFiles.MyFilesFragment
5152
import org.permanent.permanent.ui.myFiles.checklist.ChecklistBottomSheetFragment
53+
import org.permanent.permanent.ui.myFiles.checklist.ChecklistItemType
54+
import org.permanent.permanent.ui.myFiles.checklist.toChecklistType
5255
import org.permanent.permanent.ui.public.LocationSearchFragment
5356
import org.permanent.permanent.ui.public.PublicFilesFragment
5457
import org.permanent.permanent.ui.public.PublicFolderFragment
@@ -193,7 +196,6 @@ class MainActivity : PermanentBaseActivity(), Toolbar.OnMenuItemClickListener {
193196
isSubmenuVisible = !isSubmenuVisible
194197
setSubmenuVisibility(isSubmenuVisible)
195198
setArchiveSettingsIcon(menuItem, isSubmenuVisible)
196-
true
197199
}
198200

199201
R.id.archiveStewardFragment -> {
@@ -243,6 +245,7 @@ class MainActivity : PermanentBaseActivity(), Toolbar.OnMenuItemClickListener {
243245
onFinishAccountSetupClick = {
244246
bottomSheetFragment = ChecklistBottomSheetFragment()
245247
bottomSheetFragment?.show(supportFragmentManager, "ChecklistBottomSheet")
248+
bottomSheetFragment?.getOnChecklistItemClick()?.observe(this, onChecklistItemClickObserver)
246249
bottomSheetFragment?.getHideChecklistButton()?.observe(this, onHideChecklistButtonObserver)
247250
settingsMenuViewModel.closeAccountMenuSheet()
248251
},
@@ -318,6 +321,21 @@ class MainActivity : PermanentBaseActivity(), Toolbar.OnMenuItemClickListener {
318321
.makeGooglePlayServicesAvailable(this)
319322
}
320323

324+
private val onChecklistItemClickObserver = Observer<ChecklistItem> {
325+
when (it.toChecklistType()) {
326+
ChecklistItemType.STORAGE_REDEEMED -> navController.navigate(R.id.redeemCodeFragment)
327+
ChecklistItemType.LEGACY_CONTACT -> navController.navigate(R.id.legacyContactFragment)
328+
ChecklistItemType.ARCHIVE_STEWARD -> {
329+
val bundle = bundleOf(PARCELABLE_ARCHIVE_KEY to viewModel.getCurrentArchive())
330+
navController.navigate(R.id.archiveStewardFragment, bundle)
331+
}
332+
ChecklistItemType.FIRST_UPLOAD -> {}
333+
ChecklistItemType.ARCHIVE_PROFILE -> {}
334+
ChecklistItemType.PUBLISH_CONTENT -> {}
335+
ChecklistItemType.ARCHIVE_CREATED, null -> {}
336+
}
337+
}
338+
321339
private val onHideChecklistButtonObserver = Observer<Void?> {
322340
val navHostFragment =
323341
supportFragmentManager.findFragmentById(R.id.mainNavHostFragment) as NavHostFragment
@@ -470,6 +488,7 @@ class MainActivity : PermanentBaseActivity(), Toolbar.OnMenuItemClickListener {
470488
viewModel.getErrorMessage().removeObserver(onErrorMessage)
471489
settingsMenuViewModel.getOnLoggedOut().removeObserver(onLoggedOut)
472490
settingsMenuViewModel.getErrorMessage().removeObserver(onErrorMessage)
491+
bottomSheetFragment?.getOnChecklistItemClick()?.removeObserver(onChecklistItemClickObserver)
473492
bottomSheetFragment?.getHideChecklistButton()?.removeObserver(onHideChecklistButtonObserver)
474493
}
475494

app/src/main/java/org/permanent/permanent/ui/myFiles/MyFilesFragment.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,18 @@ import org.permanent.permanent.models.AccountEventAction
3434
import org.permanent.permanent.models.Download
3535
import org.permanent.permanent.models.NavigationFolderIdentifier
3636
import org.permanent.permanent.models.Record
37+
import org.permanent.permanent.network.models.ChecklistItem
3738
import org.permanent.permanent.ui.PREFS_NAME
3839
import org.permanent.permanent.ui.PermanentBaseFragment
3940
import org.permanent.permanent.ui.PreferencesHelper
4041
import org.permanent.permanent.ui.SelectionOptionsFragment
4142
import org.permanent.permanent.ui.Workspace
4243
import org.permanent.permanent.ui.activities.MainActivity
44+
import org.permanent.permanent.ui.archives.PARCELABLE_ARCHIVE_KEY
4345
import org.permanent.permanent.ui.hideKeyboardFrom
4446
import org.permanent.permanent.ui.myFiles.checklist.ChecklistBottomSheetFragment
47+
import org.permanent.permanent.ui.myFiles.checklist.ChecklistItemType
48+
import org.permanent.permanent.ui.myFiles.checklist.toChecklistType
4549
import org.permanent.permanent.ui.myFiles.download.DownloadsAdapter
4650
import org.permanent.permanent.ui.myFiles.saveToPermanent.SaveToPermanentFragment
4751
import org.permanent.permanent.ui.public.PublicFragment
@@ -377,9 +381,25 @@ class MyFilesFragment : PermanentBaseFragment() {
377381
private val openChecklistBottomSheetObserver = Observer<Void?> {
378382
bottomSheetFragment = ChecklistBottomSheetFragment()
379383
bottomSheetFragment?.show(parentFragmentManager, "ChecklistBottomSheet")
384+
bottomSheetFragment?.getOnChecklistItemClick()?.observe(this, onChecklistItemClickObserver)
380385
bottomSheetFragment?.getHideChecklistButton()?.observe(this, onHideChecklistButtonObserver)
381386
}
382387

388+
private val onChecklistItemClickObserver = Observer<ChecklistItem> {
389+
when (it.toChecklistType()) {
390+
ChecklistItemType.STORAGE_REDEEMED -> findNavController().navigate(R.id.redeemCodeFragment)
391+
ChecklistItemType.LEGACY_CONTACT -> findNavController().navigate(R.id.legacyContactFragment)
392+
ChecklistItemType.ARCHIVE_STEWARD -> {
393+
val bundle = bundleOf(PARCELABLE_ARCHIVE_KEY to viewModel.getCurrentArchive())
394+
findNavController().navigate(R.id.archiveStewardFragment, bundle)
395+
}
396+
ChecklistItemType.FIRST_UPLOAD -> {}
397+
ChecklistItemType.ARCHIVE_PROFILE -> {}
398+
ChecklistItemType.PUBLISH_CONTENT -> {}
399+
ChecklistItemType.ARCHIVE_CREATED, null -> {}
400+
}
401+
}
402+
383403
private val onHideChecklistButtonObserver = Observer<Void?> {
384404
viewModel.hideChecklistButton()
385405
}
@@ -543,6 +563,7 @@ class MyFilesFragment : PermanentBaseFragment() {
543563
viewModel.getShowSelectionOptionsRequest().removeObserver(showSelectionOptionsObserver)
544564
viewModel.getShowEditMetadataScreenRequest().removeObserver(showEditMetadataScreenObserver)
545565
viewModel.getOpenChecklistBottomSheet().removeObserver(openChecklistBottomSheetObserver)
566+
bottomSheetFragment?.getOnChecklistItemClick()?.removeObserver(onChecklistItemClickObserver)
546567
bottomSheetFragment?.getHideChecklistButton()?.removeObserver(onHideChecklistButtonObserver)
547568
renameDialogViewModel.getOnRecordRenamed().removeObserver(onRecordRenamed)
548569
renameDialogViewModel.getOnShowMessage().removeObserver(onShowMessage)

app/src/main/java/org/permanent/permanent/ui/myFiles/checklist/ChecklistBottomSheetContent.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import androidx.compose.ui.unit.dp
3939
import androidx.compose.ui.unit.sp
4040
import kotlinx.coroutines.launch
4141
import org.permanent.permanent.R
42+
import org.permanent.permanent.network.models.ChecklistItem
4243
import org.permanent.permanent.ui.composeComponents.CircularProgressIndicator
4344
import org.permanent.permanent.ui.composeComponents.OverlayColor
4445
import org.permanent.permanent.ui.myFiles.checklist.compose.ChecklistBodyPage
@@ -49,7 +50,10 @@ import org.permanent.permanent.viewmodels.ChecklistViewModel
4950

5051
@Composable
5152
fun ChecklistBottomSheetContent(
52-
viewModel: ChecklistViewModel, onClose: () -> Unit, onHideChecklistButton: () -> Unit
53+
viewModel: ChecklistViewModel,
54+
onItemClick: (ChecklistItem) -> Unit,
55+
onClose: () -> Unit,
56+
onHideChecklistButton: () -> Unit
5357
) {
5458
val isBusyState by viewModel.isBusyState.collectAsState()
5559
val checklistItems by viewModel.checklistItems.collectAsState()
@@ -90,7 +94,7 @@ fun ChecklistBottomSheetContent(
9094
ChecklistPage.BODY.value -> {
9195
ChecklistBodyPage(viewModel = viewModel,
9296
checklistItems = checklistItems,
93-
onItemClick = { viewModel.onChecklistItemClicked(it) },
97+
onItemClick = onItemClick,
9498
onDismissForeverClick = {
9599
coroutineScope.launch {
96100
pagerState.animateScrollToPage(ChecklistPage.CONFIRMATION.value)

app/src/main/java/org/permanent/permanent/ui/myFiles/checklist/ChecklistBottomSheetFragment.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ import androidx.fragment.app.viewModels
1010
import androidx.lifecycle.MutableLiveData
1111
import com.google.android.material.R
1212
import com.google.android.material.bottomsheet.BottomSheetBehavior
13+
import org.permanent.permanent.network.models.ChecklistItem
1314
import org.permanent.permanent.ui.PermanentBottomSheetFragment
1415
import org.permanent.permanent.viewmodels.ChecklistViewModel
1516
import org.permanent.permanent.viewmodels.SingleLiveEvent
1617

1718
class ChecklistBottomSheetFragment : PermanentBottomSheetFragment() {
1819

1920
private val viewModel: ChecklistViewModel by viewModels()
21+
private val onChecklistItemClick = SingleLiveEvent<ChecklistItem>()
2022
private val hideChecklistButton = SingleLiveEvent<Void?>()
2123

2224
override fun onCreateView(
@@ -28,12 +30,18 @@ class ChecklistBottomSheetFragment : PermanentBottomSheetFragment() {
2830
)
2931
setContent {
3032
MaterialTheme {
31-
ChecklistBottomSheetContent(viewModel = viewModel, onClose = {
32-
dismiss()
33-
}, onHideChecklistButton = {
34-
hideChecklistButton.call()
35-
dismiss()
36-
})
33+
ChecklistBottomSheetContent(viewModel = viewModel,
34+
onItemClick = {
35+
onChecklistItemClick.value = it
36+
dismiss()
37+
},
38+
onClose = {
39+
dismiss()
40+
}, onHideChecklistButton = {
41+
hideChecklistButton.call()
42+
dismiss()
43+
}
44+
)
3745
}
3846
}
3947
}
@@ -53,6 +61,8 @@ class ChecklistBottomSheetFragment : PermanentBottomSheetFragment() {
5361
}
5462
}
5563

64+
fun getOnChecklistItemClick(): MutableLiveData<ChecklistItem> = onChecklistItemClick
65+
5666
fun getHideChecklistButton(): MutableLiveData<Void?> = hideChecklistButton
5767

5868
override fun connectViewModelEvents() {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.permanent.permanent.ui.myFiles.checklist
2+
3+
import org.permanent.permanent.R
4+
import org.permanent.permanent.network.models.ChecklistItem
5+
6+
enum class ChecklistItemType(val id: String, val iconResId: Int) {
7+
ARCHIVE_CREATED("archiveCreated", R.drawable.ic_archives_blue),
8+
STORAGE_REDEEMED("storageRedeemed", R.drawable.ic_gift_blue_light),
9+
FIRST_UPLOAD("firstUpload", R.drawable.ic_file_upload_blue_light),
10+
ARCHIVE_STEWARD("archiveSteward", R.drawable.ic_archive_steward_blue),
11+
LEGACY_CONTACT("legacyContact", R.drawable.ic_legacy_contact_blue),
12+
ARCHIVE_PROFILE("archiveProfile", R.drawable.ic_archive_profile_blue),
13+
PUBLISH_CONTENT("publishContent", R.drawable.ic_public_blue);
14+
15+
companion object {
16+
fun fromId(id: String): ChecklistItemType? = values().find { it.id == id }
17+
}
18+
}
19+
20+
fun ChecklistItem.toChecklistType(): ChecklistItemType? =
21+
ChecklistItemType.fromId(this.id)

app/src/main/java/org/permanent/permanent/ui/myFiles/checklist/compose/ChecklistBodyPage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ fun ChecklistBodyPage(
6060
ChecklistItemRow(
6161
item = item,
6262
viewModel = viewModel,
63-
onClick = { onItemClick(item) })
63+
onClick = { if (!item.completed) onItemClick(item) })
6464
}
6565

6666
// Spacer to push divider to bottom of remaining space

app/src/main/java/org/permanent/permanent/ui/public/PublicFilesFragment.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ import org.permanent.permanent.models.AccountEventAction
3434
import org.permanent.permanent.models.Download
3535
import org.permanent.permanent.models.NavigationFolderIdentifier
3636
import org.permanent.permanent.models.Record
37+
import org.permanent.permanent.network.models.ChecklistItem
3738
import org.permanent.permanent.ui.PREFS_NAME
3839
import org.permanent.permanent.ui.PermanentBaseFragment
3940
import org.permanent.permanent.ui.PreferencesHelper
4041
import org.permanent.permanent.ui.SelectionOptionsFragment
4142
import org.permanent.permanent.ui.Workspace
43+
import org.permanent.permanent.ui.archives.PARCELABLE_ARCHIVE_KEY
4244
import org.permanent.permanent.ui.hideKeyboardFrom
4345
import org.permanent.permanent.ui.myFiles.AddOptionsFragment
4446
import org.permanent.permanent.ui.myFiles.ModificationType
@@ -54,6 +56,8 @@ import org.permanent.permanent.ui.myFiles.RecordsListAdapter
5456
import org.permanent.permanent.ui.myFiles.SortOptionsFragment
5557
import org.permanent.permanent.ui.myFiles.SortType
5658
import org.permanent.permanent.ui.myFiles.checklist.ChecklistBottomSheetFragment
59+
import org.permanent.permanent.ui.myFiles.checklist.ChecklistItemType
60+
import org.permanent.permanent.ui.myFiles.checklist.toChecklistType
5761
import org.permanent.permanent.ui.myFiles.download.DownloadsAdapter
5862
import org.permanent.permanent.ui.shares.PreviewState
5963
import org.permanent.permanent.ui.shares.SHOW_SCREEN_SIMPLIFIED_KEY
@@ -302,9 +306,25 @@ class PublicFilesFragment : PermanentBaseFragment() {
302306
private val openChecklistBottomSheetObserver = Observer<Void?> {
303307
bottomSheetFragment = ChecklistBottomSheetFragment()
304308
bottomSheetFragment?.show(parentFragmentManager, "ChecklistBottomSheet")
309+
bottomSheetFragment?.getOnChecklistItemClick()?.observe(this, onChecklistItemClickObserver)
305310
bottomSheetFragment?.getHideChecklistButton()?.observe(this, onHideChecklistButtonObserver)
306311
}
307312

313+
private val onChecklistItemClickObserver = Observer<ChecklistItem> {
314+
when (it.toChecklistType()) {
315+
ChecklistItemType.STORAGE_REDEEMED -> findNavController().navigate(R.id.redeemCodeFragment)
316+
ChecklistItemType.LEGACY_CONTACT -> findNavController().navigate(R.id.legacyContactFragment)
317+
ChecklistItemType.ARCHIVE_STEWARD -> {
318+
val bundle = bundleOf(PARCELABLE_ARCHIVE_KEY to viewModel.getCurrentArchive())
319+
findNavController().navigate(R.id.archiveStewardFragment, bundle)
320+
}
321+
ChecklistItemType.FIRST_UPLOAD -> {}
322+
ChecklistItemType.ARCHIVE_PROFILE -> {}
323+
ChecklistItemType.PUBLISH_CONTENT -> {}
324+
ChecklistItemType.ARCHIVE_CREATED, null -> {}
325+
}
326+
}
327+
308328
private val onHideChecklistButtonObserver = Observer<Void?> {
309329
viewModel.hideChecklistButton()
310330
}
@@ -478,6 +498,7 @@ class PublicFilesFragment : PermanentBaseFragment() {
478498
viewModel.getShowSelectionOptionsRequest().removeObserver(showSelectionOptionsObserver)
479499
viewModel.getShowEditMetadataScreenRequest().removeObserver(showEditMetadataScreenObserver)
480500
viewModel.getOpenChecklistBottomSheet().removeObserver(openChecklistBottomSheetObserver)
501+
bottomSheetFragment?.getOnChecklistItemClick()?.removeObserver(onChecklistItemClickObserver)
481502
bottomSheetFragment?.getHideChecklistButton()?.removeObserver(onHideChecklistButtonObserver)
482503
renameDialogViewModel.getOnRecordRenamed().removeObserver(onRecordRenamed)
483504
renameDialogViewModel.getOnShowMessage().removeObserver(onShowMessage)

app/src/main/java/org/permanent/permanent/ui/shares/SharedXMeFragment.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ import org.permanent.permanent.databinding.FragmentSharedXMeBinding
3434
import org.permanent.permanent.models.Download
3535
import org.permanent.permanent.models.NavigationFolderIdentifier
3636
import org.permanent.permanent.models.Record
37+
import org.permanent.permanent.network.models.ChecklistItem
3738
import org.permanent.permanent.ui.PREFS_NAME
3839
import org.permanent.permanent.ui.PermanentBaseFragment
3940
import org.permanent.permanent.ui.PreferencesHelper
4041
import org.permanent.permanent.ui.SelectionOptionsFragment
4142
import org.permanent.permanent.ui.Workspace
43+
import org.permanent.permanent.ui.archives.PARCELABLE_ARCHIVE_KEY
4244
import org.permanent.permanent.ui.myFiles.AddOptionsFragment
4345
import org.permanent.permanent.ui.myFiles.ModificationType
4446
import org.permanent.permanent.ui.myFiles.MyFilesFragment
@@ -50,6 +52,8 @@ import org.permanent.permanent.ui.myFiles.RecordsListAdapter
5052
import org.permanent.permanent.ui.myFiles.SortOptionsFragment
5153
import org.permanent.permanent.ui.myFiles.SortType
5254
import org.permanent.permanent.ui.myFiles.checklist.ChecklistBottomSheetFragment
55+
import org.permanent.permanent.ui.myFiles.checklist.ChecklistItemType
56+
import org.permanent.permanent.ui.myFiles.checklist.toChecklistType
5357
import org.permanent.permanent.ui.myFiles.download.DownloadsAdapter
5458
import org.permanent.permanent.viewmodels.RenameRecordViewModel
5559
import org.permanent.permanent.viewmodels.SharedXMeViewModel
@@ -379,9 +383,25 @@ class SharedXMeFragment : PermanentBaseFragment() {
379383
private val openChecklistBottomSheetObserver = Observer<Void?> {
380384
bottomSheetFragment = ChecklistBottomSheetFragment()
381385
bottomSheetFragment?.show(parentFragmentManager, "ChecklistBottomSheet")
386+
bottomSheetFragment?.getOnChecklistItemClick()?.observe(this, onChecklistItemClickObserver)
382387
bottomSheetFragment?.getHideChecklistButton()?.observe(this, onHideChecklistButtonObserver)
383388
}
384389

390+
private val onChecklistItemClickObserver = Observer<ChecklistItem> {
391+
when (it.toChecklistType()) {
392+
ChecklistItemType.STORAGE_REDEEMED -> findNavController().navigate(R.id.redeemCodeFragment)
393+
ChecklistItemType.LEGACY_CONTACT -> findNavController().navigate(R.id.legacyContactFragment)
394+
ChecklistItemType.ARCHIVE_STEWARD -> {
395+
val bundle = bundleOf(PARCELABLE_ARCHIVE_KEY to viewModel.getCurrentArchive())
396+
findNavController().navigate(R.id.archiveStewardFragment, bundle)
397+
}
398+
ChecklistItemType.FIRST_UPLOAD -> {}
399+
ChecklistItemType.ARCHIVE_PROFILE -> {}
400+
ChecklistItemType.PUBLISH_CONTENT -> {}
401+
ChecklistItemType.ARCHIVE_CREATED, null -> {}
402+
}
403+
}
404+
385405
private val onHideChecklistButtonObserver = Observer<Void?> {
386406
viewModel.hideChecklistButton()
387407
}
@@ -544,6 +564,7 @@ class SharedXMeFragment : PermanentBaseFragment() {
544564
viewModel.getShowSelectionOptionsRequest().removeObserver(showSelectionOptionsObserver)
545565
viewModel.getShowEditMetadataScreenRequest().removeObserver(showEditMetadataScreenObserver)
546566
viewModel.getOpenChecklistBottomSheet().removeObserver(openChecklistBottomSheetObserver)
567+
bottomSheetFragment?.getOnChecklistItemClick()?.removeObserver(onChecklistItemClickObserver)
547568
bottomSheetFragment?.getHideChecklistButton()?.removeObserver(onHideChecklistButtonObserver)
548569
recordOptionsFragment?.getOnFileDownloadRequest()?.removeObserver(onFileDownloadRequest)
549570
recordOptionsFragment?.getOnRecordRenameRequest()?.removeObserver(onRecordRenameRequest)

0 commit comments

Comments
 (0)