@@ -3,9 +3,12 @@ package com.amrdeveloper.linkhub.ui.link
33import android.webkit.URLUtil
44import androidx.activity.compose.BackHandler
55import androidx.compose.foundation.layout.Column
6+ import androidx.compose.foundation.layout.Row
7+ import androidx.compose.foundation.layout.Spacer
68import androidx.compose.foundation.layout.fillMaxWidth
79import androidx.compose.foundation.layout.height
810import androidx.compose.foundation.layout.padding
11+ import androidx.compose.foundation.layout.size
912import androidx.compose.foundation.rememberScrollState
1013import androidx.compose.foundation.verticalScroll
1114import androidx.compose.material3.Icon
@@ -18,6 +21,7 @@ import androidx.compose.runtime.getValue
1821import androidx.compose.runtime.mutableStateOf
1922import androidx.compose.runtime.remember
2023import androidx.compose.runtime.setValue
24+ import androidx.compose.ui.Alignment
2125import androidx.compose.ui.Modifier
2226import androidx.compose.ui.graphics.Color
2327import androidx.compose.ui.res.painterResource
@@ -90,7 +94,8 @@ fun LinkScreen(
9094
9195 BackHandler (enabled = true ) {
9296 if (uiPreferences.isAutoSavingEnabled()
93- && linkTitleErrorMessage.isEmpty() && linkUrlErrorMessage.isEmpty()) {
97+ && linkTitleErrorMessage.isEmpty() && linkUrlErrorMessage.isEmpty()
98+ ) {
9499 createOrUpdateLink()
95100 return @BackHandler
96101 }
@@ -178,20 +183,25 @@ fun LinkScreen(
178183 if (selectedFolderDry) {
179184 if (uiPreferences.isDefaultFolderEnabled()) {
180185 val defFolderId = uiPreferences.getDefaultFolderId()
181- selectedFolder = folders.find { it.id == defFolderId } ? : folders.find { it.id == link.folderId } ? : folders[0 ]
186+ selectedFolder = folders.find { it.id == defFolderId }
187+ ? : folders.find { it.id == link.folderId } ? : folders[0 ]
182188 } else {
183189 selectedFolder = folders.find { it.id == link.folderId } ? : folders[0 ]
184190 }
185191 }
186192
187193 // Check if user created a new folder for this link and suggest it as the current link folder
188194 val newFolderCreatedName =
189- navController.currentBackStackEntry?.savedStateHandle?.get<String >(CREATED_FOLDER_NAME_KEY )
195+ navController.currentBackStackEntry?.savedStateHandle?.get<String >(
196+ CREATED_FOLDER_NAME_KEY
197+ )
190198 if (newFolderCreatedName != null ) {
191199 selectedFolder =
192200 folders.find { it.name == newFolderCreatedName } ? : selectedFolder
193201 link.folderId = selectedFolder.id
194- navController.currentBackStackEntry?.savedStateHandle?.remove<String >(CREATED_FOLDER_NAME_KEY )
202+ navController.currentBackStackEntry?.savedStateHandle?.remove<String >(
203+ CREATED_FOLDER_NAME_KEY
204+ )
195205 }
196206
197207 FolderSelector (selectedFolder = selectedFolder, folders = folders) {
@@ -210,26 +220,7 @@ fun LinkScreen(
210220 }
211221
212222 // Link metadata
213- if (currentLink != null ) {
214- val dateFormatter = DateFormat .getDateTimeInstance()
215- Text (
216- text = " Created at ${dateFormatter.format(currentLink.createdTime)} " ,
217- textAlign = TextAlign .Center ,
218- modifier = Modifier
219- .fillMaxWidth()
220- .padding(4 .dp)
221- )
222-
223- if (currentLink.isUpdated) {
224- Text (
225- text = " Updated at ${dateFormatter.format(currentLink.lastUpdatedTime)} " ,
226- textAlign = TextAlign .Center ,
227- modifier = Modifier
228- .fillMaxWidth()
229- .padding(4 .dp)
230- )
231- }
232- }
223+ currentLink?.let { LinkCreatedAndUpdatedTime (it) }
233224
234225 when (taskState) {
235226 TaskState .Success -> {
@@ -255,7 +246,7 @@ private fun isValidURI(url: String) =
255246 URLUtil .isValidUrl(url) && runCatching { URI (url) }.isSuccess
256247
257248@Composable
258- fun LinkHeaderIcon () {
249+ private fun LinkHeaderIcon () {
259250 Icon (
260251 painter = painterResource(R .drawable.ic_link),
261252 contentDescription = " Link Icon" ,
@@ -267,7 +258,7 @@ fun LinkHeaderIcon() {
267258}
268259
269260@Composable
270- fun LinkInputField (
261+ private fun LinkInputField (
271262 label : String ,
272263 value : String ,
273264 errorMessage : String ,
@@ -304,4 +295,63 @@ fun LinkInputField(
304295 Text (text = errorMessage)
305296 }
306297 })
307- }
298+ }
299+
300+ @Composable
301+ private fun LinkCreatedAndUpdatedTime (link : Link ) {
302+ val dateFormatter = DateFormat .getDateTimeInstance()
303+
304+ Row (
305+ modifier = Modifier .padding(8 .dp),
306+ verticalAlignment = Alignment .CenterVertically
307+ ) {
308+ Icon (
309+ painter = painterResource(R .drawable.ic_clock),
310+ contentDescription = " Time Icon" ,
311+ tint = Color .Unspecified ,
312+ modifier = Modifier
313+ .size(20 .dp)
314+ .padding(4 .dp)
315+ )
316+
317+ Text (
318+ text = " Created at: " ,
319+ textAlign = TextAlign .Center ,
320+ )
321+
322+ Spacer (modifier = Modifier .weight(1f ))
323+
324+ Text (
325+ text = " ${dateFormatter.format(link.createdTime)} " ,
326+ textAlign = TextAlign .Center ,
327+ )
328+ }
329+
330+ if (link.lastUpdatedTime == - 1L ) return
331+
332+ Row (
333+ modifier = Modifier .padding(8 .dp),
334+ verticalAlignment = Alignment .CenterVertically
335+ ) {
336+ Icon (
337+ painter = painterResource(R .drawable.ic_clock),
338+ contentDescription = " Time Icon" ,
339+ tint = Color .Unspecified ,
340+ modifier = Modifier
341+ .size(20 .dp)
342+ .padding(4 .dp)
343+ )
344+
345+ Text (
346+ text = " Updated at: " ,
347+ textAlign = TextAlign .Center ,
348+ )
349+
350+ Spacer (modifier = Modifier .weight(1f ))
351+
352+ Text (
353+ text = " ${dateFormatter.format(link.lastUpdatedTime)} " ,
354+ textAlign = TextAlign .Center ,
355+ )
356+ }
357+ }
0 commit comments