From ab3ac72d5448d8c9cbc3070e5816309a42957f41 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Mon, 1 Sep 2025 08:04:36 +0800 Subject: [PATCH 1/6] =?UTF-8?q?RegexPPiUtils=20=E5=85=A5=E9=80=89=20APPUti?= =?UTF-8?q?ls=20=E7=B1=BB=E5=BA=93=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mymessagemanager/build.gradle | 2 +- mymessagemanager/build.properties | 4 +-- .../mymessagemanager/utils/PhoneUtil.java | 12 +++---- .../mymessagemanager/utils/RegexPPiUtils.java | 32 ------------------- .../utils/SMSReceiveRuleUtil.java | 1 + 5 files changed, 10 insertions(+), 41 deletions(-) delete mode 100644 mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/RegexPPiUtils.java diff --git a/mymessagemanager/build.gradle b/mymessagemanager/build.gradle index ca1b9a7..d423b2c 100644 --- a/mymessagemanager/build.gradle +++ b/mymessagemanager/build.gradle @@ -46,7 +46,7 @@ android { dependencies { api fileTree(dir: 'libs', include: ['*.jar']) api 'cc.winboll.studio:libaes:15.9.3' - api 'cc.winboll.studio:libapputils:15.8.5' + api 'cc.winboll.studio:libapputils:15.8.6' api 'cc.winboll.studio:libappbase:15.9.5' api 'io.github.medyo:android-about-page:2.0.0' diff --git a/mymessagemanager/build.properties b/mymessagemanager/build.properties index 68eda2b..8aec0b6 100644 --- a/mymessagemanager/build.properties +++ b/mymessagemanager/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Aug 31 06:13:45 CST 2025 +#Mon Sep 01 00:02:55 GMT 2025 stageCount=7 libraryProject= baseVersion=15.3 publishVersion=15.3.6 -buildCount=0 +buildCount=2 baseBetaVersion=15.3.7 diff --git a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/PhoneUtil.java b/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/PhoneUtil.java index d36ce2c..e72fc73 100644 --- a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/PhoneUtil.java +++ b/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/PhoneUtil.java @@ -11,19 +11,19 @@ import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract; import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libapputils.utils.RegexPPiUtils; import cc.winboll.studio.mymessagemanager.beans.PhoneBean; -import net.sourceforge.pinyin4j.PinyinHelper; -import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; -import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; -import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; -import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; - import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import net.sourceforge.pinyin4j.PinyinHelper; +import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; +import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; +import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; +import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; public class PhoneUtil { diff --git a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/RegexPPiUtils.java b/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/RegexPPiUtils.java deleted file mode 100644 index 8e27dc3..0000000 --- a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/RegexPPiUtils.java +++ /dev/null @@ -1,32 +0,0 @@ -package cc.winboll.studio.mymessagemanager.utils; - -/** - * @Author ZhanGSKen - * @Date 2024/12/09 19:00:21 - * @Describe .* 前置预防针 - regex pointer preventive injection - 简称 RegexPPi - */ -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class RegexPPiUtils { - - public static final String TAG = "RegexPPiUtils"; - - // - // 检验文本是否满足适合正则表达式模式计算 - // - public static boolean isPPiOK(String text) { - //String text = "这里是一些任意的文本内容"; - String regex = ".*"; - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(text); - /*if (matcher.matches()) { - System.out.println("文本满足该正则表达式模式"); - } else { - System.out.println("文本不满足该正则表达式模式"); - }*/ - return matcher.matches(); - } -} diff --git a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/SMSReceiveRuleUtil.java b/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/SMSReceiveRuleUtil.java index 5e37b3a..70286c5 100644 --- a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/SMSReceiveRuleUtil.java +++ b/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/utils/SMSReceiveRuleUtil.java @@ -8,6 +8,7 @@ package cc.winboll.studio.mymessagemanager.utils; import android.content.Context; import android.util.JsonReader; import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libapputils.utils.RegexPPiUtils; import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean; import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean_V1; import java.io.IOException; From 91b30fb576f099dad2e4452ab10d686a2c965233 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Mon, 1 Sep 2025 08:07:13 +0800 Subject: [PATCH 2/6] Start New Stage Version. --- mymessagemanager/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mymessagemanager/build.properties b/mymessagemanager/build.properties index 8aec0b6..d30dc6c 100644 --- a/mymessagemanager/build.properties +++ b/mymessagemanager/build.properties @@ -1,5 +1,5 @@ #Created by .winboll/winboll_app_build.gradle -#Mon Sep 01 00:02:55 GMT 2025 +#Mon Sep 01 08:07:13 HKT 2025 stageCount=7 libraryProject= baseVersion=15.3 From b505156211df7d0c792b939967b39cc63e8caa15 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Mon, 1 Sep 2025 08:07:48 +0800 Subject: [PATCH 3/6] APK 15.3.7 release Publish. --- mymessagemanager/build.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mymessagemanager/build.properties b/mymessagemanager/build.properties index d30dc6c..0aa10bc 100644 --- a/mymessagemanager/build.properties +++ b/mymessagemanager/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Mon Sep 01 08:07:13 HKT 2025 -stageCount=7 +#Mon Sep 01 08:07:48 HKT 2025 +stageCount=8 libraryProject= baseVersion=15.3 -publishVersion=15.3.6 -buildCount=2 -baseBetaVersion=15.3.7 +publishVersion=15.3.7 +buildCount=0 +baseBetaVersion=15.3.8 From 37b0867d3474a389ea37a3f621c7160dd008e833 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sat, 6 Sep 2025 01:23:42 +0800 Subject: [PATCH 4/6] 20250906_012327_326 --- mymessagemanager/build.properties | 4 ++-- .../activitys/ComposeSMSActivity.java | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/mymessagemanager/build.properties b/mymessagemanager/build.properties index 0aa10bc..9c36bfb 100644 --- a/mymessagemanager/build.properties +++ b/mymessagemanager/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Mon Sep 01 08:07:48 HKT 2025 +#Fri Sep 05 17:21:44 GMT 2025 stageCount=8 libraryProject= baseVersion=15.3 publishVersion=15.3.7 -buildCount=0 +buildCount=10 baseBetaVersion=15.3.8 diff --git a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/activitys/ComposeSMSActivity.java b/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/activitys/ComposeSMSActivity.java index 5229fd5..384a081 100644 --- a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/activitys/ComposeSMSActivity.java +++ b/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/activitys/ComposeSMSActivity.java @@ -57,6 +57,7 @@ public class ComposeSMSActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + LogUtils.d(TAG, "onCreate"); setContentView(R.layout.activity_composesms); // 初始化Intent数据(增加空判断,避免NullPointerException) @@ -192,8 +193,20 @@ public class ComposeSMSActivity extends BaseActivity { // 定位到第一个匹配项(如果有) if (!matchedContacts.isEmpty()) { - mlvContracts.setSelection(0); - mtvTOName.setText(matchedContacts.get(0).getName()); + //LogUtils.d(TAG, String.format("matchedContacts.size() %d", matchedContacts.size())); + // 先设置列表选中项 + //mlvContracts.setSelection(0); + for (int i = 0; i < matchedContacts.size(); i++) { + PhoneBean item = matchedContacts.get(i); + //LogUtils.d(TAG, String.format("item.getTelPhone() %s", item.getTelPhone())); + //LogUtils.d(TAG, String.format("metTO.getText() %s", metTO.getText())); + if (item.getTelPhone().equals(metTO.getText().toString())) { + mtvTOName.setText(item.getName()); + mlvContracts.setSelection(i); + LogUtils.d(TAG, String.format("%s match %s", metTO.getText().toString(), item.getTelPhone())); + break; + } + } } else { mtvTOName.setText(""); // 无结果时清空姓名显示 } From 4d344b299bee8dd7805be63eb610d94d9459ec93 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sat, 6 Sep 2025 01:52:37 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=81=94=E7=B3=BB?= =?UTF-8?q?=E4=BA=BA=E6=9F=A5=E8=AF=A2=E5=8F=91=E9=80=81=E7=9A=84=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E8=AE=BE=E7=BD=AE=E8=BE=93=E5=85=A5=E6=A1=86?= =?UTF-8?q?=E5=8F=B7=E7=A0=81=E5=AE=8C=E5=85=A8=E5=8C=B9=E9=85=8D=E6=9F=90?= =?UTF-8?q?=E4=B8=AA=E8=81=94=E7=B3=BB=E4=BA=BA=E6=97=B6=EF=BC=8C=E6=89=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=8F=B7=E7=A0=81=E5=AF=B9=E5=BA=94=E7=9A=84?= =?UTF-8?q?=E8=81=94=E7=B3=BB=E4=BA=BA=E5=90=8D=E7=A7=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mymessagemanager/build.properties | 4 +- .../activitys/ComposeSMSActivity.java | 80 +++++--- .../res/drawable/listview_item_selector.xml | 9 + .../main/res/layout/activity_composesms.xml | 175 +++++++++--------- .../src/main/res/values/colors.xml | 15 +- 5 files changed, 169 insertions(+), 114 deletions(-) create mode 100644 mymessagemanager/src/main/res/drawable/listview_item_selector.xml diff --git a/mymessagemanager/build.properties b/mymessagemanager/build.properties index 9c36bfb..e2260f0 100644 --- a/mymessagemanager/build.properties +++ b/mymessagemanager/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Sep 05 17:21:44 GMT 2025 +#Fri Sep 05 17:49:46 GMT 2025 stageCount=8 libraryProject= baseVersion=15.3 publishVersion=15.3.7 -buildCount=10 +buildCount=16 baseBetaVersion=15.3.8 diff --git a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/activitys/ComposeSMSActivity.java b/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/activitys/ComposeSMSActivity.java index 384a081..3aec098 100644 --- a/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/activitys/ComposeSMSActivity.java +++ b/mymessagemanager/src/main/java/cc/winboll/studio/mymessagemanager/activitys/ComposeSMSActivity.java @@ -57,7 +57,7 @@ public class ComposeSMSActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - LogUtils.d(TAG, "onCreate"); + LogUtils.d(TAG, "onCreate"); setContentView(R.layout.activity_composesms); // 初始化Intent数据(增加空判断,避免NullPointerException) @@ -117,8 +117,9 @@ public class ComposeSMSActivity extends BaseActivity { } }); - // 初始化联系人列表 + // 初始化联系人列表(关键:设置单选模式,确保选中状态生效) mlvContracts = (ListView) findViewById(R.id.activitycomposesmsListView1); + mlvContracts.setChoiceMode(ListView.CHOICE_MODE_SINGLE); // 开启单选,与布局中一致 // 初始化号码输入框(核心:优化文本变化监听逻辑) metTO = (EditText) findViewById(R.id.activitycomposesmsEditText1); @@ -172,7 +173,7 @@ public class ComposeSMSActivity extends BaseActivity { } } - // 核心优化:根据输入号码筛选列表(无结果则显示空列表) + // 核心优化:根据输入号码筛选列表(无结果则显示空列表,优化选中逻辑) private void filterListByPhone(String inputPhone) { PhoneUtil phoneUtil = new PhoneUtil(this); List allContacts = phoneUtil.getPhoneList(); @@ -180,7 +181,7 @@ public class ComposeSMSActivity extends BaseActivity { // 遍历所有联系人,匹配包含输入号码的联系人 for (PhoneBean contact : allContacts) { - if (contact.getTelPhone().contains(inputPhone) + if (contact.getTelPhone().contains(inputPhone) || phoneUtil.isTheSamePhoneNumber(contact.getTelPhone(), inputPhone)) { matchedContacts.add(contact); } @@ -191,22 +192,29 @@ public class ComposeSMSActivity extends BaseActivity { // 用筛选结果更新列表(无结果则传入空列表) initAdapter(matchedContacts.isEmpty() ? new ArrayList() : matchedContacts); - // 定位到第一个匹配项(如果有) + // 定位并选中匹配项(如果有) if (!matchedContacts.isEmpty()) { - //LogUtils.d(TAG, String.format("matchedContacts.size() %d", matchedContacts.size())); - // 先设置列表选中项 - //mlvContracts.setSelection(0); - for (int i = 0; i < matchedContacts.size(); i++) { - PhoneBean item = matchedContacts.get(i); - //LogUtils.d(TAG, String.format("item.getTelPhone() %s", item.getTelPhone())); - //LogUtils.d(TAG, String.format("metTO.getText() %s", metTO.getText())); - if (item.getTelPhone().equals(metTO.getText().toString())) { - mtvTOName.setText(item.getName()); - mlvContracts.setSelection(i); - LogUtils.d(TAG, String.format("%s match %s", metTO.getText().toString(), item.getTelPhone())); - break; - } - } + boolean isFound = false; + for (int i = 0; i < matchedContacts.size(); i++) { + PhoneBean item = matchedContacts.get(i); + // 精确匹配号码(兼容区域码格式) + if (phoneUtil.isTheSamePhoneNumber(item.getTelPhone(), inputPhone)) { + mtvTOName.setText(item.getName()); + // 关键:先滚动到目标位置,再设置选中状态 + mlvContracts.setSelection(i); + // 主动设置选中(确保样式生效,兼容部分系统) + mlvContracts.setItemChecked(i, true); + LogUtils.d(TAG, String.format("%s 匹配 %s,选中位置:%d", inputPhone, item.getTelPhone(), i)); + isFound = true; + break; + } + } + // 若未精确匹配,选中第一个结果 + /*if (!isFound) { + mlvContracts.setSelection(0); + mlvContracts.setItemChecked(0, true); + mtvTOName.setText(matchedContacts.get(0).getName()); + }*/ } else { mtvTOName.setText(""); // 无结果时清空姓名显示 } @@ -219,7 +227,9 @@ public class ComposeSMSActivity extends BaseActivity { List matchedContacts = phoneUtil.getPhonesByName(searchName); initAdapter(matchedContacts); if (!matchedContacts.isEmpty()) { + // 选中第一个结果并设置样式 mlvContracts.setSelection(0); + mlvContracts.setItemChecked(0, true); } } @@ -259,7 +269,7 @@ public class ComposeSMSActivity extends BaseActivity { return 0; } - // 初始化或更新列表适配器 + // 初始化或更新列表适配器 private void initAdapter(List initData) { mAdapterData.clear(); // 清空旧数据 final PhoneUtil phoneUtil = new PhoneUtil(this); @@ -293,19 +303,45 @@ public class ComposeSMSActivity extends BaseActivity { mSimpleAdapter.setDropDownViewResource(R.layout.listview_contracts); mlvContracts.setAdapter(mSimpleAdapter); - // 列表项点击事件 + // 列表项点击事件:点击时主动设置选中状态,确保样式突显 mlvContracts.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { if (position < mAdapterData.size()) { + // 1. 主动设置当前项为选中状态 + mlvContracts.setItemChecked(position, true); + // 2. 更新号码输入框和姓名显示 String phone = mAdapterData.get(position).get(MAP_PHONE).toString(); metTO.setText(phone); mtvTOName.setText(phoneUtil.getNameByPhone(phone)); + // 3. 滚动到点击位置(确保可见) + mlvContracts.setSelection(position); } } }); + + // 列表项选中状态变化监听(可选,增强选中反馈) + mlvContracts.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + // 选中时可添加额外反馈(如改变文本颜色,可选) + if (view != null) { + TextView tvName = (TextView) view.findViewById(R.id.listviewcontractsTextView1); + TextView tvPhone = (TextView) view.findViewById(R.id.listviewcontractsTextView2); + if (tvName != null) tvName.setTextColor(getResources().getColor(R.color.white)); + if (tvPhone != null) tvPhone.setTextColor(getResources().getColor(R.color.white)); + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + // 未选中时无操作 + } + }); } else { - mSimpleAdapter.notifyDataSetChanged(); // 数据更新时通知适配器 + // 数据更新时,先取消所有旧选中状态,再通知适配器刷新 + mlvContracts.clearChoices(); + mSimpleAdapter.notifyDataSetChanged(); } } diff --git a/mymessagemanager/src/main/res/drawable/listview_item_selector.xml b/mymessagemanager/src/main/res/drawable/listview_item_selector.xml new file mode 100644 index 0000000..8fcab31 --- /dev/null +++ b/mymessagemanager/src/main/res/drawable/listview_item_selector.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/mymessagemanager/src/main/res/layout/activity_composesms.xml b/mymessagemanager/src/main/res/layout/activity_composesms.xml index fd06f8a..d15d89a 100644 --- a/mymessagemanager/src/main/res/layout/activity_composesms.xml +++ b/mymessagemanager/src/main/res/layout/activity_composesms.xml @@ -1,109 +1,112 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + diff --git a/mymessagemanager/src/main/res/values/colors.xml b/mymessagemanager/src/main/res/values/colors.xml index e75d537..505c0b6 100644 --- a/mymessagemanager/src/main/res/values/colors.xml +++ b/mymessagemanager/src/main/res/values/colors.xml @@ -1,5 +1,8 @@ + + #FFFFFFFF + #FFDCDA3D #FF3DDC84 #FFDCDA3D @@ -7,11 +10,11 @@ #FFA28BFF #FF8BAEFF #FFA28BFF - + #FFFFEB8C #FF8CD9FF #FFFFEB8C - + #FF78BDFF #FFFFED78 #FF78BDFF @@ -19,9 +22,13 @@ #FF5AEB53 #FFE653EB #FF5AEB53 - + #FFB4B4B4 #FFD9D9D9 #FFB4B4B4 - + + + #FF696969 + + #FFE0E0E0 From a40dbcfb610ca698d61da3e903b111fc0e001366 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sat, 6 Sep 2025 01:57:20 +0800 Subject: [PATCH 6/6] APK 15.3.8 release Publish. --- mymessagemanager/build.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mymessagemanager/build.properties b/mymessagemanager/build.properties index e2260f0..d959701 100644 --- a/mymessagemanager/build.properties +++ b/mymessagemanager/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Sep 05 17:49:46 GMT 2025 -stageCount=8 +#Sat Sep 06 01:57:20 HKT 2025 +stageCount=9 libraryProject= baseVersion=15.3 -publishVersion=15.3.7 -buildCount=16 -baseBetaVersion=15.3.8 +publishVersion=15.3.8 +buildCount=0 +baseBetaVersion=15.3.9