Skip to content

Commit ab3e87e

Browse files
author
Chenhe
committed
新增格式化昵称
1 parent cbd5cea commit ab3e87e

File tree

5 files changed

+71
-5
lines changed

5 files changed

+71
-5
lines changed

app/src/main/java/cc/chenhe/qqnotifyevo/core/NotificationProcessor.kt

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,10 @@ abstract class NotificationProcessor(context: Context) {
472472
}
473473

474474
private fun NotificationCompat.MessagingStyle.addMessage(message: Message) {
475-
var name = message.person.name
475+
var name = message.person.name!!
476+
477+
name = formatNicknameIfNeeded(name)
478+
476479
if (message.special && showSpecialPrefix(ctx)) {
477480
// 添加特别关心或关注前缀
478481
name = if (isGroupConversation)
@@ -489,6 +492,25 @@ abstract class NotificationProcessor(context: Context) {
489492
addMessage(message.content, message.time, person)
490493
}
491494

495+
private fun formatNicknameIfNeeded(name: CharSequence): CharSequence {
496+
if (!wrapNickname(ctx)) {
497+
return name
498+
}
499+
var newName = name
500+
val wrapper = nicknameWrapper(ctx)
501+
if (wrapper != null) {
502+
newName = wrapper.replace("\$n", name.toString())
503+
if (newName == wrapper) {
504+
Timber.tag(TAG).e("Nickname wrapper is invalid, reset preference. wrapper=$wrapper")
505+
resetNicknameWrapper(ctx)
506+
}
507+
} else {
508+
Timber.tag(TAG).e("Nickname wrapper is null, reset preference.")
509+
resetNicknameWrapper(ctx)
510+
}
511+
return newName
512+
}
513+
492514
private fun Person.clone(newName: CharSequence? = null): Person {
493515
return Person.Builder()
494516
.setBot(this.isBot)

app/src/main/java/cc/chenhe/qqnotifyevo/preference/AdvancedFr.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ import android.provider.Settings.EXTRA_CHANNEL_ID
88
import android.widget.Toast
99
import androidx.appcompat.app.AlertDialog
1010
import androidx.core.app.NotificationManagerCompat
11-
import androidx.preference.ListPreference
12-
import androidx.preference.Preference
13-
import androidx.preference.PreferenceFragmentCompat
14-
import androidx.preference.SwitchPreferenceCompat
11+
import androidx.preference.*
1512
import cc.chenhe.qqnotifyevo.MyApplication
1613
import cc.chenhe.qqnotifyevo.R
1714
import cc.chenhe.qqnotifyevo.core.AvatarManager
@@ -25,6 +22,22 @@ class AdvancedFr : PreferenceFragmentCompat() {
2522
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
2623
setPreferencesFromResource(R.xml.pref_advanced, rootKey)
2724

25+
findPreference<EditTextPreference>("nickname_wrapper")!!.apply {
26+
setOnBindEditTextListener { et -> et.isSingleLine = true }
27+
setOnPreferenceChangeListener { _, new ->
28+
val newWrapper: String = new as? String ?: ""
29+
if (newWrapper.indexOf("\$n") == -1) {
30+
AlertDialog.Builder(requireContext())
31+
.setTitle(R.string.tip)
32+
.setMessage(R.string.pref_advanced_nickname_wrapper_invalid_message)
33+
.setPositiveButton(R.string.confirm, null)
34+
.show()
35+
false
36+
} else {
37+
true
38+
}
39+
}
40+
}
2841
findPreference<ListPreference>("avatar_cache_period")!!.summaryProvider = AvatarCachePeriodSummaryProvider()
2942
findPreference<SwitchPreferenceCompat>("log")!!.setOnPreferenceChangeListener { pref, new ->
3043
if (new as Boolean) {

app/src/main/java/cc/chenhe/qqnotifyevo/utils/PreferencesUtils.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,20 @@ fun showSpecialPrefix(context: Context): Boolean = sp(context).getBoolean("show_
9696
*/
9797
fun specialGroupMsgChannel(context: Context): Boolean = sp(context).getString("special_group_channel", "group") == "special"
9898

99+
fun wrapNickname(context: Context): Boolean = sp(context).getBoolean("wrap_nickname", false)
100+
101+
fun nicknameWrapper(context: Context): String? = sp(context).getString("nickname_wrapper", null)
102+
103+
/**
104+
* 禁用格式化昵称,且将格式重置为默认值。
105+
*/
106+
fun resetNicknameWrapper(context: Context) {
107+
sp(context).edit {
108+
putBoolean("wrap_nickname", false)
109+
putString("nickname_wrapper", "[\$n]")
110+
}
111+
}
112+
99113
fun getAvatarCachePeriod(context: Context): Long {
100114
val s = sp(context).getString("avatar_cache_period", "0") ?: "0"
101115
return s.toLong()

app/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,10 @@
149149
<item>group</item>
150150
<item>special</item>
151151
</string-array>
152+
<string name="pref_advanced_wrap_nickname">格式化昵称</string>
153+
<string name="pref_advanced_nickname_wrapper">自定义格式</string>
154+
<string name="pref_advanced_nickname_wrapper_message">使用 $n 指代原始昵称,其他字符将原样保留。如果你喜欢输入 Emoji 也行。</string>
155+
<string name="pref_advanced_nickname_wrapper_invalid_message">自定义格式必须包含 $n 变量。</string>
152156
<!-- 其他 -->
153157
<string name="pref_cate_advanced_other">其他</string>
154158
<string name="pref_avatar_cache_period">头像缓存刷新间隔</string>

app/src/main/res/xml/pref_advanced.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,19 @@
1616
app:key="special_group_channel"
1717
app:title="@string/pref_advanced_special_group_channel"
1818
app:useSimpleSummaryProvider="true" />
19+
20+
<SwitchPreferenceCompat
21+
app:defaultValue="false"
22+
app:key="wrap_nickname"
23+
app:title="@string/pref_advanced_wrap_nickname" />
24+
25+
<EditTextPreference
26+
app:defaultValue="[$n]"
27+
app:dependency="wrap_nickname"
28+
app:dialogMessage="@string/pref_advanced_nickname_wrapper_message"
29+
app:key="nickname_wrapper"
30+
app:title="@string/pref_advanced_nickname_wrapper"
31+
app:useSimpleSummaryProvider="true" />
1932
</PreferenceCategory>
2033

2134
<PreferenceCategory app:title="@string/pref_cate_advanced_other">

0 commit comments

Comments
 (0)