diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt b/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt index 2814e99a..1a7b9b2b 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt @@ -75,6 +75,7 @@ class ActMain : AppCompatActivity(), var screenBottomPadding = 0 var timelineFont: Typeface = Typeface.DEFAULT var timeline_font_bold: Typeface = Typeface.DEFAULT_BOLD + var eventFadeAlpha = 1f } // アプリ設定のキャッシュ diff --git a/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainStyle.kt b/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainStyle.kt index 7c63addc..19e0e6a9 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainStyle.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainStyle.kt @@ -75,6 +75,12 @@ fun ActMain.reloadIconSize() { ActMain.headerIconSize = parseIconSize(PrefS.spHeaderIconSize) ActMain.stripIconSize = parseIconSize(PrefS.spStripIconSize) ActMain.screenBottomPadding = parseIconSize(PrefS.spScreenBottomPadding, minDp = 0f) + + ActMain.eventFadeAlpha = PrefS.spEventTextAlpha() + .toFloatOrNull() + ?.takeIf{ it.isFinite()} + ?.clip(0f,1f) + ?: 1f } // initUIから呼ばれる diff --git a/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt b/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt index e174da2f..f7452880 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt @@ -787,6 +787,8 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett sw(PrefB.bpUseTwemoji, R.string.use_twemoji_emoji) sw(PrefB.bpKeepReactionSpace, R.string.keep_reaction_space) + + text(PrefS.spEventTextAlpha, R.string.event_text_alpha, InputTypeEx.numberDecimal) } section(R.string.color) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderPreviewCard.kt b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderPreviewCard.kt index 10f39093..c29ad046 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderPreviewCard.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderPreviewCard.kt @@ -1,6 +1,7 @@ package jp.juggler.subwaytooter.itemviewholder import android.view.View +import jp.juggler.subwaytooter.ActMain import jp.juggler.subwaytooter.R import jp.juggler.subwaytooter.api.entity.TootStatus import jp.juggler.subwaytooter.column.ColumnType @@ -45,7 +46,7 @@ private fun addLinkAndCaption( } } -fun ItemViewHolder.showPreviewCard(status: TootStatus) { +fun ItemViewHolder.showPreviewCard(status: TootStatus, fadeText: Boolean) { if (PrefB.bpDontShowPreviewCard(activity.pref)) return @@ -73,6 +74,12 @@ fun ItemViewHolder.showPreviewCard(status: TootStatus) { tvCardText.visibility = View.VISIBLE tvCardText.text = text bShowOuter = true + + val fadeAlpha = ActMain.eventFadeAlpha + if (fadeAlpha < 1f) { + val a = if (fadeText) fadeAlpha else 1f + tvCardText.alpha = a + } } } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowNotification.kt b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowNotification.kt index a1b6d739..39eb31cf 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowNotification.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowNotification.kt @@ -2,7 +2,6 @@ package jp.juggler.subwaytooter.itemviewholder import android.view.Gravity import android.view.View -import jp.juggler.subwaytooter.pref.PrefI import jp.juggler.subwaytooter.R import jp.juggler.subwaytooter.Styler import jp.juggler.subwaytooter.actmain.addColumn @@ -12,6 +11,7 @@ import jp.juggler.subwaytooter.api.entity.TootNotification import jp.juggler.subwaytooter.api.entity.TootReaction import jp.juggler.subwaytooter.api.entity.TootStatus import jp.juggler.subwaytooter.column.ColumnType +import jp.juggler.subwaytooter.pref.PrefI import jp.juggler.util.notZero import org.jetbrains.anko.backgroundColor @@ -68,29 +68,53 @@ fun ItemViewHolder.showNotification(n: TootNotification) { } } -private fun ItemViewHolder.showNotificationFollow(n: TootNotification, nAccountRef: TootAccountRef?) { +private fun ItemViewHolder.showNotificationFollow( + n: TootNotification, + nAccountRef: TootAccountRef? +) { val colorBg = PrefI.ipEventBgColorFollow(activity.pref) colorBg.notZero()?.let { viewRoot.backgroundColor = it } nAccountRef?.let { - showBoost(it, n.time_created_at, R.drawable.ic_follow_plus, R.string.display_name_followed_by) + showBoost( + it, + n.time_created_at, + R.drawable.ic_follow_plus, + R.string.display_name_followed_by + ) showAccount(it) } } -private fun ItemViewHolder.showNotificationUnfollow(n: TootNotification, nAccountRef: TootAccountRef?) { +private fun ItemViewHolder.showNotificationUnfollow( + n: TootNotification, + nAccountRef: TootAccountRef? +) { val colorBg = PrefI.ipEventBgColorUnfollow(activity.pref) colorBg.notZero()?.let { viewRoot.backgroundColor = it } nAccountRef?.let { - showBoost(it, n.time_created_at, R.drawable.ic_follow_cross, R.string.display_name_unfollowed_by) + showBoost( + it, + n.time_created_at, + R.drawable.ic_follow_cross, + R.string.display_name_unfollowed_by + ) showAccount(it) } } -private fun ItemViewHolder.showNotificationFollowRequest(n: TootNotification, nAccountRef: TootAccountRef?) { +private fun ItemViewHolder.showNotificationFollowRequest( + n: TootNotification, + nAccountRef: TootAccountRef? +) { val colorBg = PrefI.ipEventBgColorFollowRequest(activity.pref) colorBg.notZero()?.let { viewRoot.backgroundColor = it } nAccountRef?.let { - showBoost(it, n.time_created_at, R.drawable.ic_follow_wait, R.string.display_name_follow_request_by) + showBoost( + it, + n.time_created_at, + R.drawable.ic_follow_wait, + R.string.display_name_follow_request_by + ) showAccount(it) } boostedAction = { @@ -98,16 +122,28 @@ private fun ItemViewHolder.showNotificationFollowRequest(n: TootNotification, nA } } -private fun ItemViewHolder.showNotificationFollowRequestAccepted(n: TootNotification, nAccountRef: TootAccountRef?) { +private fun ItemViewHolder.showNotificationFollowRequestAccepted( + n: TootNotification, + nAccountRef: TootAccountRef? +) { val colorBg = PrefI.ipEventBgColorFollow(activity.pref) colorBg.notZero()?.let { viewRoot.backgroundColor = it } nAccountRef?.let { - showBoost(it, n.time_created_at, R.drawable.ic_follow_plus, R.string.display_name_follow_request_accepted_by) + showBoost( + it, + n.time_created_at, + R.drawable.ic_follow_plus, + R.string.display_name_follow_request_accepted_by + ) showAccount(it) } } -private fun ItemViewHolder.showNotificationPost(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { +private fun ItemViewHolder.showNotificationPost( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { val colorBg = PrefI.ipEventBgColorStatus(activity.pref) val iconId = when (nStatus) { null -> R.drawable.ic_question @@ -117,7 +153,11 @@ private fun ItemViewHolder.showNotificationPost(n: TootNotification, nAccountRef nStatus?.let { showNotificationStatus(it, colorBg) } } -private fun ItemViewHolder.showNotificationReaction(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { +private fun ItemViewHolder.showNotificationReaction( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { val colorBg = PrefI.ipEventBgColorReaction(activity.pref) nAccountRef?.let { showBoost( @@ -131,16 +171,24 @@ private fun ItemViewHolder.showNotificationReaction(n: TootNotification, nAccoun nStatus?.let { showNotificationStatus(it, colorBg) } } -private fun ItemViewHolder.showNotificationFavourite(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { +private fun ItemViewHolder.showNotificationFavourite( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { nAccountRef?.let { val iconId = if (accessInfo.isNicoru(it.get())) R.drawable.ic_nicoru else R.drawable.ic_star showBoost(it, n.time_created_at, iconId, R.string.display_name_favourited_by) } val colorBg = PrefI.ipEventBgColorFavourite(activity.pref) - nStatus?.let { showNotificationStatus(it, colorBg) } + nStatus?.let { showNotificationStatus(it, colorBg, fadeText = true) } } -private fun ItemViewHolder.showNotificationReblog(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { +private fun ItemViewHolder.showNotificationReblog( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { nAccountRef?.let { showBoost( it, @@ -152,19 +200,33 @@ private fun ItemViewHolder.showNotificationReblog(n: TootNotification, nAccountR ) } val colorBg = PrefI.ipEventBgColorBoost(activity.pref) - nStatus?.let { showNotificationStatus(it, colorBg) } + nStatus?.let { showNotificationStatus(it, colorBg, fadeText = true) } } -private fun ItemViewHolder.showNotificationRenote(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { +private fun ItemViewHolder.showNotificationRenote( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { // 引用のないreblog nAccountRef?.let { - showBoost(it, n.time_created_at, R.drawable.ic_repeat, R.string.display_name_boosted_by, boostStatus = nStatus) + showBoost( + it, + n.time_created_at, + R.drawable.ic_repeat, + R.string.display_name_boosted_by, + boostStatus = nStatus + ) } val colorBg = PrefI.ipEventBgColorBoost(activity.pref) nStatus?.let { showNotificationStatus(it, colorBg) } } -private fun ItemViewHolder.showNotificationMention(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { +private fun ItemViewHolder.showNotificationMention( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { // メンション通知に「~~からの返信」を表示するカラムなのかどうか fun willShowReplyInfo(status: TootStatus?): Boolean = when { // メンションではなく返信の場合、トゥート内部に「~への返信」を表示するので @@ -176,34 +238,85 @@ private fun ItemViewHolder.showNotificationMention(n: TootNotification, nAccount } if (willShowReplyInfo(nStatus)) { - nAccountRef?.let { showBoost(it, n.time_created_at, R.drawable.ic_reply, R.string.display_name_mentioned_by) } + nAccountRef?.let { + showBoost( + it, + n.time_created_at, + R.drawable.ic_reply, + R.string.display_name_mentioned_by + ) + } } val colorBg = PrefI.ipEventBgColorMention(activity.pref) nStatus?.let { showNotificationStatus(it, colorBg) } } -private fun ItemViewHolder.showNotificationQuote(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { - nAccountRef?.let { showBoost(it, n.time_created_at, R.drawable.ic_repeat, R.string.display_name_quoted_by) } +private fun ItemViewHolder.showNotificationQuote( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { + nAccountRef?.let { + showBoost( + it, + n.time_created_at, + R.drawable.ic_repeat, + R.string.display_name_quoted_by + ) + } val colorBg = PrefI.ipEventBgColorQuote(activity.pref) nStatus?.let { showNotificationStatus(it, colorBg) } } -private fun ItemViewHolder.showNotificationVote(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { - nAccountRef?.let { showBoost(it, n.time_created_at, R.drawable.ic_vote, R.string.display_name_voted_by) } +private fun ItemViewHolder.showNotificationVote( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { + nAccountRef?.let { + showBoost( + it, + n.time_created_at, + R.drawable.ic_vote, + R.string.display_name_voted_by + ) + } val colorBg = PrefI.ipEventBgColorVote(activity.pref) nStatus?.let { showNotificationStatus(it, colorBg) } } -private fun ItemViewHolder.showNotificationPoll(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { - nAccountRef?.let { showBoost(it, n.time_created_at, R.drawable.ic_vote, R.string.end_of_polling_from) } +private fun ItemViewHolder.showNotificationPoll( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { + nAccountRef?.let { + showBoost( + it, + n.time_created_at, + R.drawable.ic_vote, + R.string.end_of_polling_from + ) + } val colorBg = 0 nStatus?.let { showNotificationStatus(it, colorBg) } } -private fun ItemViewHolder.showNotificationUnknown(n: TootNotification, nAccountRef: TootAccountRef?, nStatus: TootStatus?) { - nAccountRef?.let { showBoost(it, n.time_created_at, R.drawable.ic_question, R.string.unknown_notification_from) } +private fun ItemViewHolder.showNotificationUnknown( + n: TootNotification, + nAccountRef: TootAccountRef?, + nStatus: TootStatus? +) { + nAccountRef?.let { + showBoost( + it, + n.time_created_at, + R.drawable.ic_question, + R.string.unknown_notification_from + ) + } val colorBg = 0 nStatus?.let { showNotificationStatus(it, colorBg) } @@ -212,21 +325,25 @@ private fun ItemViewHolder.showNotificationUnknown(n: TootNotification, nAccount tvMessageHolder.gravity = Gravity.CENTER } -private fun ItemViewHolder.showNotificationStatus(item: TootStatus, colorBgDefault: Int) { +private fun ItemViewHolder.showNotificationStatus( + item: TootStatus, + colorBgDefault: Int, + fadeText: Boolean = false +) { val reblog = item.reblog when { - reblog == null -> showStatusOrReply(item, colorBgDefault) + reblog == null -> showStatusOrReply(item, colorBgDefault, fadeText = fadeText) item.isQuoteToot -> { // 引用Renote showReply(reblog, R.drawable.ic_repeat, R.string.quote_to) - showStatus(item, PrefI.ipEventBgColorQuote(activity.pref)) + showStatus(item, PrefI.ipEventBgColorQuote(activity.pref), fadeText = fadeText) } else -> { // 通常のブースト。引用なしブースト。 // ブースト表示は通知イベントと被るのでしない - showStatusOrReply(reblog, PrefI.ipEventBgColorBoost(activity.pref)) + showStatusOrReply(reblog, PrefI.ipEventBgColorBoost(activity.pref), fadeText = fadeText) } } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowStatus.kt b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowStatus.kt index 60f3c847..5dcbce36 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowStatus.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowStatus.kt @@ -4,6 +4,7 @@ import android.text.Spannable import android.text.SpannableStringBuilder import android.view.View import android.widget.ImageView +import jp.juggler.subwaytooter.ActMain import jp.juggler.subwaytooter.R import jp.juggler.subwaytooter.Styler import jp.juggler.subwaytooter.actmain.checkAutoCW @@ -20,7 +21,11 @@ import jp.juggler.util.* import org.jetbrains.anko.backgroundColor import org.jetbrains.anko.textColor -fun ItemViewHolder.showStatusOrReply(item: TootStatus, colorBgArg: Int = 0) { +fun ItemViewHolder.showStatusOrReply( + item: TootStatus, + colorBgArg: Int = 0, + fadeText: Boolean = false +) { var colorBg = colorBgArg val reply = item.reply val inReplyToId = item.in_reply_to_id @@ -36,10 +41,14 @@ fun ItemViewHolder.showStatusOrReply(item: TootStatus, colorBgArg: Int = 0) { if (colorBgArg == 0) colorBg = PrefI.ipEventBgColorMention(activity.pref) } } - showStatus(item, colorBg) + showStatus(item, colorBg, fadeText = fadeText) } -fun ItemViewHolder.showStatus(status: TootStatus, colorBg: Int = 0) { +fun ItemViewHolder.showStatus( + status: TootStatus, + colorBg: Int = 0, + fadeText: Boolean = false +) { val filteredWord = status.filteredWord if (filteredWord != null) { @@ -115,6 +124,15 @@ fun ItemViewHolder.showStatus(status: TootStatus, colorBg: Int = 0) { // tvTags.setText( status.decoded_tags ); // } + val fadeAlpha = ActMain.eventFadeAlpha + if (fadeAlpha < 1f) { + val a = if (fadeText) fadeAlpha else 1f + tvMentions.alpha = a + tvContentWarning.alpha = a + tvContent.alpha = a + tvApplication.alpha = a + } + if (status.decoded_mentions.isEmpty()) { tvMentions.visibility = View.GONE } else { @@ -129,7 +147,7 @@ fun ItemViewHolder.showStatus(status: TootStatus, colorBg: Int = 0) { val r = status.auto_cw tvContent.minLines = r?.originalLineCount ?: -1 - showPreviewCard(status) + showPreviewCard(status, fadeText = fadeText) showSpoilerTextAndContent(status) showAttachments(status) makeReactionsView(status) diff --git a/app/src/main/java/jp/juggler/subwaytooter/pref/PrefS.kt b/app/src/main/java/jp/juggler/subwaytooter/pref/PrefS.kt index c575182a..152b1c1c 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/pref/PrefS.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/pref/PrefS.kt @@ -49,4 +49,6 @@ object PrefS { // val spWebBrowser = StringPref("WebBrowser", "") val spTimelineSpacing = StringPref("TimelineSpacing", "") + + val spEventTextAlpha = StringPref("EventTextAlpha", "") } \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index ce8f523f..95515ba1 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1107,4 +1107,5 @@ URLの指定が変です ユーザや投稿のURL ブックマーク解除 + 一部の通知の本文アルファ値(0.0~1.0, デフォルト:1) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 61b1d350..7682afb6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1118,4 +1118,5 @@ URL of user or status parse error. Unbookmark + Text alpha value for some notifications (0.0~1.0, default:1)