From 6450faa556b659a86fa4dbd60f45fff9c045ef88 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 23 Jan 2025 12:44:36 +0800 Subject: [PATCH 001/243] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=B1=BB=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aes/build.gradle | 4 ++-- aes/build.properties | 4 ++-- aes/src/main/java/cc/winboll/studio/aes/App.java | 2 +- libaes/build.properties | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aes/build.gradle b/aes/build.gradle index c6a3a6c..d542f7b 100644 --- a/aes/build.gradle +++ b/aes/build.gradle @@ -62,8 +62,8 @@ dependencies { api 'androidx.fragment:fragment:1.0.0' api 'com.google.android.material:material:1.0.0' - api 'cc.winboll.studio:libapputils:9.2.1' - api 'cc.winboll.studio:libappbase:1.0.3' + api 'cc.winboll.studio:libapputils:9.2.5' + api 'cc.winboll.studio:libappbase:1.1.0' api fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/aes/build.properties b/aes/build.properties index 69caa9a..91b066e 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Jan 19 04:58:59 GMT 2025 +#Thu Jan 23 04:42:14 GMT 2025 stageCount=3 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.2 -buildCount=4 +buildCount=5 baseBetaVersion=7.6.3 diff --git a/aes/src/main/java/cc/winboll/studio/aes/App.java b/aes/src/main/java/cc/winboll/studio/aes/App.java index 578f72d..8865b1a 100644 --- a/aes/src/main/java/cc/winboll/studio/aes/App.java +++ b/aes/src/main/java/cc/winboll/studio/aes/App.java @@ -5,7 +5,7 @@ package cc.winboll.studio.aes; * @Date 2024/06/13 19:03:58 * @Describe AES应用类 */ -import cc.winboll.studio.libappbase.GlobalApplication; +import cc.winboll.studio.GlobalApplication; public class App extends GlobalApplication { diff --git a/libaes/build.properties b/libaes/build.properties index 69caa9a..91b066e 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Jan 19 04:58:59 GMT 2025 +#Thu Jan 23 04:42:14 GMT 2025 stageCount=3 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.2 -buildCount=4 +buildCount=5 baseBetaVersion=7.6.3 From c91c9c9887ae1f65d653c4269ec142d1f8b888fe Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 23 Jan 2025 12:54:10 +0800 Subject: [PATCH 002/243] APK 7.6.3 release Publish. --- aes/build.properties | 10 +++++----- libaes/build.properties | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aes/build.properties b/aes/build.properties index 91b066e..9c380e1 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Jan 23 04:42:14 GMT 2025 -stageCount=3 +#Thu Jan 23 12:54:10 HKT 2025 +stageCount=4 libraryProject=libaes baseVersion=7.6 -publishVersion=7.6.2 -buildCount=5 -baseBetaVersion=7.6.3 +publishVersion=7.6.3 +buildCount=0 +baseBetaVersion=7.6.4 diff --git a/libaes/build.properties b/libaes/build.properties index 91b066e..9c380e1 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Jan 23 04:42:14 GMT 2025 -stageCount=3 +#Thu Jan 23 12:54:10 HKT 2025 +stageCount=4 libraryProject=libaes baseVersion=7.6 -publishVersion=7.6.2 -buildCount=5 -baseBetaVersion=7.6.3 +publishVersion=7.6.3 +buildCount=0 +baseBetaVersion=7.6.4 From 6410eda84eb7707961f5a9b580cab7e0b9bcbe62 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 23 Jan 2025 12:54:30 +0800 Subject: [PATCH 003/243] Library Release 7.6.3 --- aes/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aes/build.properties b/aes/build.properties index 9c380e1..b37776f 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,5 +1,5 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Jan 23 12:54:10 HKT 2025 +#Thu Jan 23 12:54:25 HKT 2025 stageCount=4 libraryProject=libaes baseVersion=7.6 From 0a7a26d3cd2dbfdbb99ba52fe125e5b8a105dc54 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 26 Jan 2025 14:17:28 +0800 Subject: [PATCH 004/243] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E7=B1=BB=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aes/build.gradle | 4 ++-- aes/build.properties | 4 ++-- libaes/build.gradle | 4 ++-- libaes/build.properties | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aes/build.gradle b/aes/build.gradle index d542f7b..e85100e 100644 --- a/aes/build.gradle +++ b/aes/build.gradle @@ -62,8 +62,8 @@ dependencies { api 'androidx.fragment:fragment:1.0.0' api 'com.google.android.material:material:1.0.0' - api 'cc.winboll.studio:libapputils:9.2.5' - api 'cc.winboll.studio:libappbase:1.1.0' + api 'cc.winboll.studio:libapputils:9.2.17' + api 'cc.winboll.studio:libappbase:1.1.2' api fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/aes/build.properties b/aes/build.properties index b37776f..f488b38 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Jan 23 12:54:25 HKT 2025 +#Sun Jan 26 06:16:16 GMT 2025 stageCount=4 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.3 -buildCount=0 +buildCount=4 baseBetaVersion=7.6.4 diff --git a/libaes/build.gradle b/libaes/build.gradle index 07ed99e..8a746a6 100644 --- a/libaes/build.gradle +++ b/libaes/build.gradle @@ -41,8 +41,8 @@ dependencies { // https://github.com/baoyongzhang/android-PullRefreshLayout api 'com.baoyz.pullrefreshlayout:library:1.2.0' - api 'cc.winboll.studio:libapputils:9.2.1' - api 'cc.winboll.studio:libappbase:1.0.3' + api 'cc.winboll.studio:libapputils:9.2.17' + api 'cc.winboll.studio:libappbase:1.1.2' api fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/libaes/build.properties b/libaes/build.properties index 9c380e1..f488b38 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Jan 23 12:54:10 HKT 2025 +#Sun Jan 26 06:16:16 GMT 2025 stageCount=4 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.3 -buildCount=0 +buildCount=4 baseBetaVersion=7.6.4 From ebee402c841ed646fbaf0173f9404fbe81af3a26 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 26 Jan 2025 14:19:55 +0800 Subject: [PATCH 005/243] APK 7.6.4 release Publish. --- aes/build.properties | 10 +++++----- libaes/build.properties | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aes/build.properties b/aes/build.properties index f488b38..0ca2160 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Jan 26 06:16:16 GMT 2025 -stageCount=4 +#Sun Jan 26 14:19:55 HKT 2025 +stageCount=5 libraryProject=libaes baseVersion=7.6 -publishVersion=7.6.3 -buildCount=4 -baseBetaVersion=7.6.4 +publishVersion=7.6.4 +buildCount=0 +baseBetaVersion=7.6.5 diff --git a/libaes/build.properties b/libaes/build.properties index f488b38..0ca2160 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Jan 26 06:16:16 GMT 2025 -stageCount=4 +#Sun Jan 26 14:19:55 HKT 2025 +stageCount=5 libraryProject=libaes baseVersion=7.6 -publishVersion=7.6.3 -buildCount=4 -baseBetaVersion=7.6.4 +publishVersion=7.6.4 +buildCount=0 +baseBetaVersion=7.6.5 From 61200c37be203d298a27e9474942837313172194 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 26 Jan 2025 14:20:24 +0800 Subject: [PATCH 006/243] Library Release 7.6.4 --- aes/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aes/build.properties b/aes/build.properties index 0ca2160..b3cf5a9 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,5 +1,5 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Jan 26 14:19:55 HKT 2025 +#Sun Jan 26 14:20:15 HKT 2025 stageCount=5 libraryProject=libaes baseVersion=7.6 From 8f8c3c6c97a84d272a2e1ae34fd6e2f58f702f9f Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Tue, 4 Feb 2025 08:24:06 +0800 Subject: [PATCH 007/243] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aes/build.properties | 4 +- aes/src/main/AndroidManifest.xml | 2 +- libaes/build.properties | 4 +- .../studio/libaes/beans/AESThemeBean.java | 16 +- .../studio/libaes/utils/AESThemeUtil.java | 8 +- libaes/src/main/res/values/attrs.xml | 7 + libaes/src/main/res/values/styles.xml | 270 ++++++++++-------- 7 files changed, 178 insertions(+), 133 deletions(-) diff --git a/aes/build.properties b/aes/build.properties index b3cf5a9..9cb10b4 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Jan 26 14:20:15 HKT 2025 +#Tue Feb 04 00:22:34 GMT 2025 stageCount=5 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.4 -buildCount=0 +buildCount=10 baseBetaVersion=7.6.5 diff --git a/aes/src/main/AndroidManifest.xml b/aes/src/main/AndroidManifest.xml index cc00d93..0113548 100644 --- a/aes/src/main/AndroidManifest.xml +++ b/aes/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" - android:theme="@style/WinBoll.SupportThemeNoActionBar" + android:theme="@style/AESTheme" android:requestLegacyExternalStorage="true" android:supportsRtl="true"> diff --git a/libaes/build.properties b/libaes/build.properties index 0ca2160..9cb10b4 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Jan 26 14:19:55 HKT 2025 +#Tue Feb 04 00:22:34 GMT 2025 stageCount=5 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.4 -buildCount=0 +buildCount=10 baseBetaVersion=7.6.5 diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/beans/AESThemeBean.java b/libaes/src/main/java/cc/winboll/studio/libaes/beans/AESThemeBean.java index 2d3a474..fe23895 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/beans/AESThemeBean.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/beans/AESThemeBean.java @@ -16,7 +16,7 @@ public class AESThemeBean extends BaseBean { public static final String TAG = "AESThemeBean"; public enum ThemeType { - DEFAULT("默认主题"), + AES("默认主题"), DEPTH("深奥主题"), SKY("天空主题"), GOLDEN("辉煌主题"), @@ -42,7 +42,7 @@ public class AESThemeBean extends BaseBean { } // 保存当前主题 - int currentThemeStyleID = getThemeStyleID(ThemeType.DEFAULT); + int currentThemeStyleID = getThemeStyleID(ThemeType.AES); public AESThemeBean() { } @@ -99,7 +99,7 @@ public class AESThemeBean extends BaseBean { } public static int getThemeStyleID(ThemeType themeType) { - int themeStyleID = R.style.DefaultAESTheme; + int themeStyleID = R.style.AESTheme; if (AESThemeBean.ThemeType.DEPTH == themeType) { themeStyleID = R.style.DepthAESTheme; } else if (AESThemeBean.ThemeType.SKY == themeType) { @@ -110,15 +110,15 @@ public class AESThemeBean extends BaseBean { themeStyleID = R.style.MemorAESTheme; } else if (AESThemeBean.ThemeType.TAO == themeType) { themeStyleID = R.style.TaoAESTheme; - } else if (AESThemeBean.ThemeType.DEFAULT == themeType) { - themeStyleID = R.style.DefaultAESTheme; + } else if (AESThemeBean.ThemeType.AES == themeType) { + themeStyleID = R.style.AESTheme; } //LogUtils.d(TAG, "themeStyleID " + Integer.toString(themeStyleID)); return themeStyleID; } public static AESThemeBean.ThemeType getThemeStyleType(int nThemeStyleID) { - AESThemeBean.ThemeType themeStyle = AESThemeBean.ThemeType.DEFAULT; + AESThemeBean.ThemeType themeStyle = AESThemeBean.ThemeType.AES; if (R.style.DepthAESTheme == nThemeStyleID) { themeStyle = AESThemeBean.ThemeType.DEPTH ; } else if (R.style.SkyAESTheme == nThemeStyleID) { @@ -129,8 +129,8 @@ public class AESThemeBean extends BaseBean { themeStyle = AESThemeBean.ThemeType.MEMOR ; } else if (R.style.TaoAESTheme == nThemeStyleID) { themeStyle = AESThemeBean.ThemeType.TAO ; - } else if (R.style.DefaultAESTheme == nThemeStyleID) { - themeStyle = AESThemeBean.ThemeType.DEFAULT; + } else if (R.style.AESTheme == nThemeStyleID) { + themeStyle = AESThemeBean.ThemeType.AES; } //LogUtils.d(TAG, "themeStyle " + Integer.toString(themeStyle.ordinal())); return themeStyle; diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/utils/AESThemeUtil.java b/libaes/src/main/java/cc/winboll/studio/libaes/utils/AESThemeUtil.java index 68f3dd1..ccc22ec 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/utils/AESThemeUtil.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/utils/AESThemeUtil.java @@ -25,7 +25,7 @@ public class AESThemeUtil { public static int getThemeTypeID(T context) { AESThemeBean bean = AESThemeBean.loadBean(context, AESThemeBean.class); - return bean == null ? AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEFAULT): bean.getCurrentThemeTypeID(); + return bean == null ? AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES): bean.getCurrentThemeTypeID(); } public static void saveThemeStyleID(T context, int nThemeTypeID) { @@ -92,7 +92,7 @@ public class AESThemeUtil { saveThemeStyleID(activity, nThemeStyleID); return true; } else if (R.id.item_defaulttheme == item.getItemId()) { - nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEFAULT); + nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES); saveThemeStyleID(activity, nThemeStyleID); return true; } @@ -123,7 +123,7 @@ public class AESThemeUtil { saveThemeStyleID(activity, nThemeStyleID); return true; } else if (R.id.item_defaulttheme == item.getItemId()) { - nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEFAULT); + nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES); saveThemeStyleID(activity, nThemeStyleID); return true; } @@ -154,7 +154,7 @@ public class AESThemeUtil { saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID); return true; } else if (R.id.item_defaulttheme == item.getItemId()) { - nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEFAULT); + nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES); saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID); return true; } diff --git a/libaes/src/main/res/values/attrs.xml b/libaes/src/main/res/values/attrs.xml index 4dfb542..c3a273d 100644 --- a/libaes/src/main/res/values/attrs.xml +++ b/libaes/src/main/res/values/attrs.xml @@ -32,6 +32,13 @@ + + + + + + + + + + From f3d97fc94bb9f7150e0570c4a4279f78ac785d12 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Tue, 4 Feb 2025 08:26:00 +0800 Subject: [PATCH 008/243] APK 7.6.5 release Publish. --- aes/build.properties | 10 +++++----- libaes/build.properties | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aes/build.properties b/aes/build.properties index 9cb10b4..5013642 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 04 00:22:34 GMT 2025 -stageCount=5 +#Tue Feb 04 08:26:00 HKT 2025 +stageCount=6 libraryProject=libaes baseVersion=7.6 -publishVersion=7.6.4 -buildCount=10 -baseBetaVersion=7.6.5 +publishVersion=7.6.5 +buildCount=0 +baseBetaVersion=7.6.6 diff --git a/libaes/build.properties b/libaes/build.properties index 9cb10b4..5013642 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 04 00:22:34 GMT 2025 -stageCount=5 +#Tue Feb 04 08:26:00 HKT 2025 +stageCount=6 libraryProject=libaes baseVersion=7.6 -publishVersion=7.6.4 -buildCount=10 -baseBetaVersion=7.6.5 +publishVersion=7.6.5 +buildCount=0 +baseBetaVersion=7.6.6 From c90d8549b41533171f8717e81cdadb49dad86f26 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Tue, 4 Feb 2025 08:26:21 +0800 Subject: [PATCH 009/243] Library Release 7.6.5 --- aes/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aes/build.properties b/aes/build.properties index 5013642..5da4074 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,5 +1,5 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 04 08:26:00 HKT 2025 +#Tue Feb 04 08:26:11 HKT 2025 stageCount=6 libraryProject=libaes baseVersion=7.6 From 7f8ee8d6de623f34c2bbcd310b043cd89946cab1 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Tue, 4 Feb 2025 09:00:34 +0800 Subject: [PATCH 010/243] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=B1=BB=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aes/build.gradle | 14 -------------- aes/build.properties | 4 ++-- aes/src/main/java/cc/winboll/studio/aes/App.java | 5 +++-- libaes/build.gradle | 6 ++---- libaes/build.properties | 4 ++-- 5 files changed, 9 insertions(+), 24 deletions(-) diff --git a/aes/build.gradle b/aes/build.gradle index e85100e..246a6f8 100644 --- a/aes/build.gradle +++ b/aes/build.gradle @@ -51,19 +51,5 @@ android { dependencies { api project(':libaes') - //api 'cc.winboll.studio:winboll-shared:1.6.5' - api 'io.github.medyo:android-about-page:2.0.0' - api 'com.github.getActivity:ToastUtils:10.5' - api 'com.jcraft:jsch:0.1.55' - api 'org.jsoup:jsoup:1.13.1' - api 'com.squareup.okhttp3:okhttp:4.4.1' - - api 'androidx.appcompat:appcompat:1.0.0' - api 'androidx.fragment:fragment:1.0.0' - api 'com.google.android.material:material:1.0.0' - - api 'cc.winboll.studio:libapputils:9.2.17' - api 'cc.winboll.studio:libappbase:1.1.2' - api fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/aes/build.properties b/aes/build.properties index 5da4074..b476654 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 04 08:26:11 HKT 2025 +#Tue Feb 04 01:00:08 GMT 2025 stageCount=6 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.5 -buildCount=0 +buildCount=3 baseBetaVersion=7.6.6 diff --git a/aes/src/main/java/cc/winboll/studio/aes/App.java b/aes/src/main/java/cc/winboll/studio/aes/App.java index 8865b1a..566a2f9 100644 --- a/aes/src/main/java/cc/winboll/studio/aes/App.java +++ b/aes/src/main/java/cc/winboll/studio/aes/App.java @@ -5,9 +5,10 @@ package cc.winboll.studio.aes; * @Date 2024/06/13 19:03:58 * @Describe AES应用类 */ -import cc.winboll.studio.GlobalApplication; +import cc.winboll.studio.libappbase.GlobalApplication; +import cc.winboll.studio.libapputils.app.WinBollGlobalApplication; -public class App extends GlobalApplication { +public class App extends WinBollGlobalApplication { public static final String TAG = "App"; diff --git a/libaes/build.gradle b/libaes/build.gradle index 8a746a6..5bda1f2 100644 --- a/libaes/build.gradle +++ b/libaes/build.gradle @@ -26,8 +26,6 @@ android { } dependencies { - //api 'cc.winboll.studio:winboll-shared:1.6.5' - api 'io.github.medyo:android-about-page:2.0.0' api 'com.github.getActivity:ToastUtils:10.5' api 'com.jcraft:jsch:0.1.55' @@ -41,8 +39,8 @@ dependencies { // https://github.com/baoyongzhang/android-PullRefreshLayout api 'com.baoyz.pullrefreshlayout:library:1.2.0' - api 'cc.winboll.studio:libapputils:9.2.17' - api 'cc.winboll.studio:libappbase:1.1.2' + api 'cc.winboll.studio:libapputils:9.3.0' + api 'cc.winboll.studio:libappbase:1.1.3' api fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/libaes/build.properties b/libaes/build.properties index 5013642..b476654 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 04 08:26:00 HKT 2025 +#Tue Feb 04 01:00:08 GMT 2025 stageCount=6 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.5 -buildCount=0 +buildCount=3 baseBetaVersion=7.6.6 From c01a739b9d0b6758cada904dfd48f46f88c8ad5d Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Thu, 6 Feb 2025 11:29:46 +0800 Subject: [PATCH 011/243] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=B1=BB=E5=BA=93?= =?UTF-8?q?=EF=BC=8C=E6=9C=AA=E8=B0=83=E8=AF=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aes/build.properties | 4 +- .../main/java/cc/winboll/studio/aes/App.java | 3 +- .../cc/winboll/studio/aes/MainActivity.java | 221 +++++++++++++++++- .../src/main/res/menu/toolbar_library.xml | 2 +- libaes/build.gradle | 4 +- libaes/build.properties | 4 +- .../activitys/DrawerFragmentActivity.java | 29 +-- .../libaes/unittests/LibraryActivity.java | 170 -------------- .../unittests/SecondaryLibraryActivity.java | 35 ++- .../unittests/TestDrawerFragmentActivity.java | 40 +++- .../studio/libaes/utils/AESThemeUtil.java | 47 +++- .../src/main/res/layout/activity_library.xml | 14 -- 12 files changed, 349 insertions(+), 224 deletions(-) rename {libaes => aes}/src/main/res/menu/toolbar_library.xml (99%) delete mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/unittests/LibraryActivity.java delete mode 100644 libaes/src/main/res/layout/activity_library.xml diff --git a/aes/build.properties b/aes/build.properties index b476654..d882e77 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 04 01:00:08 GMT 2025 +#Thu Feb 06 03:29:07 GMT 2025 stageCount=6 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.5 -buildCount=3 +buildCount=16 baseBetaVersion=7.6.6 diff --git a/aes/src/main/java/cc/winboll/studio/aes/App.java b/aes/src/main/java/cc/winboll/studio/aes/App.java index 566a2f9..578f72d 100644 --- a/aes/src/main/java/cc/winboll/studio/aes/App.java +++ b/aes/src/main/java/cc/winboll/studio/aes/App.java @@ -6,9 +6,8 @@ package cc.winboll.studio.aes; * @Describe AES应用类 */ import cc.winboll.studio.libappbase.GlobalApplication; -import cc.winboll.studio.libapputils.app.WinBollGlobalApplication; -public class App extends WinBollGlobalApplication { +public class App extends GlobalApplication { public static final String TAG = "App"; diff --git a/aes/src/main/java/cc/winboll/studio/aes/MainActivity.java b/aes/src/main/java/cc/winboll/studio/aes/MainActivity.java index cafaf1e..4a8c511 100644 --- a/aes/src/main/java/cc/winboll/studio/aes/MainActivity.java +++ b/aes/src/main/java/cc/winboll/studio/aes/MainActivity.java @@ -5,12 +5,221 @@ package cc.winboll.studio.aes; * @Date 2024/06/13 19:05:52 * @Describe 应用主窗口 */ -import cc.winboll.studio.libaes.unittests.LibraryActivity; +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; +import cc.winboll.studio.aes.R; +import cc.winboll.studio.libaes.activitys.DrawerFragmentActivity; +import cc.winboll.studio.libaes.beans.DrawerMenuBean; +import cc.winboll.studio.libaes.dialogs.LocalFileSelectDialog; +import cc.winboll.studio.libaes.dialogs.StoragePathDialog; +import cc.winboll.studio.libaes.unittests.SecondaryLibraryActivity; +import cc.winboll.studio.libaes.unittests.TestAButtonFragment; +import cc.winboll.studio.libaes.unittests.TestASupportToolbarActivity; +import cc.winboll.studio.libaes.unittests.TestAToolbarActivity; +import cc.winboll.studio.libaes.unittests.TestDrawerFragmentActivity; +import cc.winboll.studio.libaes.unittests.TestViewPageFragment; +import cc.winboll.studio.libapputils.app.IWinBollActivity; +import cc.winboll.studio.libapputils.bean.APPInfo; +import cc.winboll.studio.libapputils.log.LogUtils; +import com.a4455jkjh.colorpicker.ColorPickerDialog; +import java.util.ArrayList; +import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.libapputils.app.AboutActivityFactory; + +public class MainActivity extends DrawerFragmentActivity implements IWinBollActivity { -public class MainActivity extends LibraryActivity { - public static final String TAG = "MainActivity"; - - - + + TestAButtonFragment mTestAButtonFragment; + TestViewPageFragment mTestViewPageFragment; + + @Override + public AppCompatActivity getActivity() { + return this; + } + + @Override + public APPInfo getAppInfo() { + String szBranchName = "aes"; + + APPInfo appInfo = AboutActivityFactory.buildDefaultAPPInfo(); + appInfo.setAppName("AES"); + appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll); + appInfo.setAppDescription("AES Description"); + appInfo.setAppGitName("APP"); + appInfo.setAppGitOwner("Studio"); + appInfo.setAppGitAPPBranch(szBranchName); + appInfo.setAppGitAPPSubProjectFolder(szBranchName); + appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=AES"); + appInfo.setAppAPKName("AES"); + appInfo.setAppAPKFolderName("AES"); + return appInfo; + //return null; + } + + @Override + public String getTag() { + return null; + } + + @Override + public Toolbar initToolBar() { + return null; + } + + @Override + public boolean isAddWinBollToolBar() { + return false; + } + + @Override + public boolean isEnableDisplayHomeAsUp() { + return false; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (mTestAButtonFragment == null) { + mTestAButtonFragment = new TestAButtonFragment(); + addFragment(mTestAButtonFragment); + } + showFragment(mTestAButtonFragment); + //setSubtitle(TAG); + } + + @Override + public void initDrawerMenuItemList(ArrayList listDrawerMenu) { + super.initDrawerMenuItemList(listDrawerMenu); + LogUtils.d(TAG, "initDrawerMenuItemList"); + //listDrawerMenu.clear(); + // 添加抽屉菜单项 + listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG)); + listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG)); + notifyDrawerMenuDataChanged(); + } + + @Override + public void reinitDrawerMenuItemList(ArrayList listDrawerMenu) { + super.reinitDrawerMenuItemList(listDrawerMenu); + LogUtils.d(TAG, "reinitDrawerMenuItemList"); + //listDrawerMenu.clear(); + // 添加抽屉菜单项 + listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG)); + listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG)); + notifyDrawerMenuDataChanged(); + } + + @Override + public DrawerFragmentActivity.ActivityType initActivityType() { + return DrawerFragmentActivity.ActivityType.Main; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.toolbar_library, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + super.onItemClick(parent, view, position, id); + switch (position) { + case 0 : { + if (mTestAButtonFragment == null) { + mTestAButtonFragment = new TestAButtonFragment(); + addFragment(mTestAButtonFragment); + } + showFragment(mTestAButtonFragment); + break; + } + case 1 : { + if (mTestViewPageFragment == null) { + mTestViewPageFragment = new TestViewPageFragment(); + addFragment(mTestViewPageFragment); + } + showFragment(mTestViewPageFragment); + break; + } + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int nItemId = item.getItemId(); +// if (item.getItemId() == R.id.item_log) { +// WinBollActivityManager.getInstance(this).startWinBollActivity(getApplicationContext(), LogActivity.class); +// } else + if (nItemId == R.id.item_atoast) { + Toast.makeText(getApplication(), "item_testatoast", Toast.LENGTH_SHORT).show(); + } else if (nItemId == R.id.item_atoolbar) { + Intent intent = new Intent(this, TestAToolbarActivity.class); + startActivity(intent); + + } else if (nItemId == R.id.item_asupporttoolbar) { + Intent intent = new Intent(this, TestASupportToolbarActivity.class); + startActivity(intent); + + } else if (nItemId == R.id.item_colordialog) { + ColorPickerDialog dlg = new ColorPickerDialog(this, getResources().getColor(R.color.colorPrimary)); + dlg.setOnColorChangedListener(new com.a4455jkjh.colorpicker.view.OnColorChangedListener() { + + @Override + public void beforeColorChanged() { + } + + @Override + public void onColorChanged(int color) { + + } + + @Override + public void afterColorChanged() { + } + + + }); + dlg.show(); + + } else if (nItemId == R.id.item_dialogstoragepath) { + final StoragePathDialog dialog = new StoragePathDialog(this, 0); + dialog.setOnOKClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + dialog.show(); + + } else if (nItemId == R.id.item_localfileselectdialog) { + final LocalFileSelectDialog dialog = new LocalFileSelectDialog(this); + dialog.setOnOKClickListener(new LocalFileSelectDialog.OKClickListener() { + @Override + public void onOKClick(String sz) { + Toast.makeText(getApplication(), sz, Toast.LENGTH_SHORT).show(); + //dialog.dismiss(); + } + }); + dialog.open(); + + } else if (nItemId == R.id.item_secondarylibraryactivity) { + Intent intent = new Intent(this, SecondaryLibraryActivity.class); + startActivity(intent); + } else if (nItemId == R.id.item_drawerfragmentactivity) { + Intent intent = new Intent(this, TestDrawerFragmentActivity.class); + startActivity(intent); + } + else if (nItemId == R.id.item_about) { + AboutActivityFactory.showAboutActivity(this, getAppInfo()); + return true; + } + + return super.onOptionsItemSelected(item); + } } diff --git a/libaes/src/main/res/menu/toolbar_library.xml b/aes/src/main/res/menu/toolbar_library.xml similarity index 99% rename from libaes/src/main/res/menu/toolbar_library.xml rename to aes/src/main/res/menu/toolbar_library.xml index d01cea5..b12aef8 100644 --- a/libaes/src/main/res/menu/toolbar_library.xml +++ b/aes/src/main/res/menu/toolbar_library.xml @@ -13,7 +13,7 @@ - + diff --git a/libaes/build.gradle b/libaes/build.gradle index 5bda1f2..df32ee1 100644 --- a/libaes/build.gradle +++ b/libaes/build.gradle @@ -39,8 +39,8 @@ dependencies { // https://github.com/baoyongzhang/android-PullRefreshLayout api 'com.baoyz.pullrefreshlayout:library:1.2.0' - api 'cc.winboll.studio:libapputils:9.3.0' - api 'cc.winboll.studio:libappbase:1.1.3' + api 'cc.winboll.studio:libapputils:9.3.1' + api 'cc.winboll.studio:libappbase:1.2.0' api fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/libaes/build.properties b/libaes/build.properties index b476654..d882e77 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 04 01:00:08 GMT 2025 +#Thu Feb 06 03:29:07 GMT 2025 stageCount=6 libraryProject=libaes baseVersion=7.6 publishVersion=7.6.5 -buildCount=3 +buildCount=16 baseBetaVersion=7.6.6 diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/activitys/DrawerFragmentActivity.java b/libaes/src/main/java/cc/winboll/studio/libaes/activitys/DrawerFragmentActivity.java index ff63941..5731d87 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/activitys/DrawerFragmentActivity.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/activitys/DrawerFragmentActivity.java @@ -15,7 +15,6 @@ import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import androidx.appcompat.app.ActionBarDrawerToggle; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; @@ -30,15 +29,17 @@ import cc.winboll.studio.libaes.views.ADrawerMenuListView; import cc.winboll.studio.libapputils.log.LogUtils; import com.baoyz.widget.PullRefreshLayout; import java.util.ArrayList; +import androidx.appcompat.app.AppCompatActivity; +import cc.winboll.studio.libapputils.app.IWinBollActivity; -public abstract class DrawerFragmentActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { +public abstract class DrawerFragmentActivity extends AppCompatActivity implements IWinBollActivity,AdapterView.OnItemClickListener { public static final String TAG = "DrawerFragmentActivity"; static final String SHAREDPREFERENCES_NAME = "SHAREDPREFERENCES_NAME"; static final String DRAWER_THEME_TYPE = "DRAWER_THEME_TYPE"; - protected Context mContext; + //protected Context mContext; ActivityType mActivityType; ActionBarDrawerToggle mActionBarDrawerToggle; DrawerLayout mDrawerLayout; @@ -58,7 +59,7 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement @Override protected void onCreate(Bundle savedInstanceState) { - mContext = this; + //mContext = this; mThemeType = getThemeType(); setThemeStyle(); super.onCreate(savedInstanceState); @@ -72,7 +73,7 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement super.onDestroy(); } - @Override + /*@Override public Intent getIntent() { // TODO: Implement this method return super.getIntent(); @@ -80,7 +81,7 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement public Context getContext() { return this.mContext; - } + }*/ @Override public MenuInflater getMenuInflater() { @@ -88,20 +89,20 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement return super.getMenuInflater(); } - public void setSubtitle(CharSequence context) { + /*public void setSubtitle(CharSequence context) { // TODO: Implement this method getSupportActionBar().setSubtitle(context); - } + }*/ @Override public void recreate() { super.recreate(); } - @Override + /*@Override public boolean moveTaskToBack(boolean nonRoot) { return super.moveTaskToBack(nonRoot); - } + }*/ @Override public void startActivity(Intent intent) { @@ -113,7 +114,7 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement super.startActivityForResult(intent, requestCode, options); } - @Override + /*@Override public FragmentManager getSupportFragmentManager() { return super.getSupportFragmentManager(); } @@ -131,7 +132,7 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement public void setTitle(int resId) { // TODO: Implement this method getSupportActionBar().setTitle(resId); - } + }*/ @Override public SharedPreferences getSharedPreferences(String name, int mode) { @@ -151,7 +152,7 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement void setThemeStyle() { //setTheme(AESThemeBean.getThemeStyle(getThemeType())); - setTheme(AESThemeUtil.getThemeTypeID(this)); + setTheme(AESThemeUtil.getThemeTypeID(getApplicationContext())); } boolean checkThemeStyleChange() { @@ -163,7 +164,7 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement SHAREDPREFERENCES_NAME, MODE_PRIVATE); return AESThemeBean.ThemeType.values()[((sharedPreferences.getInt(DRAWER_THEME_TYPE, AESThemeBean.ThemeType.DEFAULT.ordinal())))]; */ - return AESThemeBean.getThemeStyleType(AESThemeUtil.getThemeTypeID(this)); + return AESThemeBean.getThemeStyleType(AESThemeUtil.getThemeTypeID(getApplicationContext())); } @Override diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/unittests/LibraryActivity.java b/libaes/src/main/java/cc/winboll/studio/libaes/unittests/LibraryActivity.java deleted file mode 100644 index 6e611bf..0000000 --- a/libaes/src/main/java/cc/winboll/studio/libaes/unittests/LibraryActivity.java +++ /dev/null @@ -1,170 +0,0 @@ -package cc.winboll.studio.libaes.unittests; - -/** - * @Author ZhanGSKen@QQ.COM - * @Date 2024/06/14 03:43:23 - * @Describe AES类库主窗口 - */ -import android.content.Intent; -import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.AdapterView; -import android.widget.Toast; -import cc.winboll.studio.libaes.R; -import cc.winboll.studio.libaes.activitys.DrawerFragmentActivity; -import cc.winboll.studio.libaes.beans.DrawerMenuBean; -import cc.winboll.studio.libaes.dialogs.LocalFileSelectDialog; -import cc.winboll.studio.libaes.dialogs.StoragePathDialog; -import cc.winboll.studio.libapputils.log.LogUtils; -import com.a4455jkjh.colorpicker.ColorPickerDialog; -import java.util.ArrayList; - -public class LibraryActivity extends DrawerFragmentActivity { - - public static final String TAG = "LibraryActivity"; - - TestAButtonFragment mTestAButtonFragment; - TestViewPageFragment mTestViewPageFragment; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (mTestAButtonFragment == null) { - mTestAButtonFragment = new TestAButtonFragment(); - addFragment(mTestAButtonFragment); - } - showFragment(mTestAButtonFragment); - setSubtitle(TAG); - } - - @Override - public void initDrawerMenuItemList(ArrayList listDrawerMenu) { - super.initDrawerMenuItemList(listDrawerMenu); - LogUtils.d(TAG, "initDrawerMenuItemList"); - //listDrawerMenu.clear(); - // 添加抽屉菜单项 - listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG)); - listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG)); - notifyDrawerMenuDataChanged(); - } - - @Override - public void reinitDrawerMenuItemList(ArrayList listDrawerMenu) { - super.reinitDrawerMenuItemList(listDrawerMenu); - LogUtils.d(TAG, "reinitDrawerMenuItemList"); - //listDrawerMenu.clear(); - // 添加抽屉菜单项 - listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG)); - listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG)); - notifyDrawerMenuDataChanged(); - } - - @Override - public DrawerFragmentActivity.ActivityType initActivityType() { - return DrawerFragmentActivity.ActivityType.Main; - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.toolbar_library, menu); - return super.onCreateOptionsMenu(menu); - } - - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - super.onItemClick(parent, view, position, id); - switch (position) { - case 0 : { - if (mTestAButtonFragment == null) { - mTestAButtonFragment = new TestAButtonFragment(); - addFragment(mTestAButtonFragment); - } - showFragment(mTestAButtonFragment); - break; - } - case 1 : { - if (mTestViewPageFragment == null) { - mTestViewPageFragment = new TestViewPageFragment(); - addFragment(mTestViewPageFragment); - } - showFragment(mTestViewPageFragment); - break; - } - } - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int nItemId = item.getItemId(); -// if (item.getItemId() == R.id.item_log) { -// WinBollActivityManager.getInstance(this).startWinBollActivity(getApplicationContext(), LogActivity.class); -// } else - if (nItemId == R.id.item_atoast) { - Toast.makeText(getApplication(), "item_testatoast", Toast.LENGTH_SHORT).show(); - } else if (nItemId == R.id.item_atoolbar) { - Intent intent = new Intent(this, TestAToolbarActivity.class); - startActivity(intent); - - } else if (nItemId == R.id.item_asupporttoolbar) { - Intent intent = new Intent(this, TestASupportToolbarActivity.class); - startActivity(intent); - - } else if (nItemId == R.id.item_colordialog) { - ColorPickerDialog dlg = new ColorPickerDialog(this, getResources().getColor(R.color.colorPrimary)); - dlg.setOnColorChangedListener(new com.a4455jkjh.colorpicker.view.OnColorChangedListener() { - - @Override - public void beforeColorChanged() { - } - - @Override - public void onColorChanged(int color) { - - } - - @Override - public void afterColorChanged() { - } - - - }); - dlg.show(); - - } else if (nItemId == R.id.item_dialogstoragepath) { - final StoragePathDialog dialog = new StoragePathDialog(this, 0); - dialog.setOnOKClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - dialog.show(); - - } else if (nItemId == R.id.item_localfileselectdialog) { - final LocalFileSelectDialog dialog = new LocalFileSelectDialog(this); - dialog.setOnOKClickListener(new LocalFileSelectDialog.OKClickListener() { - @Override - public void onOKClick(String sz) { - Toast.makeText(getApplication(), sz, Toast.LENGTH_SHORT).show(); - //dialog.dismiss(); - } - }); - dialog.open(); - - } else if (nItemId == R.id.item_secondarylibraryactivity) { - Intent intent = new Intent(this, SecondaryLibraryActivity.class); - startActivity(intent); - } else if (nItemId == R.id.item_drawerfragmentactivity) { - Intent intent = new Intent(this, TestDrawerFragmentActivity.class); - startActivity(intent); - } -// else if (nItemId == R.id.item_about) { -// Intent intent = new Intent(this, AboutActivity.class); -// startActivity(intent); -// } - - return super.onOptionsItemSelected(item); - } -} diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/unittests/SecondaryLibraryActivity.java b/libaes/src/main/java/cc/winboll/studio/libaes/unittests/SecondaryLibraryActivity.java index 64db217..81ec509 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/unittests/SecondaryLibraryActivity.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/unittests/SecondaryLibraryActivity.java @@ -6,6 +6,9 @@ import android.view.MenuItem; import android.widget.Toast; import cc.winboll.studio.libaes.R; import cc.winboll.studio.libaes.activitys.DrawerFragmentActivity; +import cc.winboll.studio.libapputils.bean.APPInfo; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; /** * @Author ZhanGSKen@QQ.COM @@ -18,6 +21,36 @@ public class SecondaryLibraryActivity extends DrawerFragmentActivity { SecondaryLibraryFragment mSecondaryLibraryFragment; + @Override + public AppCompatActivity getActivity() { + return this; + } + + @Override + public APPInfo getAppInfo() { + return null; + } + + @Override + public String getTag() { + return null; + } + + @Override + public Toolbar initToolBar() { + return null; + } + + @Override + public boolean isAddWinBollToolBar() { + return false; + } + + @Override + public boolean isEnableDisplayHomeAsUp() { + return false; + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -43,7 +76,7 @@ public class SecondaryLibraryActivity extends DrawerFragmentActivity { public boolean onOptionsItemSelected(MenuItem item) { int nItemId = item.getItemId(); if (nItemId == R.id.item_test) { - Toast.makeText(getApplication(), "item_test", Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplicationContext(), "item_test", Toast.LENGTH_SHORT).show(); } return super.onOptionsItemSelected(item); } diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestDrawerFragmentActivity.java b/libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestDrawerFragmentActivity.java index b49c28d..3413f00 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestDrawerFragmentActivity.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestDrawerFragmentActivity.java @@ -16,14 +16,50 @@ import cc.winboll.studio.libaes.activitys.DrawerFragmentActivity; import cc.winboll.studio.libaes.beans.DrawerMenuBean; import cc.winboll.studio.libapputils.log.LogUtils; import java.util.ArrayList; +import cc.winboll.studio.libapputils.app.IWinBollActivity; +import cc.winboll.studio.libapputils.bean.APPInfo; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; -public class TestDrawerFragmentActivity extends DrawerFragmentActivity { +public class TestDrawerFragmentActivity extends DrawerFragmentActivity implements IWinBollActivity { + + @Override + public AppCompatActivity getActivity() { + return this; + } + + @Override + public APPInfo getAppInfo() { + return null; + } + + @Override + public String getTag() { + return null; + } + + @Override + public Toolbar initToolBar() { + return null; + } + + @Override + public boolean isAddWinBollToolBar() { + return false; + } + + @Override + public boolean isEnableDisplayHomeAsUp() { + return false; + } + public static final String TAG = "TestDrawerFragmentActivity"; TestFragment1 mTestFragment1; TestFragment2 mTestFragment2; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -66,7 +102,7 @@ public class TestDrawerFragmentActivity extends DrawerFragmentActivity { super.onItemClick(parent, view, position, id); switch (position) { case 0 : { - Toast.makeText(getContext(), "0", Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplicationContext(), "0", Toast.LENGTH_SHORT).show(); //LogUtils.d(TAG, "MenuItem 1"); showFragment(mTestFragment1); break; diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/utils/AESThemeUtil.java b/libaes/src/main/java/cc/winboll/studio/libaes/utils/AESThemeUtil.java index ccc22ec..1ed8022 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/utils/AESThemeUtil.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/utils/AESThemeUtil.java @@ -11,8 +11,8 @@ import android.view.Menu; import android.view.MenuItem; import androidx.appcompat.app.AppCompatActivity; import cc.winboll.studio.libaes.R; +import cc.winboll.studio.libaes.activitys.DrawerFragmentActivity; import cc.winboll.studio.libaes.beans.AESThemeBean; -import cc.winboll.studio.libapputils.app.WinBollActivity; public class AESThemeUtil { @@ -41,9 +41,9 @@ public class AESThemeUtil { activity.setTheme(getThemeTypeID(activity)); } - public static void applyWinBollTheme(T activity) { + /*public static void applyWinBollTheme(T activity) { activity.setTheme(getThemeTypeID(activity.getApplicationContext())); - } + }*/ public static void applyAppTheme(Activity activity, AESThemeBean.ThemeType themeType) { activity.setTheme(AESThemeBean.getThemeStyleID(themeType)); @@ -53,9 +53,9 @@ public class AESThemeUtil { activity.setTheme(AESThemeBean.getThemeStyleID(themeType)); } - public static void applyWinBollTheme(Activity activity, AESThemeBean.ThemeType themeType) { + /*public static void applyWinBollTheme(Activity activity, AESThemeBean.ThemeType themeType) { activity.setTheme(AESThemeBean.getThemeStyleID(themeType)); - } + }*/ public static void inflateMenu(T activity, Menu menu) { activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu); @@ -65,9 +65,9 @@ public class AESThemeUtil { activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu); } - public static void inflateWinBollMenu(T activity, Menu menu) { + /*public static void inflateWinBollMenu(T activity, Menu menu) { activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu); - } + }*/ public static boolean onAppThemeItemSelected(T activity, MenuItem item) { int nThemeStyleID; @@ -131,7 +131,38 @@ public class AESThemeUtil { return false; } - public static boolean onWinBollThemeItemSelected(T activity, MenuItem item) { + public static boolean onWinBollThemeItemSelected(T activity, MenuItem item) { + int nThemeStyleID; + if (R.id.item_depththeme == item.getItemId()) { + nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH); + saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID); + return true; + } else if (R.id.item_skytheme == item.getItemId()) { + nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY); + saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID); + return true; + } else if (R.id.item_goldentheme == item.getItemId()) { + nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN); + saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID); + return true; + } else if (R.id.item_memortheme == item.getItemId()) { + nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.MEMOR); + saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID); + return true; + } else if (R.id.item_taotheme == item.getItemId()) { + nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO); + saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID); + return true; + } else if (R.id.item_defaulttheme == item.getItemId()) { + nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES); + saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID); + return true; + } + + return false; + } + + public static boolean onWinBollThemeItemSelected(T activity, MenuItem item) { int nThemeStyleID; if (R.id.item_depththeme == item.getItemId()) { nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH); diff --git a/libaes/src/main/res/layout/activity_library.xml b/libaes/src/main/res/layout/activity_library.xml deleted file mode 100644 index 856c0cc..0000000 --- a/libaes/src/main/res/layout/activity_library.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - From b9f740c386bf424be57e545e84629c61e5848322 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 26 Feb 2025 03:40:41 +0800 Subject: [PATCH 012/243] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E9=9D=99=E9=9F=B3=E6=97=B6=E7=9A=84=E6=9D=83?= =?UTF-8?q?=E9=99=90=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=9B=BA=E5=AE=9A=E7=9A=84=E5=BA=94=E7=94=A8=E9=93=83?= =?UTF-8?q?=E5=A3=B0=E9=9F=B3=E9=87=8F=E8=AE=BE=E7=BD=AE=E3=80=82=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=E5=85=B6=E4=BB=96=E5=BA=94=E7=94=A8=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E7=9A=84=E9=93=83=E5=A3=B0=E9=9F=B3=E9=87=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contacts/build.gradle | 8 +-- contacts/build.properties | 4 +- .../contacts/activities/SettingsActivity.java | 53 +++++++++++++++++ .../studio/contacts/beans/RingTongBean.java | 28 ++++----- .../phonecallui/PhoneCallService.java | 59 +++++++++++++++---- .../contacts/receivers/MainReceiver.java | 8 +-- .../src/main/res/layout/activity_settings.xml | 26 ++++++++ 7 files changed, 150 insertions(+), 36 deletions(-) diff --git a/contacts/build.gradle b/contacts/build.gradle index 552a42a..7bf188e 100644 --- a/contacts/build.gradle +++ b/contacts/build.gradle @@ -18,13 +18,13 @@ def genVersionName(def versionName){ } android { - compileSdkVersion 32 - buildToolsVersion "33.0.3" + compileSdkVersion 30 + buildToolsVersion "30.0.3" defaultConfig { applicationId "cc.winboll.studio.contacts" - minSdkVersion 21 - targetSdkVersion 30 + minSdkVersion 26 + targetSdkVersion 29 versionCode 1 // versionName 更新后需要手动设置 // 项目模块目录的 build.gradle 文件的 stageCount=0 diff --git a/contacts/build.properties b/contacts/build.properties index 86e2b57..61d13e3 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 25 00:17:29 HKT 2025 +#Tue Feb 25 19:32:36 GMT 2025 stageCount=2 libraryProject= baseVersion=1.0 publishVersion=1.0.1 -buildCount=0 +buildCount=34 baseBetaVersion=1.0.2 diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/activities/SettingsActivity.java b/contacts/src/main/java/cc/winboll/studio/contacts/activities/SettingsActivity.java index bc54d95..bad98bc 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/activities/SettingsActivity.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/activities/SettingsActivity.java @@ -26,6 +26,8 @@ import cc.winboll.studio.libappbase.IWinBollActivity; import cc.winboll.studio.libappbase.bean.APPInfo; import com.hjq.toast.ToastUtils; import java.lang.reflect.Field; +import android.widget.SeekBar; +import android.widget.TextView; public class SettingsActivity extends AppCompatActivity implements IWinBollActivity { @@ -33,6 +35,11 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv Toolbar mToolbar; Switch swSilent; + SeekBar msbVolume; + TextView mtvVolume; + int mnStreamMaxVolume; + int mnStreamVolume; + @Override public APPInfo getAppInfo() { @@ -77,6 +84,52 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv getSupportActionBar().setDisplayHomeAsUpEnabled(true); } getSupportActionBar().setSubtitle(getTag()); + + msbVolume = findViewById(R.id.bellvolume); + mtvVolume = findViewById(R.id.tv_volume); + final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); + + // 设置SeekBar的最大值为系统铃声音量的最大刻度 + mnStreamMaxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING); + msbVolume.setMax(mnStreamMaxVolume); + // 获取当前铃声音量并设置为SeekBar的初始进度 + mnStreamVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); + msbVolume.setProgress(mnStreamVolume); + + updateStreamVolumeTextView(); + + msbVolume.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (fromUser) { + // 设置铃声音量 + audioManager.setStreamVolume(AudioManager.STREAM_RING, progress, 0); + RingTongBean bean = RingTongBean.loadBean(SettingsActivity.this, RingTongBean.class); + if (bean == null) { + bean = new RingTongBean(); + } + bean.setStreamVolume(progress); + RingTongBean.saveBean(SettingsActivity.this, bean); + mnStreamVolume = progress; + updateStreamVolumeTextView(); + //Toast.makeText(SettingsActivity.this, "音量设置为: " + progress, Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + // 当开始拖动SeekBar时的操作 + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + // 当停止拖动SeekBar时的操作 + } + }); + } + + void updateStreamVolumeTextView() { + mtvVolume.setText(String.format("%d/%d", mnStreamVolume, mnStreamMaxVolume)); } public void onDefaultPhone(View view) { diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/beans/RingTongBean.java b/contacts/src/main/java/cc/winboll/studio/contacts/beans/RingTongBean.java index 792bce4..5db7262 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/beans/RingTongBean.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/beans/RingTongBean.java @@ -12,26 +12,26 @@ import android.media.AudioManager; import android.util.JsonReader; public class RingTongBean extends BaseBean { - + public static final String TAG = "AudioRingTongBean"; - - // 模式 - int ringerMode; + + // 铃声音量 + int streamVolume; public RingTongBean() { - this.ringerMode = AudioManager.RINGER_MODE_NORMAL; + this.streamVolume = 100; } - public RingTongBean(int ringerMode) { - this.ringerMode = ringerMode; + public RingTongBean(int streamVolume) { + this.streamVolume = streamVolume; } - public void setRingerMode(int ringerMode) { - this.ringerMode = ringerMode; + public void setStreamVolume(int streamVolume) { + this.streamVolume = streamVolume; } - public int getRingerMode() { - return ringerMode; + public int getStreamVolume() { + return streamVolume; } @Override @@ -42,15 +42,15 @@ public class RingTongBean extends BaseBean { @Override public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { super.writeThisToJsonWriter(jsonWriter); - jsonWriter.name("ringerMode").value(getRingerMode()); + jsonWriter.name("streamVolume").value(getStreamVolume()); } @Override public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException { if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else { - if (name.equals("ringerMode")) { - setRingerMode(jsonReader.nextInt()); + if (name.equals("streamVolume")) { + setStreamVolume(jsonReader.nextInt()); } else { return false; } diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java b/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java index 88eb69e..b60df64 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java @@ -21,8 +21,6 @@ import cc.winboll.studio.libappbase.LogUtils; public class PhoneCallService extends InCallService { public static final String TAG = "PhoneCallService"; - - private volatile int originalRingVolume; private final Call.Callback callback = new Call.Callback() { @Override @@ -61,39 +59,78 @@ public class PhoneCallService extends InCallService { String phoneNumber = details.getHandle().getSchemeSpecificPart(); // 记录原始铃声音量 + // AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); - originalRingVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); + + // 恢复铃声音量,预防其他意外条件导致的音量变化问题 + // + + // 读取应用配置,未配置就初始化配置文件 + RingTongBean bean = RingTongBean.loadBean(this, RingTongBean.class); + if (bean == null) { + // 初始化配置 + bean = new RingTongBean(); + RingTongBean.saveBean(this, bean); + } + // 如果当前音量和应用保存的不一致就恢复为应用设定值 + // 恢复铃声音量 + try { + audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0); + //audioManager.setMode(AudioManager.RINGER_MODE_NORMAL); + } catch (java.lang.SecurityException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + } + // 检查电话接收规则 if (!Rules.getInstance(this).isAllowed(phoneNumber)) { - // 预先静音 - audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0); + // 调低音量 + try { + audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0); + //audioManager.setMode(AudioManager.RINGER_MODE_SILENT); + } catch (java.lang.SecurityException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + } // 断开电话 call.disconnect(); // 停顿1秒,预防第一声铃声响动 try { - Thread.sleep(1000); + Thread.sleep(500); } catch (InterruptedException e) { LogUtils.d(TAG, ""); } // 恢复铃声音量 - audioManager.setStreamVolume(AudioManager.STREAM_RING, originalRingVolume, 0); + try { + audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0); + //audioManager.setMode(AudioManager.RINGER_MODE_NORMAL); + } catch (java.lang.SecurityException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + } // 屏蔽电话结束 return; } + // 正常接听电话 PhoneCallActivity.actionStart(this, phoneNumber, callType); } } + void resumeStreamVolume(AudioManager audioManager, int originalRingVolume) { + // 如果当前音量和应用保存的不一致就恢复为应用设定值 + RingTongBean bean = RingTongBean.loadBean(this, RingTongBean.class); + if (bean == null) { + bean = new RingTongBean(); + } + if (originalRingVolume != bean.getStreamVolume()) { + // 恢复铃声音量 + audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0); + } + } + @Override public void onCallRemoved(Call call) { super.onCallRemoved(call); - call.unregisterCallback(callback); PhoneCallManager.call = null; - AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); - // 恢复铃声音量 - audioManager.setStreamVolume(AudioManager.STREAM_RING, originalRingVolume, 0); } public enum CallType { diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java index d1dfb52..457a8e9 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java @@ -9,13 +9,11 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.media.RingtoneManager; -import android.net.Uri; -import android.util.Log; +import android.media.AudioManager; import cc.winboll.studio.contacts.services.MainService; +import cc.winboll.studio.libappbase.LogUtils; import com.hjq.toast.ToastUtils; import java.lang.ref.WeakReference; -import cc.winboll.studio.libappbase.LogUtils; public class MainReceiver extends BroadcastReceiver { @@ -43,7 +41,7 @@ public class MainReceiver extends BroadcastReceiver { public void registerAction(Context context) { IntentFilter filter=new IntentFilter(); filter.addAction(ACTION_BOOT_COMPLETED); - //filter.addAction(Intent.ACTION_BATTERY_CHANGED); + //filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); context.registerReceiver(this, filter); } } diff --git a/contacts/src/main/res/layout/activity_settings.xml b/contacts/src/main/res/layout/activity_settings.xml index 2122230..6ce953a 100644 --- a/contacts/src/main/res/layout/activity_settings.xml +++ b/contacts/src/main/res/layout/activity_settings.xml @@ -45,6 +45,32 @@ + + + + + + + + + + From 3734a659ff0a7023b9e59a1b66eac7b4eebe37ed Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 26 Feb 2025 04:35:14 +0800 Subject: [PATCH 013/243] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=BB=E8=A6=81?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=90=AF=E5=8A=A8=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contacts/build.properties | 4 +- .../winboll/studio/contacts/MainActivity.java | 12 ++++- .../contacts/activities/SettingsActivity.java | 24 +++++++++- .../studio/contacts/services/MainService.java | 47 +++++++++++++++---- .../src/main/res/layout/activity_settings.xml | 19 ++++++++ 5 files changed, 92 insertions(+), 14 deletions(-) diff --git a/contacts/build.properties b/contacts/build.properties index 61d13e3..414eead 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 25 19:32:36 GMT 2025 +#Tue Feb 25 20:33:54 GMT 2025 stageCount=2 libraryProject= baseVersion=1.0 publishVersion=1.0.1 -buildCount=34 +buildCount=41 baseBetaVersion=1.0.2 diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java index 24f9f4f..c3241ee 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java @@ -47,6 +47,8 @@ import java.util.ArrayList; import java.util.List; import android.content.DialogInterface; import cc.winboll.studio.contacts.activities.SettingsActivity; +import cc.winboll.studio.contacts.beans.MainServiceBean; +import cc.winboll.studio.contacts.services.MainService; final public class MainActivity extends AppCompatActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener { @@ -140,7 +142,15 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct // } // } // }); - MainService.startMainService(MainActivity.this); + + MainServiceBean mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + if (mMainServiceBean == null) { + mMainServiceBean = new MainServiceBean(); + MainServiceBean.saveBean(this, mMainServiceBean); + } + if (mMainServiceBean.isEnable()) { + MainService.startMainService(this); + } } //初始化view,即显示的图片 diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/activities/SettingsActivity.java b/contacts/src/main/java/cc/winboll/studio/contacts/activities/SettingsActivity.java index bad98bc..4525b54 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/activities/SettingsActivity.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/activities/SettingsActivity.java @@ -28,6 +28,8 @@ import com.hjq.toast.ToastUtils; import java.lang.reflect.Field; import android.widget.SeekBar; import android.widget.TextView; +import cc.winboll.studio.contacts.beans.MainServiceBean; +import cc.winboll.studio.contacts.services.MainService; public class SettingsActivity extends AppCompatActivity implements IWinBollActivity { @@ -39,6 +41,7 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv TextView mtvVolume; int mnStreamMaxVolume; int mnStreamVolume; + Switch mswMainService; @Override @@ -85,6 +88,23 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv } getSupportActionBar().setSubtitle(getTag()); + mswMainService = findViewById(R.id.sw_mainservice); + MainServiceBean mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); + mswMainService.setChecked(mMainServiceBean.isEnable()); + mswMainService.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View arg0) { + // TODO: Implement this method + if (mswMainService.isChecked()) { + //ToastUtils.show("Is Checked"); + MainService.startMainService(SettingsActivity.this); + } else { + //ToastUtils.show("Not Checked"); + MainService.stopMainService(SettingsActivity.this); + } + } + }); + msbVolume = findViewById(R.id.bellvolume); mtvVolume = findViewById(R.id.tv_volume); final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); @@ -95,7 +115,7 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv // 获取当前铃声音量并设置为SeekBar的初始进度 mnStreamVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); msbVolume.setProgress(mnStreamVolume); - + updateStreamVolumeTextView(); msbVolume.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @@ -127,7 +147,7 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv } }); } - + void updateStreamVolumeTextView() { mtvVolume.setText(String.format("%d/%d", mnStreamVolume, mnStreamMaxVolume)); } diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java index 3eef1a4..9ad9eec 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java @@ -30,6 +30,9 @@ import cc.winboll.studio.libappbase.bean.APPSOSBean; import cc.winboll.studio.contacts.dun.Rules; import android.media.AudioManager; import com.hjq.toast.ToastUtils; +import java.util.Timer; +import java.util.TimerTask; +import cc.winboll.studio.contacts.beans.RingTongBean; public class MainService extends Service { @@ -48,8 +51,8 @@ public class MainService extends Service { AssistantService mAssistantService; boolean isBound = false; MainReceiver mMainReceiver; - - + Timer mStreamVolumeCheckTimer; + @Override public IBinder onBind(Intent intent) { return new MyBinder(); @@ -71,9 +74,35 @@ public class MainService extends Service { mMyServiceConnection = new MyServiceConnection(); } mMainServiceHandler = new MainServiceHandler(this); - - - + + // 铃声检查定时器 + mStreamVolumeCheckTimer = new Timer(); + mStreamVolumeCheckTimer.schedule(new TimerTask() { + @Override + public void run() { + AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); + + // 恢复铃声音量,预防其他意外条件导致的音量变化问题 + // + + // 读取应用配置,未配置就初始化配置文件 + RingTongBean bean = RingTongBean.loadBean(MainService.this, RingTongBean.class); + if (bean == null) { + // 初始化配置 + bean = new RingTongBean(); + RingTongBean.saveBean(MainService.this, bean); + } + // 如果当前音量和应用保存的不一致就恢复为应用设定值 + // 恢复铃声音量 + try { + audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0); + //audioManager.setMode(AudioManager.RINGER_MODE_NORMAL); + } catch (java.lang.SecurityException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + } + } + }, 1000, 60000); + // 运行服务内容 mainService(); } @@ -104,11 +133,11 @@ public class MainService extends Service { mMainReceiver = new MainReceiver(this); mMainReceiver.registerAction(this); } - + Rules.getInstance(this); //Rules.getInstance(this).add("18888888888", true); //Rules.getInstance(this).add("16769764848", true); - + startPhoneCallListener(); MainServiceThread.getInstance(this, mMainServiceHandler).start(); @@ -137,7 +166,7 @@ public class MainService extends Service { // LogUtils.d(TAG, "startService(intent)"); // bindService(new Intent(this, AssistantService.class), mMyServiceConnection, Context.BIND_IMPORTANT); } - + void startPhoneCallListener() { Intent callListener = new Intent(this, CallListenerService.class); startService(callListener); @@ -168,7 +197,7 @@ public class MainService extends Service { // 停止主要进程 MainServiceThread.getInstance(this, mMainServiceHandler).setIsExit(true); - + } super.onDestroy(); diff --git a/contacts/src/main/res/layout/activity_settings.xml b/contacts/src/main/res/layout/activity_settings.xml index 6ce953a..c68fcc2 100644 --- a/contacts/src/main/res/layout/activity_settings.xml +++ b/contacts/src/main/res/layout/activity_settings.xml @@ -18,6 +18,25 @@ android:layout_height="0dp" android:layout_weight="1.0"> + + + + + + + + Date: Wed, 26 Feb 2025 04:37:18 +0800 Subject: [PATCH 014/243] APK 1.0.2 release Publish. --- contacts/build.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contacts/build.properties b/contacts/build.properties index 414eead..c6dd70a 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 25 20:33:54 GMT 2025 -stageCount=2 +#Wed Feb 26 04:37:17 HKT 2025 +stageCount=3 libraryProject= baseVersion=1.0 -publishVersion=1.0.1 -buildCount=41 -baseBetaVersion=1.0.2 +publishVersion=1.0.2 +buildCount=0 +baseBetaVersion=1.0.3 From bdb9bc7637a3044669fd0798341968c18e3ed18c Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 26 Feb 2025 05:08:56 +0800 Subject: [PATCH 015/243] =?UTF-8?q?=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contacts/build.properties | 4 ++-- .../phonecallui/PhoneCallService.java | 20 +++++-------------- .../studio/contacts/services/MainService.java | 8 +++++--- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/contacts/build.properties b/contacts/build.properties index c6dd70a..ae5615e 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Feb 26 04:37:17 HKT 2025 +#Tue Feb 25 21:06:27 GMT 2025 stageCount=3 libraryProject= baseVersion=1.0 publishVersion=1.0.2 -buildCount=0 +buildCount=2 baseBetaVersion=1.0.3 diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java b/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java index b60df64..3786899 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/phonecallui/PhoneCallService.java @@ -61,7 +61,7 @@ public class PhoneCallService extends InCallService { // 记录原始铃声音量 // AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); - + int ringerVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); // 恢复铃声音量,预防其他意外条件导致的音量变化问题 // @@ -75,8 +75,10 @@ public class PhoneCallService extends InCallService { // 如果当前音量和应用保存的不一致就恢复为应用设定值 // 恢复铃声音量 try { - audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0); - //audioManager.setMode(AudioManager.RINGER_MODE_NORMAL); + if (ringerVolume != bean.getStreamVolume()) { + audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0); + //audioManager.setMode(AudioManager.RINGER_MODE_NORMAL); + } } catch (java.lang.SecurityException e) { LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); } @@ -114,18 +116,6 @@ public class PhoneCallService extends InCallService { } } - void resumeStreamVolume(AudioManager audioManager, int originalRingVolume) { - // 如果当前音量和应用保存的不一致就恢复为应用设定值 - RingTongBean bean = RingTongBean.loadBean(this, RingTongBean.class); - if (bean == null) { - bean = new RingTongBean(); - } - if (originalRingVolume != bean.getStreamVolume()) { - // 恢复铃声音量 - audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0); - } - } - @Override public void onCallRemoved(Call call) { super.onCallRemoved(call); diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java index 9ad9eec..59b2ba2 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java @@ -81,7 +81,7 @@ public class MainService extends Service { @Override public void run() { AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); - + int ringerVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); // 恢复铃声音量,预防其他意外条件导致的音量变化问题 // @@ -95,8 +95,10 @@ public class MainService extends Service { // 如果当前音量和应用保存的不一致就恢复为应用设定值 // 恢复铃声音量 try { - audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0); - //audioManager.setMode(AudioManager.RINGER_MODE_NORMAL); + if (ringerVolume != bean.getStreamVolume()) { + audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0); + //audioManager.setMode(AudioManager.RINGER_MODE_NORMAL); + } } catch (java.lang.SecurityException e) { LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); } From d4135f0104faaa65ece0888dfea869f050b08da5 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 26 Feb 2025 05:10:50 +0800 Subject: [PATCH 016/243] APK 1.0.3 release Publish. --- contacts/build.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contacts/build.properties b/contacts/build.properties index ae5615e..1e29427 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 25 21:06:27 GMT 2025 -stageCount=3 +#Wed Feb 26 05:10:50 HKT 2025 +stageCount=4 libraryProject= baseVersion=1.0 -publishVersion=1.0.2 -buildCount=2 -baseBetaVersion=1.0.3 +publishVersion=1.0.3 +buildCount=0 +baseBetaVersion=1.0.4 From 2f0293103c673204bb99f2782f98858853341fc6 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 26 Feb 2025 14:10:16 +0800 Subject: [PATCH 017/243] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=80=9A=E8=AF=9D?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=92=8C=E8=81=94=E7=B3=BB=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contacts/build.properties | 4 +- contacts/src/main/AndroidManifest.xml | 9 +- .../winboll/studio/contacts/MainActivity.java | 20 +-- .../studio/contacts/PhoneCallManager.java | 35 ----- .../contacts/adapters/CallLogAdapter.java | 61 +++++++++ .../contacts/adapters/ContactAdapter.java | 57 ++++++++ .../contacts/adapters/MyPagerAdapter.java | 4 +- .../studio/contacts/beans/CallLogModel.java | 36 +++++ .../studio/contacts/beans/ContactModel.java | 28 ++++ .../contacts/fragments/CallFragment.java | 51 ------- .../contacts/fragments/CallLogFragment.java | 125 ++++++++++++++++++ .../contacts/fragments/ContactsFragment.java | 81 ++++++++++-- .../contacts/receivers/MainReceiver.java | 2 - .../contacts/services/AssistantService.java | 2 - .../studio/contacts/services/MainService.java | 10 +- .../src/main/res/layout/fragment_call.xml | 29 ---- .../src/main/res/layout/fragment_call_log.xml | 15 +++ .../src/main/res/layout/fragment_contacts.xml | 11 +- .../src/main/res/layout/item_call_log.xml | 32 +++++ contacts/src/main/res/layout/item_contact.xml | 24 ++++ 20 files changed, 469 insertions(+), 167 deletions(-) delete mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/PhoneCallManager.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/adapters/CallLogAdapter.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/beans/CallLogModel.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/beans/ContactModel.java delete mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java create mode 100644 contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallLogFragment.java delete mode 100644 contacts/src/main/res/layout/fragment_call.xml create mode 100644 contacts/src/main/res/layout/fragment_call_log.xml create mode 100644 contacts/src/main/res/layout/item_call_log.xml create mode 100644 contacts/src/main/res/layout/item_contact.xml diff --git a/contacts/build.properties b/contacts/build.properties index 1e29427..fe4eca4 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Feb 26 05:10:50 HKT 2025 +#Wed Feb 26 06:08:35 GMT 2025 stageCount=4 libraryProject= baseVersion=1.0 publishVersion=1.0.3 -buildCount=0 +buildCount=5 baseBetaVersion=1.0.4 diff --git a/contacts/src/main/AndroidManifest.xml b/contacts/src/main/AndroidManifest.xml index 36ac1ee..ed1cce3 100644 --- a/contacts/src/main/AndroidManifest.xml +++ b/contacts/src/main/AndroidManifest.xml @@ -29,9 +29,10 @@ - - - + + + + - + \ No newline at end of file diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java index c3241ee..e301a8c 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java @@ -1,36 +1,26 @@ package cc.winboll.studio.contacts; -import android.Manifest; -import android.annotation.SuppressLint; import android.app.Activity; import android.app.ActivityManager; -import android.app.role.RoleManager; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.provider.Settings; import android.telecom.TelecomManager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.WindowManager; import android.widget.CheckBox; -import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.Switch; import android.widget.Toast; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -import androidx.core.content.ContextCompat; import androidx.viewpager.widget.ViewPager; import cc.winboll.studio.contacts.R; import cc.winboll.studio.contacts.activities.CallActivity; +import cc.winboll.studio.contacts.activities.SettingsActivity; import cc.winboll.studio.contacts.adapters.MyPagerAdapter; import cc.winboll.studio.contacts.beans.MainServiceBean; import cc.winboll.studio.contacts.services.MainService; @@ -40,15 +30,9 @@ import cc.winboll.studio.libapputils.app.IWinBollActivity; import cc.winboll.studio.libapputils.app.WinBollActivityManager; import cc.winboll.studio.libapputils.bean.APPInfo; import cc.winboll.studio.libapputils.view.YesNoAlertDialog; -import cc.winboll.studio.contacts.listenphonecall.CallListenerService; import com.google.android.material.tabs.TabLayout; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; -import android.content.DialogInterface; -import cc.winboll.studio.contacts.activities.SettingsActivity; -import cc.winboll.studio.contacts.beans.MainServiceBean; -import cc.winboll.studio.contacts.services.MainService; final public class MainActivity extends AppCompatActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener { @@ -171,7 +155,7 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct void initData() { ViewPager viewPager = findViewById(R.id.activitymainViewPager1); LayoutInflater inflater = LayoutInflater.from(getActivity()); - View view1 = inflater.inflate(R.layout.fragment_call, viewPager, false); + View view1 = inflater.inflate(R.layout.fragment_call_log, viewPager, false); View view2 = inflater.inflate(R.layout.fragment_contacts, viewPager, false); View view3 = inflater.inflate(R.layout.fragment_log, viewPager, false); diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/PhoneCallManager.java b/contacts/src/main/java/cc/winboll/studio/contacts/PhoneCallManager.java deleted file mode 100644 index 7f7292f..0000000 --- a/contacts/src/main/java/cc/winboll/studio/contacts/PhoneCallManager.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.winboll.studio.contacts; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/02/20 21:14:52 - * @Describe PhoneCallManager - */ - -import android.telecom.Call; -import android.telecom.VideoProfile; - -public class PhoneCallManager { - - public static final String TAG = "PhoneCallManager"; - - public static Call call; - - /** - * 接听电话 - */ - public void answer() { - if (call != null) { - call.answer(VideoProfile.STATE_AUDIO_ONLY); - } - } - - /** - * 断开电话,包括来电时的拒接以及接听后的挂断 - */ - public void disconnect() { - if (call != null) { - call.disconnect(); - } - } -} diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/CallLogAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/CallLogAdapter.java new file mode 100644 index 0000000..7830c2f --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/CallLogAdapter.java @@ -0,0 +1,61 @@ +package cc.winboll.studio.contacts.adapters; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/26 13:09:32 + * @Describe CallLogAdapter + */ +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cc.winboll.studio.contacts.R; +import cc.winboll.studio.contacts.beans.CallLogModel; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Locale; + +public class CallLogAdapter extends RecyclerView.Adapter { + public static final String TAG = "CallLogAdapter"; + + private List callLogList; + + public CallLogAdapter(List callLogList) { + this.callLogList = callLogList; + } + + @NonNull + @Override + public CallLogViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_call_log, parent, false); + return new CallLogViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull CallLogViewHolder holder, int position) { + CallLogModel callLog = callLogList.get(position); + holder.phoneNumber.setText(callLog.getPhoneNumber()); + holder.callStatus.setText(callLog.getCallStatus()); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); + holder.callDate.setText(dateFormat.format(callLog.getCallDate())); + } + + @Override + public int getItemCount() { + return callLogList.size(); + } + + public class CallLogViewHolder extends RecyclerView.ViewHolder { + TextView phoneNumber, callStatus, callDate; + + public CallLogViewHolder(@NonNull View itemView) { + super(itemView); + phoneNumber = itemView.findViewById(R.id.phone_number); + callStatus = itemView.findViewById(R.id.call_status); + callDate = itemView.findViewById(R.id.call_date); + } + } +} + diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java new file mode 100644 index 0000000..c1b526f --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java @@ -0,0 +1,57 @@ +package cc.winboll.studio.contacts.adapters; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/26 13:35:44 + * @Describe ContactAdapter + */ +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cc.winboll.studio.contacts.R; +import cc.winboll.studio.contacts.beans.ContactModel; +import java.util.List; + +public class ContactAdapter extends RecyclerView.Adapter { + + public static final String TAG = "ContactAdapter"; + + private List contactList; + + public ContactAdapter(List contactList) { + this.contactList = contactList; + } + + @NonNull + @Override + public ContactViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_contact, parent, false); + return new ContactViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ContactViewHolder holder, int position) { + ContactModel contact = contactList.get(position); + holder.contactName.setText(contact.getName()); + holder.contactNumber.setText(contact.getNumber()); + } + + @Override + public int getItemCount() { + return contactList.size(); + } + + public class ContactViewHolder extends RecyclerView.ViewHolder { + TextView contactName; + TextView contactNumber; + + public ContactViewHolder(@NonNull View itemView) { + super(itemView); + contactName = itemView.findViewById(R.id.contact_name); + contactNumber = itemView.findViewById(R.id.contact_number); + } + } +} diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java index 3212231..6c16c5c 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java @@ -9,7 +9,7 @@ import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; -import cc.winboll.studio.contacts.fragments.CallFragment; +import cc.winboll.studio.contacts.fragments.CallLogFragment; import cc.winboll.studio.contacts.fragments.ContactsFragment; import cc.winboll.studio.contacts.fragments.LogFragment; @@ -30,7 +30,7 @@ public class MyPagerAdapter extends FragmentPagerAdapter { } else if(position == 2) { return LogFragment.newInstance(position); } else { - return CallFragment.newInstance(position); + return CallLogFragment.newInstance(position); } } diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/beans/CallLogModel.java b/contacts/src/main/java/cc/winboll/studio/contacts/beans/CallLogModel.java new file mode 100644 index 0000000..fc371bf --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/beans/CallLogModel.java @@ -0,0 +1,36 @@ +package cc.winboll.studio.contacts.beans; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/26 13:10:57 + * @Describe CallLogModel + */ + +import java.util.Date; + +public class CallLogModel { + public static final String TAG = "CallLogModel"; + + private String phoneNumber; + private String callStatus; + private Date callDate; + + public CallLogModel(String phoneNumber, String callStatus, Date callDate) { + this.phoneNumber = phoneNumber; + this.callStatus = callStatus; + this.callDate = callDate; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public String getCallStatus() { + return callStatus; + } + + public Date getCallDate() { + return callDate; + } +} + diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/beans/ContactModel.java b/contacts/src/main/java/cc/winboll/studio/contacts/beans/ContactModel.java new file mode 100644 index 0000000..74e964e --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/beans/ContactModel.java @@ -0,0 +1,28 @@ +package cc.winboll.studio.contacts.beans; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/26 13:37:00 + * @Describe ContactModel + */ +public class ContactModel { + + public static final String TAG = "ContactModel"; + + private String name; + private String number; + + public ContactModel(String name, String number) { + this.name = name; + this.number = number; + } + + public String getName() { + return name; + } + + public String getNumber() { + return number; + } +} + diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java deleted file mode 100644 index 6acb172..0000000 --- a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java +++ /dev/null @@ -1,51 +0,0 @@ -package cc.winboll.studio.contacts.fragments; - -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/02/20 12:57:00 - * @Describe 拨号 - */ -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import androidx.fragment.app.Fragment; -import cc.winboll.studio.contacts.R; -import cc.winboll.studio.libappbase.LogView; -import androidx.annotation.Nullable; -import androidx.annotation.NonNull; -import android.widget.TextView; - -public class CallFragment extends Fragment { - - public static final String TAG = "CallFragment"; - - private static final String ARG_PAGE = "ARG_PAGE"; - private int mPage; - - public static CallFragment newInstance(int page) { - Bundle args = new Bundle(); - args.putInt(ARG_PAGE, page); - CallFragment fragment = new CallFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments()!= null) { - mPage = getArguments().getInt(ARG_PAGE); - } - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_call, container, false); - TextView textView = view.findViewById(R.id.page_text); - textView.setText("这是第 " + mPage + " 页"); - return view; - } -} diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallLogFragment.java b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallLogFragment.java new file mode 100644 index 0000000..0a97c40 --- /dev/null +++ b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallLogFragment.java @@ -0,0 +1,125 @@ +package cc.winboll.studio.contacts.fragments; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/20 12:57:00 + * @Describe 拨号 + */ +import android.Manifest; +import android.content.pm.PackageManager; +import android.database.Cursor; +import android.os.Bundle; +import android.provider.CallLog; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import cc.winboll.studio.contacts.R; +import cc.winboll.studio.contacts.adapters.CallLogAdapter; +import cc.winboll.studio.contacts.beans.CallLogModel; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class CallLogFragment extends Fragment { + + public static final String TAG = "CallFragment"; + + private static final String ARG_PAGE = "ARG_PAGE"; + private int mPage; + + private static final int REQUEST_READ_CALL_LOG = 1; + private RecyclerView recyclerView; + private CallLogAdapter callLogAdapter; + private List callLogList = new ArrayList<>(); + + public static CallLogFragment newInstance(int page) { + Bundle args = new Bundle(); + args.putInt(ARG_PAGE, page); + CallLogFragment fragment = new CallLogFragment(); + fragment.setArguments(args); + return fragment; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_call_log, container, false); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments()!= null) { + mPage = getArguments().getInt(ARG_PAGE); + } + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + recyclerView = view.findViewById(R.id.recyclerView); + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + callLogAdapter = new CallLogAdapter(callLogList); + recyclerView.setAdapter(callLogAdapter); + + if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_CALL_LOG)!= PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.READ_CALL_LOG}, REQUEST_READ_CALL_LOG); + } else { + readCallLog(); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == REQUEST_READ_CALL_LOG) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + readCallLog(); + } + } + } + + private void readCallLog() { + Cursor cursor = requireContext().getContentResolver().query( + CallLog.Calls.CONTENT_URI, + null, + null, + null, + CallLog.Calls.DATE + " DESC"); + + if (cursor!= null) { + while (cursor.moveToNext()) { + String phoneNumber = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)); + int callType = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)); + long callDateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)); + Date callDate = new Date(callDateLong); + + String callStatus = getCallStatus(callType); + + callLogList.add(new CallLogModel(phoneNumber, callStatus, callDate)); + } + cursor.close(); + callLogAdapter.notifyDataSetChanged(); + } + } + + private String getCallStatus(int callType) { + switch (callType) { + case CallLog.Calls.OUTGOING_TYPE: + return "Outgoing"; + case CallLog.Calls.INCOMING_TYPE: + return "Incoming"; + case CallLog.Calls.MISSED_TYPE: + return "Missed"; + default: + return "Unknown"; + } + } + +} diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java index 2f7dad6..08ebcef 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java @@ -5,23 +5,39 @@ package cc.winboll.studio.contacts.fragments; * @Date 2025/02/20 12:57:50 * @Describe 联系人 */ +import android.Manifest; +import android.content.pm.PackageManager; +import android.database.Cursor; import android.os.Bundle; +import android.provider.ContactsContract; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import cc.winboll.studio.contacts.R; +import cc.winboll.studio.contacts.adapters.ContactAdapter; +import cc.winboll.studio.contacts.beans.ContactModel; +import java.util.ArrayList; +import java.util.List; public class ContactsFragment extends Fragment { - + public static final String TAG = "ContactsFragment"; - + private static final String ARG_PAGE = "ARG_PAGE"; private int mPage; + private static final int REQUEST_READ_CONTACTS = 1; + private RecyclerView recyclerView; + private ContactAdapter contactAdapter; + private List contactList = new ArrayList<>(); + + public static ContactsFragment newInstance(int page) { Bundle args = new Bundle(); args.putInt(ARG_PAGE, page); @@ -33,18 +49,63 @@ public class ContactsFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (getArguments()!= null) { + if (getArguments() != null) { mPage = getArguments().getInt(ARG_PAGE); } } + + + + @Nullable @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_contacts, container, false); - TextView textView = view.findViewById(R.id.page_text); - textView.setText("这是第 " + mPage + " 页"); - return view; + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_contacts, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + recyclerView = view.findViewById(R.id.contacts_recycler_view); + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + contactAdapter = new ContactAdapter(contactList); + recyclerView.setAdapter(contactAdapter); + + if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_READ_CONTACTS); + } else { + readContacts(); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == REQUEST_READ_CONTACTS) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + readContacts(); + } + } + } + + private void readContacts() { + contactList.clear(); + Cursor cursor = requireContext().getContentResolver().query( + ContactsContract.CommonDataKinds.Phone.CONTENT_URI, + null, + null, + null, + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); + + if (cursor != null) { + while (cursor.moveToNext()) { + String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); + String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); + contactList.add(new ContactModel(name, number)); + } + cursor.close(); + contactAdapter.notifyDataSetChanged(); + } } } diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java index 457a8e9..924ddab 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java @@ -9,9 +9,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.media.AudioManager; import cc.winboll.studio.contacts.services.MainService; -import cc.winboll.studio.libappbase.LogUtils; import com.hjq.toast.ToastUtils; import java.lang.ref.WeakReference; diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/services/AssistantService.java b/contacts/src/main/java/cc/winboll/studio/contacts/services/AssistantService.java index a031f4b..6fd8673 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/services/AssistantService.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/services/AssistantService.java @@ -15,8 +15,6 @@ import android.os.IBinder; import cc.winboll.studio.contacts.beans.MainServiceBean; import cc.winboll.studio.contacts.services.MainService; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libappbase.SOS; -import cc.winboll.studio.libappbase.bean.APPSOSBean; public class AssistantService extends Service { diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java index 59b2ba2..d2c39b3 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java @@ -11,28 +11,26 @@ package cc.winboll.studio.contacts.services; * https://blog.csdn.net/cyp331203/article/details/38920491 */ import android.app.Service; -import cc.winboll.studio.contacts.listenphonecall.CallListenerService; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.media.AudioManager; import android.os.Binder; import android.os.IBinder; import cc.winboll.studio.contacts.beans.MainServiceBean; +import cc.winboll.studio.contacts.beans.RingTongBean; +import cc.winboll.studio.contacts.dun.Rules; import cc.winboll.studio.contacts.handlers.MainServiceHandler; +import cc.winboll.studio.contacts.listenphonecall.CallListenerService; import cc.winboll.studio.contacts.receivers.MainReceiver; import cc.winboll.studio.contacts.services.MainService; import cc.winboll.studio.contacts.threads.MainServiceThread; -import cc.winboll.studio.contacts.widgets.APPStatusWidget; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.SOS; import cc.winboll.studio.libappbase.bean.APPSOSBean; -import cc.winboll.studio.contacts.dun.Rules; -import android.media.AudioManager; -import com.hjq.toast.ToastUtils; import java.util.Timer; import java.util.TimerTask; -import cc.winboll.studio.contacts.beans.RingTongBean; public class MainService extends Service { diff --git a/contacts/src/main/res/layout/fragment_call.xml b/contacts/src/main/res/layout/fragment_call.xml deleted file mode 100644 index 1b8673c..0000000 --- a/contacts/src/main/res/layout/fragment_call.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - diff --git a/contacts/src/main/res/layout/fragment_call_log.xml b/contacts/src/main/res/layout/fragment_call_log.xml new file mode 100644 index 0000000..32fcbf0 --- /dev/null +++ b/contacts/src/main/res/layout/fragment_call_log.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/contacts/src/main/res/layout/fragment_contacts.xml b/contacts/src/main/res/layout/fragment_contacts.xml index aeec420..1628f8a 100644 --- a/contacts/src/main/res/layout/fragment_contacts.xml +++ b/contacts/src/main/res/layout/fragment_contacts.xml @@ -6,10 +6,9 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + + diff --git a/contacts/src/main/res/layout/item_call_log.xml b/contacts/src/main/res/layout/item_call_log.xml new file mode 100644 index 0000000..d9da032 --- /dev/null +++ b/contacts/src/main/res/layout/item_call_log.xml @@ -0,0 +1,32 @@ + + + android:padding="16dp"> + + + + + + + + + diff --git a/contacts/src/main/res/layout/item_contact.xml b/contacts/src/main/res/layout/item_contact.xml new file mode 100644 index 0000000..401c155 --- /dev/null +++ b/contacts/src/main/res/layout/item_contact.xml @@ -0,0 +1,24 @@ + + + + + + + + + From a15f6bad8f1d80a3f4cf21018f9f566af9f366c7 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 26 Feb 2025 15:09:29 +0800 Subject: [PATCH 018/243] 1509 --- contacts/build.gradle | 28 +++++------ contacts/build.properties | 4 +- .../contacts/adapters/ContactAdapter.java | 18 ++++++- .../studio/contacts/beans/ContactModel.java | 36 ++++++++++++++ .../contacts/fragments/ContactsFragment.java | 48 ++++++++++++++++--- .../src/main/res/layout/fragment_contacts.xml | 7 +++ contacts/src/main/res/layout/item_contact.xml | 43 ++++++++++------- 7 files changed, 141 insertions(+), 43 deletions(-) diff --git a/contacts/build.gradle b/contacts/build.gradle index 7bf188e..55ef8d2 100644 --- a/contacts/build.gradle +++ b/contacts/build.gradle @@ -49,23 +49,19 @@ android { } dependencies { - // 二维码使用的类库 - api 'com.google.zxing:core:3.4.1' - api 'com.journeyapps:zxing-android-embedded:3.6.0' + implementation fileTree(dir: 'libs', include: ['*.jar']) - api 'io.github.medyo:android-about-page:2.0.0' - api 'com.github.getActivity:ToastUtils:10.5' - api 'com.jcraft:jsch:0.1.55' - api 'org.jsoup:jsoup:1.13.1' - api 'com.squareup.okhttp3:okhttp:4.4.1' + // https://mvnrepository.com/artifact/com.github.open-android/pinyin4j + implementation 'com.github.open-android:pinyin4j:2.5.0' + + implementation 'io.github.medyo:android-about-page:2.0.0' + implementation 'com.github.getActivity:ToastUtils:10.5' - api 'androidx.appcompat:appcompat:1.1.0' - api 'androidx.viewpager:viewpager:1.0.0' - api 'androidx.fragment:fragment:1.1.0' - api 'com.google.android.material:material:1.4.0' + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.viewpager:viewpager:1.0.0' + implementation 'androidx.fragment:fragment:1.1.0' + implementation 'com.google.android.material:material:1.4.0' - api 'cc.winboll.studio:libapputils:9.3.2' - api 'cc.winboll.studio:libappbase:1.5.6' - - api fileTree(dir: 'libs', include: ['*.jar']) + implementation 'cc.winboll.studio:libapputils:9.3.2' + implementation 'cc.winboll.studio:libappbase:1.5.6' } diff --git a/contacts/build.properties b/contacts/build.properties index fe4eca4..769e989 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Feb 26 06:08:35 GMT 2025 +#Wed Feb 26 06:42:40 GMT 2025 stageCount=4 libraryProject= baseVersion=1.0 publishVersion=1.0.3 -buildCount=5 +buildCount=8 baseBetaVersion=1.0.4 diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java index c1b526f..b2e2950 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java @@ -5,9 +5,12 @@ package cc.winboll.studio.contacts.adapters; * @Date 2025/02/26 13:35:44 * @Describe ContactAdapter */ +import android.content.Intent; +import android.net.Uri; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; @@ -19,6 +22,7 @@ public class ContactAdapter extends RecyclerView.Adapter contactList; public ContactAdapter(List contactList) { @@ -34,9 +38,18 @@ public class ContactAdapter extends RecyclerView.Adapter contactList = new ArrayList<>(); - + private List originalContactList = new ArrayList<>(); + private EditText searchEditText; public static ContactsFragment newInstance(int page) { Bundle args = new Bundle(); @@ -54,10 +58,6 @@ public class ContactsFragment extends Fragment { } } - - - - @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -72,6 +72,22 @@ public class ContactsFragment extends Fragment { contactAdapter = new ContactAdapter(contactList); recyclerView.setAdapter(contactAdapter); + searchEditText = view.findViewById(R.id.search_edit_text); + searchEditText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + filterContacts(s.toString()); + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_READ_CONTACTS); } else { @@ -91,6 +107,7 @@ public class ContactsFragment extends Fragment { private void readContacts() { contactList.clear(); + originalContactList.clear(); Cursor cursor = requireContext().getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, @@ -102,10 +119,29 @@ public class ContactsFragment extends Fragment { while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); - contactList.add(new ContactModel(name, number)); + ContactModel contact = new ContactModel(name, number); + contactList.add(contact); + originalContactList.add(contact); } cursor.close(); contactAdapter.notifyDataSetChanged(); } } + + private void filterContacts(String query) { + contactList.clear(); + if (query.isEmpty()) { + contactList.addAll(originalContactList); + } else { + for (ContactModel contact : originalContactList) { + if (contact.getName().toLowerCase().contains(query.toLowerCase()) || + contact.getPinyin().toLowerCase().contains(query.toLowerCase()) || + contact.getNumber().toLowerCase().contains(query.toLowerCase())) { + contactList.add(contact); + } + } + } + contactAdapter.notifyDataSetChanged(); + } } + diff --git a/contacts/src/main/res/layout/fragment_contacts.xml b/contacts/src/main/res/layout/fragment_contacts.xml index 1628f8a..b2769a6 100644 --- a/contacts/src/main/res/layout/fragment_contacts.xml +++ b/contacts/src/main/res/layout/fragment_contacts.xml @@ -6,6 +6,13 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + - + - + - + + +