Compare commits

..

14 Commits

64 changed files with 649 additions and 592 deletions

View File

@@ -5,10 +5,11 @@
## ☁ ☁ ☁ WinBoLL APP ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ## ☁ ☁ ☁ WinBoLL APP ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
# ☁ ☁ WinBoLL Studio Android 应用开源项目。☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ # ☁ ☁ WinBoLL Studio Android 应用开源项目。☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
# ☁ ☁ ☁ WinBoLL 网站地址 https://www.winboll.cc/ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ # ☁ ☁ ☁ WinBoLL 网站地址 https://www.winboll.cc/ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
# ☁ ☁ ☁ WinBoLL 源码地址 <https://gitea.winboll.cc/Studio/APPBase> ☁ ☁ ☁ ☁ ☁ ☁ ☁ # ☁ ☁ ☁ WinBoLL 源码地址 <https://gitea.winboll.cc/Studio/WinBoLL.git> ☁ ☁ ☁ ☁ ☁ ☁ ☁
# ☁ ☁ ☁ GitHub 源码地址 <https://github.com/ZhanGSKen/APPBase.git> ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ # ☁ ☁ ☁ GitHub 源码地址 <https://github.com/ZhanGSKen/WinBoLL.git> ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
# ☁ ☁ ☁ 码云 源码地址 <https://gitee.com/zhangsken/appbase.git> ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ # ☁ ☁ ☁ 码云 源码地址 <https://gitee.com/zhangsken/winboll.git> ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
# ☁ ☁ ☁ 在 jitpack.io 托管的 APPBase 类库源码<https://github.com/ZhanGSKen/APPBase.git> ☁ ☁ ☁ ☁
# ☁ ☁ ☁ 在 jitpack.io 托管的 AES 类库源码<https://github.com/ZhanGSKen/AES.git> ☁ ☁ ☁ ☁
## WinBoLL 提问 ## WinBoLL 提问
同样是 /sdcard 目录,在开发 Android 应用时, 同样是 /sdcard 目录,在开发 Android 应用时,
能否实现手机编译与电脑编译的源码同步。 能否实现手机编译与电脑编译的源码同步。

View File

@@ -29,28 +29,30 @@ android {
// versionName 更新后需要手动设置 // versionName 更新后需要手动设置
// .winboll/winbollBuildProps.properties 文件的 stageCount=0 // .winboll/winbollBuildProps.properties 文件的 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.6' 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'
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'
@@ -69,4 +71,14 @@ 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'])
} }

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Sun Sep 28 12:37:31 HKT 2025 #Wed Dec 10 12:11:13 HKT 2025
stageCount=10 stageCount=4
libraryProject= libraryProject=
baseVersion=15.3 baseVersion=15.12
publishVersion=15.3.9 publishVersion=15.12.3
buildCount=0 buildCount=0
baseBetaVersion=15.3.10 baseBetaVersion=15.12.4

View File

@@ -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

View File

@@ -7,9 +7,10 @@ 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 {
@@ -29,18 +30,23 @@ 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();
}
} }

View File

