Skip to content

Commit

Permalink
Merge pull request #1978 from pantasystem/feature/#1977/sensitive-war…
Browse files Browse the repository at this point in the history
…ning-dialog

センシティブなメディアを表示する時は警告ダイアログを表示するようにした
  • Loading branch information
pantasystem authored Nov 19, 2023
2 parents 8cce9ac + 3a125ad commit 1ded205
Show file tree
Hide file tree
Showing 12 changed files with 92 additions and 13 deletions.
5 changes: 5 additions & 0 deletions modules/common_resource/src/main/res/values-ja/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -646,4 +646,9 @@
<string name="safe_search_description_dialog_positive_button">設定へ移動する</string>
<string name="safe_search_description_dialog_negative_button">セーフサーチを有効にしてお</string>

<string name="confirm_display_sensitive_media_dialog_title">メディア表示の確認</string>
<string name="confirm_display_sensitive_media_dialog_message">暴力的、性的なメディアが表示される恐れがあります。本当に表示しますか?</string>
<string name="confirm_display_sensitive_media_dialog_positive_button">表示</string>
<string name="confirm_display_sensitive_media_dialog_neutral_button">警告を非表示</string>

</resources>
5 changes: 5 additions & 0 deletions modules/common_resource/src/main/res/values-zh/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -635,4 +635,9 @@
<string name="safe_search_description_dialog_positive_button">移动到设置</string>
<string name="safe_search_description_dialog_negative_button">保持启用安全搜索</string>

<string name="confirm_display_sensitive_media_dialog_title">确认媒体显示</string>
<string name="confirm_display_sensitive_media_dialog_message">可能会显示暴力或性内容的媒体。您确定要查看吗?</string>
<string name="confirm_display_sensitive_media_dialog_positive_button">显示</string>
<string name="confirm_display_sensitive_media_dialog_neutral_button">不要警告</string>

</resources>
5 changes: 5 additions & 0 deletions modules/common_resource/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,11 @@
<string name="safe_search_description_dialog_message">Safe Search has been enabled to comply with Google Play\'s User Content Policy. When Safe Search is enabled, posts containing sensitive media will not be displayed on your timeline. To disable Safe Search, go to Settings > Motion > Enable Safe Search and turn it off.</string>
<string name="safe_search_description_dialog_positive_button">Go to Settings</string>
<string name="safe_search_description_dialog_negative_button">Keep Safe Search enabled</string>

<string name="confirm_display_sensitive_media_dialog_title">Confirm Media Display</string>
<string name="confirm_display_sensitive_media_dialog_message">There is a risk that violent or sexual media will be displayed. Are you sure you want to view it?</string>
<string name="confirm_display_sensitive_media_dialog_positive_button">Display</string>
<string name="confirm_display_sensitive_media_dialog_neutral_button">Do not warn</string>
<!-- reaction-acceptance -->

</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,9 @@ fun Config.Companion.from(map: Map<Keys, PrefType?>): Config {
Keys.IsConfirmedSafeSearchEnabled
)?.value ?: DefaultConfig.config.isEnableSafeSearch.isConfirmed
),
isShowWarningDisplayingSensitiveMedia = map.getValue<PrefType.BoolPref>(
Keys.IsShowWarningDisplayingSensitiveMedia
)?.value ?: DefaultConfig.config.isShowWarningDisplayingSensitiveMedia,
)
}

Expand Down Expand Up @@ -316,6 +319,9 @@ fun Config.pref(key: Keys): PrefType {
Keys.IsConfirmedSafeSearchEnabled -> {
PrefType.BoolPref(isEnableSafeSearch.isConfirmed)
}
Keys.IsShowWarningDisplayingSensitiveMedia -> {
PrefType.BoolPref(isShowWarningDisplayingSensitiveMedia)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,10 @@ class ConfigKtTest {
config.isEnableSafeSearch.isConfirmed,
(u as PrefType.BoolPref).value
)
Keys.IsShowWarningDisplayingSensitiveMedia -> Assertions.assertEquals(
config.isShowWarningDisplayingSensitiveMedia,
(u as PrefType.BoolPref).value
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,15 +141,19 @@ class KeysKtTest {
"IsConfirmedSafeSearchEnabled",
key.str()
)
Keys.IsShowWarningDisplayingSensitiveMedia -> Assertions.assertEquals(
"IsShowWarningDisplayingSensitiveMedia",
key.str()
)
}
}
}


