mirror of
https://github.com/tuskyapp/Tusky
synced 2025-02-02 04:36:48 +01:00
Fix extra clicks on media tab (#3930)
If: 1. You're viewing an account's media tab 2. Some of the media was marked sensitivei 3. The `alwaysShowSensitiveMedia` setting was `true` tapping on the image (once) would do nothing visible, because it was treated as the "reveal sensitive media" tap. You had to tap on it a second time to open it. Fix this, by passing the preference value through to the relevant code. --------- Co-authored-by: Tiga! <maxiinne@proton.me>
This commit is contained in:
parent
498c7646b0
commit
791092ef13
@ -82,13 +82,10 @@ class AccountMediaFragment :
|
|||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
|
requireActivity().addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.RESUMED)
|
||||||
|
|
||||||
val alwaysShowSensitiveMedia = accountManager.activeAccount!!.alwaysShowSensitiveMedia
|
|
||||||
|
|
||||||
val preferences = PreferenceManager.getDefaultSharedPreferences(view.context)
|
val preferences = PreferenceManager.getDefaultSharedPreferences(view.context)
|
||||||
val useBlurhash = preferences.getBoolean(PrefKeys.USE_BLURHASH, true)
|
val useBlurhash = preferences.getBoolean(PrefKeys.USE_BLURHASH, true)
|
||||||
|
|
||||||
adapter = AccountMediaGridAdapter(
|
adapter = AccountMediaGridAdapter(
|
||||||
alwaysShowSensitiveMedia = alwaysShowSensitiveMedia,
|
|
||||||
useBlurhash = useBlurhash,
|
useBlurhash = useBlurhash,
|
||||||
context = view.context,
|
context = view.context,
|
||||||
onAttachmentClickListener = ::onAttachmentClick
|
onAttachmentClickListener = ::onAttachmentClick
|
||||||
|
@ -24,7 +24,6 @@ import com.keylesspalace.tusky.viewdata.AttachmentViewData
|
|||||||
import java.util.Random
|
import java.util.Random
|
||||||
|
|
||||||
class AccountMediaGridAdapter(
|
class AccountMediaGridAdapter(
|
||||||
private val alwaysShowSensitiveMedia: Boolean,
|
|
||||||
private val useBlurhash: Boolean,
|
private val useBlurhash: Boolean,
|
||||||
context: Context,
|
context: Context,
|
||||||
private val onAttachmentClickListener: (AttachmentViewData, View) -> Unit
|
private val onAttachmentClickListener: (AttachmentViewData, View) -> Unit
|
||||||
@ -80,7 +79,7 @@ class AccountMediaGridAdapter(
|
|||||||
.into(imageView)
|
.into(imageView)
|
||||||
|
|
||||||
imageView.contentDescription = item.attachment.getFormattedDescription(context)
|
imageView.contentDescription = item.attachment.getFormattedDescription(context)
|
||||||
} else if (item.sensitive && !item.isRevealed && !alwaysShowSensitiveMedia) {
|
} else if (item.sensitive && !item.isRevealed) {
|
||||||
overlay.show()
|
overlay.show()
|
||||||
overlay.setImageDrawable(mediaHiddenDrawable)
|
overlay.setImageDrawable(mediaHiddenDrawable)
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import androidx.paging.LoadType
|
|||||||
import androidx.paging.PagingState
|
import androidx.paging.PagingState
|
||||||
import androidx.paging.RemoteMediator
|
import androidx.paging.RemoteMediator
|
||||||
import com.keylesspalace.tusky.components.timeline.util.ifExpected
|
import com.keylesspalace.tusky.components.timeline.util.ifExpected
|
||||||
|
import com.keylesspalace.tusky.db.AccountEntity
|
||||||
import com.keylesspalace.tusky.network.MastodonApi
|
import com.keylesspalace.tusky.network.MastodonApi
|
||||||
import com.keylesspalace.tusky.viewdata.AttachmentViewData
|
import com.keylesspalace.tusky.viewdata.AttachmentViewData
|
||||||
import retrofit2.HttpException
|
import retrofit2.HttpException
|
||||||
@ -27,9 +28,9 @@ import retrofit2.HttpException
|
|||||||
@OptIn(ExperimentalPagingApi::class)
|
@OptIn(ExperimentalPagingApi::class)
|
||||||
class AccountMediaRemoteMediator(
|
class AccountMediaRemoteMediator(
|
||||||
private val api: MastodonApi,
|
private val api: MastodonApi,
|
||||||
|
private val activeAccount: AccountEntity,
|
||||||
private val viewModel: AccountMediaViewModel
|
private val viewModel: AccountMediaViewModel
|
||||||
) : RemoteMediator<String, AttachmentViewData>() {
|
) : RemoteMediator<String, AttachmentViewData>() {
|
||||||
|
|
||||||
override suspend fun load(
|
override suspend fun load(
|
||||||
loadType: LoadType,
|
loadType: LoadType,
|
||||||
state: PagingState<String, AttachmentViewData>
|
state: PagingState<String, AttachmentViewData>
|
||||||
@ -58,7 +59,7 @@ class AccountMediaRemoteMediator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val attachments = statuses.flatMap { status ->
|
val attachments = statuses.flatMap { status ->
|
||||||
AttachmentViewData.list(status)
|
AttachmentViewData.list(status, activeAccount.alwaysShowSensitiveMedia ?: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loadType == LoadType.REFRESH) {
|
if (loadType == LoadType.REFRESH) {
|
||||||
|
@ -21,11 +21,13 @@ import androidx.paging.ExperimentalPagingApi
|
|||||||
import androidx.paging.Pager
|
import androidx.paging.Pager
|
||||||
import androidx.paging.PagingConfig
|
import androidx.paging.PagingConfig
|
||||||
import androidx.paging.cachedIn
|
import androidx.paging.cachedIn
|
||||||
|
import com.keylesspalace.tusky.db.AccountManager
|
||||||
import com.keylesspalace.tusky.network.MastodonApi
|
import com.keylesspalace.tusky.network.MastodonApi
|
||||||
import com.keylesspalace.tusky.viewdata.AttachmentViewData
|
import com.keylesspalace.tusky.viewdata.AttachmentViewData
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class AccountMediaViewModel @Inject constructor(
|
class AccountMediaViewModel @Inject constructor(
|
||||||
|
private val accountManager: AccountManager,
|
||||||
api: MastodonApi
|
api: MastodonApi
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
@ -35,6 +37,8 @@ class AccountMediaViewModel @Inject constructor(
|
|||||||
|
|
||||||
var currentSource: AccountMediaPagingSource? = null
|
var currentSource: AccountMediaPagingSource? = null
|
||||||
|
|
||||||
|
val activeAccount = accountManager.activeAccount!!
|
||||||
|
|
||||||
@OptIn(ExperimentalPagingApi::class)
|
@OptIn(ExperimentalPagingApi::class)
|
||||||
val media = Pager(
|
val media = Pager(
|
||||||
config = PagingConfig(
|
config = PagingConfig(
|
||||||
@ -48,7 +52,7 @@ class AccountMediaViewModel @Inject constructor(
|
|||||||
currentSource = source
|
currentSource = source
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remoteMediator = AccountMediaRemoteMediator(api, this)
|
remoteMediator = AccountMediaRemoteMediator(api, activeAccount, this)
|
||||||
).flow
|
).flow
|
||||||
.cachedIn(viewModelScope)
|
.cachedIn(viewModelScope)
|
||||||
|
|
||||||
|
@ -518,7 +518,11 @@ class NotificationsFragment :
|
|||||||
|
|
||||||
override fun onViewMedia(position: Int, attachmentIndex: Int, view: View?) {
|
override fun onViewMedia(position: Int, attachmentIndex: Int, view: View?) {
|
||||||
val status = adapter.peek(position)?.statusViewData?.status ?: return
|
val status = adapter.peek(position)?.statusViewData?.status ?: return
|
||||||
super.viewMedia(attachmentIndex, list(status), view)
|
super.viewMedia(
|
||||||
|
attachmentIndex,
|
||||||
|
list(status, viewModel.statusDisplayOptions.value.showSensitiveMedia),
|
||||||
|
view
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewThread(position: Int) {
|
override fun onViewThread(position: Int) {
|
||||||
|
@ -336,7 +336,11 @@ class ViewThreadFragment :
|
|||||||
|
|
||||||
override fun onViewMedia(position: Int, attachmentIndex: Int, view: View?) {
|
override fun onViewMedia(position: Int, attachmentIndex: Int, view: View?) {
|
||||||
val status = adapter.currentList[position].status
|
val status = adapter.currentList[position].status
|
||||||
super.viewMedia(attachmentIndex, list(status), view)
|
super.viewMedia(
|
||||||
|
attachmentIndex,
|
||||||
|
list(status, alwaysShowSensitiveMedia),
|
||||||
|
view
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewThread(position: Int) {
|
override fun onViewThread(position: Int) {
|
||||||
|
@ -35,7 +35,7 @@ data class AttachmentViewData(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun list(status: Status): List<AttachmentViewData> {
|
fun list(status: Status, alwaysShowSensitiveMedia: Boolean = false): List<AttachmentViewData> {
|
||||||
val actionable = status.actionableStatus
|
val actionable = status.actionableStatus
|
||||||
return actionable.attachments.map { attachment ->
|
return actionable.attachments.map { attachment ->
|
||||||
AttachmentViewData(
|
AttachmentViewData(
|
||||||
@ -43,7 +43,7 @@ data class AttachmentViewData(
|
|||||||
statusId = actionable.id,
|
statusId = actionable.id,
|
||||||
statusUrl = actionable.url!!,
|
statusUrl = actionable.url!!,
|
||||||
sensitive = actionable.sensitive,
|
sensitive = actionable.sensitive,
|
||||||
isRevealed = !actionable.sensitive
|
isRevealed = alwaysShowSensitiveMedia || !actionable.sensitive
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user