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