Compare commits
5 Commits
mymessagem
...
contacts-v
| Author | SHA1 | Date | |
|---|---|---|---|
| de94b23acb | |||
| 6f80e86031 | |||
| 09854f3333 | |||
| 498b2e0eae | |||
| 0800a0e935 |
@@ -29,26 +29,29 @@ android {
|
|||||||
// versionName 更新后需要手动设置
|
// versionName 更新后需要手动设置
|
||||||
// 项目模块目录的 build.gradle 文件的 stageCount=0
|
// 项目模块目录的 build.gradle 文件的 stageCount=0
|
||||||
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
|
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
|
||||||
versionName "15.3"
|
versionName "15.12"
|
||||||
if(true) {
|
if(true) {
|
||||||
versionName = genVersionName("${versionName}")
|
versionName = genVersionName("${versionName}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
// 米盟 SDK
|
||||||
release {
|
packagingOptions {
|
||||||
minifyEnabled false
|
doNotStrip "*/*/libmimo_1011.so"
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api fileTree(dir: 'libs', include: ['*.jar'])
|
|
||||||
api 'cc.winboll.studio:libaes:15.9.3'
|
// 米盟
|
||||||
api 'cc.winboll.studio:libapputils:15.8.5'
|
api 'com.miui.zeus:mimo-ad-sdk:5.3.+'//请使用最新版sdk
|
||||||
api 'cc.winboll.studio:libappbase:15.9.5'
|
//注意:以下5个库必须要引入
|
||||||
|
//api 'androidx.appcompat:appcompat:1.4.1'
|
||||||
|
api 'androidx.recyclerview:recyclerview:1.0.0'
|
||||||
|
api 'com.google.code.gson:gson:2.8.5'
|
||||||
|
api 'com.github.bumptech.glide:glide:4.9.0'
|
||||||
|
//annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
|
||||||
|
|
||||||
// 权限请求框架:https://github.com/getActivity/XXPermissions
|
// 权限请求框架:https://github.com/getActivity/XXPermissions
|
||||||
api 'com.github.getActivity:XXPermissions:18.63'
|
api 'com.github.getActivity:XXPermissions:18.63'
|
||||||
// 下拉控件
|
// 下拉控件
|
||||||
@@ -65,8 +68,6 @@ dependencies {
|
|||||||
api 'com.journeyapps:zxing-android-embedded:3.6.0'
|
api 'com.journeyapps:zxing-android-embedded:3.6.0'
|
||||||
// 应用介绍页类库
|
// 应用介绍页类库
|
||||||
api 'io.github.medyo:android-about-page:2.0.0'
|
api 'io.github.medyo:android-about-page:2.0.0'
|
||||||
// 吐司类库
|
|
||||||
//api 'com.github.getActivity:ToastUtils:10.5'
|
|
||||||
// 网络连接类库
|
// 网络连接类库
|
||||||
api 'com.squareup.okhttp3:okhttp:4.4.1'
|
api 'com.squareup.okhttp3:okhttp:4.4.1'
|
||||||
|
|
||||||
@@ -84,4 +85,15 @@ dependencies {
|
|||||||
//api 'androidx.vectordrawable:vectordrawable:1.1.0'
|
//api 'androidx.vectordrawable:vectordrawable:1.1.0'
|
||||||
//api 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
|
//api 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
|
||||||
//api 'androidx.fragment:fragment:1.1.0'
|
//api 'androidx.fragment:fragment:1.1.0'
|
||||||
|
|
||||||
|
|
||||||
|
// WinBoLL库 nexus.winboll.cc 地址
|
||||||
|
//api 'cc.winboll.studio:libaes:15.12.0'
|
||||||
|
//api 'cc.winboll.studio:libappbase:15.12.2'
|
||||||
|
|
||||||
|
// WinBoLL备用库 jitpack.io 地址
|
||||||
|
api 'com.github.ZhanGSKen:AES:aes-v15.12.3'
|
||||||
|
api 'com.github.ZhanGSKen:APPBase:appbase-v15.12.2'
|
||||||
|
|
||||||
|
api fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Mon Nov 03 12:01:02 HKT 2025
|
#Mon Dec 08 19:48:26 HKT 2025
|
||||||
stageCount=22
|
stageCount=1
|
||||||
libraryProject=
|
libraryProject=
|
||||||
baseVersion=15.3
|
baseVersion=15.12
|
||||||
publishVersion=15.3.21
|
publishVersion=15.12.0
|
||||||
buildCount=0
|
buildCount=0
|
||||||
baseBetaVersion=15.3.22
|
baseBetaVersion=15.12.1
|
||||||
|
|||||||
138
contacts/proguard-rules.pro
vendored
138
contacts/proguard-rules.pro
vendored
@@ -9,9 +9,135 @@
|
|||||||
|
|
||||||
# Add any project specific keep options here:
|
# Add any project specific keep options here:
|
||||||
|
|
||||||
# If your project uses WebView with JS, uncomment the following
|
# ============================== 基础通用规则 ==============================
|
||||||
# and specify the fully qualified class name to the JavaScript interface
|
# 保留系统组件
|
||||||
# class:
|
-keep public class * extends android.app.Activity
|
||||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
-keep public class * extends android.app.Service
|
||||||
# public *;
|
-keep public class * extends android.content.BroadcastReceiver
|
||||||
#}
|
-keep public class * extends android.content.ContentProvider
|
||||||
|
-keep public class * extends android.app.backup.BackupAgentHelper
|
||||||
|
-keep public class * extends android.preference.Preference
|
||||||
|
|
||||||
|
# 保留 WinBoLL 核心包及子类(合并简化规则)
|
||||||
|
-keep class cc.winboll.studio.** { *; }
|
||||||
|
-keepclassmembers class cc.winboll.studio.** { *; }
|
||||||
|
|
||||||
|
# 保留所有类中的 public static final String TAG 字段(便于日志定位)
|
||||||
|
-keepclassmembers class * {
|
||||||
|
public static final java.lang.String TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 保留序列化类(避免Parcelable/Gson解析异常)
|
||||||
|
-keep class * implements android.os.Parcelable {
|
||||||
|
public static final android.os.Parcelable$Creator *;
|
||||||
|
}
|
||||||
|
-keepclassmembers class * implements java.io.Serializable {
|
||||||
|
static final long serialVersionUID;
|
||||||
|
private static final java.io.ObjectStreamField[] serialPersistentFields;
|
||||||
|
private void writeObject(java.io.ObjectOutputStream);
|
||||||
|
private void readObject(java.io.ObjectInputStream);
|
||||||
|
java.lang.Object writeReplace();
|
||||||
|
java.lang.Object readResolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
# 保留 R 文件(避免资源ID混淆)
|
||||||
|
-keepclassmembers class **.R$* {
|
||||||
|
public static <fields>;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 保留 native 方法(避免JNI调用失败)
|
||||||
|
-keepclasseswithmembernames class * {
|
||||||
|
native <methods>;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 保留注解和泛型(避免反射/序列化异常)
|
||||||
|
-keepattributes *Annotation*
|
||||||
|
-keepattributes Signature
|
||||||
|
|
||||||
|
# 屏蔽 Java 8+ 警告(适配 Java 7 语法)
|
||||||
|
-dontwarn java.lang.invoke.*
|
||||||
|
-dontwarn android.support.v8.renderscript.*
|
||||||
|
-dontwarn java.util.function.**
|
||||||
|
|
||||||
|
# ============================== 第三方框架专项规则 ==============================
|
||||||
|
# OkHttp 4.4.1(米盟广告请求依赖,完善Lambda兼容)
|
||||||
|
-keep class okhttp3.** { *; }
|
||||||
|
-keep interface okhttp3.** { *; }
|
||||||
|
-keep class okhttp3.internal.** { *; }
|
||||||
|
-keep class okio.** { *; }
|
||||||
|
-dontwarn okhttp3.internal.platform.**
|
||||||
|
-dontwarn okio.**
|
||||||
|
# ============================== 必要补充规则 ==============================
|
||||||
|
# OkHttp 4.4.1 补充规则(Java 7 兼容)
|
||||||
|
-keep class okhttp3.internal.concurrent.** { *; }
|
||||||
|
-keep class okhttp3.internal.connection.** { *; }
|
||||||
|
-dontwarn okhttp3.internal.concurrent.TaskRunner
|
||||||
|
-dontwarn okhttp3.internal.connection.RealCall
|
||||||
|
|
||||||
|
# Glide 4.9.0(米盟广告图片加载依赖)
|
||||||
|
-keep public class * implements com.bumptech.glide.module.GlideModule
|
||||||
|
-keep public class * extends com.bumptech.glide.module.AppGlideModule
|
||||||
|
-keep public enum com.bumptech.glide.load.ImageHeaderParser$ImageType {
|
||||||
|
**[] $VALUES;
|
||||||
|
public *;
|
||||||
|
}
|
||||||
|
-keepclassmembers class * implements com.bumptech.glide.module.AppGlideModule {
|
||||||
|
<init>();
|
||||||
|
}
|
||||||
|
-dontwarn com.bumptech.glide.**
|
||||||
|
|
||||||
|
# Gson 2.8.5(米盟广告数据序列化依赖)
|
||||||
|
-keep class com.google.gson.** { *; }
|
||||||
|
-keep interface com.google.gson.** { *; }
|
||||||
|
-keepclassmembers class * {
|
||||||
|
@com.google.gson.annotations.SerializedName <fields>;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 米盟 SDK(核心广告组件,完整保留避免加载失败)
|
||||||
|
-keep class com.miui.zeus.** { *; }
|
||||||
|
-keep interface com.miui.zeus.** { *; }
|
||||||
|
# 保留米盟日志字段(便于广告加载失败排查)
|
||||||
|
-keepclassmembers class com.miui.zeus.mimo.sdk.** {
|
||||||
|
public static final java.lang.String TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
# RecyclerView 1.0.0(米盟广告布局渲染依赖)
|
||||||
|
-keep class androidx.recyclerview.** { *; }
|
||||||
|
-keep interface androidx.recyclerview.** { *; }
|
||||||
|
-keepclassmembers class androidx.recyclerview.widget.RecyclerView$Adapter {
|
||||||
|
public *;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 其他第三方框架(按引入依赖保留,无则可删除)
|
||||||
|
# XXPermissions 18.63
|
||||||
|
-keep class com.hjq.permissions.** { *; }
|
||||||
|
-keep interface com.hjq.permissions.** { *; }
|
||||||
|
|
||||||
|
# ZXing 二维码(核心解析组件)
|
||||||
|
-keep class com.google.zxing.** { *; }
|
||||||
|
-keep class com.journeyapps.zxing.** { *; }
|
||||||
|
|
||||||
|
# Jsoup HTML解析
|
||||||
|
-keep class org.jsoup.** { *; }
|
||||||
|
|
||||||
|
# Pinyin4j 拼音搜索
|
||||||
|
-keep class net.sourceforge.pinyin4j.** { *; }
|
||||||
|
|
||||||
|
# JSch SSH组件
|
||||||
|
-keep class com.jcraft.jsch.** { *; }
|
||||||
|
|
||||||
|
# AndroidX 基础组件
|
||||||
|
-keep class androidx.appcompat.** { *; }
|
||||||
|
-keep interface androidx.appcompat.** { *; }
|
||||||
|
|
||||||
|
# ============================== 优化与调试配置 ==============================
|
||||||
|
# 优化级别(平衡混淆效果与性能)
|
||||||
|
-optimizationpasses 5
|
||||||
|
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
|
||||||
|
|
||||||
|
# 调试辅助(保留行号便于崩溃定位)
|
||||||
|
-verbose
|
||||||
|
-dontpreverify
|
||||||
|
-dontusemixedcaseclassnames
|
||||||
|
-keepattributes SourceFile,LineNumberTable
|
||||||
|
|
||||||
|
|||||||
@@ -183,7 +183,7 @@
|
|||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||||
android:resource="@xml/studio_provider"/>
|
android:resource="@xml/file_provider"/>
|
||||||
|
|
||||||
</provider>
|
</provider>
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,9 @@ package cc.winboll.studio.contacts;
|
|||||||
* @Date 2024/12/08 15:10:51
|
* @Date 2024/12/08 15:10:51
|
||||||
* @Describe 全局应用类
|
* @Describe 全局应用类
|
||||||
*/
|
*/
|
||||||
import android.view.Gravity;
|
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
||||||
import cc.winboll.studio.libappbase.GlobalApplication;
|
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import cc.winboll.studio.libappbase.winboll.WinBoLLActivityManager;
|
|
||||||
|
|
||||||
public class App extends GlobalApplication {
|
public class App extends GlobalApplication {
|
||||||
|
|
||||||
@@ -16,22 +15,14 @@ public class App extends GlobalApplication {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
// 必须在调用基类前设置应用调试标志,
|
// 设置应用调试标志
|
||||||
// 这样可以预先设置日志与数据的存储根目录。
|
setIsDebugging(BuildConfig.DEBUG);
|
||||||
//setIsDebuging(BuildConfig.DEBUG);
|
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
// 设置 WinBoLL 应用 UI 类型
|
|
||||||
getWinBoLLActivityManager().setWinBoLLUI_TYPE(WinBoLLActivityManager.WinBoLLUI_TYPE.Aplication);
|
// 初始化窗口管理类
|
||||||
|
WinBoLLActivityManager.init(this);
|
||||||
//LogUtils.d(TAG, "onCreate");
|
|
||||||
|
|
||||||
// 初始化 Toast 框架
|
// 初始化 Toast 框架
|
||||||
ToastUtils.init(this);
|
ToastUtils.init(this);
|
||||||
// 设置 Toast 布局样式
|
|
||||||
//ToastUtils.setView(R.layout.toast_custom_view);
|
|
||||||
//ToastUtils.setStyle(new WhiteToastStyle());
|
|
||||||
//ToastUtils.setGravity(Gravity.BOTTOM, 0, 200);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ import cc.winboll.studio.contacts.fragments.ContactsFragment;
|
|||||||
import cc.winboll.studio.contacts.fragments.LogFragment;
|
import cc.winboll.studio.contacts.fragments.LogFragment;
|
||||||
import cc.winboll.studio.contacts.services.MainService;
|
import cc.winboll.studio.contacts.services.MainService;
|
||||||
import cc.winboll.studio.contacts.utils.AppGoToSettingsUtil;
|
import cc.winboll.studio.contacts.utils.AppGoToSettingsUtil;
|
||||||
|
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
||||||
|
import cc.winboll.studio.libaes.views.ADsBannerView;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.LogView;
|
import cc.winboll.studio.libappbase.LogView;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
|
||||||
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
|
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -57,6 +57,8 @@ final public class MainActivity extends AppCompatActivity implements IWinBoLLAct
|
|||||||
public static final String ACTION_SOS = "cc.winboll.studio.libappbase.WinBoLL.ACTION_SOS";
|
public static final String ACTION_SOS = "cc.winboll.studio.libappbase.WinBoLL.ACTION_SOS";
|
||||||
|
|
||||||
static MainActivity _MainActivity;
|
static MainActivity _MainActivity;
|
||||||
|
ADsBannerView mADsBannerView;
|
||||||
|
|
||||||
LogView mLogView;
|
LogView mLogView;
|
||||||
Toolbar mToolbar;
|
Toolbar mToolbar;
|
||||||
CheckBox cbMainService;
|
CheckBox cbMainService;
|
||||||
@@ -105,6 +107,9 @@ final public class MainActivity extends AppCompatActivity implements IWinBoLLAct
|
|||||||
initUIAndLogic(savedInstanceState);
|
initUIAndLogic(savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 米盟广告栏
|
||||||
|
mADsBannerView = findViewById(R.id.adsbanner);
|
||||||
|
|
||||||
//ToastUtils.show("onCreate");
|
//ToastUtils.show("onCreate");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,7 +298,10 @@ final public class MainActivity extends AppCompatActivity implements IWinBoLLAct
|
|||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
LogUtils.d(TAG, "onDestroy() SOS");
|
|
||||||
|
if (mADsBannerView != null) {
|
||||||
|
mADsBannerView.releaseAdResources();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -314,6 +322,10 @@ final public class MainActivity extends AppCompatActivity implements IWinBoLLAct
|
|||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
|
if (mADsBannerView != null) {
|
||||||
|
mADsBannerView.resumeADs(MainActivity.this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDefaultPhoneCallApp() {
|
public boolean isDefaultPhoneCallApp() {
|
||||||
|
|||||||
@@ -13,10 +13,11 @@ import android.widget.LinearLayout;
|
|||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import cc.winboll.studio.contacts.R;
|
import cc.winboll.studio.contacts.R;
|
||||||
import cc.winboll.studio.libaes.winboll.APPInfo;
|
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
||||||
import cc.winboll.studio.libaes.winboll.AboutView;
|
import cc.winboll.studio.libaes.models.APPInfo;
|
||||||
|
import cc.winboll.studio.libaes.views.AboutView;
|
||||||
import cc.winboll.studio.libappbase.GlobalApplication;
|
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||||
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
|
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
||||||
|
|
||||||
public class AboutActivity extends AppCompatActivity implements IWinBoLLActivity {
|
public class AboutActivity extends AppCompatActivity implements IWinBoLLActivity {
|
||||||
|
|
||||||
@@ -65,13 +66,13 @@ public class AboutActivity extends AppCompatActivity implements IWinBoLLActivity
|
|||||||
);
|
);
|
||||||
layout.addView(aboutView, params);
|
layout.addView(aboutView, params);
|
||||||
|
|
||||||
GlobalApplication.getWinBoLLActivityManager().add(this);
|
WinBoLLActivityManager.getInstance().add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
GlobalApplication.getWinBoLLActivityManager().registeRemove(this);
|
WinBoLLActivityManager.getInstance().registeRemove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AboutView CreateAboutView() {
|
public AboutView CreateAboutView() {
|
||||||
@@ -80,11 +81,11 @@ public class AboutActivity extends AppCompatActivity implements IWinBoLLActivity
|
|||||||
appInfo.setAppName("Contacts");
|
appInfo.setAppName("Contacts");
|
||||||
appInfo.setAppIcon(cc.winboll.studio.libaes.R.drawable.ic_winboll);
|
appInfo.setAppIcon(cc.winboll.studio.libaes.R.drawable.ic_winboll);
|
||||||
appInfo.setAppDescription("这是可以根据正则表达式匹配拦截骚扰电话的手机拨号应用。");
|
appInfo.setAppDescription("这是可以根据正则表达式匹配拦截骚扰电话的手机拨号应用。");
|
||||||
appInfo.setAppGitName("APPBase");
|
appInfo.setAppGitName("WinBoLL");
|
||||||
appInfo.setAppGitOwner("Studio");
|
appInfo.setAppGitOwner("Studio");
|
||||||
appInfo.setAppGitAPPBranch(szBranchName);
|
appInfo.setAppGitAPPBranch(szBranchName);
|
||||||
appInfo.setAppGitAPPSubProjectFolder(szBranchName);
|
appInfo.setAppGitAPPSubProjectFolder(szBranchName);
|
||||||
appInfo.setAppHomePage("https://discuz.winboll.cc/forum.php?mod=viewthread&tid=4&extra=page%3D1");
|
appInfo.setAppHomePage("https://www.winboll.cc/apks/index.php?project=Contacts");
|
||||||
appInfo.setAppAPKName("Contacts");
|
appInfo.setAppAPKName("Contacts");
|
||||||
appInfo.setAppAPKFolderName("Contacts");
|
appInfo.setAppAPKFolderName("Contacts");
|
||||||
return new AboutView(mContext, appInfo);
|
return new AboutView(mContext, appInfo);
|
||||||
|
|||||||
@@ -35,9 +35,10 @@ import cc.winboll.studio.contacts.bobulltoon.TomCat;
|
|||||||
import cc.winboll.studio.contacts.dun.Rules;
|
import cc.winboll.studio.contacts.dun.Rules;
|
||||||
import cc.winboll.studio.contacts.services.MainService;
|
import cc.winboll.studio.contacts.services.MainService;
|
||||||
import cc.winboll.studio.contacts.views.DuInfoTextView;
|
import cc.winboll.studio.contacts.views.DuInfoTextView;
|
||||||
|
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
||||||
|
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -242,14 +243,17 @@ public class SettingsActivity extends AppCompatActivity implements IWinBoLLActiv
|
|||||||
ToastUtils.show("悬浮窗已开启");
|
ToastUtils.show("悬浮窗已开启");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onCleanBoBullToonData(View view) {
|
||||||
|
TomCat tomCat = TomCat.getInstance(this);
|
||||||
|
tomCat.cleanBoBullToon();
|
||||||
|
}
|
||||||
|
|
||||||
public void onResetBoBullToonURL(View view) {
|
public void onResetBoBullToonURL(View view) {
|
||||||
Rules.getInstance(this).resetDefaultBoBullToonURL();
|
Rules.getInstance(this).resetDefaultBoBullToonURL();
|
||||||
EditText etBoBullToonURL = findViewById(R.id.bobulltoonurl_et);
|
EditText etBoBullToonURL = findViewById(R.id.bobulltoonurl_et);
|
||||||
etBoBullToonURL.setText(Rules.getInstance(this).getBoBullToonURL());
|
etBoBullToonURL.setText(Rules.getInstance(this).getBoBullToonURL());
|
||||||
|
ToastUtils.show("已重置 BoBullToon URL。");
|
||||||
final TomCat tomCat = TomCat.getInstance(this);
|
|
||||||
tomCat.cleanBoBullToon();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDownloadBoBullToon(View view) {
|
public void onDownloadBoBullToon(View view) {
|
||||||
@@ -263,6 +267,7 @@ public class SettingsActivity extends AppCompatActivity implements IWinBoLLActiv
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (tomCat.downloadBoBullToon()) {
|
if (tomCat.downloadBoBullToon()) {
|
||||||
|
ToastUtils.show("BoBullToon downlaod OK!");
|
||||||
LogUtils.d(TAG, "BoBullToon downlaod OK!");
|
LogUtils.d(TAG, "BoBullToon downlaod OK!");
|
||||||
MainService.restartMainService(SettingsActivity.this);
|
MainService.restartMainService(SettingsActivity.this);
|
||||||
Rules.getInstance(SettingsActivity.this).reload();
|
Rules.getInstance(SettingsActivity.this).reload();
|
||||||
@@ -335,10 +340,10 @@ public class SettingsActivity extends AppCompatActivity implements IWinBoLLActiv
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onAbout(View view) {
|
public void onAbout(View view) {
|
||||||
App.getWinBoLLActivityManager().startWinBoLLActivity(this, AboutActivity.class);
|
WinBoLLActivityManager.getInstance().startWinBoLLActivity(this, AboutActivity.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onLogView(View view) {
|
public void onLogView(View view) {
|
||||||
App.getWinBoLLActivityManager().startLogActivity(this);
|
WinBoLLActivityManager.getInstance().startLogActivity(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ import android.app.Activity;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import cc.winboll.studio.libaes.beans.AESThemeBean;
|
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
||||||
|
import cc.winboll.studio.libaes.models.AESThemeBean;
|
||||||
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
||||||
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
|
|
||||||
|
|
||||||
public class WinBollActivity extends AppCompatActivity implements IWinBoLLActivity {
|
public class WinBollActivity extends AppCompatActivity implements IWinBoLLActivity {
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import cc.winboll.studio.contacts.R;
|
|||||||
import cc.winboll.studio.contacts.beans.CallLogModel;
|
import cc.winboll.studio.contacts.beans.CallLogModel;
|
||||||
import cc.winboll.studio.contacts.utils.ContactUtils;
|
import cc.winboll.studio.contacts.utils.ContactUtils;
|
||||||
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import cc.winboll.studio.contacts.R;
|
|||||||
import cc.winboll.studio.contacts.beans.ContactModel;
|
import cc.winboll.studio.contacts.beans.ContactModel;
|
||||||
import cc.winboll.studio.contacts.utils.ContactUtils;
|
import cc.winboll.studio.contacts.utils.ContactUtils;
|
||||||
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactViewHolder> {
|
public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactViewHolder> {
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ import cc.winboll.studio.contacts.R;
|
|||||||
import cc.winboll.studio.contacts.beans.PhoneConnectRuleModel;
|
import cc.winboll.studio.contacts.beans.PhoneConnectRuleModel;
|
||||||
import cc.winboll.studio.contacts.dun.Rules;
|
import cc.winboll.studio.contacts.dun.Rules;
|
||||||
import cc.winboll.studio.contacts.views.LeftScrollView;
|
import cc.winboll.studio.contacts.views.LeftScrollView;
|
||||||
import cc.winboll.studio.libappbase.dialogs.YesNoAlertDialog;
|
import cc.winboll.studio.libaes.dialogs.YesNoAlertDialog;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import android.content.Context;
|
|||||||
import cc.winboll.studio.contacts.R;
|
import cc.winboll.studio.contacts.R;
|
||||||
import cc.winboll.studio.contacts.dun.Rules;
|
import cc.winboll.studio.contacts.dun.Rules;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileFilter;
|
import java.io.FileFilter;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import cc.winboll.studio.contacts.R;
|
|||||||
import cc.winboll.studio.contacts.adapters.ContactAdapter;
|
import cc.winboll.studio.contacts.adapters.ContactAdapter;
|
||||||
import cc.winboll.studio.contacts.beans.ContactModel;
|
import cc.winboll.studio.contacts.beans.ContactModel;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import cc.winboll.studio.contacts.services.MainService;
|
import cc.winboll.studio.contacts.services.MainService;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
public class MainReceiver extends BroadcastReceiver {
|
public class MainReceiver extends BroadcastReceiver {
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import android.content.ServiceConnection;
|
|||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import cc.winboll.studio.contacts.App;
|
|
||||||
import cc.winboll.studio.contacts.beans.MainServiceBean;
|
import cc.winboll.studio.contacts.beans.MainServiceBean;
|
||||||
import cc.winboll.studio.contacts.beans.RingTongBean;
|
import cc.winboll.studio.contacts.beans.RingTongBean;
|
||||||
import cc.winboll.studio.contacts.bobulltoon.TomCat;
|
import cc.winboll.studio.contacts.bobulltoon.TomCat;
|
||||||
@@ -29,8 +28,6 @@ import cc.winboll.studio.contacts.receivers.MainReceiver;
|
|||||||
import cc.winboll.studio.contacts.services.MainService;
|
import cc.winboll.studio.contacts.services.MainService;
|
||||||
import cc.winboll.studio.contacts.threads.MainServiceThread;
|
import cc.winboll.studio.contacts.threads.MainServiceThread;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.sos.SOS;
|
|
||||||
import cc.winboll.studio.libappbase.winboll.WinBoLL;
|
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
|
||||||
@@ -129,11 +126,11 @@ public class MainService extends Service {
|
|||||||
// 唤醒守护进程
|
// 唤醒守护进程
|
||||||
wakeupAndBindAssistant();
|
wakeupAndBindAssistant();
|
||||||
// 召唤 WinBoLL APP 绑定本服务
|
// 召唤 WinBoLL APP 绑定本服务
|
||||||
if (App.isDebuging()) {
|
// if (App.isDebugging()) {
|
||||||
WinBoLL.bindToAPPBaseBeta(this, MainService.class.getName());
|
// WinBoLL.bindToAPPBaseBeta(this, MainService.class.getName());
|
||||||
} else {
|
// } else {
|
||||||
WinBoLL.bindToAPPBase(this, MainService.class.getName());
|
// WinBoLL.bindToAPPBase(this, MainService.class.getName());
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 初始化服务运行参数
|
// 初始化服务运行参数
|
||||||
_TomCat = TomCat.getInstance(this);
|
_TomCat = TomCat.getInstance(this);
|
||||||
@@ -239,11 +236,11 @@ public class MainService extends Service {
|
|||||||
if (mMainServiceBean.isEnable()) {
|
if (mMainServiceBean.isEnable()) {
|
||||||
// 唤醒守护进程
|
// 唤醒守护进程
|
||||||
wakeupAndBindAssistant();
|
wakeupAndBindAssistant();
|
||||||
if (App.isDebuging()) {
|
// if (App.isDebuging()) {
|
||||||
SOS.sosToAppBase(getApplicationContext(), MainService.class.getName());
|
// SOS.sosToAppBase(getApplicationContext(), MainService.class.getName());
|
||||||
} else {
|
// } else {
|
||||||
SOS.sosToAppBaseBeta(getApplicationContext(), MainService.class.getName());
|
// SOS.sosToAppBaseBeta(getApplicationContext(), MainService.class.getName());
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
isBound = false;
|
isBound = false;
|
||||||
mAssistantService = null;
|
mAssistantService = null;
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import android.database.Cursor;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import android.content.Intent;
|
|||||||
import android.widget.RemoteViews;
|
import android.widget.RemoteViews;
|
||||||
import cc.winboll.studio.contacts.R;
|
import cc.winboll.studio.contacts.R;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.utils.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
|
|
||||||
public class APPStatusWidget extends AppWidgetProvider {
|
public class APPStatusWidget extends AppWidgetProvider {
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,11 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/activitymainToolbar1"/>
|
android:id="@+id/activitymainToolbar1"/>
|
||||||
|
|
||||||
|
<cc.winboll.studio.libaes.views.ADsBannerView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/adsbanner"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -195,30 +195,48 @@
|
|||||||
android:text="拨不通电话记录查询:"/>
|
android:text="拨不通电话记录查询:"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="right"
|
android:gravity="right"
|
||||||
android:layout_margin="10dp">
|
android:layout_margin="10dp">
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:layout_width="0dp"
|
android:layout_width="match_parent"
|
||||||
android:ems="10"
|
android:ems="10"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1.0"
|
|
||||||
android:id="@+id/bobulltoonurl_et"/>
|
android:id="@+id/bobulltoonurl_et"/>
|
||||||
|
|
||||||
<Button
|
<HorizontalScrollView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content">
|
||||||
android:text="重置地址"
|
|
||||||
android:onClick="onResetBoBullToonURL"/>
|
|
||||||
|
|
||||||
<Button
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:orientation="horizontal"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:text="下载数据"
|
android:layout_height="wrap_content">
|
||||||
android:onClick="onDownloadBoBullToon"/>
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="下载数据"
|
||||||
|
android:onClick="onDownloadBoBullToon"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="清空 BoBullToon 数据"
|
||||||
|
android:onClick="onCleanBoBullToonData"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="重置地址"
|
||||||
|
android:onClick="onResetBoBullToonURL"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</HorizontalScrollView>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@@ -318,6 +336,11 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="其他:"/>
|
android:text="其他:"/>
|
||||||
|
|
||||||
|
<cc.winboll.studio.libaes.views.ADsControlView
|
||||||
|
android:id="@+id/ads_control_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<string name="app_name">Contacts</string>
|
<string name="app_name">Contacts</string>
|
||||||
<string name="default_bobulltoon_url">https://gitee.com/zhangsken/bobulltoon/repository/archive/main.zip</string>
|
<string name="default_bobulltoon_url">https://gitea.winboll.cc/Studio/BoBullToon/archive/main.zip</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -29,30 +29,28 @@ android {
|
|||||||
// versionName 更新后需要手动设置
|
// versionName 更新后需要手动设置
|
||||||
// .winboll/winbollBuildProps.properties 文件的 stageCount=0
|
// .winboll/winbollBuildProps.properties 文件的 stageCount=0
|
||||||
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
|
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
|
||||||
versionName "15.12"
|
versionName "15.3"
|
||||||
if(true) {
|
if(true) {
|
||||||
versionName = genVersionName("${versionName}")
|
versionName = genVersionName("${versionName}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 米盟 SDK
|
buildTypes {
|
||||||
packagingOptions {
|
release {
|
||||||
doNotStrip "*/*/libmimo_1011.so"
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
api fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
// 米盟
|
api 'cc.winboll.studio:libaes:15.9.3'
|
||||||
api 'com.miui.zeus:mimo-ad-sdk:5.3.+'//请使用最新版sdk
|
api 'cc.winboll.studio:libapputils:15.8.6'
|
||||||
//注意:以下5个库必须要引入
|
api 'cc.winboll.studio:libappbase:15.9.5'
|
||||||
//api 'androidx.appcompat:appcompat:1.4.1'
|
|
||||||
api 'androidx.recyclerview:recyclerview:1.0.0'
|
|
||||||
api 'com.google.code.gson:gson:2.8.5'
|
|
||||||
api 'com.github.bumptech.glide:glide:4.9.0'
|
|
||||||
//annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
|
|
||||||
|
|
||||||
api 'io.github.medyo:android-about-page:2.0.0'
|
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 'com.jcraft:jsch:0.1.55'
|
||||||
api 'org.jsoup:jsoup:1.13.1'
|
api 'org.jsoup:jsoup:1.13.1'
|
||||||
api 'com.squareup.okhttp3:okhttp:4.4.1'
|
api 'com.squareup.okhttp3:okhttp:4.4.1'
|
||||||
@@ -71,14 +69,4 @@ dependencies {
|
|||||||
//api 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
|
//api 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
|
||||||
//api 'androidx.fragment:fragment:1.1.0'
|
//api 'androidx.fragment:fragment:1.1.0'
|
||||||
api 'com.google.android.material:material:1.0.0'
|
api 'com.google.android.material:material:1.0.0'
|
||||||
|
|
||||||
// WinBoLL库 nexus.winboll.cc 地址
|
|
||||||
//api 'cc.winboll.studio:libaes:15.12.0'
|
|
||||||
//api 'cc.winboll.studio:libappbase:15.12.2'
|
|
||||||
|
|
||||||
// WinBoLL备用库 jitpack.io 地址
|
|
||||||
api 'com.github.ZhanGSKen:AES:aes-v15.12.4'
|
|
||||||
api 'com.github.ZhanGSKen:APPBase:appbase-v15.12.2'
|
|
||||||
|
|
||||||
api fileTree(dir: 'libs', include: ['*.jar'])
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Sat Dec 13 17:23:20 HKT 2025
|
#Sun Sep 28 12:37:31 HKT 2025
|
||||||
stageCount=5
|
stageCount=10
|
||||||
libraryProject=
|
libraryProject=
|
||||||
baseVersion=15.12
|
baseVersion=15.3
|
||||||
publishVersion=15.12.4
|
publishVersion=15.3.9
|
||||||
buildCount=0
|
buildCount=0
|
||||||
baseBetaVersion=15.12.5
|
baseBetaVersion=15.3.10
|
||||||
|
|||||||
138
mymessagemanager/proguard-rules.pro
vendored
138
mymessagemanager/proguard-rules.pro
vendored
@@ -9,135 +9,9 @@
|
|||||||
|
|
||||||
# Add any project specific keep options here:
|
# Add any project specific keep options here:
|
||||||
|
|
||||||
# ============================== 基础通用规则 ==============================
|
# If your project uses WebView with JS, uncomment the following
|
||||||
# 保留系统组件
|
# and specify the fully qualified class name to the JavaScript interface
|
||||||
-keep public class * extends android.app.Activity
|
# class:
|
||||||
-keep public class * extends android.app.Service
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||||
-keep public class * extends android.content.BroadcastReceiver
|
# public *;
|
||||||
-keep public class * extends android.content.ContentProvider
|
#}
|
||||||
-keep public class * extends android.app.backup.BackupAgentHelper
|
|
||||||
-keep public class * extends android.preference.Preference
|
|
||||||
|
|
||||||
# 保留 WinBoLL 核心包及子类(合并简化规则)
|
|
||||||
-keep class cc.winboll.studio.** { *; }
|
|
||||||
-keepclassmembers class cc.winboll.studio.** { *; }
|
|
||||||
|
|
||||||
# 保留所有类中的 public static final String TAG 字段(便于日志定位)
|
|
||||||
-keepclassmembers class * {
|
|
||||||
public static final java.lang.String TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
# 保留序列化类(避免Parcelable/Gson解析异常)
|
|
||||||
-keep class * implements android.os.Parcelable {
|
|
||||||
public static final android.os.Parcelable$Creator *;
|
|
||||||
}
|
|
||||||
-keepclassmembers class * implements java.io.Serializable {
|
|
||||||
static final long serialVersionUID;
|
|
||||||
private static final java.io.ObjectStreamField[] serialPersistentFields;
|
|
||||||
private void writeObject(java.io.ObjectOutputStream);
|
|
||||||
private void readObject(java.io.ObjectInputStream);
|
|
||||||
java.lang.Object writeReplace();
|
|
||||||
java.lang.Object readResolve();
|
|
||||||
}
|
|
||||||
|
|
||||||
# 保留 R 文件(避免资源ID混淆)
|
|
||||||
-keepclassmembers class **.R$* {
|
|
||||||
public static <fields>;
|
|
||||||
}
|
|
||||||
|
|
||||||
# 保留 native 方法(避免JNI调用失败)
|
|
||||||
-keepclasseswithmembernames class * {
|
|
||||||
native <methods>;
|
|
||||||
}
|
|
||||||
|
|
||||||
# 保留注解和泛型(避免反射/序列化异常)
|
|
||||||
-keepattributes *Annotation*
|
|
||||||
-keepattributes Signature
|
|
||||||
|
|
||||||
# 屏蔽 Java 8+ 警告(适配 Java 7 语法)
|
|
||||||
-dontwarn java.lang.invoke.*
|
|
||||||
-dontwarn android.support.v8.renderscript.*
|
|
||||||
-dontwarn java.util.function.**
|
|
||||||
|
|
||||||
# ============================== 第三方框架专项规则 ==============================
|
|
||||||
# OkHttp 4.4.1(米盟广告请求依赖,完善Lambda兼容)
|
|
||||||
-keep class okhttp3.** { *; }
|
|
||||||
-keep interface okhttp3.** { *; }
|
|
||||||
-keep class okhttp3.internal.** { *; }
|
|
||||||
-keep class okio.** { *; }
|
|
||||||
-dontwarn okhttp3.internal.platform.**
|
|
||||||
-dontwarn okio.**
|
|
||||||
# ============================== 必要补充规则 ==============================
|
|
||||||
# OkHttp 4.4.1 补充规则(Java 7 兼容)
|
|
||||||
-keep class okhttp3.internal.concurrent.** { *; }
|
|
||||||
-keep class okhttp3.internal.connection.** { *; }
|
|
||||||
-dontwarn okhttp3.internal.concurrent.TaskRunner
|
|
||||||
-dontwarn okhttp3.internal.connection.RealCall
|
|
||||||
|
|
||||||
# Glide 4.9.0(米盟广告图片加载依赖)
|
|
||||||
-keep public class * implements com.bumptech.glide.module.GlideModule
|
|
||||||
-keep public class * extends com.bumptech.glide.module.AppGlideModule
|
|
||||||
-keep public enum com.bumptech.glide.load.ImageHeaderParser$ImageType {
|
|
||||||
**[] $VALUES;
|
|
||||||
public *;
|
|
||||||
}
|
|
||||||
-keepclassmembers class * implements com.bumptech.glide.module.AppGlideModule {
|
|
||||||
<init>();
|
|
||||||
}
|
|
||||||
-dontwarn com.bumptech.glide.**
|
|
||||||
|
|
||||||
# Gson 2.8.5(米盟广告数据序列化依赖)
|
|
||||||
-keep class com.google.gson.** { *; }
|
|
||||||
-keep interface com.google.gson.** { *; }
|
|
||||||
-keepclassmembers class * {
|
|
||||||
@com.google.gson.annotations.SerializedName <fields>;
|
|
||||||
}
|
|
||||||
|
|
||||||
# 米盟 SDK(核心广告组件,完整保留避免加载失败)
|
|
||||||
-keep class com.miui.zeus.** { *; }
|
|
||||||
-keep interface com.miui.zeus.** { *; }
|
|
||||||
# 保留米盟日志字段(便于广告加载失败排查)
|
|
||||||
-keepclassmembers class com.miui.zeus.mimo.sdk.** {
|
|
||||||
public static final java.lang.String TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
# RecyclerView 1.0.0(米盟广告布局渲染依赖)
|
|
||||||
-keep class androidx.recyclerview.** { *; }
|
|
||||||
-keep interface androidx.recyclerview.** { *; }
|
|
||||||
-keepclassmembers class androidx.recyclerview.widget.RecyclerView$Adapter {
|
|
||||||
public *;
|
|
||||||
}
|
|
||||||
|
|
||||||
# 其他第三方框架(按引入依赖保留,无则可删除)
|
|
||||||
# XXPermissions 18.63
|
|
||||||
-keep class com.hjq.permissions.** { *; }
|
|
||||||
-keep interface com.hjq.permissions.** { *; }
|
|
||||||
|
|
||||||
# ZXing 二维码(核心解析组件)
|
|
||||||
-keep class com.google.zxing.** { *; }
|
|
||||||
-keep class com.journeyapps.zxing.** { *; }
|
|
||||||
|
|
||||||
# Jsoup HTML解析
|
|
||||||
-keep class org.jsoup.** { *; }
|
|
||||||
|
|
||||||
# Pinyin4j 拼音搜索
|
|
||||||
-keep class net.sourceforge.pinyin4j.** { *; }
|
|
||||||
|
|
||||||
# JSch SSH组件
|
|
||||||
-keep class com.jcraft.jsch.** { *; }
|
|
||||||
|
|
||||||
# AndroidX 基础组件
|
|
||||||
-keep class androidx.appcompat.** { *; }
|
|
||||||
-keep interface androidx.appcompat.** { *; }
|
|
||||||
|
|
||||||
# ============================== 优化与调试配置 ==============================
|
|
||||||
# 优化级别(平衡混淆效果与性能)
|
|
||||||
-optimizationpasses 5
|
|
||||||
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
|
|
||||||
|
|
||||||
# 调试辅助(保留行号便于崩溃定位)
|
|
||||||
-verbose
|
|
||||||
-dontpreverify
|
|
||||||
-dontusemixedcaseclassnames
|
|
||||||
-keepattributes SourceFile,LineNumberTable
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,9 @@ package cc.winboll.studio.mymessagemanager;
|
|||||||
*/
|
*/
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import cc.winboll.studio.libappbase.GlobalApplication;
|
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
|
||||||
|
|
||||||
public class App extends GlobalApplication {
|
public class App extends GlobalApplication {
|
||||||
|
|
||||||
@@ -30,23 +29,18 @@ public class App extends GlobalApplication {
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
setIsDebugging(BuildConfig.DEBUG);
|
|
||||||
//setIsDebugging(false);
|
|
||||||
|
|
||||||
// 初始化窗口管理类
|
|
||||||
WinBoLLActivityManager.init(this);
|
|
||||||
|
|
||||||
// 初始化 Toast 框架
|
// 初始化 Toast 框架
|
||||||
ToastUtils.init(this);
|
ToastUtils.init(this);
|
||||||
|
// 设置 Toast 布局样式
|
||||||
|
ToastUtils.setView(R.layout.toast_custom_view);
|
||||||
|
//ToastUtils.setStyle(new WhiteToastStyle());
|
||||||
|
ToastUtils.setGravity(Gravity.BOTTOM, 0, 200);
|
||||||
|
|
||||||
|
//LogUtils.d(TAG, "BuildConfig.DEBUG " + Boolean.toString(BuildConfig.DEBUG));
|
||||||
|
|
||||||
_mszAppExternalFilesDir = getExternalFilesDir(TAG).toString();
|
_mszAppExternalFilesDir = getExternalFilesDir(TAG).toString();
|
||||||
_mszConfigUtilPath = _mszAppExternalFilesDir + File.separator + _mszConfigUtilFileName;
|
_mszConfigUtilPath = _mszAppExternalFilesDir + File.separator + _mszConfigUtilFileName;
|
||||||
_mszSMSReceiveRuleUtilPath = _mszAppExternalFilesDir + File.separator + _mszSMSReceiveRuleUtilFileName;
|
_mszSMSReceiveRuleUtilPath = _mszAppExternalFilesDir + File.separator + _mszSMSReceiveRuleUtilFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTerminate() {
|
|
||||||
super.onTerminate();
|
|
||||||
ToastUtils.release();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,9 @@ import android.os.Bundle;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
import cc.winboll.studio.libaes.winboll.APPInfo;
|
||||||
import cc.winboll.studio.libaes.models.APPInfo;
|
import cc.winboll.studio.libaes.winboll.AboutView;
|
||||||
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
|
||||||
import cc.winboll.studio.libaes.views.AboutView;
|
|
||||||
import cc.winboll.studio.mymessagemanager.App;
|
import cc.winboll.studio.mymessagemanager.App;
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
|
|
||||||
@@ -65,13 +64,13 @@ public class AboutActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
|||||||
);
|
);
|
||||||
layout.addView(aboutView, params);
|
layout.addView(aboutView, params);
|
||||||
|
|
||||||
WinBoLLActivityManager.getInstance().add(this);
|
App.getWinBoLLActivityManager().add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
WinBoLLActivityManager.getInstance().registeRemove(this);
|
App.getWinBoLLActivityManager().registeRemove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AboutView CreateAboutView() {
|
public AboutView CreateAboutView() {
|
||||||
|
|||||||
@@ -5,31 +5,25 @@ package cc.winboll.studio.mymessagemanager.activitys;
|
|||||||
* @Date 2024/05/12 20:03:42
|
* @Date 2024/05/12 20:03:42
|
||||||
* @Describe 应用设置窗口
|
* @Describe 应用设置窗口
|
||||||
*/
|
*/
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.Switch;
|
import android.widget.Switch;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
|
||||||
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
||||||
import cc.winboll.studio.libaes.views.AToolbar;
|
import cc.winboll.studio.libaes.views.AToolbar;
|
||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.dialogs.CharsetRefuseEditDialog;
|
|
||||||
import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil;
|
import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.PermissionUtil;
|
import cc.winboll.studio.mymessagemanager.utils.PermissionUtil;
|
||||||
|
import cc.winboll.studio.mymessagemanager.utils.NotificationHelper;
|
||||||
|
import cc.winboll.studio.libappbase.dialogs.YesNoAlertDialog;
|
||||||
|
|
||||||
public class AppSettingsActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
public class AppSettingsActivity extends BaseActivity {
|
||||||
|
|
||||||
public static final String TAG = "AppSettingsActivity";
|
public static final String TAG = "AppSettingsActivity";
|
||||||
|
|
||||||
// 讯飞语记官网下载页链接
|
|
||||||
private static final String XUNFEI_YUJI_DOWNLOAD_URL = "https://iflynote.com/h/share-download-app.html";
|
|
||||||
|
|
||||||
AppConfigUtil mAppConfigUtil;
|
AppConfigUtil mAppConfigUtil;
|
||||||
AToolbar mAToolbar;
|
AToolbar mAToolbar;
|
||||||
AOHPCTCSeekBar mAOHPCTCSeekBar;
|
AOHPCTCSeekBar mAOHPCTCSeekBar;
|
||||||
@@ -37,19 +31,8 @@ public class AppSettingsActivity extends WinBoLLActivity implements IWinBoLLActi
|
|||||||
EditText metPhoneMergePrefix;
|
EditText metPhoneMergePrefix;
|
||||||
Switch mswMergePrefixPhone;
|
Switch mswMergePrefixPhone;
|
||||||
Switch mswSMSRecycleProtectMode;
|
Switch mswSMSRecycleProtectMode;
|
||||||
//EditText metProtectModerRefuseChars;
|
EditText metProtectModerRefuseChars;
|
||||||
EditText metProtectModerReplaceChars;
|
EditText metProtectModerReplaceChars;
|
||||||
String mszProtectModerRefuseChars = "";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Activity getActivity() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getTag() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -75,14 +58,13 @@ public class AppSettingsActivity extends WinBoLLActivity implements IWinBoLLActi
|
|||||||
|
|
||||||
mswSMSRecycleProtectMode = findViewById(R.id.activityappsettingsSwitch3);
|
mswSMSRecycleProtectMode = findViewById(R.id.activityappsettingsSwitch3);
|
||||||
mswSMSRecycleProtectMode.setChecked(mAppConfigUtil.mAppConfigBean.isSMSRecycleProtectMode());
|
mswSMSRecycleProtectMode.setChecked(mAppConfigUtil.mAppConfigBean.isSMSRecycleProtectMode());
|
||||||
|
|
||||||
//metProtectModerRefuseChars = findViewById(R.id.activityappsettingsEditText3);
|
metProtectModerRefuseChars = findViewById(R.id.activityappsettingsEditText3);
|
||||||
//metProtectModerRefuseChars.setText(mAppConfigUtil.mAppConfigBean.getProtectModerRefuseChars());
|
metProtectModerRefuseChars.setText(mAppConfigUtil.mAppConfigBean.getProtectModerRefuseChars());
|
||||||
mszProtectModerRefuseChars = mAppConfigUtil.mAppConfigBean.getProtectModerRefuseChars();
|
|
||||||
|
|
||||||
metProtectModerReplaceChars = findViewById(R.id.activityappsettingsEditText4);
|
metProtectModerReplaceChars = findViewById(R.id.activityappsettingsEditText4);
|
||||||
metProtectModerReplaceChars.setText(mAppConfigUtil.mAppConfigBean.getProtectModerReplaceChars());
|
metProtectModerReplaceChars.setText(mAppConfigUtil.mAppConfigBean.getProtectModerReplaceChars());
|
||||||
|
|
||||||
mAOHPCTCSeekBar = findViewById(R.id.activityappsettingsAOHPCTCSeekBar1);
|
mAOHPCTCSeekBar = findViewById(R.id.activityappsettingsAOHPCTCSeekBar1);
|
||||||
mAOHPCTCSeekBar.setThumb(getDrawable(R.drawable.cursor_pointer));
|
mAOHPCTCSeekBar.setThumb(getDrawable(R.drawable.cursor_pointer));
|
||||||
mAOHPCTCSeekBar.setThumbOffset(0);
|
mAOHPCTCSeekBar.setThumbOffset(0);
|
||||||
@@ -92,8 +74,7 @@ public class AppSettingsActivity extends WinBoLLActivity implements IWinBoLLActi
|
|||||||
public void onOHPCommit() {
|
public void onOHPCommit() {
|
||||||
mAppConfigUtil.reLoadConfig();
|
mAppConfigUtil.reLoadConfig();
|
||||||
mAppConfigUtil.mAppConfigBean.setIsSMSRecycleProtectMode(mswSMSRecycleProtectMode.isChecked());
|
mAppConfigUtil.mAppConfigBean.setIsSMSRecycleProtectMode(mswSMSRecycleProtectMode.isChecked());
|
||||||
//mAppConfigUtil.mAppConfigBean.setProtectModerRefuseChars(metProtectModerRefuseChars.getText().toString());
|
mAppConfigUtil.mAppConfigBean.setProtectModerRefuseChars(metProtectModerRefuseChars.getText().toString());
|
||||||
mAppConfigUtil.mAppConfigBean.setProtectModerRefuseChars(mszProtectModerRefuseChars);
|
|
||||||
mAppConfigUtil.mAppConfigBean.setProtectModerReplaceChars(metProtectModerReplaceChars.getText().toString());
|
mAppConfigUtil.mAppConfigBean.setProtectModerReplaceChars(metProtectModerReplaceChars.getText().toString());
|
||||||
mAppConfigUtil.mAppConfigBean.setCountryCode(metPhoneMergePrefix.getText().toString());
|
mAppConfigUtil.mAppConfigBean.setCountryCode(metPhoneMergePrefix.getText().toString());
|
||||||
mAppConfigUtil.mAppConfigBean.setIsMergeCountryCodePrefix(mswMergePrefixPhone.isChecked());
|
mAppConfigUtil.mAppConfigBean.setIsMergeCountryCodePrefix(mswMergePrefixPhone.isChecked());
|
||||||
@@ -117,34 +98,18 @@ public class AppSettingsActivity extends WinBoLLActivity implements IWinBoLLActi
|
|||||||
Toast.makeText(getApplication(), "应用已获得所需权限。", Toast.LENGTH_SHORT).show();
|
Toast.makeText(getApplication(), "应用已获得所需权限。", Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onCleanOldChannels(View view) {
|
||||||
|
YesNoAlertDialog.show(this, "通知设置清理", "是否清理旧的通知设置?", new YesNoAlertDialog.OnDialogResultListener(){
|
||||||
|
@Override
|
||||||
|
public void onNo() {
|
||||||
|
}
|
||||||
|
|
||||||
public void onAddTTSSupport(View view) {
|
@Override
|
||||||
try {
|
public void onYes() {
|
||||||
// 1. 创建Intent,Action为“打开网页”
|
NotificationHelper notificationHelper = new NotificationHelper(AppSettingsActivity.this);
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
notificationHelper.cleanOldChannels();
|
||||||
// 2. 设置要跳转的URL
|
}
|
||||||
intent.setData(Uri.parse(XUNFEI_YUJI_DOWNLOAD_URL));
|
});
|
||||||
// 3. 确保Intent可被解析(避免无浏览器时崩溃)
|
|
||||||
if (intent.resolveActivity(getPackageManager()) != null) {
|
|
||||||
startActivity(intent); // 跳转至浏览器打开下载页
|
|
||||||
} else {
|
|
||||||
// 无浏览器时的提示
|
|
||||||
Toast.makeText(this, "未找到浏览器应用,请安装后重试", Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
Toast.makeText(this, "无法打开下载页面,请稍后再试", Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onCharsetRefuseEditDialog(View view) {
|
|
||||||
CharsetRefuseEditDialog dlg = new CharsetRefuseEditDialog(this, new CharsetRefuseEditDialog.OnTextConfirmListener(){
|
|
||||||
@Override
|
|
||||||
public void onTextConfirmed(String editText) {
|
|
||||||
//ToastUtils.show(editText);
|
|
||||||
mszProtectModerRefuseChars = editText;
|
|
||||||
}
|
|
||||||
}, mszProtectModerRefuseChars);
|
|
||||||
dlg.show();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
package cc.winboll.studio.mymessagemanager.activitys;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Message;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
||||||
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
|
|
||||||
|
abstract public class BaseActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
public static final String TAG = "BaseActivity";
|
||||||
|
|
||||||
|
IOnActivityMessageReceived mIOnActivityMessageReceived;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
//AppConfigUtil configUtil = AppConfigUtil.getInstance(this);
|
||||||
|
//setTheme(configUtil.mAppConfigBean.getAppThemeID());
|
||||||
|
LogUtils.d(TAG, "AESThemeUtil.getThemeTypeID(this) is : " + Integer.toString(AESThemeUtil.getThemeTypeID(this)));
|
||||||
|
setTheme(AESThemeUtil.getThemeTypeID(this));
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendActivityMessage(Message msg) {
|
||||||
|
mHandler.sendMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setOnActivityMessageReceived(IOnActivityMessageReceived iOnActivityMessageReceived) {
|
||||||
|
mIOnActivityMessageReceived = iOnActivityMessageReceived;
|
||||||
|
}
|
||||||
|
|
||||||
|
Handler mHandler = new Handler(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleMessage(Message msg) {
|
||||||
|
super.handleMessage(msg);
|
||||||
|
if (mIOnActivityMessageReceived != null) {
|
||||||
|
mIOnActivityMessageReceived.onActivityMessageReceived(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
protected interface IOnActivityMessageReceived {
|
||||||
|
void onActivityMessageReceived(Message msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
AESThemeUtil.inflateMenu(this, menu);
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
/*if (AESThemeUtil.onAppCompatThemeItemSelected(this, item)) {
|
||||||
|
ToastUtils.show("onAppCompatThemeItemSelected");
|
||||||
|
recreate();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/*int nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEFAULT);
|
||||||
|
if (R.id.item_depththeme == item.getItemId()) {
|
||||||
|
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH);
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, nThemeStyleID);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_skytheme == item.getItemId()) {
|
||||||
|
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY);
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, nThemeStyleID);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_goldentheme == item.getItemId()) {
|
||||||
|
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, nThemeStyleID);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_taotheme == item.getItemId()) {
|
||||||
|
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO);
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, nThemeStyleID);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_defaulttheme == item.getItemId()) {
|
||||||
|
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEFAULT);
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, nThemeStyleID);
|
||||||
|
recreate();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
//int nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEFAULT);
|
||||||
|
if (R.id.item_depththeme == item.getItemId()) {
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, R.style.MyDepthAESTheme);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_skytheme == item.getItemId()) {
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, R.style.MySkyAESTheme);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_goldentheme == item.getItemId()) {
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, R.style.MyGoldenAESTheme);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_memortheme == item.getItemId()) {
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, R.style.MyMemorAESTheme);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_taotheme == item.getItemId()) {
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, R.style.MyTaoAESTheme);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_defaulttheme == item.getItemId()) {
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, R.style.MyAppTheme);
|
||||||
|
recreate();
|
||||||
|
} else if (R.id.item_defaulttheme == item.getItemId()) {
|
||||||
|
AESThemeUtil.saveThemeStyleID(this, R.style.MyAppTheme);
|
||||||
|
recreate();
|
||||||
|
}
|
||||||
|
//ToastUtils.show("nThemeStyleID " + Integer.toString(nThemeStyleID));
|
||||||
|
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,8 +5,6 @@ package cc.winboll.studio.mymessagemanager.activitys;
|
|||||||
* @Date 2025/08/30 14:32
|
* @Date 2025/08/30 14:32
|
||||||
* @Describe 联系人查询与短信发送窗口
|
* @Describe 联系人查询与短信发送窗口
|
||||||
*/
|
*/
|
||||||
import android.content.Intent;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
@@ -18,21 +16,23 @@ import android.widget.RelativeLayout;
|
|||||||
import android.widget.SimpleAdapter;
|
import android.widget.SimpleAdapter;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toolbar;
|
import android.widget.Toolbar;
|
||||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
import android.content.Intent;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
|
||||||
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
|
||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.PhoneBean;
|
import cc.winboll.studio.mymessagemanager.beans.PhoneBean;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.PhoneUtil;
|
import cc.winboll.studio.mymessagemanager.utils.PhoneUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSUtil;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import android.app.Activity;
|
|
||||||
|
|
||||||
public class ComposeSMSActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
public class ComposeSMSActivity extends BaseActivity {
|
||||||
|
|
||||||
public static String TAG = "ComposeSMSActivity";
|
public static String TAG = "ComposeSMSActivity";
|
||||||
public static String EXTRA_SMSBODY = "sms_body";
|
public static String EXTRA_SMSBODY = "sms_body";
|
||||||
@@ -54,16 +54,6 @@ public class ComposeSMSActivity extends WinBoLLActivity implements IWinBoLLActiv
|
|||||||
private AOHPCTCSeekBar mAOHPCTCSeekBar;
|
private AOHPCTCSeekBar mAOHPCTCSeekBar;
|
||||||
private RelativeLayout mrlContracts;
|
private RelativeLayout mrlContracts;
|
||||||
|
|
||||||
@Override
|
|
||||||
public Activity getActivity() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getTag() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|||||||
@@ -11,11 +11,8 @@ import android.view.View;
|
|||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
|
||||||
import cc.winboll.studio.libaes.utils.DevelopUtils;
|
|
||||||
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
|
||||||
import cc.winboll.studio.libaes.views.ADsBannerView;
|
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
|
import cc.winboll.studio.libappbase.LogView;
|
||||||
import cc.winboll.studio.mymessagemanager.App;
|
import cc.winboll.studio.mymessagemanager.App;
|
||||||
import cc.winboll.studio.mymessagemanager.BuildConfig;
|
import cc.winboll.studio.mymessagemanager.BuildConfig;
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
@@ -33,7 +30,7 @@ import cc.winboll.studio.mymessagemanager.views.PhoneListViewForScrollView;
|
|||||||
import com.baoyz.widget.PullRefreshLayout;
|
import com.baoyz.widget.PullRefreshLayout;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class MainActivity extends WinBoLLActivity {
|
public class MainActivity extends BaseActivity {
|
||||||
|
|
||||||
public final static String TAG = "MainActivity";
|
public final static String TAG = "MainActivity";
|
||||||
|
|
||||||
@@ -45,8 +42,6 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
public static final int MY_PERMISSIONS_REQUEST = 0;
|
public static final int MY_PERMISSIONS_REQUEST = 0;
|
||||||
|
|
||||||
static MainActivity _mMainActivity;
|
static MainActivity _mMainActivity;
|
||||||
ADsBannerView mADsBannerView;
|
|
||||||
|
|
||||||
//LogView mLogView;
|
//LogView mLogView;
|
||||||
AppConfigUtil mAppConfigUtil;
|
AppConfigUtil mAppConfigUtil;
|
||||||
ConfirmSwitchView msvEnableService;
|
ConfirmSwitchView msvEnableService;
|
||||||
@@ -69,9 +64,6 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
setContentView(R.layout.activity_main);
|
setContentView(R.layout.activity_main);
|
||||||
_mMainActivity = MainActivity.this;
|
_mMainActivity = MainActivity.this;
|
||||||
|
|
||||||
// 米盟广告栏
|
|
||||||
mADsBannerView = findViewById(R.id.adsbanner);
|
|
||||||
|
|
||||||
mAppConfigUtil = AppConfigUtil.getInstance(this);
|
mAppConfigUtil = AppConfigUtil.getInstance(this);
|
||||||
initView();
|
initView();
|
||||||
|
|
||||||
@@ -264,31 +256,21 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
if (mADsBannerView != null) {
|
|
||||||
mADsBannerView.releaseAdResources();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
reloadSMS();
|
reloadSMS();
|
||||||
if (mADsBannerView != null) {
|
//mLogView.start();
|
||||||
mADsBannerView.resumeADs(MainActivity.this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.toolbar_main_first, menu);
|
//return super.onCreateOptionsMenu(menu);
|
||||||
// 主题菜单
|
getMenuInflater().inflate(R.menu.toolbar_main, menu);
|
||||||
AESThemeUtil.inflateMenu(this, menu);
|
super.onCreateOptionsMenu(menu);
|
||||||
// 调试工具菜单
|
getMenuInflater().inflate(R.menu.toolbar_main2, menu);
|
||||||
if (App.isDebugging()) {
|
|
||||||
DevelopUtils.inflateMenu(this, menu);
|
|
||||||
getMenuInflater().inflate(R.menu.toolbar_main_debug, menu);
|
|
||||||
}
|
|
||||||
getMenuInflater().inflate(R.menu.toolbar_main_last, menu);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -303,12 +285,7 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
int nItemId = item.getItemId();
|
int nItemId = item.getItemId();
|
||||||
int menuItemId = item.getItemId();
|
if (nItemId == R.id.app_ttsrule) {
|
||||||
if (AESThemeUtil.onAppThemeItemSelected(this, item)) {
|
|
||||||
recreate();
|
|
||||||
} if (DevelopUtils.onDevelopItemSelected(this, item)) {
|
|
||||||
LogUtils.d(TAG, String.format("onOptionsItemSelected item.getItemId() %d ", item.getItemId()));
|
|
||||||
} else if (nItemId == R.id.app_ttsrule) {
|
|
||||||
Intent i = new Intent(MainActivity.this, TTSPlayRuleActivity.class);
|
Intent i = new Intent(MainActivity.this, TTSPlayRuleActivity.class);
|
||||||
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
startActivity(i);
|
startActivity(i);
|
||||||
@@ -320,10 +297,16 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
Intent i = new Intent(MainActivity.this, AppSettingsActivity.class);
|
Intent i = new Intent(MainActivity.this, AppSettingsActivity.class);
|
||||||
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
startActivity(i);
|
startActivity(i);
|
||||||
} else if (nItemId == R.id.app_unittest) {
|
} else if (nItemId == R.id.app_log) {
|
||||||
|
App.getWinBoLLActivityManager().startLogActivity(this);
|
||||||
|
} else if (nItemId == R.id.app_unittest) {
|
||||||
Intent i = new Intent(MainActivity.this, UnitTestActivity.class);
|
Intent i = new Intent(MainActivity.this, UnitTestActivity.class);
|
||||||
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
startActivity(i);
|
startActivity(i);
|
||||||
|
} else if (nItemId == R.id.app_crashtest) {
|
||||||
|
for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++) {
|
||||||
|
getString(i);
|
||||||
|
}
|
||||||
} else if (nItemId == R.id.app_about) {
|
} else if (nItemId == R.id.app_about) {
|
||||||
Intent i = new Intent(MainActivity.this, AboutActivity.class);
|
Intent i = new Intent(MainActivity.this, AboutActivity.class);
|
||||||
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
|||||||
@@ -7,8 +7,10 @@ import android.content.IntentFilter;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.os.Message;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.AbsListView;
|
import android.widget.AbsListView;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
@@ -17,7 +19,6 @@ import android.widget.TextView;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import android.widget.Toolbar;
|
import android.widget.Toolbar;
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
|
||||||
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.adapters.SMSArrayAdapter;
|
import cc.winboll.studio.mymessagemanager.adapters.SMSArrayAdapter;
|
||||||
@@ -26,9 +27,9 @@ import cc.winboll.studio.mymessagemanager.utils.SMSUtil;
|
|||||||
import cc.winboll.studio.mymessagemanager.utils.ViewUtil;
|
import cc.winboll.studio.mymessagemanager.utils.ViewUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.views.BottomPositionFixedScrollView;
|
import cc.winboll.studio.mymessagemanager.views.BottomPositionFixedScrollView;
|
||||||
import cc.winboll.studio.mymessagemanager.views.SMSListViewForScrollView;
|
import cc.winboll.studio.mymessagemanager.views.SMSListViewForScrollView;
|
||||||
import android.app.Activity;
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
public class SMSActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
public class SMSActivity extends BaseActivity {
|
||||||
public static String TAG = "SMSActivity";
|
public static String TAG = "SMSActivity";
|
||||||
public static final String ACTION_NOTIFY_SMS_CHANGED = "cc.winboll.studio.mymessagemanager.activitys.SMSActivity.ACTION_NOTIFY_SMS_CHANGED";
|
public static final String ACTION_NOTIFY_SMS_CHANGED = "cc.winboll.studio.mymessagemanager.activitys.SMSActivity.ACTION_NOTIFY_SMS_CHANGED";
|
||||||
public static final String EXTRA_PHONE = "Phone";
|
public static final String EXTRA_PHONE = "Phone";
|
||||||
@@ -44,16 +45,6 @@ public class SMSActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
|||||||
Handler mSetFocusHandler;
|
Handler mSetFocusHandler;
|
||||||
private boolean isImeVisible = false;
|
private boolean isImeVisible = false;
|
||||||
|
|
||||||
@Override
|
|
||||||
public Activity getActivity() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getTag() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import android.widget.Toast;
|
|||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
|
||||||
import cc.winboll.studio.mymessagemanager.App;
|
import cc.winboll.studio.mymessagemanager.App;
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.SMSReceiveRuleActivity;
|
import cc.winboll.studio.mymessagemanager.activitys.SMSReceiveRuleActivity;
|
||||||
@@ -30,9 +29,8 @@ import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean;
|
|||||||
import cc.winboll.studio.mymessagemanager.utils.FileUtil;
|
import cc.winboll.studio.mymessagemanager.utils.FileUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSReceiveRuleUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSReceiveRuleUtil;
|
||||||
import com.baoyz.widget.PullRefreshLayout;
|
import com.baoyz.widget.PullRefreshLayout;
|
||||||
import android.app.Activity;
|
|
||||||
|
|
||||||
public class SMSReceiveRuleActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
public class SMSReceiveRuleActivity extends BaseActivity {
|
||||||
|
|
||||||
public static final String TAG = "SMSReceiveRuleActivity";
|
public static final String TAG = "SMSReceiveRuleActivity";
|
||||||
|
|
||||||
@@ -45,16 +43,6 @@ public class SMSReceiveRuleActivity extends WinBoLLActivity implements IWinBoLLA
|
|||||||
SMSAcceptRuleBean mSMSAcceptRuleBeanAdd;
|
SMSAcceptRuleBean mSMSAcceptRuleBeanAdd;
|
||||||
SMSAcceptRuleArrayAdapter mSMSAcceptRuleArrayAdapter;
|
SMSAcceptRuleArrayAdapter mSMSAcceptRuleArrayAdapter;
|
||||||
|
|
||||||
@Override
|
|
||||||
public Activity getActivity() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getTag() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|||||||
@@ -5,15 +5,13 @@ package cc.winboll.studio.mymessagemanager.activitys;
|
|||||||
* @Date 2024/07/19 16:56:18
|
* @Date 2024/07/19 16:56:18
|
||||||
* @Describe 短信回收站
|
* @Describe 短信回收站
|
||||||
*/
|
*/
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import cc.winboll.studio.libaes.dialogs.YesNoAlertDialog;
|
import cc.winboll.studio.libappbase.dialogs.YesNoAlertDialog;
|
||||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.SMSRecycleActivity;
|
import cc.winboll.studio.mymessagemanager.activitys.SMSRecycleActivity;
|
||||||
import cc.winboll.studio.mymessagemanager.adapters.SMSRecycleAdapter;
|
import cc.winboll.studio.mymessagemanager.adapters.SMSRecycleAdapter;
|
||||||
@@ -21,7 +19,7 @@ import cc.winboll.studio.mymessagemanager.utils.SMSRecycleUtil;
|
|||||||
import com.baoyz.widget.PullRefreshLayout;
|
import com.baoyz.widget.PullRefreshLayout;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
public class SMSRecycleActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
public class SMSRecycleActivity extends BaseActivity {
|
||||||
|
|
||||||
public static final String TAG = "SMSRecycleActivity";
|
public static final String TAG = "SMSRecycleActivity";
|
||||||
|
|
||||||
@@ -29,16 +27,6 @@ public class SMSRecycleActivity extends WinBoLLActivity implements IWinBoLLActiv
|
|||||||
RecyclerView mRecyclerView;
|
RecyclerView mRecyclerView;
|
||||||
SMSRecycleAdapter mSMSRecycleAdapter;
|
SMSRecycleAdapter mSMSRecycleAdapter;
|
||||||
|
|
||||||
@Override
|
|
||||||
public Activity getActivity() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getTag() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -86,7 +74,7 @@ public class SMSRecycleActivity extends WinBoLLActivity implements IWinBoLLActiv
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
YesNoAlertDialog.OnDialogResultListener mDeleteListener = new YesNoAlertDialog.OnDialogResultListener() {
|
YesNoAlertDialog.OnDialogResultListener mDeleteListener = new YesNoAlertDialog.OnDialogResultListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -7,34 +7,19 @@ import android.text.TextUtils;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import android.widget.Toolbar;
|
import android.widget.Toolbar;
|
||||||
import cc.winboll.studio.libaes.dialogs.YesNoAlertDialog;
|
|
||||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.SMSReceiveRuleActivity;
|
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.SharedJSONReceiveActivity;
|
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.TTSPlayRuleActivity;
|
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean;
|
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.TTSPlayRuleBean;
|
import cc.winboll.studio.mymessagemanager.beans.TTSPlayRuleBean;
|
||||||
|
import cc.winboll.studio.mymessagemanager.dialogs.YesNoAlertDialog;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.UriUtil;
|
import cc.winboll.studio.mymessagemanager.utils.UriUtil;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import android.app.Activity;
|
|
||||||
|
|
||||||
public class SharedJSONReceiveActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
public class SharedJSONReceiveActivity extends BaseActivity {
|
||||||
|
|
||||||
public static final String TAG = "SharedJSONReceive";
|
public static final String TAG = "SharedJSONReceive";
|
||||||
|
|
||||||
Toolbar mToolbar;
|
Toolbar mToolbar;
|
||||||
|
|
||||||
@Override
|
|
||||||
public Activity getActivity() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getTag() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|||||||
@@ -16,15 +16,13 @@ import android.widget.Toast;
|
|||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.adapters.TTSRuleBeanRecyclerViewAdapter;
|
import cc.winboll.studio.mymessagemanager.adapters.TTSRuleBeanRecyclerViewAdapter;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.TTSPlayRuleBean;
|
import cc.winboll.studio.mymessagemanager.beans.TTSPlayRuleBean;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.FileUtil;
|
import cc.winboll.studio.mymessagemanager.utils.FileUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.TTSPlayRuleUtil;
|
import cc.winboll.studio.mymessagemanager.utils.TTSPlayRuleUtil;
|
||||||
import android.app.Activity;
|
|
||||||
|
|
||||||
public class TTSPlayRuleActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
public class TTSPlayRuleActivity extends BaseActivity {
|
||||||
|
|
||||||
public static final String TAG = "TTSPlayRuleActivity";
|
public static final String TAG = "TTSPlayRuleActivity";
|
||||||
|
|
||||||
@@ -41,16 +39,6 @@ public class TTSPlayRuleActivity extends WinBoLLActivity implements IWinBoLLActi
|
|||||||
EditText metPatternText;
|
EditText metPatternText;
|
||||||
EditText metCurrentTTSRuleText;
|
EditText metCurrentTTSRuleText;
|
||||||
|
|
||||||
@Override
|
|
||||||
public Activity getActivity() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getTag() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|||||||
@@ -7,18 +7,17 @@ package cc.winboll.studio.mymessagemanager.activitys;
|
|||||||
*/
|
*/
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Message;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
import cc.winboll.studio.libaes.beans.AESThemeBean;
|
||||||
import cc.winboll.studio.mymessagemanager.enums.ThemeStyleEnum;
|
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
||||||
|
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
|
||||||
|
|
||||||
public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivity {
|
public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivity {
|
||||||
|
|
||||||
public static final String TAG = "WinBoLLActivity";
|
public static final String TAG = "WinBoLLActivity";
|
||||||
|
|
||||||
IOnActivityMessageReceived mIOnActivityMessageReceived;
|
protected volatile AESThemeBean.ThemeType mThemeType;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Activity getActivity() {
|
public Activity getActivity() {
|
||||||
@@ -32,51 +31,30 @@ public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
// 1. 优先读取SP中保存的主题(必须在setContentView前调用!)
|
mThemeType = getThemeType();
|
||||||
ThemeStyleEnum savedTheme = ThemeStyleEnum.getThemeFromSP(this);
|
setThemeStyle();
|
||||||
// 2. 设置主题
|
|
||||||
setTheme(savedTheme.getStyleId());
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
AESThemeBean.ThemeType getThemeType() {
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
/*SharedPreferences sharedPreferences = getSharedPreferences(
|
||||||
int selectedMenuId = item.getItemId();
|
SHAREDPREFERENCES_NAME, MODE_PRIVATE);
|
||||||
// 1. 根据菜单ID获取对应的主题枚举
|
return AESThemeBean.ThemeType.values()[((sharedPreferences.getInt(DRAWER_THEME_TYPE, AESThemeBean.ThemeType.DEFAULT.ordinal())))];
|
||||||
ThemeStyleEnum selectedTheme = ThemeStyleEnum.getThemeByMenuId(selectedMenuId);
|
*/
|
||||||
|
return AESThemeBean.getThemeStyleType(AESThemeUtil.getThemeTypeID(getApplicationContext()));
|
||||||
if (selectedTheme != null) {
|
|
||||||
// 2. 调用枚举自带方法保存主题到SP(替代AESThemeUtil)
|
|
||||||
ThemeStyleEnum.saveThemeToSP(this, selectedTheme);
|
|
||||||
recreate(); // 重建Activity生效主题
|
|
||||||
} else if (selectedMenuId == android.R.id.home) {
|
|
||||||
finish();
|
|
||||||
} else {
|
|
||||||
return super.onOptionsItemSelected(item);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected interface IOnActivityMessageReceived {
|
|
||||||
void onActivityMessageReceived(Message msg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendActivityMessage(Message msg) {
|
void setThemeStyle() {
|
||||||
mHandler.sendMessage(msg);
|
//setTheme(AESThemeBean.getThemeStyle(getThemeType()));
|
||||||
|
setTheme(AESThemeUtil.getThemeTypeID(getApplicationContext()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setOnActivityMessageReceived(IOnActivityMessageReceived iOnActivityMessageReceived) {
|
@Override
|
||||||
mIOnActivityMessageReceived = iOnActivityMessageReceived;
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
}
|
if(item.getItemId() == android.R.id.home) {
|
||||||
|
finish();
|
||||||
Handler mHandler = new Handler(){
|
return true;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handleMessage(Message msg) {
|
|
||||||
super.handleMessage(msg);
|
|
||||||
if (mIOnActivityMessageReceived != null) {
|
|
||||||
mIOnActivityMessageReceived.onActivityMessageReceived(msg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ import android.widget.EditText;
|
|||||||
import android.widget.RadioButton;
|
import android.widget.RadioButton;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean;
|
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSReceiveRuleUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSReceiveRuleUtil;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class SMSAcceptRuleArrayAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
public class SMSAcceptRuleArrayAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
|
|||||||
@@ -14,20 +14,20 @@ import android.widget.LinearLayout;
|
|||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import cc.winboll.studio.libaes.dialogs.YesNoAlertDialog;
|
|
||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.TTSPlayRuleActivity;
|
import cc.winboll.studio.mymessagemanager.activitys.TTSPlayRuleActivity;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean;
|
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSBean;
|
import cc.winboll.studio.mymessagemanager.beans.SMSBean;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.NotificationHelper;
|
import cc.winboll.studio.mymessagemanager.dialogs.YesNoAlertDialog;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSReceiveRuleUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSReceiveRuleUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSRecycleUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSRecycleUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.TTSPlayRuleUtil;
|
import cc.winboll.studio.mymessagemanager.utils.TTSPlayRuleUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.views.DateAgoTextView;
|
import cc.winboll.studio.mymessagemanager.views.DateAgoTextView;
|
||||||
import cc.winboll.studio.mymessagemanager.views.SMSView;
|
import cc.winboll.studio.mymessagemanager.views.SMSView;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean;
|
||||||
|
import cc.winboll.studio.mymessagemanager.utils.NotificationHelper;
|
||||||
|
|
||||||
public class SMSArrayAdapter extends BaseAdapter {
|
public class SMSArrayAdapter extends BaseAdapter {
|
||||||
|
|
||||||
|
|||||||
@@ -20,13 +20,11 @@ import android.widget.PopupMenu;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import cc.winboll.studio.libaes.dialogs.YesNoAlertDialog;
|
|
||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.TTSPlayRuleActivity;
|
import cc.winboll.studio.mymessagemanager.activitys.TTSPlayRuleActivity;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSBean;
|
import cc.winboll.studio.mymessagemanager.beans.SMSBean;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSRecycleBean;
|
import cc.winboll.studio.mymessagemanager.beans.SMSRecycleBean;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.AddressUtils;
|
import cc.winboll.studio.mymessagemanager.dialogs.YesNoAlertDialog;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil;
|
import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSRecycleUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSRecycleUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.SMSUtil;
|
import cc.winboll.studio.mymessagemanager.utils.SMSUtil;
|
||||||
@@ -34,7 +32,9 @@ import cc.winboll.studio.mymessagemanager.utils.TTSPlayRuleUtil;
|
|||||||
import cc.winboll.studio.mymessagemanager.utils.UserVisionSystemProtectModeUtil;
|
import cc.winboll.studio.mymessagemanager.utils.UserVisionSystemProtectModeUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.views.DateAgoTextView;
|
import cc.winboll.studio.mymessagemanager.views.DateAgoTextView;
|
||||||
import cc.winboll.studio.mymessagemanager.views.SMSView;
|
import cc.winboll.studio.mymessagemanager.views.SMSView;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import cc.winboll.studio.mymessagemanager.utils.AddressUtils;
|
||||||
|
|
||||||
public class SMSRecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
public class SMSRecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
|
|
||||||
|
|||||||
@@ -1,148 +0,0 @@
|
|||||||
package cc.winboll.studio.mymessagemanager.dialogs;
|
|
||||||
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.Color;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.Gravity;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.view.Window;
|
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
|
|
||||||
* @Date 2025/12/13 17:04
|
|
||||||
* @Describe 字符集编辑拒绝对话框
|
|
||||||
* 包含标题、300dp×300dp多行编辑框、确定/取消按钮(确定在右,取消在左)
|
|
||||||
* 支持预制文本初始化、编辑内容回传
|
|
||||||
*/
|
|
||||||
public class CharsetRefuseEditDialog extends Dialog {
|
|
||||||
public static final String TAG = "CharsetRefuseEditDialog";
|
|
||||||
// 文本回传接口
|
|
||||||
public interface OnTextConfirmListener {
|
|
||||||
void onTextConfirmed(String editText); // 确定按钮点击时回传编辑后的文本
|
|
||||||
}
|
|
||||||
|
|
||||||
private final OnTextConfirmListener mListener; // 外部传入的回传接口
|
|
||||||
private final String mPreText; // 预制文本框的内容
|
|
||||||
private EditText mEditText; // 多行文本编辑框
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 构造函数
|
|
||||||
* @param context 上下文
|
|
||||||
* @param listener 文本回传接口(外部实现)
|
|
||||||
* @param preText 预制的编辑框初始文本
|
|
||||||
*/
|
|
||||||
public CharsetRefuseEditDialog(Context context, OnTextConfirmListener listener, String preText) {
|
|
||||||
super(context);
|
|
||||||
this.mListener = listener;
|
|
||||||
this.mPreText = preText;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
// 禁用对话框默认标题,使用自定义标题
|
|
||||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
||||||
// 初始化对话框布局
|
|
||||||
initView();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化对话框布局(标题+编辑框+按钮)
|
|
||||||
*/
|
|
||||||
private void initView() {
|
|
||||||
// 根布局:垂直线性布局
|
|
||||||
LinearLayout rootLayout = new LinearLayout(getContext());
|
|
||||||
rootLayout.setOrientation(LinearLayout.VERTICAL);
|
|
||||||
rootLayout.setPadding(20, 20, 20, 20);
|
|
||||||
rootLayout.setLayoutParams(new ViewGroup.LayoutParams(
|
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
|
||||||
));
|
|
||||||
|
|
||||||
// 1. 添加标题栏
|
|
||||||
TextView titleTv = new TextView(getContext());
|
|
||||||
titleTv.setText("拒绝显示字符集编辑");
|
|
||||||
titleTv.setTextSize(18);
|
|
||||||
titleTv.setTextColor(Color.BLACK);
|
|
||||||
titleTv.setGravity(Gravity.CENTER);
|
|
||||||
titleTv.setPadding(0, 0, 0, 20); // 标题与编辑框间距
|
|
||||||
rootLayout.addView(titleTv);
|
|
||||||
|
|
||||||
// 2. 添加多行编辑框(300dp×300dp)
|
|
||||||
mEditText = new EditText(getContext());
|
|
||||||
// 转换dp为px(适配不同屏幕密度)
|
|
||||||
int dp300 = dp2px(getContext(), 300);
|
|
||||||
LinearLayout.LayoutParams editParams = new LinearLayout.LayoutParams(dp300, dp300);
|
|
||||||
mEditText.setLayoutParams(editParams);
|
|
||||||
mEditText.setLines(5); // 多行显示
|
|
||||||
mEditText.setHint("请输入内容");
|
|
||||||
mEditText.setText(mPreText); // 设置预制文本
|
|
||||||
mEditText.setSelection(mPreText.length()); // 光标定位到文本末尾
|
|
||||||
rootLayout.addView(mEditText);
|
|
||||||
|
|
||||||
// 3. 添加按钮栏(水平布局,确定在右、取消在左)
|
|
||||||
LinearLayout btnLayout = new LinearLayout(getContext());
|
|
||||||
btnLayout.setOrientation(LinearLayout.HORIZONTAL);
|
|
||||||
btnLayout.setGravity(Gravity.RIGHT); // 整体右对齐,实现确定在右、取消在左
|
|
||||||
btnLayout.setLayoutParams(new LinearLayout.LayoutParams(
|
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
|
||||||
));
|
|
||||||
btnLayout.setPadding(0, 20, 0, 0); // 按钮栏与编辑框间距
|
|
||||||
rootLayout.addView(btnLayout);
|
|
||||||
|
|
||||||
// 3.1 取消按钮(左侧)
|
|
||||||
TextView cancelBtn = new TextView(getContext());
|
|
||||||
cancelBtn.setText("取消");
|
|
||||||
cancelBtn.setTextSize(16);
|
|
||||||
cancelBtn.setTextColor(Color.parseColor("#666666"));
|
|
||||||
cancelBtn.setPadding(20, 10, 20, 10);
|
|
||||||
cancelBtn.setOnClickListener(new View.OnClickListener(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
}); // 关闭对话框
|
|
||||||
btnLayout.addView(cancelBtn);
|
|
||||||
|
|
||||||
// 3.2 确定按钮(右侧)
|
|
||||||
TextView confirmBtn = new TextView(getContext());
|
|
||||||
confirmBtn.setText("确定");
|
|
||||||
confirmBtn.setTextSize(16);
|
|
||||||
confirmBtn.setTextColor(Color.parseColor("#0066CC"));
|
|
||||||
confirmBtn.setPadding(20, 10, 20, 10);
|
|
||||||
confirmBtn.setOnClickListener(new View.OnClickListener(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
if (mListener != null) {
|
|
||||||
// 回传编辑后的文本
|
|
||||||
mListener.onTextConfirmed(mEditText.getText().toString().trim());
|
|
||||||
}
|
|
||||||
dismiss(); // 关闭对话框
|
|
||||||
}
|
|
||||||
});
|
|
||||||
btnLayout.addView(confirmBtn);
|
|
||||||
|
|
||||||
// 设置对话框内容布局
|
|
||||||
setContentView(rootLayout);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dp转px工具方法
|
|
||||||
* @param context 上下文
|
|
||||||
* @param dpValue dp值
|
|
||||||
* @return 对应的px值
|
|
||||||
*/
|
|
||||||
private int dp2px(Context context, float dpValue) {
|
|
||||||
final float scale = context.getResources().getDisplayMetrics().density;
|
|
||||||
return (int) (dpValue * scale + 0.5f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package cc.winboll.studio.mymessagemanager.dialogs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ZhanGSKen<zhangsken@qq.com>
|
||||||
|
* @Date 2024/05/30 09:53:26
|
||||||
|
* @Describe 用户确定与否选择框
|
||||||
|
*/
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
|
||||||
|
public class YesNoAlertDialog {
|
||||||
|
|
||||||
|
public static final String TAG = "YesNoAlertDialog";
|
||||||
|
|
||||||
|
public static void show(Context context, String szTitle, String szMessage, final OnDialogResultListener listener) {
|
||||||
|
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
||||||
|
context);
|
||||||
|
|
||||||
|
// set title
|
||||||
|
alertDialogBuilder.setTitle(szTitle);
|
||||||
|
|
||||||
|
// set dialog message
|
||||||
|
alertDialogBuilder
|
||||||
|
.setMessage(szMessage)
|
||||||
|
.setCancelable(true)
|
||||||
|
.setOnCancelListener(new DialogInterface.OnCancelListener(){
|
||||||
|
@Override
|
||||||
|
public void onCancel(DialogInterface dialog) {
|
||||||
|
listener.onNo();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setPositiveButton("YES", new DialogInterface.OnClickListener() {
|
||||||
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
|
// if this button is clicked, close
|
||||||
|
// current activity
|
||||||
|
listener.onYes();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton("NO", new DialogInterface.OnClickListener() {
|
||||||
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
|
// if this button is clicked, just close
|
||||||
|
// the dialog box and do nothing
|
||||||
|
dialog.cancel();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// create alert dialog
|
||||||
|
AlertDialog alertDialog = alertDialogBuilder.create();
|
||||||
|
|
||||||
|
// show it
|
||||||
|
alertDialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface OnDialogResultListener {
|
||||||
|
abstract void onYes();
|
||||||
|
abstract void onNo();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
package cc.winboll.studio.mymessagemanager.enums;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import androidx.annotation.StyleRes;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
|
|
||||||
* @Date 2025/12/09 14:15
|
|
||||||
* @Describe 主题风格枚举类 - 含SharedPreferences存取方法(主题持久化)
|
|
||||||
*/
|
|
||||||
public enum ThemeStyleEnum {
|
|
||||||
// 主题枚举项(与原逻辑完全对应)
|
|
||||||
DEPTH_THEME(R.id.item_depththeme, R.style.MyDepthAESTheme),
|
|
||||||
SKY_THEME(R.id.item_skytheme, R.style.MySkyAESTheme),
|
|
||||||
GOLDEN_THEME(R.id.item_goldentheme, R.style.MyGoldenAESTheme),
|
|
||||||
MEMOR_THEME(R.id.item_memortheme, R.style.MyMemorAESTheme),
|
|
||||||
TAO_THEME(R.id.item_taotheme, R.style.MyTaoAESTheme),
|
|
||||||
DEFAULT_THEME(R.id.item_defaulttheme, R.style.MyAppTheme);
|
|
||||||
|
|
||||||
// ---------------------- 基础字段(原逻辑保留) ----------------------
|
|
||||||
private final int menuId;
|
|
||||||
@StyleRes
|
|
||||||
private final int styleId;
|
|
||||||
|
|
||||||
ThemeStyleEnum(int menuId, @StyleRes int styleId) {
|
|
||||||
this.menuId = menuId;
|
|
||||||
this.styleId = styleId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMenuId() {
|
|
||||||
return menuId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@StyleRes
|
|
||||||
public int getStyleId() {
|
|
||||||
return styleId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------- SharedPreferences 配置(新增) ----------------------
|
|
||||||
// SP文件名:主题配置(建议与枚举类关联,便于查找)
|
|
||||||
private static final String SP_THEME_NAME = "sp_theme_config";
|
|
||||||
// SP存储键:当前选中的主题Style ID
|
|
||||||
private static final String KEY_CURRENT_THEME_STYLE_ID = "current_theme_style_id";
|
|
||||||
|
|
||||||
// ---------------------- 核心方法:保存主题到SP(新增) ----------------------
|
|
||||||
/**
|
|
||||||
* 保存当前选中的主题Style ID到SharedPreferences
|
|
||||||
* @param context 上下文(Activity/Application均可)
|
|
||||||
* @param theme 要保存的主题枚举项(如ThemeStyleEnum.DEFAULT_THEME)
|
|
||||||
*/
|
|
||||||
public static void saveThemeToSP(Context context, ThemeStyleEnum theme) {
|
|
||||||
if (context == null || theme == null) return;
|
|
||||||
// 获取SP实例(私有模式,仅当前App可访问)
|
|
||||||
SharedPreferences sp = context.getSharedPreferences(SP_THEME_NAME, Context.MODE_PRIVATE);
|
|
||||||
// 存入主题对应的Style ID
|
|
||||||
sp.edit().putInt(KEY_CURRENT_THEME_STYLE_ID, theme.getStyleId()).apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------- 核心方法:从SP读取主题(新增) ----------------------
|
|
||||||
/**
|
|
||||||
* 从SharedPreferences读取保存的主题,无存储时返回默认主题
|
|
||||||
* @param context 上下文
|
|
||||||
* @return 保存的主题枚举项(默认返回DEFAULT_THEME)
|
|
||||||
*/
|
|
||||||
public static ThemeStyleEnum getThemeFromSP(Context context) {
|
|
||||||
if (context == null) return DEFAULT_THEME;
|
|
||||||
// 读取SP中保存的Style ID
|
|
||||||
SharedPreferences sp = context.getSharedPreferences(SP_THEME_NAME, Context.MODE_PRIVATE);
|
|
||||||
int savedStyleId = sp.getInt(KEY_CURRENT_THEME_STYLE_ID, DEFAULT_THEME.getStyleId());
|
|
||||||
|
|
||||||
// 根据保存的Style ID匹配对应的枚举项
|
|
||||||
for (ThemeStyleEnum theme : values()) {
|
|
||||||
if (theme.getStyleId() == savedStyleId) {
|
|
||||||
return theme;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 无匹配时返回默认主题(防止异常)
|
|
||||||
return DEFAULT_THEME;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------- 辅助方法:根据菜单ID获取主题(原逻辑保留并优化) ----------------------
|
|
||||||
public static ThemeStyleEnum getThemeByMenuId(int menuId) {
|
|
||||||
for (ThemeStyleEnum theme : values()) {
|
|
||||||
if (theme.getMenuId() == menuId) {
|
|
||||||
return theme;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -14,14 +14,15 @@ import android.content.IntentFilter;
|
|||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.MainActivity;
|
import cc.winboll.studio.mymessagemanager.activitys.MainActivity;
|
||||||
|
import cc.winboll.studio.mymessagemanager.beans.MessageNotificationBean;
|
||||||
import cc.winboll.studio.mymessagemanager.receivers.SMSRecevier;
|
import cc.winboll.studio.mymessagemanager.receivers.SMSRecevier;
|
||||||
import cc.winboll.studio.mymessagemanager.services.MainService;
|
import cc.winboll.studio.mymessagemanager.services.MainService;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil;
|
import cc.winboll.studio.mymessagemanager.utils.AppConfigUtil;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.NotificationHelper;
|
import cc.winboll.studio.mymessagemanager.utils.NotificationHelper;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.ServiceUtil;
|
import cc.winboll.studio.mymessagemanager.utils.ServiceUtil;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
|
|
||||||
public class MainService extends Service {
|
public class MainService extends Service {
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import android.content.Intent;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.WinBoLLActivity;
|
import cc.winboll.studio.mymessagemanager.activitys.BaseActivity;
|
||||||
import com.hjq.permissions.OnPermissionCallback;
|
import com.hjq.permissions.OnPermissionCallback;
|
||||||
import com.hjq.permissions.Permission;
|
import com.hjq.permissions.Permission;
|
||||||
import com.hjq.permissions.XXPermissions;
|
import com.hjq.permissions.XXPermissions;
|
||||||
@@ -184,7 +184,7 @@ public class PermissionUtil {
|
|||||||
// current activity
|
// current activity
|
||||||
//MainActivity.this.finish();
|
//MainActivity.this.finish();
|
||||||
AppGoToSettingsUtil appGoToSettingsUtil = new AppGoToSettingsUtil();
|
AppGoToSettingsUtil appGoToSettingsUtil = new AppGoToSettingsUtil();
|
||||||
appGoToSettingsUtil.GoToSetting((WinBoLLActivity)context);
|
appGoToSettingsUtil.GoToSetting((BaseActivity)context);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
|
.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import android.database.Cursor;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
|
import cc.winboll.studio.libapputils.utils.RegexPPiUtils;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.PhoneBean;
|
import cc.winboll.studio.mymessagemanager.beans.PhoneBean;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
package cc.winboll.studio.mymessagemanager.utils;
|
|
||||||
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
|
|
||||||
* @Date 2025/12/09 11:10
|
|
||||||
* @Describe .* 前置预防针
|
|
||||||
* regex pointer preventive injection
|
|
||||||
* 简称 RegexPPi
|
|
||||||
*/
|
|
||||||
public class RegexPPiUtils {
|
|
||||||
|
|
||||||
public static final String TAG = "RegexPPiUtils";
|
|
||||||
|
|
||||||
//
|
|
||||||
// 检验文本是否满足适合正则表达式模式计算
|
|
||||||
//
|
|
||||||
public static boolean isPPiOK(String text) {
|
|
||||||
//String text = "这里是一些任意的文本内容";
|
|
||||||
String regex = ".*";
|
|
||||||
Pattern pattern = Pattern.compile(regex);
|
|
||||||
Matcher matcher = pattern.matcher(text);
|
|
||||||
/*if (matcher.matches()) {
|
|
||||||
System.out.println("文本满足该正则表达式模式");
|
|
||||||
} else {
|
|
||||||
System.out.println("文本不满足该正则表达式模式");
|
|
||||||
}*/
|
|
||||||
return matcher.matches();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,6 +8,7 @@ package cc.winboll.studio.mymessagemanager.utils;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.JsonReader;
|
import android.util.JsonReader;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
|
import cc.winboll.studio.libapputils.utils.RegexPPiUtils;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean;
|
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean_V1;
|
import cc.winboll.studio.mymessagemanager.beans.SMSAcceptRuleBean_V1;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ import android.provider.Telephony;
|
|||||||
import android.telephony.gsm.SmsManager;
|
import android.telephony.gsm.SmsManager;
|
||||||
import android.telephony.gsm.SmsMessage;
|
import android.telephony.gsm.SmsMessage;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
|
||||||
import cc.winboll.studio.mymessagemanager.beans.SMSBean;
|
import cc.winboll.studio.mymessagemanager.beans.SMSBean;
|
||||||
|
import com.hjq.toast.ToastUtils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class SMSUtil {
|
public class SMSUtil {
|
||||||
|
|||||||
@@ -10,15 +10,14 @@ import android.content.Intent;
|
|||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.util.JsonReader;
|
import android.util.JsonReader;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import cc.winboll.studio.libaes.dialogs.YesNoAlertDialog;
|
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.mymessagemanager.R;
|
import cc.winboll.studio.mymessagemanager.R;
|
||||||
import cc.winboll.studio.mymessagemanager.activitys.TTSPlayRuleActivity;
|
import cc.winboll.studio.mymessagemanager.activitys.TTSPlayRuleActivity;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.TTSPlayRuleBean;
|
import cc.winboll.studio.mymessagemanager.beans.TTSPlayRuleBean;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.TTSPlayRuleBean_V1;
|
import cc.winboll.studio.mymessagemanager.beans.TTSPlayRuleBean_V1;
|
||||||
import cc.winboll.studio.mymessagemanager.beans.TTSSpeakTextBean;
|
import cc.winboll.studio.mymessagemanager.beans.TTSSpeakTextBean;
|
||||||
|
import cc.winboll.studio.mymessagemanager.dialogs.YesNoAlertDialog;
|
||||||
import cc.winboll.studio.mymessagemanager.services.TTSPlayService;
|
import cc.winboll.studio.mymessagemanager.services.TTSPlayService;
|
||||||
import cc.winboll.studio.mymessagemanager.utils.FileUtil;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import android.content.Context;
|
|||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Switch;
|
import android.widget.Switch;
|
||||||
import cc.winboll.studio.libaes.dialogs.YesNoAlertDialog;
|
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
|
import cc.winboll.studio.mymessagemanager.dialogs.YesNoAlertDialog;
|
||||||
|
|
||||||
public class ConfirmSwitchView extends Switch {
|
public class ConfirmSwitchView extends Switch {
|
||||||
|
|
||||||
|
|||||||
@@ -62,11 +62,12 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="拒绝显示的字符集:"/>
|
android:text="拒绝显示的字符集:"/>
|
||||||
|
|
||||||
<Button
|
<EditText
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
|
android:ems="10"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="点击编辑"
|
android:layout_weight="1.0"
|
||||||
android:onClick="onCharsetRefuseEditDialog"/>
|
android:id="@+id/activityappsettingsEditText3"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@@ -212,12 +213,12 @@
|
|||||||
android:text="检查应用权限"
|
android:text="检查应用权限"
|
||||||
android:onClick="onCheckAndGetAppPermission"/>
|
android:onClick="onCheckAndGetAppPermission"/>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="安装TTS语音支持"
|
android:text="清理通知设置"
|
||||||
android:onClick="onAddTTSSupport"/>
|
android:onClick="onCleanOldChannels"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -226,22 +227,6 @@
|
|||||||
|
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="center"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:background="#FFFFFFFF">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="》"
|
|
||||||
android:rotation="90"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -265,12 +250,5 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<cc.winboll.studio.libaes.views.ADsControlView
|
|
||||||
android:id="@+id/ads_control_view"
|
|
||||||
android:background="@drawable/bg_frame"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
<cc.winboll.studio.libaes.views.ASupportToolbar
|
<cc.winboll.studio.libaes.views.ASupportToolbar
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/toolbar_height"
|
android:layout_height="@dimen/toolbar_height"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:id="@+id/activitymainASupportToolbar1"/>
|
android:id="@+id/activitymainASupportToolbar1"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@@ -51,37 +52,25 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<com.baoyz.widget.PullRefreshLayout
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1.0">
|
android:layout_weight="1.0"
|
||||||
|
android:id="@+id/activitymainPullRefreshLayout1">
|
||||||
|
|
||||||
<com.baoyz.widget.PullRefreshLayout
|
<ScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:id="@+id/activitymainPullRefreshLayout1">
|
android:id="@+id/activitymainScrollView1">
|
||||||
|
|
||||||
<ScrollView
|
<cc.winboll.studio.mymessagemanager.views.PhoneListViewForScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/activitymainScrollView1">
|
android:id="@+id/activitymainListView1"/>
|
||||||
|
|
||||||
<cc.winboll.studio.mymessagemanager.views.PhoneListViewForScrollView
|
</ScrollView>
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:id="@+id/activitymainListView1"/>
|
|
||||||
|
|
||||||
</ScrollView>
|
</com.baoyz.widget.PullRefreshLayout>
|
||||||
|
|
||||||
</com.baoyz.widget.PullRefreshLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<cc.winboll.studio.libaes.views.ADsBannerView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:id="@+id/adsbanner"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:theme="@style/AppTheme"
|
||||||
android:id="@+id/remoteviewLinearLayout1">
|
android:id="@+id/remoteviewLinearLayout1">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
|||||||
@@ -1,6 +1,19 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item android:title="@string/app_developoptions">
|
||||||
|
<menu>
|
||||||
|
<item
|
||||||
|
android:id="@+id/app_log"
|
||||||
|
android:title="@string/app_log"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/app_unittest"
|
||||||
|
android:title="@string/app_unittest"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/app_crashtest"
|
||||||
|
android:title="@string/app_crashtest"/>
|
||||||
|
</menu>
|
||||||
|
</item>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/app_appsettings"
|
android:id="@+id/app_appsettings"
|
||||||
android:title="@string/text_appsettings"/>
|
android:title="@string/text_appsettings"/>
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
|
||||||
<item android:title="APP Debug">
|
|
||||||
<menu>
|
|
||||||
<item
|
|
||||||
android:id="@+id/app_unittest"
|
|
||||||
android:title="@string/app_unittest"/>
|
|
||||||
</menu>
|
|
||||||
</item>
|
|
||||||
|
|
||||||
</menu>
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<style name="MyAppTheme" parent="AESTheme">
|
|
||||||
<item name="android:textSize">20sp</item>
|
|
||||||
<item name="attrSMSViewSendColor">@color/colorSMSSendColor</item>
|
|
||||||
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColor</item>
|
|
||||||
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColor</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
|
|
||||||
<style name="MyDepthAESTheme" parent="DepthAESTheme">
|
|
||||||
<item name="android:textSize">20sp</item>
|
|
||||||
<item name="attrSMSViewSendColor">@color/colorSMSSendColorDepth</item>
|
|
||||||
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorDepth</item>
|
|
||||||
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorDepth</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="MySkyAESTheme" parent="SkyAESTheme">
|
|
||||||
<item name="android:textSize">20sp</item>
|
|
||||||
<item name="attrSMSViewSendColor">@color/colorSMSSendColorSky</item>
|
|
||||||
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorSky</item>
|
|
||||||
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorSky</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="MyGoldenAESTheme" parent="GoldenAESTheme">
|
|
||||||
<item name="android:textSize">20sp</item>
|
|
||||||
<item name="attrSMSViewSendColor">@color/colorSMSSendColorGolden</item>
|
|
||||||
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorGolden</item>
|
|
||||||
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorGolden</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="MyMemorAESTheme" parent="MemorAESTheme">
|
|
||||||
<item name="android:textSize">20sp</item>
|
|
||||||
<item name="attrSMSViewSendColor">@color/colorSMSSendColorMemor</item>
|
|
||||||
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorMemor</item>
|
|
||||||
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorMemor</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="MyTaoAESTheme" parent="TaoAESTheme">
|
|
||||||
<item name="android:textSize">20sp</item>
|
|
||||||
<item name="attrSMSViewSendColor">@color/colorSMSSendColorTao</item>
|
|
||||||
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorTao</item>
|
|
||||||
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorTao</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
</resources>
|
|
||||||
90
mymessagemanager/src/main/res/values/themes.xml
Normal file
90
mymessagemanager/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<resources>
|
||||||
|
|
||||||
|
<style name="MyAppTheme" parent="AESTheme">
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="attrSMSViewSendColor">@color/colorSMSSendColor</item>
|
||||||
|
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColor</item>
|
||||||
|
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColor</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="MyDepthAESTheme" parent="DepthAESTheme">
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="attrSMSViewSendColor">@color/colorSMSSendColorDepth</item>
|
||||||
|
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorDepth</item>
|
||||||
|
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorDepth</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="MySkyAESTheme" parent="SkyAESTheme">
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="attrSMSViewSendColor">@color/colorSMSSendColorSky</item>
|
||||||
|
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorSky</item>
|
||||||
|
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorSky</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="MyGoldenAESTheme" parent="GoldenAESTheme">
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="attrSMSViewSendColor">@color/colorSMSSendColorGolden</item>
|
||||||
|
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorGolden</item>
|
||||||
|
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorGolden</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="MyMemorAESTheme" parent="MemorAESTheme">
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="attrSMSViewSendColor">@color/colorSMSSendColorMemor</item>
|
||||||
|
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorMemor</item>
|
||||||
|
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorMemor</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="MyTaoAESTheme" parent="TaoAESTheme">
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="attrSMSViewSendColor">@color/colorSMSSendColorTao</item>
|
||||||
|
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorTao</item>
|
||||||
|
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorTao</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!--<style name="AppTheme_Base" parent="android:Theme.Material.Light.NoActionBar">
|
||||||
|
<item name="colorPrimary">#FFC4C4C4</item>
|
||||||
|
<item name="colorPrimaryDark">#FF9F9F9F</item>
|
||||||
|
<item name="colorAccent">#FF888888</item>
|
||||||
|
</style>
|
||||||
|
<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
|
||||||
|
<item name="colorPrimary">#FFC4C4C4</item>
|
||||||
|
<item name="colorPrimaryDark">#FF9F9F9F</item>
|
||||||
|
<item name="colorAccent">#FF888888</item>
|
||||||
|
</style>
|
||||||
|
<style name="AppTheme_Default" parent="android:Theme.Material.Light.NoActionBar">
|
||||||
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="aToolbar">@style/DefaultAToolbar</item>
|
||||||
|
<item name="attrSMSViewSendColor">@color/colorSMSSendColor</item>
|
||||||
|
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColor</item>
|
||||||
|
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColor</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme_Sky" parent="android:Theme.Material.Light.NoActionBar">
|
||||||
|
<item name="colorPrimary">@color/colorPrimarySky</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDarkSky</item>
|
||||||
|
<item name="colorAccent">@color/colorAccentSky</item>
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="aToolbar">@style/SKyAToolbar</item>
|
||||||
|
<item name="attrSMSViewSendColor">@color/colorSMSSendColorSky</item>
|
||||||
|
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorSky</item>
|
||||||
|
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorSky</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme_Golden" parent="android:Theme.Material.Light.NoActionBar">
|
||||||
|
<item name="colorPrimary">@color/colorPrimaryGolden</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDarkGolden</item>
|
||||||
|
<item name="colorAccent">@color/colorAccentGolden</item>
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="aToolbar">@style/GoldenAToolbar</item>
|
||||||
|
<item name="attrSMSViewSendColor">@color/colorSMSSendColorGolden</item>
|
||||||
|
<item name="attrSMSViewInboxColor">@color/colorSMSInboxColorGolden</item>
|
||||||
|
<item name="attrTTSRuleViewBackgroundColor">@color/colorTTSRuleViewBackgroundColorGolden</item>
|
||||||
|
</style>
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
</resources>
|
||||||
Reference in New Issue
Block a user