@@ -11,9 +11,10 @@ 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.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.libappbase.winboll.IWinBoLLActivity; import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
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;
@@ -64,13 +65,13 @@ public class AboutActivity extends WinBoLLActivity implements IWinBoLLActivity {
); );
layout.addView(aboutView, params); layout.addView(aboutView, params);
App.getWinBoLLActivityManager().add(this); WinBoLLActivityManager.getInstance().add(this);
} }
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
App.getWinBoLLActivityManager().registeRemove(this); WinBoLLActivityManager.getInstance().registeRemove(this);
} }
public AboutView CreateAboutView() { public AboutView CreateAboutView() {

View File

@@ -5,25 +5,29 @@ 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.mymessagemanager.R; import cc.winboll.studio.mymessagemanager.R;
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 BaseActivity { public class AppSettingsActivity extends WinBoLLActivity implements IWinBoLLActivity {
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;
@@ -34,6 +38,16 @@ public class AppSettingsActivity extends BaseActivity {
EditText metProtectModerRefuseChars; EditText metProtectModerRefuseChars;
EditText metProtectModerReplaceChars; EditText metProtectModerReplaceChars;
@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);
@@ -99,17 +113,22 @@ public class AppSettingsActivity extends BaseActivity {
} }
} }
public void onCleanOldChannels(View view) { public void onAddTTSSupport(View view) {
YesNoAlertDialog.show(this, "通知设置清理", "是否清理旧的通知设置?", new YesNoAlertDialog.OnDialogResultListener(){ try {
@Override // 1. 创建IntentAction为“打开网页”
public void onNo() { Intent intent = new Intent(Intent.ACTION_VIEW);
} // 2. 设置要跳转的URL
intent.setData(Uri.parse(XUNFEI_YUJI_DOWNLOAD_URL));
@Override // 3. 确保Intent可被解析避免无浏览器时崩溃
public void onYes() { if (intent.resolveActivity(getPackageManager()) != null) {
NotificationHelper notificationHelper = new NotificationHelper(AppSettingsActivity.this); startActivity(intent); // 跳转至浏览器打开下载页
notificationHelper.cleanOldChannels(); } else {
} // 无浏览器时的提示
}); Toast.makeText(this, "未找到浏览器应用,请安装后重试", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "无法打开下载页面,请稍后再试", Toast.LENGTH_SHORT).show();
}
} }
} }

View File

@@ -1,114 +0,0 @@
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);
}
}

View File

