diff --git a/app/src/main/java/jp/juggler/subwaytooter/AppSettingItem.kt b/app/src/main/java/jp/juggler/subwaytooter/AppSettingItem.kt
index 0dc311e6..b26ef03b 100644
--- a/app/src/main/java/jp/juggler/subwaytooter/AppSettingItem.kt
+++ b/app/src/main/java/jp/juggler/subwaytooter/AppSettingItem.kt
@@ -745,6 +745,18 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett
colorAlpha(Pref.ipEventBgColorReaction, R.string.reaction)
colorAlpha(Pref.ipEventBgColorQuote, R.string.quote_renote)
colorAlpha(Pref.ipEventBgColorVote, R.string.vote_polls)
+ colorAlpha(
+ Pref.ipConversationMainTootBgColor,
+ R.string.conversation_main_toot_background_color
+ )
+ }
+
+ group(R.string.button_accent_color) {
+ colorAlpha(Pref.ipButtonBoostedColor, R.string.boost)
+ colorAlpha(Pref.ipButtonFavoritedColor, R.string.favourites)
+ colorAlpha(Pref.ipButtonBookmarkedColor, R.string.bookmarks)
+ colorAlpha(Pref.ipButtonFollowingColor, R.string.follow)
+ colorAlpha(Pref.ipButtonFollowRequestColor, R.string.follow_request)
}
group(R.string.column_color_default) {
@@ -903,6 +915,11 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett
colorOpaque(Pref.ipNavigationBarColor, R.string.navigation_bar_color) {
changed = { App1.setStatusBarColor(this) }
}
+
+ colorOpaque(Pref.ipSearchBgColor, R.string.search_bar_background_color)
+ colorAlpha(Pref.ipAnnouncementsBgColor, R.string.announcement_background_color)
+ colorAlpha(Pref.ipVerifiedLinkBgColor, R.string.verified_link_background_color)
+ colorAlpha(Pref.ipVerifiedLinkFgColor, R.string.verified_link_foreground_color)
}
section(R.string.performance) {
diff --git a/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.kt
index 2980f730..f97de556 100644
--- a/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.kt
+++ b/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.kt
@@ -108,6 +108,7 @@ class ColumnViewHolder(
private lateinit var btnAnnouncementsBadge : ImageView
private lateinit var btnAnnouncements : ImageButton
+ private lateinit var btnAnnouncementsCutout : Paint
private lateinit var btnColumnSetting : ImageButton
private lateinit var btnColumnReload : ImageButton
private lateinit var btnColumnClose : ImageButton
@@ -710,6 +711,41 @@ class ColumnViewHolder(
lastAnnouncementShown = - 1L
+ fun dip(dp : Int) : Int = (activity.density * dp + 0.5f).toInt()
+ val context = activity
+
+ val announcementsBgColor = Pref.ipAnnouncementsBgColor(activity.pref).notZero()
+ ?: getAttributeColor(context, R.attr.colorSearchFormBackground)
+
+ btnAnnouncementsCutout.apply {
+ color = announcementsBgColor
+ }
+
+ llAnnouncementsBox.apply {
+ background = createRoundDrawable( dip(6).toFloat(), announcementsBgColor )
+ val pad_tb = dip(2)
+ setPadding(0, pad_tb, 0, pad_tb)
+ }
+
+ val searchBgColor = Pref.ipSearchBgColor(activity.pref).notZero()
+ ?: getAttributeColor(context, R.attr.colorSearchFormBackground)
+
+ llSearch.apply {
+ backgroundColor = searchBgColor
+ startPadding = dip(12)
+ endPadding = dip(12)
+ topPadding = dip(3)
+ bottomPadding = dip(3)
+ }
+
+ llListList.apply {
+ backgroundColor = searchBgColor
+ startPadding = dip(12)
+ endPadding = dip(12)
+ topPadding = dip(3)
+ bottomPadding = dip(3)
+ }
+
showColumnColor()
showContent(reason = "onPageCreate", reset = true)
@@ -1749,9 +1785,8 @@ class ColumnViewHolder(
padding = dip(8)
scaleType = ImageView.ScaleType.FIT_CENTER
- val paint = Paint().apply {
+ btnAnnouncementsCutout = Paint().apply {
isAntiAlias = true
- color = getAttributeColor(context, R.attr.colorSearchFormBackground)
}
val path = Path()
addOutsideDrawer(this) { canvas, parent, view, left, top ->
@@ -1768,7 +1803,7 @@ class ColumnViewHolder(
path.lineTo(triBottomRight, triBottom)
path.lineTo(triBottomLeft, triBottom)
path.lineTo(triTopX, triTopY)
- canvas.drawPath(path, paint)
+ canvas.drawPath(path, btnAnnouncementsCutout)
}
}
}.lparams(dip(40), dip(40))
@@ -2060,14 +2095,6 @@ class ColumnViewHolder(
bottomMargin = dip(2)
}
- background = createRoundDrawable(
- dip(6).toFloat(),
- getAttributeColor(context, R.attr.colorSearchFormBackground)
- )
-
- var pad_tb = dip(2)
- setPadding(0, pad_tb, 0, pad_tb)
-
val buttonHeight = ActMain.boostButtonSize
val paddingH = (buttonHeight.toFloat() * 0.1f + 0.5f).toInt()
val paddingV = (buttonHeight.toFloat() * 0.1f + 0.5f).toInt()
@@ -2131,8 +2158,9 @@ class ColumnViewHolder(
lparams(matchParent, wrapContent) {
topMargin = dip(1)
}
+
val pad_lr = dip(6)
- pad_tb = dip(2)
+ val pad_tb = dip(2)
setPadding(pad_lr, pad_tb, pad_lr, pad_tb)
scrollBarStyle = View.SCROLLBARS_OUTSIDE_OVERLAY
@@ -2168,11 +2196,6 @@ class ColumnViewHolder(
llSearch = verticalLayout {
lparams(matchParent, wrapContent)
- backgroundColor = getAttributeColor(context, R.attr.colorSearchFormBackground)
- startPadding = dip(12)
- endPadding = dip(12)
- topPadding = dip(3)
- bottomPadding = dip(3)
linearLayout {
lparams(matchParent, wrapContent)
@@ -2227,16 +2250,9 @@ class ColumnViewHolder(
llListList = linearLayout {
lparams(matchParent, wrapContent)
- startPadding = dip(12)
- endPadding = dip(12)
- topPadding = dip(3)
- bottomPadding = dip(3)
-
- backgroundColor = getAttributeColor(context, R.attr.colorSearchFormBackground)
isBaselineAligned = false
gravity = Gravity.CENTER
-
etListName = editText {
hint = context.getString(R.string.list_create_hint)
imeOptions = EditorInfo.IME_ACTION_SEND
diff --git a/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt b/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt
index 7982f92f..6dd36128 100644
--- a/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt
+++ b/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt
@@ -338,7 +338,19 @@ internal class DlgContextMenu(
llNotification.vg(notification != null)
+ val colorButtonAccent =
+ Pref.ipButtonFollowingColor(activity.pref).notZero()
+ ?: getAttributeColor(activity, R.attr.colorImageButtonAccent)
+
+ val colorButtonError =
+ Pref.ipButtonFollowRequestColor(activity.pref).notZero()
+ ?: getAttributeColor(activity, R.attr.colorRegexFilterError)
+
+ val colorButtonNormal =
+ getAttributeColor(activity, R.attr.colorImageButton)
+
fun showRelation(relation : UserRelation) {
+
// 被フォロー状態
// Styler.setFollowIconとは異なり細かい状態を表示しない
ivFollowedBy.vg(relation.followed_by)
@@ -352,37 +364,30 @@ internal class DlgContextMenu(
else -> R.drawable.ic_follow_plus
}
)
+
+
btnFollow.imageTintList = ColorStateList.valueOf(
- getAttributeColor(
- activity,
- when {
- relation.getRequested(who) -> R.attr.colorRegexFilterError
- relation.getFollowing(who) -> R.attr.colorImageButtonAccent
- else -> R.attr.colorImageButton
- }
- )
+ when {
+ relation.getRequested(who) -> colorButtonError
+ relation.getFollowing(who) -> colorButtonAccent
+ else -> colorButtonNormal
+ }
)
// ミュート状態
btnMute.imageTintList = ColorStateList.valueOf(
- getAttributeColor(
- activity,
- when(relation.muting) {
- true -> R.attr.colorImageButtonAccent
- else -> R.attr.colorImageButton
- }
- )
+ when(relation.muting) {
+ true -> colorButtonAccent
+ else -> colorButtonNormal
+ }
)
// ブロック状態
btnBlock.imageTintList = ColorStateList.valueOf(
- getAttributeColor(
- activity,
- when(relation.blocking) {
- true -> R.attr.colorImageButtonAccent
- else -> R.attr.colorImageButton
- }
- )
+ when(relation.blocking) {
+ true -> colorButtonAccent
+ else -> colorButtonNormal
+ }
)
}
diff --git a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt
index 5866b840..a2cff10b 100644
--- a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt
+++ b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt
@@ -1226,12 +1226,12 @@ internal class ItemViewHolder(
llStatus.visibility = View.VISIBLE
if(status.conversation_main) {
- this.viewRoot.setBackgroundColor(
- (getAttributeColor(
- activity,
- R.attr.colorImageButtonAccent
- ) and 0xffffff) or 0x20000000
- )
+
+ val conversationMainBgColor = Pref.ipConversationMainTootBgColor(activity.pref).notZero()
+ ?: (getAttributeColor(activity,R.attr.colorImageButtonAccent) and 0xffffff) or 0x20000000
+
+ this.viewRoot.setBackgroundColor( conversationMainBgColor )
+
} else {
val c = colorBg.notZero()
diff --git a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt
index e1383bac..2fb6ee70 100644
--- a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt
+++ b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt
@@ -488,6 +488,12 @@ object Pref {
val ipSwitchOnColor = IntPref("SwitchOnColor", Color.BLACK or 0x0080ff)
+ val ipButtonBoostedColor = IntPref("ButtonBoostedColor", 0)
+ val ipButtonFavoritedColor = IntPref("ButtonFavoritedColor", 0)
+ val ipButtonBookmarkedColor = IntPref("ButtonBookmarkedColor", 0)
+ val ipButtonFollowingColor = IntPref("ButtonFollowingColor", 0)
+ val ipButtonFollowRequestColor = IntPref("ButtonFollowRequestColor", 0)
+
val ipStatusBarColor = IntPref("StatusBarColor", 0)
val ipNavigationBarColor = IntPref("NavigationBarColor", 0)
@@ -513,6 +519,13 @@ object Pref {
val ipCcdContentAcct = IntPref("ipCcdContentAcct", 0)
val ipCcdContentText = IntPref("ipCcdContentText", 0)
+ val ipSearchBgColor = IntPref("SearchBgColor", 0)
+ val ipAnnouncementsBgColor = IntPref("AnnouncementsBgColor", 0)
+ val ipConversationMainTootBgColor = IntPref("ConversationMainTootBgColor", 0)
+ val ipVerifiedLinkBgColor = IntPref("VerifiedLinkBgColor", 0)
+ val ipVerifiedLinkFgColor = IntPref("VerifiedLinkFgColor", 0)
+
+
// val ipTrendTagCountShowing = IntPref("TrendTagCountShowing", 0)
// const val TTCS_WEEKLY = 0
// const val TTCS_DAILY = 1
diff --git a/app/src/main/java/jp/juggler/subwaytooter/StatusButtons.kt b/app/src/main/java/jp/juggler/subwaytooter/StatusButtons.kt
index 1bc69177..cd0a7bdf 100644
--- a/app/src/main/java/jp/juggler/subwaytooter/StatusButtons.kt
+++ b/app/src/main/java/jp/juggler/subwaytooter/StatusButtons.kt
@@ -85,8 +85,8 @@ internal class StatusButtons(
btnCustomShare1.setOnLongClickListener(this)
btnCustomShare2.setOnLongClickListener(this)
btnCustomShare3.setOnLongClickListener(this)
-
-
+
+
btnMore.setOnClickListener(this)
btnConversation.setOnClickListener(this)
btnConversation.setOnLongClickListener(this)
@@ -103,6 +103,8 @@ internal class StatusButtons(
this.status = status
this.notification = notification
+ val pref = activity.pref
+
setIconDrawableId(
activity,
btnConversation,
@@ -110,6 +112,7 @@ internal class StatusButtons(
color = color_normal,
alphaMultiplier = Styler.boost_alpha
)
+
setIconDrawableId(
activity,
btnMore,
@@ -118,20 +121,6 @@ internal class StatusButtons(
alphaMultiplier = Styler.boost_alpha
)
- // val a = (((color_normal ushr 24)/255f) * 0.7f)
-
- // setIconDrawableId で色を指定するとアルファ値も反映されるらしい
- // btnConversation.alpha = a
- // btnMore.alpha = a
- //
- // btnReply.alpha = a
- // btnBoost.alpha = a
- // btnFavourite.alpha = a
- // btnFollow2.alpha = a
- // ivFollowedBy2.alpha = a
-
-
-
setButton(
btnReply,
true,
@@ -157,28 +146,31 @@ internal class StatusButtons(
// マストドンではDirectはブーストできない (Misskeyはできる)
(! access_info.isMisskey && status.visibility.order <= TootVisibility.DirectSpecified.order) ->
setButton(
- btnBoost,
- false,
- color_accent,
- R.drawable.ic_mail,
- "",
- activity.getString(R.string.boost)
- )
+ btnBoost,
+ false,
+ color_accent,
+ R.drawable.ic_mail,
+ "",
+ activity.getString(R.string.boost)
+ )
activity.app_state.isBusyBoost(access_info, status) ->
setButton(
- btnBoost,
- false,
- color_normal,
- R.drawable.ic_refresh,
- "?",
- activity.getString(R.string.boost)
- )
+ btnBoost,
+ false,
+ color_normal,
+ R.drawable.ic_refresh,
+ "?",
+ activity.getString(R.string.boost)
+ )
else -> setButton(
btnBoost,
true,
- if(status.reblogged) color_accent else color_normal,
+ if(status.reblogged)
+ Pref.ipButtonBoostedColor(pref).notZero() ?: color_accent
+ else
+ color_normal,
R.drawable.ic_repeat,
when(val boosts_count = status.reblogs_count) {
null -> ""
@@ -228,7 +220,10 @@ internal class StatusButtons(
else -> setButton(
btnFavourite,
true,
- if(status.favourited) color_accent else color_normal,
+ if(status.favourited)
+ Pref.ipButtonFavoritedColor(pref).notZero() ?: color_accent
+ else
+ color_normal,
fav_icon_drawable,
when(val favourites_count = status.favourites_count) {
null -> ""
@@ -261,7 +256,10 @@ internal class StatusButtons(
else -> setButton(
btnBookmark,
true,
- if(status.bookmarked) color_accent else color_normal,
+ if(status.bookmarked)
+ Pref.ipButtonBookmarkedColor(pref).notZero() ?: color_accent
+ else
+ color_normal,
R.drawable.ic_bookmark,
activity.getString(R.string.bookmark)
)
@@ -474,13 +472,12 @@ internal class StatusButtons(
Action_Toot.replyFromAnotherAccount(activity, access_info, status)
}
- btnQuote ->if(! access_info.isPseudo) {
- Action_Toot.reply(activity, access_info, status,quote = true)
+ btnQuote -> if(! access_info.isPseudo) {
+ Action_Toot.reply(activity, access_info, status, quote = true)
} else {
- Action_Toot.replyFromAnotherAccount(activity, access_info, status,quote = true)
+ Action_Toot.replyFromAnotherAccount(activity, access_info, status, quote = true)
}
-
btnBoost -> {
if(access_info.isPseudo) {
Action_Toot.boostFromAnotherAccount(activity, access_info, status)
@@ -678,8 +675,8 @@ internal class StatusButtons(
activity, access_info, status
)
- btnQuote ->Action_Toot.replyFromAnotherAccount(
- activity, access_info, status ,quote = true
+ btnQuote -> Action_Toot.replyFromAnotherAccount(
+ activity, access_info, status, quote = true
)
btnFollow2 -> Action_Follow.followFromAnotherAccount(
@@ -696,7 +693,7 @@ internal class StatusButtons(
CustomShareTarget.CustomShare1
)
- btnCustomShare2 ->shareUrl(
+ btnCustomShare2 -> shareUrl(
status,
CustomShareTarget.CustomShare2
)
@@ -716,7 +713,7 @@ internal class StatusButtons(
) {
val url = status.url ?: status.uri ?: return
- CustomShare.invoke(activity,url,target)
+ CustomShare.invoke(activity, url, target)
}
}
diff --git a/app/src/main/java/jp/juggler/subwaytooter/Styler.kt b/app/src/main/java/jp/juggler/subwaytooter/Styler.kt
index b485cbf0..632c41e4 100644
--- a/app/src/main/java/jp/juggler/subwaytooter/Styler.kt
+++ b/app/src/main/java/jp/juggler/subwaytooter/Styler.kt
@@ -156,9 +156,13 @@ object Styler {
, defaultColor : Int
, alphaMultiplier : Float
) {
+ fun colorAccent() =
+ Pref.ipButtonFollowingColor(Pref.pref(context)).notZero()
+ ?: getAttributeColor(context, R.attr.colorImageButtonAccent)
- fun colorError() = getAttributeColor(context, R.attr.colorRegexFilterError)
- fun colorAccent() = getAttributeColor(context, R.attr.colorImageButtonAccent)
+ fun colorError() =
+ Pref.ipButtonFollowRequestColor(Pref.pref(context)).notZero()
+ ?: getAttributeColor(context, R.attr.colorRegexFilterError)
// 被フォロー状態
when {
diff --git a/app/src/main/java/jp/juggler/subwaytooter/ViewHolderHeaderProfile.kt b/app/src/main/java/jp/juggler/subwaytooter/ViewHolderHeaderProfile.kt
index 80bb1e14..37792055 100644
--- a/app/src/main/java/jp/juggler/subwaytooter/ViewHolderHeaderProfile.kt
+++ b/app/src/main/java/jp/juggler/subwaytooter/ViewHolderHeaderProfile.kt
@@ -414,8 +414,11 @@ internal class ViewHolderHeaderProfile(
valueText.append(TootStatus.formatTime(activity, item.verified_at, false))
val end = valueText.length
+ val linkFgColor = Pref.ipVerifiedLinkFgColor(activity.pref).notZero()
+ ?: (Color.BLACK or 0x7fbc99)
+
valueText.setSpan(
- ForegroundColorSpan(Color.BLACK or 0x7fbc99)
+ ForegroundColorSpan(linkFgColor)
, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
}
@@ -431,7 +434,10 @@ internal class ViewHolderHeaderProfile(
valueView.movementMethod = MyLinkMovementMethod
if(item.verified_at > 0L) {
- valueView.setBackgroundColor(0x337fbc99)
+ val linkBgColor = Pref.ipVerifiedLinkBgColor(activity.pref).notZero()
+ ?: (0x337fbc99)
+
+ valueView.setBackgroundColor(linkBgColor)
}
llFields.addView(valueView)
@@ -465,7 +471,7 @@ internal class ViewHolderHeaderProfile(
tvMovedName.text = movedRef.decoded_display_name
moved_name_invalidator.register(movedRef.decoded_display_name)
- setAcct(tvMovedAcct, access_info,moved)
+ setAcct(tvMovedAcct, access_info, moved)
val relation = UserRelation.load(access_info.db_id, moved.id)
Styler.setFollowIcon(
@@ -479,8 +485,8 @@ internal class ViewHolderHeaderProfile(
)
}
- private fun setAcct(tv : TextView,accessInfo:SavedAccount,who:TootAccount) {
- val ac = AcctColor.load(accessInfo,who)
+ private fun setAcct(tv : TextView, accessInfo : SavedAccount, who : TootAccount) {
+ val ac = AcctColor.load(accessInfo, who)
tv.text = when {
AcctColor.hasNickname(ac) -> ac.nickname
Pref.bpShortAcctLocalUser(App1.pref) -> "@${who.acct.pretty}"
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 8f614e94..4d6c4a53 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -1021,4 +1021,10 @@
はい
いいえ
ミュートされた引用
+ ボタン強調色
+ 検索バーの背景色 (アプリ再起動が必要)
+ 告知の背景色 (アプリ再起動が必要)
+ 会話ビューのメイン投稿の背景色
+ 認証済みリンクの背景色 (アプリ再起動が必要)
+ 認証済みリンクの文字色 (アプリ再起動が必要)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b6a312f5..6c55f180 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1026,4 +1026,10 @@
Yes
No
Muted quote
+ Button accent color
+ Search bar background color (app restart required)
+ Announcements background color (app restart required)
+ Conversation main toot background color
+ Verified link background color (app restart required)
+ Verified link foreground color (app restart required)