@Test
fun checkAllKeysCount() {
Assertions.assertEquals(36, Keys.allKeys.size)
Assertions.assertEquals(36, Keys.allKeys.map { it.str() }.toSet().size)
Assertions.assertEquals(37, Keys.allKeys.size)
Assertions.assertEquals(37, Keys.allKeys.map { it.str() }.toSet().size)
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,9 +186,6 @@ object MediaPreviewHelper {
previewAbleList,
noteCardActionListenerAdapter,
)
binding.baseFrame.setOnClickListener {
mediaViewData.show(index)
}

binding.thumbnail.setPreview(previewAbleFile, mediaViewData.config)

Expand All @@ -199,6 +196,17 @@ object MediaPreviewHelper {
binding.toggleVisibilityButton.setOnClickListener {
mediaViewData.toggleVisibility(index)
}
binding.baseFrame.setOnClickListener {
if (previewAbleFile.visibleType == PreviewAbleFile.VisibleType.SensitiveHide) {
noteCardActionListenerAdapter?.onSensitiveMediaPreviewClicked(
mediaViewData,
index
)
} else {
mediaViewData.show(index)
}

}

if (existsView == null) {
this.addView(binding.root)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import net.pantasystem.milktea.model.note.reaction.Reaction
import net.pantasystem.milktea.model.setting.ReactionPickerType
import net.pantasystem.milktea.note.NoteDetailActivity
import net.pantasystem.milktea.note.NoteEditorActivity
import net.pantasystem.milktea.note.R
import net.pantasystem.milktea.note.option.NoteOptionDialog
import net.pantasystem.milktea.note.reaction.ReactionSelectionDialog
import net.pantasystem.milktea.note.reaction.RemoteReactionEmojiSuggestionDialog
Expand Down Expand Up @@ -179,6 +180,27 @@ class NoteCardActionHandler(
}

}
is NoteCardAction.OnSensitiveMediaPreviewClicked -> {
if (settingStore.configState.value.isShowWarningDisplayingSensitiveMedia) {
val dialog = MaterialAlertDialogBuilder(activity)
.setTitle(R.string.confirm_display_sensitive_media_dialog_title)
.setMessage(R.string.confirm_display_sensitive_media_dialog_message)
.setNeutralButton(R.string.confirm_display_sensitive_media_dialog_neutral_button) { _, _ ->
notesViewModel.neverShowSensitiveMediaDialog()
}
.setPositiveButton(R.string.confirm_display_sensitive_media_dialog_positive_button) { _, _ ->
action.mediaViewData.show(action.targetIndex)
}
.setNegativeButton(android.R.string.cancel) { _, _ ->
// do nothing
}
.create()
dialog.show()
} else {
action.mediaViewData.show(action.targetIndex)
}

}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import net.pantasystem.milktea.model.channel.Channel
import net.pantasystem.milktea.model.note.Note
import net.pantasystem.milktea.model.note.poll.Poll
import net.pantasystem.milktea.model.user.User
import net.pantasystem.milktea.note.media.viewmodel.MediaViewData
import net.pantasystem.milktea.note.media.viewmodel.PreviewAbleFile
import net.pantasystem.milktea.note.reaction.ReactionCountAction
import net.pantasystem.milktea.note.viewmodel.PlaneNoteViewData
Expand Down Expand Up @@ -74,6 +75,10 @@ class NoteCardActionListenerAdapter(
fun onMediaPreviewClicked(previewAbleFile: PreviewAbleFile?, files: List<PreviewAbleFile>, index: Int, thumbnailView: ImageView) {
onAction(NoteCardAction.OnMediaPreviewClicked(previewAbleFile, files, index, WeakReference(thumbnailView)))
}

fun onSensitiveMediaPreviewClicked(mediaViewData: MediaViewData, targetIndex: Int) {
onAction(NoteCardAction.OnSensitiveMediaPreviewClicked(mediaViewData, targetIndex))
}
}


Expand All @@ -95,6 +100,8 @@ sealed interface NoteCardAction {

data class OnMediaPreviewLongClicked(val previewAbleFile: PreviewAbleFile?) : NoteCardAction

data class OnSensitiveMediaPreviewClicked(val mediaViewData: MediaViewData, val targetIndex: Int) : NoteCardAction

data class OnMediaPreviewClicked(
val previewAbleFile: PreviewAbleFile?,
val files: List<PreviewAbleFile>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.launch
import net.pantasystem.milktea.app_store.notes.NoteTranslationStore
import net.pantasystem.milktea.common.Logger
import net.pantasystem.milktea.common.mapCancellableCatching
import net.pantasystem.milktea.common_android.resource.StringSource
import net.pantasystem.milktea.model.note.DeleteAndEditUseCase
import net.pantasystem.milktea.model.note.DeleteNoteUseCase
Expand All @@ -26,6 +27,7 @@ import net.pantasystem.milktea.model.note.poll.VoteUseCase
import net.pantasystem.milktea.model.note.reaction.DeleteReactionsUseCase
import net.pantasystem.milktea.model.note.reaction.ToggleReactionUseCase
import net.pantasystem.milktea.model.note.repost.QuoteRenoteData
import net.pantasystem.milktea.model.setting.LocalConfigRepository
import net.pantasystem.milktea.model.user.report.Report
import net.pantasystem.milktea.note.R
import javax.inject.Inject
Expand All @@ -45,6 +47,7 @@ class NotesViewModel @Inject constructor(
private val deleteAndEditUseCase: DeleteAndEditUseCase,
private val deleteReactionUseCase: DeleteReactionsUseCase,
private val voteUseCase: VoteUseCase,
private val configRepository: LocalConfigRepository,
loggerFactory: Logger.Factory
) : ViewModel() {
private val logger by lazy {
Expand Down Expand Up @@ -204,4 +207,15 @@ class NotesViewModel @Inject constructor(
}
}

fun neverShowSensitiveMediaDialog() {
viewModelScope.launch {
configRepository.get().mapCancellableCatching {
it.copy(isShowWarningDisplayingSensitiveMedia = false)
}.mapCancellableCatching {
configRepository.save(it)
}.onFailure {
logger.error("警告表示の抑制に失敗", it)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ data class Config(
val avatarIconShapeType: AvatarIconShapeType,
val mediaDisplayMode: MediaDisplayMode,
val isEnableSafeSearch: IsSafeSearchEnabled,
val isShowWarningDisplayingSensitiveMedia: Boolean,
) {
companion object

Expand All @@ -115,14 +116,7 @@ data class Config(
)
}

fun setSafeSearchEnabled(enabled: Boolean): Config {
return copy(
isEnableSafeSearch = IsSafeSearchEnabled(
isEnabled = enabled,
isConfirmed = true
)
)
}

}

object DefaultConfig {
Expand Down Expand Up @@ -169,6 +163,7 @@ object DefaultConfig {
isEnabled = true,
isConfirmed = false,
),
isShowWarningDisplayingSensitiveMedia = true,
)

fun getRememberVisibilityConfig(accountId: Long): RememberVisibility.Remember {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ val Keys.Companion.allKeys by lazy {
Keys.MediaDisplayMode,
Keys.IsSafeSearchEnabled,
Keys.IsConfirmedSafeSearchEnabled,
Keys.IsShowWarningDisplayingSensitiveMedia,
)
}

Expand Down Expand Up @@ -109,6 +110,8 @@ sealed interface Keys {

data object IsConfirmedSafeSearchEnabled : Keys

data object IsShowWarningDisplayingSensitiveMedia : Keys

companion object
}

Expand Down Expand Up @@ -150,5 +153,6 @@ fun Keys.str(): String {
is Keys.MediaDisplayMode -> "MediaDisplayMode"
is Keys.IsSafeSearchEnabled -> "ExcludeIfExistsSensitiveMedia"
is Keys.IsConfirmedSafeSearchEnabled -> "IsConfirmedSafeSearchEnabled"
is Keys.IsShowWarningDisplayingSensitiveMedia -> "IsShowWarningDisplayingSensitiveMedia"
}
}

0 comments on commit 1ded205

Please sign in to comment.