diff --git a/app/build.gradle b/app/build.gradle index 63495ba4..4228e0b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "org.permanent.PermanentArchive" minSdkVersion 26 targetSdkVersion 34 - versionCode 68 - versionName "1.9.2" + versionCode 72 + versionName "1.9.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/org/permanent/permanent/models/Record.kt b/app/src/main/java/org/permanent/permanent/models/Record.kt index f013a923..0db8e77b 100644 --- a/app/src/main/java/org/permanent/permanent/models/Record.kt +++ b/app/src/main/java/org/permanent/permanent/models/Record.kt @@ -74,7 +74,7 @@ open class Record : Parcelable { folderLinkId = recordInfo.folder_linkId parentFolderLinkId = recordInfo.parentFolder_linkId displayName = recordInfo.displayName - displayDate = recordInfo.displayDT + displayDate = recordInfo.displayDT?.replace("T", " ") showArchiveThumb = false thumbURL200 = recordInfo.thumbURL200 thumbURL2000 = recordInfo.thumbURL2000 @@ -100,7 +100,7 @@ open class Record : Parcelable { folderLinkId = recordInfo.folder_linkId parentFolderLinkId = recordInfo.parentFolder_linkId displayName = recordInfo.displayName - displayDate = recordInfo.displayDT + displayDate = recordInfo.displayDT?.replace("T", " ") showArchiveThumb = false thumbURL200 = recordInfo.thumbURL200 thumbURL2000 = recordInfo.thumbURL2000 @@ -127,7 +127,7 @@ open class Record : Parcelable { folderLinkId = itemVO.folder_linkId parentFolderLinkId = itemVO.parentFolder_linkId displayName = itemVO.displayName - displayDate = itemVO.displayDT + displayDate = itemVO.displayDT?.replace("T", " ") archiveFullName = "The ${archiveVO.fullName} Archive" archiveThumbURL200 = archiveVO.thumbURL200 showArchiveThumb = showArchiveThumbnail @@ -172,7 +172,7 @@ open class Record : Parcelable { folderLinkId = recordInfo?.folder_linkId parentFolderLinkId = recordInfo?.parentFolder_linkId displayName = recordInfo?.displayName - displayDate = recordInfo?.displayDT + displayDate = recordInfo?.displayDT?.replace("T", " ") thumbURL200 = recordInfo?.thumbURL200 thumbURL2000 = recordInfo?.thumbURL2000 isThumbBlurred = shareByUrlVO.previewToggle == null || shareByUrlVO.previewToggle == 0 diff --git a/app/src/main/java/org/permanent/permanent/network/models/FileData.kt b/app/src/main/java/org/permanent/permanent/network/models/FileData.kt index 24d2707a..5db95479 100644 --- a/app/src/main/java/org/permanent/permanent/network/models/FileData.kt +++ b/app/src/main/java/org/permanent/permanent/network/models/FileData.kt @@ -52,7 +52,7 @@ class FileData private constructor() : Parcelable { } displayName = recordVO.displayName description = recordVO.description - displayDate = recordVO.displayDT + displayDate = recordVO.displayDT?.replace("T", " ") createdDate = recordVO.createdDT?.replace("T", " ") updatedDate = recordVO.updatedDT?.replace("T", " ") derivedDate = recordVO.derivedDT?.replace("T", " ") diff --git a/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/EditFileNamesFragment.kt b/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/EditFileNamesFragment.kt index 9f7f808d..bca278ad 100644 --- a/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/EditFileNamesFragment.kt +++ b/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/EditFileNamesFragment.kt @@ -9,6 +9,8 @@ import android.view.ViewGroup import android.widget.FrameLayout import androidx.compose.material3.MaterialTheme import androidx.compose.ui.platform.ComposeView +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog @@ -21,6 +23,7 @@ import org.permanent.permanent.viewmodels.EditFileNamesViewModel class EditFileNamesFragment : PermanentBottomSheetFragment() { private lateinit var viewModel: EditFileNamesViewModel + private val onFileNameChanged = MutableLiveData() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -60,12 +63,28 @@ class EditFileNamesFragment : PermanentBottomSheetFragment() { return bottomSheetDialog } - override fun connectViewModelEvents() { + private val onFileNameChangedObserver = Observer { + onFileNameChanged.value = it + } + override fun connectViewModelEvents() { + viewModel.getOnFileNameChanged().observe(this, onFileNameChangedObserver) } override fun disconnectViewModelEvents() { + viewModel.getOnFileNameChanged().removeObserver(onFileNameChangedObserver) + } + override fun onResume() { + super.onResume() + connectViewModelEvents() } + override fun onPause() { + super.onPause() + disconnectViewModelEvents() + } + + fun getOnFilenameChanged() = onFileNameChanged + } \ No newline at end of file diff --git a/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/EditMetadataFragment.kt b/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/EditMetadataFragment.kt index 41cf9eb8..2e6212f4 100644 --- a/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/EditMetadataFragment.kt +++ b/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/EditMetadataFragment.kt @@ -8,6 +8,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.ui.platform.ComposeView import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider +import com.google.android.material.snackbar.Snackbar import org.permanent.permanent.models.Record import org.permanent.permanent.models.Tag import org.permanent.permanent.ui.PermanentBaseFragment @@ -21,6 +22,7 @@ class EditMetadataFragment : PermanentBaseFragment() { private var newTagFragment: NewTagFragment? = null private var locationFragment: EditLocationFragment? = null private var dateFragment: EditDateTimeFragment? = null + private var fileNameFragment: EditFileNamesFragment? = null private var records = ArrayList() override fun onCreateView( @@ -49,9 +51,11 @@ class EditMetadataFragment : PermanentBaseFragment() { ?.observe(lifecycleOwner, onTagsAddedToSelectionObserver) }, openEditFileNamesScreen = { - var fragment = EditFileNamesFragment() - fragment?.setBundleArguments(records) - fragment?.show(parentFragmentManager, fragment?.tag) + fileNameFragment = EditFileNamesFragment() + fileNameFragment?.setBundleArguments(records) + fileNameFragment?.show(parentFragmentManager, fileNameFragment?.tag) + fileNameFragment?.getOnFilenameChanged() + ?.observe(lifecycleOwner, onFilenameChangedObserver) }, openDateAndTimeScreen = { dateFragment = EditDateTimeFragment() @@ -85,6 +89,10 @@ class EditMetadataFragment : PermanentBaseFragment() { viewModel.onDateChanged(it) } + private val onFilenameChangedObserver = Observer { + viewModel.showInfoMessage.value = it + } + override fun connectViewModelEvents() { @@ -94,6 +102,7 @@ class EditMetadataFragment : PermanentBaseFragment() { newTagFragment?.getOnTagsAddedToSelection()?.removeObserver(onTagsAddedToSelectionObserver) locationFragment?.getOnLocationChanged()?.removeObserver(onLocationChangedObserver) dateFragment?.getOnDateChanged()?.removeObserver(onDateChangedObserver) + fileNameFragment?.getOnFilenameChanged()?.removeObserver(onFilenameChangedObserver) } override fun onResume() { diff --git a/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/compose/EditDateTimeScreen.kt b/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/compose/EditDateTimeScreen.kt index 8b486363..05e2e4e7 100644 --- a/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/compose/EditDateTimeScreen.kt +++ b/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/compose/EditDateTimeScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.DatePicker import androidx.compose.material3.DatePickerDefaults import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.SelectableDates import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.TimePicker @@ -47,6 +48,7 @@ import androidx.core.content.ContextCompat import org.permanent.permanent.R import org.permanent.permanent.viewmodels.EditDateTimeViewModel import java.text.SimpleDateFormat +import java.time.LocalDate import java.util.Date import java.util.Locale @@ -63,8 +65,10 @@ fun EditDateTimeScreen( val openAlertDialog = remember { mutableStateOf(false) } val datePickerState = rememberDatePickerState( - initialSelectedDateMillis = viewModel.initialDateMilis + initialSelectedDateMillis = viewModel.initialDateMilis, + selectableDates = PastOrPresentSelectableDates ) + val selectedDate = datePickerState.selectedDateMillis?.let { convertMillisToDate(it) } ?: "" @@ -216,7 +220,7 @@ fun EditDateTimeScreen( cancelButtonText = stringResource(id = R.string.button_cancel), onConfirm = { openAlertDialog.value = false - viewModel.updateDate(dateString = "${selectedDate}T${selectedTime}") + viewModel.updateDate(dateString = "$selectedDate $selectedTime") }) { openAlertDialog.value = false } @@ -264,4 +268,15 @@ fun convertTimeToString(hour: Int, min: Int, sec: Int): String { val secString = String.format("%02d", sec) return "$hourString:$minString:$secString" +} + +@OptIn(ExperimentalMaterial3Api::class) +private object PastOrPresentSelectableDates: SelectableDates { + override fun isSelectableDate(utcTimeMillis: Long): Boolean { + return utcTimeMillis <= System.currentTimeMillis() + } + + override fun isSelectableYear(year: Int): Boolean { + return year <= LocalDate.now().year + } } \ No newline at end of file diff --git a/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/compose/EditMetadataScreen.kt b/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/compose/EditMetadataScreen.kt index 6c4b9100..a21b06b1 100644 --- a/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/compose/EditMetadataScreen.kt +++ b/app/src/main/java/org/permanent/permanent/ui/bulkEditMetadata/compose/EditMetadataScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Divider +import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text @@ -88,6 +89,7 @@ fun EditMetadataScreen( val allTags by viewModel.getTagsOfSelectedRecords().observeAsState() val focusRequester = remember { FocusRequester() } val errorMessage by viewModel.showError.observeAsState() + val infoMessage by viewModel.showInfoMessage.observeAsState() val showApplyAllToSelection by viewModel.showApplyAllToSelection.observeAsState() val isBusy by viewModel.getIsBusy().observeAsState() val locationMenuName by viewModel.getLocationMenuName().observeAsState() @@ -97,142 +99,158 @@ fun EditMetadataScreen( val snackbarEventFlow = remember { MutableSharedFlow() } val snackbarHostState = remember { SnackbarHostState() } - Column( - modifier = Modifier - .fillMaxSize() - .background(lightBlueColor) - .padding(24.dp) - .verticalScroll(scrollState) - .clickable { - viewModel.applyNewDescriptionToAllRecords(inputDescription) - }, - verticalArrangement = Arrangement.Top - ) { - Header(iconURL = firstRecordThumb, titleText = headerTitle) - - Divider(modifier = Modifier.padding(vertical = 24.dp)) - - DescriptionView( - blackColor, - regularFont, - subTitleTextSize, - inputDescription, - focusRequester, - whiteColor, - lightGreyColor, - someFilesHaveDescription, - redColor, - smallTextSize - ) + Scaffold( + snackbarHost = { + SnackbarHost(hostState = snackbarHostState) + } + ) { it -> + it + Column( + modifier = Modifier + .fillMaxSize() + .background(lightBlueColor) + .padding(24.dp) + .verticalScroll(scrollState) + .clickable { + viewModel.applyNewDescriptionToAllRecords(inputDescription) + }, + verticalArrangement = Arrangement.Top + ) { + Header(iconURL = firstRecordThumb, titleText = headerTitle) + + Divider(modifier = Modifier.padding(vertical = 24.dp)) + + DescriptionView( + blackColor, + regularFont, + subTitleTextSize, + inputDescription, + focusRequester, + whiteColor, + lightGreyColor, + someFilesHaveDescription, + redColor, + smallTextSize, + onTextChange = { + inputDescription = it + } + ) - Divider(modifier = Modifier.padding(vertical = 16.dp)) + Divider(modifier = Modifier.padding(vertical = 16.dp)) - Row( - modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween - ) { Row( - modifier = Modifier.padding(vertical = 8.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp) + modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween ) { - Image( - painter = painterResource(id = R.drawable.ic_tag), - contentDescription = "Description", - modifier = Modifier.size(24.dp), - colorFilter = ColorFilter.tint(lightGreyColor) - ) - Text( - text = stringResource(R.string.edit_files_metadata_tags), - color = blackColor, - fontFamily = regularFont, - fontSize = subTitleTextSize - ) - } - if (showApplyAllToSelection == true) { - Row(modifier = Modifier - .clickable { viewModel.onApplyAllTagsToSelectionClick() } - .padding(vertical = 8.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp)) { - Text( - text = stringResource(R.string.edit_files_metadata_apply_all_to_selection), - color = primaryColor, - fontFamily = semiboldFont, - fontSize = subTitleTextSize - ) + Row( + modifier = Modifier.padding(vertical = 8.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { Image( - painter = painterResource(id = R.drawable.ic_done_white), + painter = painterResource(id = R.drawable.ic_tag), contentDescription = "Description", modifier = Modifier.size(24.dp), - colorFilter = ColorFilter.tint(primaryColor) + colorFilter = ColorFilter.tint(lightGreyColor) ) + Text( + text = stringResource(R.string.edit_files_metadata_tags), + color = blackColor, + fontFamily = regularFont, + fontSize = subTitleTextSize + ) + } + if (showApplyAllToSelection == true) { + Row(modifier = Modifier + .clickable { viewModel.onApplyAllTagsToSelectionClick() } + .padding(vertical = 8.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp)) { + Text( + text = stringResource(R.string.edit_files_metadata_apply_all_to_selection), + color = primaryColor, + fontFamily = semiboldFont, + fontSize = subTitleTextSize + ) + Image( + painter = painterResource(id = R.drawable.ic_done_white), + contentDescription = "Description", + modifier = Modifier.size(24.dp), + colorFilter = ColorFilter.tint(primaryColor) + ) + } } } - } - FlowRow( - modifier = Modifier, horizontalArrangement = Arrangement.spacedBy(16.dp) - ) { - allTags?.let { allTagsValue -> - for (tag in allTagsValue) { - TagView( - text = tag.name, - isSelected = tag.isSelected.observeAsState(), - onTagClick = { viewModel.onTagClick(tag) } - ) { viewModel.onTagRemoveClick(tag) } + FlowRow( + modifier = Modifier, horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + allTags?.let { allTagsValue -> + for (tag in allTagsValue) { + TagView( + text = tag.name, + isSelected = tag.isSelected.observeAsState(), + onTagClick = { viewModel.onTagClick(tag) } + ) { viewModel.onTagRemoveClick(tag) } + } } - } - NewTagView { - val tagsOfSelectedRecords = arrayListOf() - viewModel.getTagsOfSelectedRecords().value?.toList() - ?.let { tagsOfSelectedRecords.addAll(it) } + NewTagView { + val tagsOfSelectedRecords = arrayListOf() + viewModel.getTagsOfSelectedRecords().value?.toList() + ?.let { tagsOfSelectedRecords.addAll(it) } - openNewTagScreen(tagsOfSelectedRecords) + openNewTagScreen(tagsOfSelectedRecords) + } } - } - Divider(modifier = Modifier.padding(vertical = 16.dp)) + Divider(modifier = Modifier.padding(vertical = 16.dp)) - FilesMenuView(icon = R.drawable.ic_edit_name, - title = stringResource(id = R.string.file_names), - actionTitle = stringResource(id = R.string.modify)) { - openEditFileNamesScreen(viewModel.getRecords()) - } + FilesMenuView(icon = R.drawable.ic_edit_name, + title = stringResource(id = R.string.file_names), + actionTitle = stringResource(id = R.string.modify)) { + openEditFileNamesScreen(viewModel.getRecords()) + } - Divider(modifier = Modifier.padding(vertical = 16.dp)) + Divider(modifier = Modifier.padding(vertical = 16.dp)) - dateMenuName?.let { - FilesMenuView(icon = R.drawable.ic_date_time, - title = it, - actionTitle = stringResource(id = R.string.menu_toolbar_public_add)) { - openDateAndTimeScreen(viewModel.getRecords()) + dateMenuName?.let { + FilesMenuView(icon = R.drawable.ic_date_time, + title = it, + actionTitle = stringResource(id = R.string.menu_toolbar_public_add)) { + openDateAndTimeScreen(viewModel.getRecords()) + } } - } - Divider(modifier = Modifier.padding(vertical = 16.dp)) + Divider(modifier = Modifier.padding(vertical = 16.dp)) + + locationMenuName?.let { + FilesMenuView(icon = R.drawable.map_icon, + title = it, + actionTitle = stringResource(id = R.string.menu_toolbar_public_add)) { + openLocationScreen(viewModel.getRecords()) + } + } - locationMenuName?.let { - FilesMenuView(icon = R.drawable.map_icon, - title = it, - actionTitle = stringResource(id = R.string.menu_toolbar_public_add)) { - openLocationScreen(viewModel.getRecords()) + LaunchedEffect(infoMessage) { + infoMessage?.let { message -> + coroutineScope.launch { + snackbarHostState.showSnackbar(message) + } + } } - } - } - LaunchedEffect(errorMessage) { - errorMessage?.let { message -> - coroutineScope.launch { - snackbarHostState.showSnackbar(message) + LaunchedEffect(errorMessage) { + errorMessage?.let { message -> + coroutineScope.launch { + snackbarHostState.showSnackbar(message) + } + } } - } - } - LaunchedEffect(snackbarEventFlow) { - snackbarEventFlow.collect { message -> - snackbarHostState.showSnackbar(message) + LaunchedEffect(snackbarEventFlow) { + snackbarEventFlow.collect { message -> + snackbarHostState.showSnackbar(message) + } + } } } - - SnackbarHost(hostState = snackbarHostState) } @Composable @@ -282,9 +300,9 @@ private fun DescriptionView( lightGreyColor: Color, someFilesHaveDescription: Boolean?, redColor: Color, - smallTextSize: TextUnit + smallTextSize: TextUnit, + onTextChange: (String) -> Unit ) { - var description = inputDescription Row( verticalAlignment = Alignment.Top, horizontalArrangement = Arrangement.spacedBy(16.dp) ) { @@ -304,10 +322,8 @@ private fun DescriptionView( Spacer(modifier = Modifier.height(10.dp)) TextField( - value = description, - onValueChange = { value -> - description = value - }, + value = inputDescription, + onValueChange = onTextChange, label = { Text(text = stringResource(id = R.string.edit_files_metadata_description_hint)) }, singleLine = true, modifier = Modifier diff --git a/app/src/main/java/org/permanent/permanent/viewmodels/EditDateTimeViewModel.kt b/app/src/main/java/org/permanent/permanent/viewmodels/EditDateTimeViewModel.kt index b75cd1fd..41461f9b 100644 --- a/app/src/main/java/org/permanent/permanent/viewmodels/EditDateTimeViewModel.kt +++ b/app/src/main/java/org/permanent/permanent/viewmodels/EditDateTimeViewModel.kt @@ -28,7 +28,7 @@ class EditDateTimeViewModel(application: Application) : ObservableAndroidViewMod fun setRecords(records: ArrayList) { this.records.addAll(records) records.firstOrNull()?.displayDate?.let { - val dateFormat = "yyyy-MM-dd'T'HH:mm:ss" + val dateFormat = "yyyy-MM-dd HH:mm:ss" extractDateHourMinute(it, dateFormat) } } diff --git a/app/src/main/java/org/permanent/permanent/viewmodels/EditFileNamesViewModel.kt b/app/src/main/java/org/permanent/permanent/viewmodels/EditFileNamesViewModel.kt index f09bb859..8ba85c0d 100644 --- a/app/src/main/java/org/permanent/permanent/viewmodels/EditFileNamesViewModel.kt +++ b/app/src/main/java/org/permanent/permanent/viewmodels/EditFileNamesViewModel.kt @@ -1,7 +1,9 @@ package org.permanent.permanent.viewmodels import android.app.Application +import androidx.lifecycle.MutableLiveData import kotlinx.coroutines.flow.MutableStateFlow +import org.permanent.permanent.R import org.permanent.permanent.models.Record import org.permanent.permanent.network.IResponseListener import org.permanent.permanent.repositories.FileRepositoryImpl @@ -10,12 +12,15 @@ import org.permanent.permanent.ui.bulkEditMetadata.compose.SequenceDateOptions import org.permanent.permanent.ui.bytesToHumanReadableString class EditFileNamesViewModel(application: Application) : ObservableAndroidViewModel(application) { + private var appContext = application.applicationContext private var fileRepository: IFileRepository = FileRepositoryImpl(application) val uiState = MutableStateFlow(EditFileNamesUIState()) private var records: MutableList = mutableListOf() + private val onFileNameChanged = MutableLiveData() + fun setRecords(records: ArrayList) { this.records.addAll(records) records.firstOrNull()?.let { @@ -175,6 +180,7 @@ class EditFileNamesViewModel(application: Application) : ObservableAndroidViewMo isFolderRecordType = false, object : IResponseListener { override fun onSuccess(message: String?) { + onFileNameChanged.value = appContext.getString(R.string.file_names_updated) toggleLoading() triggerCloseScreen() } @@ -187,6 +193,8 @@ class EditFileNamesViewModel(application: Application) : ObservableAndroidViewMo } }) } + + fun getOnFileNameChanged() = onFileNameChanged } data class EditFileNamesUIState( diff --git a/app/src/main/java/org/permanent/permanent/viewmodels/EditMetadataViewModel.kt b/app/src/main/java/org/permanent/permanent/viewmodels/EditMetadataViewModel.kt index 4862dce4..845f3a5a 100644 --- a/app/src/main/java/org/permanent/permanent/viewmodels/EditMetadataViewModel.kt +++ b/app/src/main/java/org/permanent/permanent/viewmodels/EditMetadataViewModel.kt @@ -26,11 +26,11 @@ class EditMetadataViewModel(application: Application) : ObservableAndroidViewMod private val tagsOfSelectedRecords = MutableLiveData>(mutableStateListOf()) private var commonTags: MutableList = mutableListOf() - private var initialDescription: String = "" private var commonDescription: String = "" private var showWarningSomeFilesHaveDescription = MutableLiveData(false) val showError = MutableLiveData() val showApplyAllToSelection = MutableLiveData(true) + val showInfoMessage = MutableLiveData() private val isBusy = MutableLiveData(false) private val locationMenuName = MutableLiveData(appContext.getString(R.string.locations)) private val dateMenuName = MutableLiveData(appContext.getString(R.string.date_time)) @@ -96,6 +96,7 @@ class EditMetadataViewModel(application: Application) : ObservableAndroidViewMod } private fun checkForCommonDescription() { + var initialDescription = "" for (record in records) { val recordDescription = record.fileData?.description if (!recordDescription.isNullOrBlank()) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8aba2b1a..be4dec8c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -739,13 +739,13 @@ Add Location Various locations New location - Are you sure you want set a new location for selected items? + Are you sure you want to set a new date & time for the selected items? Add date and time Add date Various dates and times New Date & Time - Are you sure you want set a new date & time for selected items? + Are you sure you want to set a new date & time for the selected items? Set date and time - + File names updated successfully