@@ -5,6 +5,8 @@ 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;
@@ -16,23 +18,21 @@ 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 android.content.Intent; import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
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 BaseActivity { public class ComposeSMSActivity extends WinBoLLActivity implements IWinBoLLActivity {
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,6 +54,16 @@ public class ComposeSMSActivity extends BaseActivity {
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);

View File

@@ -11,8 +11,11 @@ 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;
@@ -30,7 +33,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 BaseActivity { public class MainActivity extends WinBoLLActivity {
public final static String TAG = "MainActivity"; public final static String TAG = "MainActivity";
@@ -42,6 +45,8 @@ public class MainActivity extends BaseActivity {
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;
@@ -64,6 +69,9 @@ public class MainActivity extends BaseActivity {
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();
@@ -256,21 +264,31 @@ public class MainActivity extends BaseActivity {
@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();
//mLogView.start(); if (mADsBannerView != null) {
mADsBannerView.resumeADs(MainActivity.this);
}
} }
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
//return super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.toolbar_main_first, menu);
getMenuInflater().inflate(R.menu.toolbar_main, menu); // 主题菜单
super.onCreateOptionsMenu(menu); AESThemeUtil.inflateMenu(this, 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;
} }
@@ -285,7 +303,12 @@ public class MainActivity extends BaseActivity {
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
int nItemId = item.getItemId(); int nItemId = item.getItemId();
if (nItemId == R.id.app_ttsrule) { int menuItemId = item.getItemId();
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);
@@ -297,16 +320,10 @@ public class MainActivity extends BaseActivity {
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_log) { } else if (nItemId == R.id.app_unittest) {
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);

View File

@@ -7,10 +7,8 @@ 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;
@@ -19,6 +17,7 @@ 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;
@@ -27,9 +26,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 java.lang.ref.WeakReference; import android.app.Activity;
public class SMSActivity extends BaseActivity { public class SMSActivity extends WinBoLLActivity implements IWinBoLLActivity {
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";
@@ -45,6 +44,16 @@ public class SMSActivity extends BaseActivity {
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);

View File

@@ -21,6 +21,7 @@ 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;
@@ -29,8 +30,9 @@ 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 BaseActivity { public class SMSReceiveRuleActivity extends WinBoLLActivity implements IWinBoLLActivity {
public static final String TAG = "SMSReceiveRuleActivity"; public static final String TAG = "SMSReceiveRuleActivity";
@@ -43,6 +45,16 @@ public class SMSReceiveRuleActivity extends BaseActivity {
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);

View File

@@ -5,13 +5,15 @@ 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.libappbase.dialogs.YesNoAlertDialog; 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.SMSRecycleActivity; import cc.winboll.studio.mymessagemanager.activitys.SMSRecycleActivity;
import cc.winboll.studio.mymessagemanager.adapters.SMSRecycleAdapter; import cc.winboll.studio.mymessagemanager.adapters.SMSRecycleAdapter;
@@ -19,7 +21,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 BaseActivity { public class SMSRecycleActivity extends WinBoLLActivity implements IWinBoLLActivity {
public static final String TAG = "SMSRecycleActivity"; public static final String TAG = "SMSRecycleActivity";
@@ -27,6 +29,16 @@ public class SMSRecycleActivity extends BaseActivity {
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);

View File

@@ -7,19 +7,34 @@ 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 BaseActivity { public class SharedJSONReceiveActivity extends WinBoLLActivity implements IWinBoLLActivity {
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);

View File

@@ -16,13 +16,15 @@ 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 BaseActivity { public class TTSPlayRuleActivity extends WinBoLLActivity implements IWinBoLLActivity {
public static final String TAG = "TTSPlayRuleActivity"; public static final String TAG = "TTSPlayRuleActivity";
@@ -39,6 +41,16 @@ public class TTSPlayRuleActivity extends BaseActivity {
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);

View File

@@ -7,17 +7,18 @@ 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.beans.AESThemeBean; import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
import cc.winboll.studio.libaes.utils.AESThemeUtil; import cc.winboll.studio.mymessagemanager.enums.ThemeStyleEnum;
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";
protected volatile AESThemeBean.ThemeType mThemeType; IOnActivityMessageReceived mIOnActivityMessageReceived;
@Override @Override
public Activity getActivity() { public Activity getActivity() {
@@ -31,30 +32,51 @@ public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivi
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
mThemeType = getThemeType(); // 1. 优先读取SP中保存的主题必须在setContentView前调用
setThemeStyle(); ThemeStyleEnum savedTheme = ThemeStyleEnum.getThemeFromSP(this);
// 2. 设置主题
setTheme(savedTheme.getStyleId());
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
AESThemeBean.ThemeType getThemeType() { @Override
/*SharedPreferences sharedPreferences = getSharedPreferences( public boolean onOptionsItemSelected(MenuItem item) {
SHAREDPREFERENCES_NAME, MODE_PRIVATE); int selectedMenuId = item.getItemId();
return AESThemeBean.ThemeType.values()[((sharedPreferences.getInt(DRAWER_THEME_TYPE, AESThemeBean.ThemeType.DEFAULT.ordinal())))]; // 1. 根据菜单ID获取对应的主题枚举
*/ 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);
} }
void setThemeStyle() { public void sendActivityMessage(Message msg) {
//setTheme(AESThemeBean.getThemeStyle(getThemeType())); mHandler.sendMessage(msg);
setTheme(AESThemeUtil.getThemeTypeID(getApplicationContext()));
} }
@Override protected void setOnActivityMessageReceived(IOnActivityMessageReceived iOnActivityMessageReceived) {
public boolean onOptionsItemSelected(MenuItem item) { mIOnActivityMessageReceived = iOnActivityMessageReceived;
if(item.getItemId() == android.R.id.home) { }
finish();
return true; Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (mIOnActivityMessageReceived != null) {
mIOnActivityMessageReceived.onActivityMessageReceived(msg);
}
} }
return super.onOptionsItemSelected(item); };
}
} }

View File

@@ -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> {

View File

@@ -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.dialogs.YesNoAlertDialog; import cc.winboll.studio.mymessagemanager.utils.NotificationHelper;
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 {

View File

@@ -20,11 +20,13 @@ 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.dialogs.YesNoAlertDialog; import cc.winboll.studio.mymessagemanager.utils.AddressUtils;
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;
@@ -32,9 +34,7 @@ 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> {

View File

@@ -1,59 +0,0 @@
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();
}
}

View File

@@ -0,0 +1,93 @@
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;
}
}

View File

@@ -14,15 +14,14 @@ 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 {

View File

@@ -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.BaseActivity; import cc.winboll.studio.mymessagemanager.activitys.WinBoLLActivity;
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((BaseActivity)context); appGoToSettingsUtil.GoToSetting((WinBoLLActivity)context);
} }
}) })
.setNegativeButton("Exit", new DialogInterface.OnClickListener() { .setNegativeButton("Exit", new DialogInterface.OnClickListener() {

View File

@@ -11,7 +11,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.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;

View File

@@ -0,0 +1,32 @@
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();
}
}

View File

@@ -8,7 +8,6 @@ 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;

View File

@@ -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 {

View File

@@ -10,14 +10,15 @@ 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;

View File

@@ -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 {

View File

@@ -213,11 +213,11 @@
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="清理通知设置" android:text="安装TTS语音支持"
android:onClick="onCleanOldChannels"/> android:onClick="onAddTTSSupport"/>
</LinearLayout> </LinearLayout>
@@ -227,6 +227,22 @@
</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"
@@ -250,5 +266,12 @@
</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>

View File

@@ -8,7 +8,6 @@
<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
@@ -52,25 +51,37 @@
</LinearLayout> </LinearLayout>
<com.baoyz.widget.PullRefreshLayout <LinearLayout
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">
<ScrollView <com.baoyz.widget.PullRefreshLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:id="@+id/activitymainScrollView1"> android:id="@+id/activitymainPullRefreshLayout1">
<cc.winboll.studio.mymessagemanager.views.PhoneListViewForScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:id="@+id/activitymainListView1"/> android:id="@+id/activitymainScrollView1">
</ScrollView> <cc.winboll.studio.mymessagemanager.views.PhoneListViewForScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activitymainListView1"/>
</com.baoyz.widget.PullRefreshLayout> </ScrollView>
</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>

View File

@@ -4,7 +4,6 @@
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

View File

@@ -0,0 +1,12 @@
<?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>

View File

@@ -1,19 +1,6 @@
<?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"/>

View File

@@ -0,0 +1,47 @@
<?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>

View File

@@ -1,90 +0,0 @@
<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>

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Sun Dec 07 03:22:51 HKT 2025 #Sun Dec 07 04:17:43 GMT 2025
stageCount=7 stageCount=8
libraryProject= libraryProject=
baseVersion=15.11 baseVersion=15.11
publishVersion=15.11.6 publishVersion=15.11.7
buildCount=0 buildCount=1
baseBetaVersion=15.11.7 baseBetaVersion=15.11.8

View File

@@ -14,8 +14,8 @@
<application <application
android:allowBackup="true" android:allowBackup="true"
android:icon="@drawable/ic_launcher_stage" android:icon="@drawable/ic_launcher"
android:roundIcon="@drawable/ic_launcher_stage" android:roundIcon="@drawable/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/MyAppTheme" android:theme="@style/MyAppTheme"
android:resizeableActivity="true" android:resizeableActivity="true"
@@ -37,7 +37,7 @@
android:targetActivity=".MainActivity" android:targetActivity=".MainActivity"
android:exported="true" android:exported="true"
android:label="@string/app_name" android:label="@string/app_name"
android:icon="@drawable/ic_launcher_stage" android:icon="@drawable/ic_launcher"
android:enabled="true"> android:enabled="true">
<intent-filter> <intent-filter>

View File

@@ -1,34 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeColor="#00000000"
android:strokeWidth="1">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeColor="#00000000"
android:strokeWidth="1" />
</vector>

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#ff000000"
android:pathData="M4,1C2.89,1 2,1.89 2,3V7C2,8.11 2.89,9 4,9H1V11H13V9H10C11.11,9 12,8.11 12,7V3C12,1.89 11.11,1 10,1H4M4,3H10V7H4V3M3,12V14H5V12H3M14,13C12.89,13 12,13.89 12,15V19C12,20.11 12.89,21 14,21H11V23H23V21H20C21.11,21 22,20.11 22,19V15C22,13.89 21.11,13 20,13H14M3,15V17H5V15H3M14,15H20V19H14V15M3,18V20H5V18H3M6,18V20H8V18H6M9,18V20H11V18H9Z"/>
</vector>

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#ff000000"
android:pathData="M4,1C2.89,1 2,1.89 2,3V7C2,8.11 2.89,9 4,9H1V11H13V9H10C11.11,9 12,8.11 12,7V3C12,1.89 11.11,1 10,1H4M4,3H10V7H4V3M14,13C12.89,13 12,13.89 12,15V19C12,20.11 12.89,21 14,21H11V23H23V21H20C21.11,21 22,20.11 22,19V15C22,13.89 21.11,13 20,13H14M3.88,13.46L2.46,14.88L4.59,17L2.46,19.12L3.88,20.54L6,18.41L8.12,20.54L9.54,19.12L7.41,17L9.54,14.88L8.12,13.46L6,15.59L3.88,13.46M14,15H20V19H14V15Z"/>
</vector>

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#ff000000"
android:pathData="M22,6C22,4.9 21.1,4 20,4H4C2.9,4 2,4.9 2,6V18C2,19.1 2.9,20 4,20H20C21.1,20 22,19.1 22,18V6M20,6L12,11L4,6H20M20,18H4V8L12,13L20,8V18Z"/>
</vector>

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#ff000000"
android:pathData="M24,7H22V13H24V7M24,15H22V17H24V15M20,6C20,4.9 19.1,4 18,4H2C0.9,4 0,4.9 0,6V18C0,19.1 0.9,20 2,20H18C19.1,20 20,19.1 20,18V6M18,6L10,11L2,6H18M18,18H2V8L10,13L18,8V18Z"/>
</vector>

View File

@@ -1,35 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="1565dp"
android:height="1565dp"
android:viewportWidth="1565"
android:viewportHeight="1565">
<path
android:fillColor="#FFFFFFFF"
android:strokeColor="#FFFFFFFF"
android:strokeWidth="4.0"
android:strokeLineCap="round"
android:strokeMiterLimit="10"
android:pathData="M793.8 222.7C782.5 239.2 736.3 298.6 685.6 361.9 647 410.2 633.3 428.9 633.6 432.7 633.7 433.4 633.8 434.6 633.9 435.3 634.1 437.8 647.9 440.7 663.8 441.5 706.7 443.8 717 445.3 724.9 450.6 733.7 456.4 735.9 467.4 736 504.2 736 504.2 736 521.9 736 521.9 736 521.9 730.8 522.4 730.8 522.4 727.9 522.8 691.8 525.3 650.5 528 609.3 530.8 571.9 533.3 567.5 533.6 531.8 536 503.4 540.5 487.4 546 475 550.3 442.2 566.5 428.2 575.2 392.1 597.6 360.1 629.2 338 664.3 317 697.7 304.6 729.6 292.5 781 287.8 801 283.9 805.6 267.2 811 255.1 814.9 248.7 818.3 243.4 823.5 239.7 827.2 239.2 828.4 237.7 836.5 236.7 841.5 235.5 850 235 855.5 234.3 863.9 232.6 911.1 232.6 924.5 232.6 934.6 234.2 959.8 235 963 237.4 972 242.3 975.8 258.7 981.7 271.7 986.3 277.4 989.5 280.4 993.9 283.1 997.9 286.5 1008.7 287.4 1016.5 289.3 1031.7 293.3 1050.2 297.7 1064 306.4 1091.9 317.6 1107.7 330 1109.5 332.4 1109.9 334.7 1110.3 335 1110.5 335.3 1110.6 339.1 1111.1 343.5 1111.4 347.9 1111.8 353.8 1112.3 356.5 1112.5 370 1113.7 407.8 1115.8 430 1116.5 439.6 1116.8 453.4 1117.3 460.5 1117.5 467.7 1117.8 482.3 1118.2 493 1118.5 503.7 1118.8 520.8 1119.2 531 1119.5 587.8 1121.1 683 1122 794.5 1122 918.8 1122 996.1 1121 1075 1118.5 1083.5 1118.2 1098.6 1117.8 1108.5 1117.4 1118.4 1117.1 1129.4 1116.7 1133 1116.5 1136.6 1116.3 1144.7 1115.8 1151 1115.5 1183.3 1114 1207.5 1110.9 1221.5 1106.3 1235.3 1101.9 1244.8 1094.1 1249.9 1083.2 1253.5 1075.4 1253.7 1074.4 1259 1044 1266.4 1001.7 1269.1 993.5 1276.9 989.2 1278.9 988.1 1284.7 986.1 1289.9 984.6 1305.8 980.1 1313.3 975.5 1314.4 969.7 1316.2 959.5 1317.1 881.4 1315.7 859.5 1314 834.8 1313.1 831.4 1307 824.7 1301.2 818.3 1295 814.8 1283 811 1278 809.5 1272.4 807 1270.5 805.6 1264 800.6 1259.5 790.1 1252.5 763 1243.5 728.4 1235.9 706.8 1224.6 683.5 1202.3 637.7 1167.5 602.5 1111.8 569.1 1087.6 554.7 1054.4 542.7 1028.1 539 1024.1 538.4 1020.5 537.8 1020.1 537.6 1019.8 537.4 1016.4 536.9 1012.7 536.5 1009 536.2 1005.1 535.7 1004.2 535.5 999.7 534.7 988.4 533.6 973.5 532.5 969.7 532.2 964.5 531.8 962 531.5 959.5 531.2 940.4 530.1 919.5 529 851.7 525.4 836.1 523.7 829.5 519.4 821.2 514 825.2 495.6 837.6 481.8 843.8 474.9 844.2 474.3 856.8 448 862.6 436 868.9 425.2 879.9 408.7 888.2 396.2 895 385.5 895 385.1 895 384.6 889.7 383.3 883.3 382 851.1 375.9 812.7 367.8 806.9 365.9 792.4 361.2 790.7 358.7 790.2 342.5 789.7 326.8 792.4 303.4 800 258.5 802.1 246.1 803.3 220.9 801.9 219.6 801.7 219.4 800.5 218.9 799.3 218.6 797.4 218 796.5 218.7 793.8 222.7Z"/>
<path
android:fillColor="#FF62686C"
android:strokeColor="#FF62686C"
android:strokeWidth="4.0"
android:strokeLineCap="round"
android:strokeMiterLimit="10"
android:pathData="M570.4 704.1C553.5 706.1 539.7 713 532.9 722.7 523.5 736.3 519.9 764.2 519.6 826 519.5 859.4 519.7 860.6 530.1 872.9 543.4 888.6 560.4 900 574.1 902.1 586.7 904 601.5 898.9 615.7 887.5 632.5 874.1 633.5 868.9 632.7 793.6 632.2 742.5 631.6 736 627 725.2 620.5 710 596.2 700.9 570.4 704.1Z"/>
<path
android:fillColor="#FF62686C"
android:strokeColor="#FF62686C"
android:strokeWidth="4.0"
android:strokeLineCap="round"
android:strokeMiterLimit="10"
android:pathData="M949.2 705.5C935.1 708.7 927 716.8 922.6 732.4 918.4 746.7 917.8 757.3 917.3 816.5 917.1 847.8 917.3 874 917.7 874.6 919.2 876.7 945.3 892.3 955.5 897.1 973.4 905.5 983.5 905.4 978.9 896.8 977.1 893.4 979.1 892.6 985.9 893.9 993.6 895.4 997.8 894.3 1005.2 889.1 1010.9 885 1020.2 873.6 1023.8 866.5 1029.6 854.9 1031.1 841.6 1031.1 800.5 1031.1 750.1 1028.6 737.6 1014.9 720.4 1009.4 713.5 1004.6 709.8 996.9 706.8 992.2 704.9 989.1 704.6 973.5 704.4 960.6 704.1 953.7 704.5 949.2 705.5Z"/>
<path
android:fillColor="#FF62686C"
android:strokeColor="#FF62686C"
android:strokeWidth="4.0"
android:strokeLineCap="round"
android:strokeMiterLimit="10"
android:pathData="M717 988.7C671.1 990.4 640.9 994.2 635.6 998.8 631.5 1002.5 636.3 1017.5 643.6 1024 650.9 1030.3 661.7 1032.5 694 1034 721.9 1035.3 829.3 1035.3 857 1034 891.4 1032.4 901.4 1029.9 908.9 1021.3 914.5 1015 917.9 1003.4 915.2 999.4 910.4 992.1 856 987.9 772 988.2 745.9 988.3 721.1 988.5 717 988.7Z"/>
</vector>

View File

@@ -9,5 +9,5 @@
android:top="0dp" android:top="0dp"
android:right="0dp" android:right="0dp"
android:bottom="0dp" android:bottom="0dp"
android:drawable="@drawable/ic_iw"/> android:drawable="@drawable/ic_launcher"/>
</layer-list> </layer-list>

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:clickable="true"
android:layout_width="24dp"
android:layout_height="24dp">
<item android:drawable="@drawable/ic_launcher_background"/>
<item
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
android:drawable="@drawable/ic_launcher_foreground_disable"/>
</layer-list>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M16.61,15.15C16.15,15.15 15.77,14.78 15.77,14.32S16.15,13.5 16.61,13.5H16.61C17.07,13.5 17.45,13.86 17.45,14.32C17.45,14.78 17.07,15.15 16.61,15.15M7.41,15.15C6.95,15.15 6.57,14.78 6.57,14.32C6.57,13.86 6.95,13.5 7.41,13.5H7.41C7.87,13.5 8.24,13.86 8.24,14.32C8.24,14.78 7.87,15.15 7.41,15.15M16.91,10.14L18.58,7.26C18.67,7.09 18.61,6.88 18.45,6.79C18.28,6.69 18.07,6.75 18,6.92L16.29,9.83C14.95,9.22 13.5,8.9 12,8.91C10.47,8.91 9,9.24 7.73,9.82L6.04,6.91C5.95,6.74 5.74,6.68 5.57,6.78C5.4,6.87 5.35,7.08 5.44,7.25L7.1,10.13C4.25,11.69 2.29,14.58 2,18H22C21.72,14.59 19.77,11.7 16.91,10.14H16.91Z"/>
</vector>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#FF808080"
android:pathData="M16.61,15.15C16.15,15.15 15.77,14.78 15.77,14.32S16.15,13.5 16.61,13.5H16.61C17.07,13.5 17.45,13.86 17.45,14.32C17.45,14.78 17.07,15.15 16.61,15.15M7.41,15.15C6.95,15.15 6.57,14.78 6.57,14.32C6.57,13.86 6.95,13.5 7.41,13.5H7.41C7.87,13.5 8.24,13.86 8.24,14.32C8.24,14.78 7.87,15.15 7.41,15.15M16.91,10.14L18.58,7.26C18.67,7.09 18.61,6.88 18.45,6.79C18.28,6.69 18.07,6.75 18,6.92L16.29,9.83C14.95,9.22 13.5,8.9 12,8.91C10.47,8.91 9,9.24 7.73,9.82L6.04,6.91C5.95,6.74 5.74,6.68 5.57,6.78C5.4,6.87 5.35,7.08 5.44,7.25L7.1,10.13C4.25,11.69 2.29,14.58 2,18H22C21.72,14.59 19.77,11.7 16.91,10.14H16.91Z"/>
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -9,7 +9,7 @@
android:id="@+id/toolbar_icon" android:id="@+id/toolbar_icon"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:src="@drawable/ic_iw" android:src="@drawable/ic_launcher"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginStart="6dp" android:layout_marginStart="6dp"

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB