diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
index 3a827e9bc..c8b138b0c 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
@@ -188,7 +188,7 @@ class ComposeActivity :
Log.w("ComposeActivity", "Edit image cancelled by user")
} else {
Log.w("ComposeActivity", "Edit image failed: " + result.error)
- displayTransientError(R.string.error_image_edit_failed)
+ displayTransientMessage(R.string.error_image_edit_failed)
}
viewModel.cropImageItemOld = null
}
@@ -470,9 +470,9 @@ class ComposeActivity :
lifecycleScope.launch {
viewModel.uploadError.collect { throwable ->
if (throwable is UploadServerError) {
- displayTransientError(throwable.errorMessage)
+ displayTransientMessage(throwable.errorMessage)
} else {
- displayTransientError(R.string.error_media_upload_sending)
+ displayTransientMessage(R.string.error_media_upload_sending)
}
}
}
@@ -500,6 +500,9 @@ class ComposeActivity :
binding.composeScheduleView.setListener(this)
binding.atButton.setOnClickListener { atButtonClicked() }
binding.hashButton.setOnClickListener { hashButtonClicked() }
+ binding.descriptionMissingWarningButton.setOnClickListener {
+ displayTransientMessage(R.string.hint_media_description_missing)
+ }
val textColor = ThemeUtils.getColor(this, android.R.attr.textColorTertiary)
@@ -656,15 +659,15 @@ class ComposeActivity :
super.onSaveInstanceState(outState)
}
- private fun displayTransientError(errorMessage: String) {
- val bar = Snackbar.make(binding.activityCompose, errorMessage, Snackbar.LENGTH_LONG)
+ private fun displayTransientMessage(message: String) {
+ val bar = Snackbar.make(binding.activityCompose, message, Snackbar.LENGTH_LONG)
// necessary so snackbar is shown over everything
bar.view.elevation = resources.getDimension(R.dimen.compose_activity_snackbar_elevation)
bar.setAnchorView(R.id.composeBottomBar)
bar.show()
}
- private fun displayTransientError(@StringRes stringId: Int) {
- displayTransientError(getString(stringId))
+ private fun displayTransientMessage(@StringRes stringId: Int) {
+ displayTransientMessage(getString(stringId))
}
private fun toggleHideMedia() {
@@ -674,6 +677,7 @@ class ComposeActivity :
private fun updateSensitiveMediaToggle(markMediaSensitive: Boolean, contentWarningShown: Boolean) {
if (viewModel.media.value.isEmpty()) {
binding.composeHideMediaButton.hide()
+ binding.descriptionMissingWarningButton.hide()
} else {
binding.composeHideMediaButton.show()
@ColorInt val color = if (contentWarningShown) {
@@ -691,6 +695,15 @@ class ComposeActivity :
}
}
binding.composeHideMediaButton.drawable.colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)
+
+ var oneMediaWithoutDescription = false
+ for (media in viewModel.media.value) {
+ if (media.description == null || media.description.isEmpty()) {
+ oneMediaWithoutDescription = true
+ break
+ }
+ }
+ binding.descriptionMissingWarningButton.visibility = if (oneMediaWithoutDescription) View.VISIBLE else View.GONE
}
}
@@ -760,7 +773,7 @@ class ComposeActivity :
binding.emojiView.adapter?.let {
if (it.itemCount == 0) {
val errorMessage = getString(R.string.error_no_custom_emojis, accountManager.activeAccount!!.domain)
- Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show()
+ displayTransientMessage(errorMessage)
} else {
if (emojiBehavior.state == BottomSheetBehavior.STATE_HIDDEN || emojiBehavior.state == BottomSheetBehavior.STATE_COLLAPSED) {
emojiBehavior.state = BottomSheetBehavior.STATE_EXPANDED
@@ -980,7 +993,7 @@ class ComposeActivity :
val photoFile: File = try {
createNewImageFile(this)
} catch (ex: IOException) {
- displayTransientError(R.string.error_media_upload_opening)
+ displayTransientMessage(R.string.error_media_upload_opening)
return
}
@@ -1050,7 +1063,7 @@ class ComposeActivity :
is VideoOrImageException -> getString(R.string.error_media_upload_image_or_video)
else -> getString(R.string.error_media_upload_opening)
}
- displayTransientError(errorString)
+ displayTransientMessage(errorString)
}
}
}
diff --git a/app/src/main/res/drawable/ic_missing_description_24dp.xml b/app/src/main/res/drawable/ic_missing_description_24dp.xml
new file mode 100644
index 000000000..19d78d193
--- /dev/null
+++ b/app/src/main/res/drawable/ic_missing_description_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_compose.xml b/app/src/main/res/layout/activity_compose.xml
index 902bae406..367d88baa 100644
--- a/app/src/main/res/layout/activity_compose.xml
+++ b/app/src/main/res/layout/activity_compose.xml
@@ -25,7 +25,7 @@
+
+
Anzeigename
Über mich
Suchen …
+ Medien sollten Beschreibungen haben.
Keine Ergebnisse
Antworten …
Profilbild
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1965c4db7..4bf7a3718 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -195,6 +195,7 @@
Display name
Bio
Search…
+ Media should have a description.
No results