@@ -15,10 +15,14 @@ import com.amrdeveloper.linkhub.data.Link
15
15
import com.amrdeveloper.linkhub.databinding.FragmentLinkBinding
16
16
import com.amrdeveloper.linkhub.ui.adapter.FolderArrayAdapter
17
17
import com.amrdeveloper.linkhub.ui.widget.PinnedLinksWidget
18
+ import com.amrdeveloper.linkhub.util.CREATED_FOLDER_NAME_KEY
19
+ import com.amrdeveloper.linkhub.util.CREATE_FOLDER_ID
20
+ import com.amrdeveloper.linkhub.util.FOLDER_NONE_ID
18
21
import com.amrdeveloper.linkhub.util.UiPreferences
19
22
import com.amrdeveloper.linkhub.util.showError
20
23
import com.amrdeveloper.linkhub.util.showSnackBar
21
24
import dagger.hilt.android.AndroidEntryPoint
25
+ import timber.log.Timber
22
26
import java.text.DateFormat
23
27
import javax.inject.Inject
24
28
@@ -79,11 +83,11 @@ class LinkFragment : Fragment() {
79
83
binding.linkPinnedSwitch.isChecked = currentLink.isPinned
80
84
val linkCreatedStamp = if (currentLink.createdTime == 0L ) System .currentTimeMillis() else currentLink.createdTime
81
85
val formattedCreationDate = dateFormatter.format(linkCreatedStamp)
82
- binding.linkCreatedStatus.text = getString(R .string.created_at)+ " ${formattedCreationDate} "
86
+ binding.linkCreatedStatus.text = getString(R .string.created_at) + " ${formattedCreationDate} "
83
87
if (currentLink.isUpdated) {
84
88
val linkUpdatedStamp = if (currentLink.createdTime == 0L ) System .currentTimeMillis() else currentLink.lastUpdatedTime
85
89
val formattedUpdateDate = dateFormatter.format(linkUpdatedStamp)
86
- binding.linkUpdatedStatus.text = getString(R .string.updated_at)+ " ${formattedUpdateDate} "
90
+ binding.linkUpdatedStatus.text = getString(R .string.updated_at) + " ${formattedUpdateDate} "
87
91
}
88
92
if (currentLink.folderId != - 1 ) linkViewModel.getFolderWithId(currentLink.folderId)
89
93
}
@@ -95,8 +99,19 @@ class LinkFragment : Fragment() {
95
99
linkFolderID = it.id
96
100
}
97
101
98
- linkViewModel.folderLiveData.observe(viewLifecycleOwner) {
99
- folderMenuAdapter.addAll(it)
102
+ linkViewModel.folderLiveData.observe(viewLifecycleOwner) { folders ->
103
+ folderMenuAdapter.clear()
104
+ folderMenuAdapter.add(Folder (getString(R .string.folder_create), false , id = CREATE_FOLDER_ID ))
105
+ folderMenuAdapter.add(Folder (getString(R .string.none), false , id = FOLDER_NONE_ID ))
106
+ folderMenuAdapter.addAll(folders)
107
+ binding.folderNameMenu.text.clear()
108
+
109
+ // Check if user created a new folder for this link and suggest it as the current link folder
110
+ val newFolderCreatedName = findNavController().currentBackStackEntry?.savedStateHandle?.get<String >(CREATED_FOLDER_NAME_KEY ) ? : return @observe
111
+ val lastCreatedFolder = folders.find { it.name == newFolderCreatedName } ? : return @observe
112
+ binding.folderNameMenu.setText(newFolderCreatedName, false )
113
+ linkFolderID = lastCreatedFolder.id
114
+ findNavController().currentBackStackEntry?.savedStateHandle?.remove<String >(CREATED_FOLDER_NAME_KEY )
100
115
}
101
116
102
117
linkViewModel.linkInfoLiveData.observe(viewLifecycleOwner) {
@@ -116,12 +131,20 @@ class LinkFragment : Fragment() {
116
131
117
132
private fun setupFolderListMenu () {
118
133
binding.folderNameMenu.setOnItemClickListener { _, _, position, _ ->
119
- val folder = folderMenuAdapter.getItem(position)
120
- if (folder != null ) linkFolderID = folder.id
134
+ val folder = folderMenuAdapter.getItem(position) ? : return @setOnItemClickListener
135
+ linkFolderID = when (folder.id) {
136
+ CREATE_FOLDER_ID -> {
137
+ binding.folderNameMenu.setSelection(position + 1 )
138
+ findNavController().navigate(R .id.action_linkFragment_to_folderFragment)
139
+ FOLDER_NONE_ID
140
+ }
141
+ else -> {
142
+ folder.id
143
+ }
144
+ }
121
145
}
122
146
123
147
folderMenuAdapter = FolderArrayAdapter (requireContext())
124
- folderMenuAdapter.add(Folder (getString(R .string.none), false , id = - 1 ))
125
148
binding.folderNameMenu.setAdapter(folderMenuAdapter)
126
149
}
127
150
0 commit comments