迁移仓库
2
1xaud/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
1xaud/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
1xaud/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
1xaud/justlet.jks
Normal file
32
1xaud/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
1xaud/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.xaud">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" />-->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<!-- <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />-->
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<!-- <service-->
|
||||
<!-- android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"-->
|
||||
<!-- android:label="dexopt"-->
|
||||
<!-- android:process=":dexopt" />-->
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
BIN
1xaud/src/main/ic_launcher-playstore.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
82
1xaud/src/main/java/com/xyz/xaud/MainActivity.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.bant;
|
||||
package com.xyz.xaud;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
16
1xaud/src/main/java/com/xyz/xaud/WebApplication.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
8
1xaud/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
BIN
1xaud/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
52
1xaud/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
1xaud/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
20
1xaud/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">1XAUD</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">241</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://1xaud.com/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">0</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">0</string>
|
||||
<!--是否需要通讯录权限 1 要 0 不要-->
|
||||
<string name="has_contact">0</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#040914</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#1d4268</color>
|
||||
</resources>
|
||||
16
1xaud/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
53
1xaud/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
1xaud/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
1xaud/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
1xaud/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
1xaud/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
2
2ugo/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
2ugo/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
2ugo/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
2ugo/justlet.jks
Normal file
32
2ugo/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
2ugo/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.ugo2">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PAAppThemeStartCKAGES" />
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<service
|
||||
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
|
||||
android:label="dexopt"
|
||||
android:process=":dexopt" />
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.xyz.maucuci;
|
||||
package com.xyz.ugo2;
|
||||
|
||||
|
||||
import android.content.pm.PackageInfo;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.gk9;
|
||||
package com.xyz.ugo2;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.xyz.maucuci;
|
||||
package com.xyz.ugo2;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
8
2ugo/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
BIN
2ugo/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
52
2ugo/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
2ugo/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
18
2ugo/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">2UGO</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">234</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://2ugo.com/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">1</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">0</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#860001</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#000d2f</color>
|
||||
</resources>
|
||||
16
2ugo/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
53
2ugo/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
2ugo/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
2ugo/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
2ugo/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
2ugo/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
35
2ugo/src/test/java/Tptogiar/calculcator/ExampleUnitTest.java
Normal file
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.web.bet711">
|
||||
package="com.web.betseven">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.bet711;
|
||||
package com.web.betseven;
|
||||
|
||||
|
||||
import android.content.pm.PackageInfo;
|
||||
@@ -0,0 +1,125 @@
|
||||
package com.web.betseven;
|
||||
|
||||
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<String, String> 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());
|
||||
}
|
||||
}
|
||||
35
711bet/src/main/java/com/web/betseven/WebApplication.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
2
99kopitiam/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
99kopitiam/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
99kopitiam/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
99kopitiam/justlet.jks
Normal file
32
99kopitiam/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
99kopitiam/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.kopitiam99">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PAAppThemeStartCKAGES" />
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<!-- <service-->
|
||||
<!-- android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"-->
|
||||
<!-- android:label="dexopt"-->
|
||||
<!-- android:process=":dexopt" />-->
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.jayakaya99;
|
||||
package com.xyz.kopitiam99;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
8
99kopitiam/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
BIN
99kopitiam/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 97 KiB |
52
99kopitiam/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
99kopitiam/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
18
99kopitiam/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">99Kopitiam</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">237</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://99kopitiam.online/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">0</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">1</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#69452d</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#FFFFFF</color>
|
||||
</resources>
|
||||
16
99kopitiam/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
53
99kopitiam/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
99kopitiam/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
99kopitiam/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
99kopitiam/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
99kopitiam/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -9,16 +9,16 @@
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 获取通讯录-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" /> <!– 获取通讯录–>-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" />-->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<!-- <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />-->
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<!-- <uses-permission android:name="android.permission.CAMERA" />-->
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
@@ -41,11 +41,11 @@
|
||||
<!-- <uses-feature android:name="android.hardware.microphone" android:required="true" />-->
|
||||
<!-- <uses-feature android:name="android.hardware.camera2" android:required="true" />-->
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<!-- <queries>-->
|
||||
<!-- <intent>-->
|
||||
<!-- <action android:name="android.media.action.IMAGE_CAPTURE" />-->
|
||||
<!-- </intent>-->
|
||||
<!-- </queries>-->
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
|
||||
@@ -20,6 +20,8 @@ public class MainActivity2 extends com.web.base.MainActivity2 {
|
||||
userId = 95;
|
||||
saveInt(MainActivity2.this,"user_code",userId);
|
||||
saveInt(MainActivity2.this,"version_code",getVersion());
|
||||
MainActivity.saveString(MainActivity2.this,"version_name",getVersionName());
|
||||
|
||||
MainActivity.saveString(this, "base_url", "https://www.mahkota8b.com/");
|
||||
//网页的底部NavigationBar颜色
|
||||
com.web.base.MainActivity.saveString(this, "style_color", "#f7db4b");
|
||||
@@ -58,4 +60,20 @@ public class MainActivity2 extends com.web.base.MainActivity2 {
|
||||
|
||||
}
|
||||
|
||||
|
||||
public String getVersionName(){
|
||||
try {
|
||||
PackageManager packageManager = getPackageManager();
|
||||
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
|
||||
String StringversionName = packageInfo.versionName; // 版本号
|
||||
String versionCode = packageInfo.versionName; // 版本码
|
||||
// 在这里可以使用versionName和versionCode进行相关的操作
|
||||
// Log.d("VersionInfo", "VersionName: " + versionName + ", VersionCode: " + versionCode);
|
||||
return versionCode;
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
<string name="base_url">初始域名</string>
|
||||
<string name="is_white">任务栏的文字颜色 0 黑 1白 默认黑</string>
|
||||
<string name="is_round">启动页logo 0 原图显示 1 强制修改为原型图片logo 给过来的logo不圆润就用1</string>
|
||||
<string name="has_contact">0</string> 是否需要通讯录权限 1 要 0 不要
|
||||
<color name="style_color">底部操作栏色调</color>
|
||||
<color name="windows_color">整体大背景色调</color>
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 获取通讯录-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" /> <!– 获取通讯录–>-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.web.bant">
|
||||
package="com.xyz.bantu">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.bant;
|
||||
package com.xyz.bantu;
|
||||
|
||||
|
||||
import android.content.pm.PackageInfo;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.bet711;
|
||||
package com.xyz.bantu;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.gk9;
|
||||
package com.xyz.bantu;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
@@ -11,6 +11,7 @@ import retrofit2.http.GET;
|
||||
import retrofit2.http.Headers;
|
||||
import retrofit2.http.POST;
|
||||
import retrofit2.http.PUT;
|
||||
import retrofit2.http.Path;
|
||||
import retrofit2.http.Query;
|
||||
|
||||
public interface ApiService {
|
||||
@@ -24,6 +25,8 @@ public interface ApiService {
|
||||
@GET("api/system/applicationConf")
|
||||
Observable<Result<DataInfo>> geUrlNew(@Query("userId") int userId);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 上传通讯录
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
39
base/src/main/java/com/web/base/PingUtils.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@
|
||||
<RelativeLayout
|
||||
android:id="@+id/top_vvvv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:background="@color/white"
|
||||
android:visibility="visible">
|
||||
|
||||
@@ -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" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<urls.length;i++){
|
||||
urlList.add(urls[i]);
|
||||
}
|
||||
}
|
||||
LogUtils.i("地址是啥:"+GsonUtils.beanToJSONString(urlList));
|
||||
checkUrl(0);
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<String> 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 {
|
||||
|
||||
39
base_no_music/src/main/java/com/web/base/PingUtils.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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<Result<DataInfo>> geUrlNew(@Query("userId") int userId);
|
||||
|
||||
|
||||
@GET
|
||||
Call<ResponseBody> getCheckUrl(@Url String fullUrl);
|
||||
|
||||
|
||||
/**
|
||||
* 搜集登录手机号
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<urls.length;i++){
|
||||
urlList.add(urls[i]);
|
||||
}
|
||||
}
|
||||
LogUtils.i("地址是啥:"+GsonUtils.beanToJSONString(urlList));
|
||||
checkUrl(0);
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<String> 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 {
|
||||
|
||||
39
base_theme/src/main/java/com/web/base/PingUtils.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,6 @@ task clean(type: Delete) {
|
||||
|
||||
ext {
|
||||
outputPath = "F:/webApp1"
|
||||
versionCode = 129
|
||||
versionName = "v1.2.9"
|
||||
versionCode = 132
|
||||
versionName = "v1.3.2"
|
||||
}
|
||||
2
facai8/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
facai8/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
facai8/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
facai8/justlet.jks
Normal file
32
facai8/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
facai8/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.facai8">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PAAppThemeStartCKAGES" />
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<service
|
||||
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
|
||||
android:label="dexopt"
|
||||
android:process=":dexopt" />
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
82
facai8/src/main/java/com/xyz/facai8/MainActivity.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.xyz.oorag23;
|
||||
package com.xyz.facai8;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
18
facai8/src/main/java/com/xyz/facai8/WebApplication.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
8
facai8/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
BIN
facai8/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 152 KiB |
52
facai8/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
facai8/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
18
facai8/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">FACAI8</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">233</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://www.facai8sg.com/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">1</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">0</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#01422a</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#01764b</color>
|
||||
</resources>
|
||||
16
facai8/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
53
facai8/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
facai8/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
facai8/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
facai8/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
facai8/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.web.gk9">
|
||||
package="com.xyz.gk9s">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
@@ -9,7 +9,7 @@
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
@@ -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")
|
||||
125
gk9/src/main/java/com/xyz/gk9s/MyFirebaseMessageingService.java
Normal file
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.bant;
|
||||
package com.xyz.gk9s;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
@@ -3,6 +3,6 @@
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="#FFFFFF"
|
||||
android:endColor="#FFFFFF"/>
|
||||
android:startColor="#2b8f59"
|
||||
android:endColor="#2b8f59"/>
|
||||
</shape>
|
||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 188 KiB |
@@ -9,7 +9,7 @@
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#FFFFFFFF</color>
|
||||
<color name="main_color">#FFFFFF</color>
|
||||
<color name="main_color">#2b8f59</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
|
||||
@@ -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()
|
||||
|
||||
BIN
jayakaya99/dskjweb.jks
Normal file
@@ -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": [],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.web.jayakaya99">
|
||||
package="com.xyz.jayaka">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
@@ -9,14 +9,14 @@
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 获取通讯录-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" /> <!– 获取通讯录–>-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" />-->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<!-- <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />-->
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.jayakaya99;
|
||||
package com.xyz.jayaka;
|
||||
|
||||
|
||||
import android.content.pm.PackageInfo;
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.bet711;
|
||||
package com.xyz.jayaka;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
@@ -5,5 +5,5 @@
|
||||
android:angle="270"
|
||||
android:startColor="#0d342f"
|
||||
android:centerColor="#0d342f"
|
||||
android:endColor="#0d342f"/>
|
||||
android:endColor="#155449"/>
|
||||
</shape>
|
||||
@@ -3,6 +3,6 @@
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="#01052a"
|
||||
android:endColor="#01052a"/>
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
@@ -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
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.oorag23">
|
||||
package="com.xyz.kangaroo3210">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.xyz.oorag23;
|
||||
package com.xyz.kangaroo3210;
|
||||
|
||||
|
||||
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;
|
||||
|
||||
@@ -28,6 +30,11 @@ public class MainActivity extends MainActivity2 {
|
||||
//订阅主题
|
||||
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||
.addOnCompleteListener(task -> {
|
||||
String msg = "Subscribed";
|
||||
if (!task.isSuccessful()) {
|
||||
msg = "Subscribe failed";
|
||||
}
|
||||
LogUtils.i("结果:"+msg);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.web.jayakaya99;
|
||||
package com.xyz.kangaroo3210;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
@@ -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
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.alako21">
|
||||
package="com.xyz.koala3210">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
package com.xyz.alako21;
|
||||
|
||||
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<String, String> 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());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.xyz.alako21;
|
||||
package com.xyz.koala3210;
|
||||
|
||||
|
||||
import android.content.pm.PackageInfo;
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
35
koala88/src/main/java/com/xyz/koala3210/WebApplication.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 获取通讯录-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" /> <!– 获取通讯录–>-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" />-->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<!-- <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />-->
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="#ff7901"
|
||||
android:endColor="#ff5800"/>
|
||||
android:startColor="#fff7e0"
|
||||
android:endColor="#fef9f3"/>
|
||||
</shape>
|
||||
@@ -9,7 +9,7 @@
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#FFFFFFFF</color>
|
||||
<color name="main_color">#ff5800</color>
|
||||
<color name="main_color">#fef9f3</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
|
||||
2
limau55/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
limau55/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
limau55/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
limau55/justlet.jks
Normal file
32
limau55/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
limau55/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.limau55">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PAAppThemeStartCKAGES" />
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<service
|
||||
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
|
||||
android:label="dexopt"
|
||||
android:process=":dexopt" />
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
80
limau55/src/main/java/com/xyz/limau55/MainActivity.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
16
limau55/src/main/java/com/xyz/limau55/WebApplication.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
8
limau55/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
BIN
limau55/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 46 KiB |
52
limau55/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
limau55/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
18
limau55/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">Limau55</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">236</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://limau55.org/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">0</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">1</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#096b3a</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#fdfded</color>
|
||||
</resources>
|
||||
16
limau55/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
53
limau55/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
limau55/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
limau55/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
limau55/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
limau55/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
2
malaysia33/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
malaysia33/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
malaysia33/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
malaysia33/justlet.jks
Normal file
32
malaysia33/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
malaysia33/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.malaysia33">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PAAppThemeStartCKAGES" />
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<!-- <service-->
|
||||
<!-- android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"-->
|
||||
<!-- android:label="dexopt"-->
|
||||
<!-- android:process=":dexopt" />-->
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
8
malaysia33/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
BIN
malaysia33/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 739 KiB |
52
malaysia33/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
malaysia33/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
18
malaysia33/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">Malaysia33</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">239</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://malaysia33.app/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">0</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">0</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#2e0912</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#44092f</color>
|
||||
</resources>
|
||||
16
malaysia33/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
53
malaysia33/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
malaysia33/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
malaysia33/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
malaysia33/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
malaysia33/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
1
market/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/build
|
||||
101
market/build.gradle
Normal file
@@ -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")
|
||||
}
|
||||
BIN
market/dskjweb.jks
Normal file
29
market/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
32
market/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
119
market/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,119 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.web.market">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data android:scheme="market" />
|
||||
</intent>
|
||||
</queries>
|
||||
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".StartActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data
|
||||
android:scheme="market"
|
||||
android:host="dskj.com"
|
||||
/>
|
||||
<!-- android:path="/detail"-->
|
||||
</intent-filter>
|
||||
|
||||
|
||||
</activity>
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".IndexActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart"
|
||||
>
|
||||
<!-- android:theme="@style/AppThemeStart"-->
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".HomeActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true">
|
||||
|
||||
</activity>
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/ic_launcher_round" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
<activity
|
||||
android:name="com.web.market.WebViewActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="false"
|
||||
android:hardwareAccelerated="true" />
|
||||
|
||||
<activity
|
||||
android:name="com.web.market.NotifyListActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="false"
|
||||
android:hardwareAccelerated="true" />
|
||||
|
||||
<activity
|
||||
android:name="com.web.market.SettingActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="false"
|
||||
android:hardwareAccelerated="true" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
BIN
market/src/main/ic_launcher-playstore.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
124
market/src/main/java/com/web/market/ActionConfirmDialog.java
Normal file
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
68
market/src/main/java/com/web/market/Api.java
Normal file
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
86
market/src/main/java/com/web/market/ApiService.java
Normal file
@@ -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<Result<DataInfo>> geUrlNew(@Query("userId") int userId);
|
||||
|
||||
|
||||
@GET
|
||||
Call<ResponseBody> getCheckUrl(@Url String fullUrl);
|
||||
|
||||
|
||||
/**
|
||||
* 搜集登录手机号
|
||||
*/
|
||||
@POST("app/loginUser")
|
||||
Observable<Result> appLoginUser(@Body Map<String, Object> map);
|
||||
|
||||
|
||||
@GET("app/applicationConf")
|
||||
Observable<Result<AppConfig>> applicationConf(@Query("url") String url);
|
||||
|
||||
@GET("app/applicationConf/{appId}")
|
||||
Observable<Result<AppConfig>> applicationConfById(@Path("appId") String appId);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 統計下載量
|
||||
*/
|
||||
@PUT("api/statistics/downloads")
|
||||
Observable<Result> downloadNumbers(@Body Map<String, Object> map);
|
||||
|
||||
/**
|
||||
* 每日活跃统计
|
||||
*/
|
||||
@PUT("api/statistics/use")
|
||||
Observable<Result> totalTongJi(@Body Map<String, Object> map);
|
||||
|
||||
/**
|
||||
* 统计通知
|
||||
*/
|
||||
@POST("api/push/statistics")
|
||||
Observable<Result> totalNotify(@Body Map<String, Object> map);
|
||||
|
||||
|
||||
/**
|
||||
* 获取通知列表
|
||||
* @param userid
|
||||
* @param page
|
||||
* @param size
|
||||
* @return
|
||||
*/
|
||||
@GET("api/push/pushRecords")
|
||||
Observable<Result<ResultDataInfo<MessageInfo>>> getNotifyList(@Query("userId") int userid, @Query("page") int page, @Query("size") int size);
|
||||
|
||||
|
||||
}
|
||||
76
market/src/main/java/com/web/market/AppConfig.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
46
market/src/main/java/com/web/market/BaseApi.java
Normal file
@@ -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<String>
|
||||
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();
|
||||
}
|
||||
113
market/src/main/java/com/web/market/BaseObserver.java
Normal file
@@ -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<T> extends DisposableObserver<T> {
|
||||
/**
|
||||
* 解析数据失败
|
||||
*/
|
||||
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);
|
||||
|
||||
}
|
||||
157
market/src/main/java/com/web/market/BindButlerDialog.java
Normal file
@@ -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<Result<AppConfig>>() {
|
||||
@Override
|
||||
public void onSuccess(Result<AppConfig> 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<AppConfig> o) {
|
||||
Toast.makeText(context, context.getString(R.string.bind_nofind_tips_txt),Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
321
market/src/main/java/com/web/market/CircleImageView.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
80
market/src/main/java/com/web/market/DataInfo.java
Normal file
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
91
market/src/main/java/com/web/market/GsonUtils.java
Normal file
@@ -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<ArrayList<T>>(){}.getType()
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T> T getListFromJSON(String str, Type type) {
|
||||
if (!TextUtils.isEmpty(str)) {
|
||||
return gson.fromJson(str, type);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回List对象
|
||||
* @param str
|
||||
* @param cls
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T> List<T> getListFromJSON(String str, Class<T> cls)
|
||||
{
|
||||
Type type = new TypeToken<ArrayList<JsonObject>>()
|
||||
{}.getType();
|
||||
ArrayList<JsonObject> jsonObjects = gson.fromJson(str, type);
|
||||
ArrayList<T> arrayList = new ArrayList<>();
|
||||
for (JsonObject jsonObject : jsonObjects)
|
||||
{
|
||||
arrayList.add(gson.fromJson(jsonObject, cls));
|
||||
}
|
||||
return arrayList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回对象
|
||||
* @param str
|
||||
* @param cls
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T> T getObjFromJSON(String str, Class<T> 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;
|
||||
}
|
||||
|
||||
}
|
||||
30
market/src/main/java/com/web/market/HomeActivity.java
Normal file
@@ -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)));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
78
market/src/main/java/com/web/market/IndexActivity.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
34
market/src/main/java/com/web/market/LinkConfigInfo.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
146
market/src/main/java/com/web/market/LogUtils.java
Normal file
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
1440
market/src/main/java/com/web/market/MainActivity2.java
Normal file
@@ -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<LinkConfigInfo> 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("MISS<font color = '#e76d92'>AV</font>"));
|
||||
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<Result<ResultDataInfo<MessageInfo>>>() {
|
||||
@Override
|
||||
public void onSuccess(Result<ResultDataInfo<MessageInfo>> 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<ResultDataInfo<MessageInfo>> o) {
|
||||
LogUtils.i("获取的结果error");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void getNetUrl() {
|
||||
Api.getInstance().geUrlNew(userId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new BaseObserver<Result<DataInfo>>() {
|
||||
@Override
|
||||
public void onSuccess(Result<DataInfo> 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<DataInfo> 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<urls.length;i++){
|
||||
urlList.add(urls[i]);
|
||||
}
|
||||
}
|
||||
LogUtils.i("地址是啥:"+GsonUtils.beanToJSONString(urlList));
|
||||
checkUrl(0);
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<String> 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<String, Object> map = new HashMap<>();
|
||||
map.put("userId", userId);
|
||||
Api.getInstance().downloadNumbers(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new BaseObserver<Result>() {
|
||||
@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<String, Object> map = new HashMap<>();
|
||||
map.put("userId", userId);
|
||||
Api.getInstance().totalTongJi(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new BaseObserver<Result>() {
|
||||
@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<String, Object> map = new HashMap<>();
|
||||
map.put("pushId", pushId);
|
||||
Api.getInstance().totalNotify(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new BaseObserver<Result>() {
|
||||
@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<String, Object> map = new HashMap<>();
|
||||
map.put("appId", userId);
|
||||
map.put("phone", mobiles);
|
||||
Api.getInstance().appLoginUser(map)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new BaseObserver<Result>() {
|
||||
@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<Uri> mUploadCallbackForLowApi;
|
||||
private ValueCallback<Uri[]> 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<Uri[]> 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<Uri> uploadMsg, String acceptType) {
|
||||
openFilerChooser(uploadMsg);
|
||||
}
|
||||
|
||||
|
||||
private void openFilerChooser(ValueCallback<Uri> 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
96
market/src/main/java/com/web/market/MessageInfo.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
179
market/src/main/java/com/web/market/MyNotifyListAdapter.java
Normal file
@@ -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<MyNotifyListAdapter.ViewHolder> {
|
||||
|
||||
private List<MessageInfo> listdata;
|
||||
private onItemClickPostionListener itemClickPostionListener;
|
||||
private Context context;
|
||||
private MessageInfo messageItem;
|
||||
|
||||
|
||||
public MyNotifyListAdapter(Context context, List<MessageInfo> listdata, MessageInfo messageItem) {
|
||||
this.context = context;
|
||||
this.listdata = listdata;
|
||||
this.messageItem = messageItem;
|
||||
}
|
||||
|
||||
public void setListdata(List<MessageInfo> 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);
|
||||
}
|
||||
|
||||
}
|
||||
128
market/src/main/java/com/web/market/NotifyListActivity.java
Normal file
@@ -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<MessageInfo> 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<Result<ResultDataInfo<MessageInfo>>>() {
|
||||
@Override
|
||||
public void onSuccess(Result<ResultDataInfo<MessageInfo>> 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<ResultDataInfo<MessageInfo>> o) {
|
||||
LogUtils.i("获取的结果error");
|
||||
if (page > 1) {
|
||||
page--;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
39
market/src/main/java/com/web/market/PingUtils.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
29
market/src/main/java/com/web/market/Result.java
Normal file
@@ -0,0 +1,29 @@
|
||||
package com.web.market;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* created by wmm on 2020/9/8
|
||||
*/
|
||||
public class Result<T> 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) +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
45
market/src/main/java/com/web/market/ResultDataInfo.java
Normal file
@@ -0,0 +1,45 @@
|
||||
package com.web.market;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
public class ResultDataInfo<T> implements Serializable {
|
||||
|
||||
public List<T> 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<T> getList() {
|
||||
return list;
|
||||
}
|
||||
|
||||
public void setList(List<T> 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;
|
||||
}
|
||||
}
|
||||
79
market/src/main/java/com/web/market/SettingActivity.java
Normal file
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
162
market/src/main/java/com/web/market/StartActivity.java
Normal file
@@ -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<Result<AppConfig>>() {
|
||||
@Override
|
||||
public void onSuccess(Result<AppConfig> 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<AppConfig> 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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
44
market/src/main/java/com/web/market/StatusLayout.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
16
market/src/main/java/com/web/market/WebApplication.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
406
market/src/main/java/com/web/market/WebViewActivity.java
Normal file
@@ -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<Uri[]> 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<Uri[]> 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<Uri> uploadMsg, String acceptType) {
|
||||
LogUtils.i("数据接口:openFileChooseracceptType");
|
||||
openFilerChooser(uploadMsg);
|
||||
}
|
||||
|
||||
|
||||
private void openFilerChooser(ValueCallback<Uri> 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<Uri> 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();
|
||||
}
|
||||
}
|
||||
11
market/src/main/res/drawable-anydpi/ic_action_back.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="#333333"
|
||||
android:alpha="0.8">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
|
||||
</vector>
|
||||
BIN
market/src/main/res/drawable-hdpi/ic_action_back.png
Normal file
|
After Width: | Height: | Size: 182 B |
BIN
market/src/main/res/drawable-mdpi/ic_action_back.png
Normal file
|
After Width: | Height: | Size: 150 B |
30
market/src/main/res/drawable-v24/ic_launcher_foreground.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="85.84757"
|
||||
android:endY="92.4963"
|
||||
android:startX="42.9492"
|
||||
android:startY="49.59793"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#44000000"
|
||||
android:offset="0.0" />
|
||||
<item
|
||||
android:color="#00000000"
|
||||
android:offset="1.0" />
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="nonZero"
|
||||
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#00000000" />
|
||||
</vector>
|
||||
BIN
market/src/main/res/drawable-xhdpi/ic_action_back.png
Normal file
|
After Width: | Height: | Size: 212 B |
BIN
market/src/main/res/drawable-xxhdpi/ic_action_back.png
Normal file
|
After Width: | Height: | Size: 324 B |
8
market/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
20
market/src/main/res/drawable/input_bg.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="@color/white">
|
||||
<item android:id="@android:id/mask">
|
||||
<shape>
|
||||
<solid android:color="@android:color/transparent" />
|
||||
<corners android:radius="23dp" />
|
||||
</shape>
|
||||
</item>
|
||||
<!-- 默认显⽰效果-->
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
|
||||
<solid android:color="@color/dialog_input_bg"/>
|
||||
<corners
|
||||
android:radius="3dp" />
|
||||
</shape>
|
||||
</item>
|
||||
</ripple>
|
||||
|
||||
20
market/src/main/res/drawable/input_bg1.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="@color/white">
|
||||
<item android:id="@android:id/mask">
|
||||
<shape>
|
||||
<solid android:color="@android:color/transparent" />
|
||||
<corners android:radius="5dp" />
|
||||
</shape>
|
||||
</item>
|
||||
<!-- 默认显⽰效果-->
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
|
||||
<solid android:color="@color/dialog_dark1"/>
|
||||
<corners
|
||||
android:radius="5dp" />
|
||||
</shape>
|
||||
</item>
|
||||
</ripple>
|
||||
|
||||
23
market/src/main/res/drawable/pass_word_bg1.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<animated-rotate
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fromDegrees="0"
|
||||
android:toDegrees="360"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
>
|
||||
<shape
|
||||
android:shape="ring"
|
||||
android:innerRadiusRatio="3"
|
||||
android:thicknessRatio="8"
|
||||
android:useLevel="false"
|
||||
>
|
||||
<gradient
|
||||
android:type="sweep"
|
||||
android:useLevel="false"
|
||||
android:startColor="#ED9121"
|
||||
android:centerColor="#FFD700"
|
||||
android:endColor="#FFFFFF"
|
||||
android:centerY="0.50" />
|
||||
</shape>
|
||||
</animated-rotate>
|
||||
23
market/src/main/res/drawable/pass_word_bg2.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<animated-rotate
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fromDegrees="0"
|
||||
android:toDegrees="360"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
>
|
||||
<shape
|
||||
android:shape="ring"
|
||||
android:innerRadiusRatio="3"
|
||||
android:thicknessRatio="8"
|
||||
android:useLevel="false"
|
||||
>
|
||||
<gradient
|
||||
android:type="sweep"
|
||||
android:useLevel="false"
|
||||
android:startColor="#000000"
|
||||
android:centerColor="#888888"
|
||||
android:endColor="#FFFFFF"
|
||||
android:centerY="0.50" />
|
||||
</shape>
|
||||
</animated-rotate>
|
||||
5
market/src/main/res/drawable/shape_btn_bg.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:radius="22dp" />
|
||||
<solid android:color="@color/jisuanqi" />
|
||||
</shape>
|
||||
5
market/src/main/res/drawable/shape_dialog_bg.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:radius="12dp" />
|
||||
<solid android:color="@color/white" />
|
||||
</shape>
|
||||
5
market/src/main/res/drawable/shape_dialog_bg3.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:radius="12dp" />
|
||||
<solid android:color="@color/dialog_bg" />
|
||||
</shape>
|
||||
5
market/src/main/res/drawable/shape_notify_typebg.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:radius="4dp" />
|
||||
<solid android:color="@color/style_color" />
|
||||
</shape>
|
||||
41
market/src/main/res/layout/activity_home.xml
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="false"
|
||||
android:keepScreenOn="true"
|
||||
android:orientation="vertical">
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:background="@color/white">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:textColor="@color/black"
|
||||
android:text="@string/index_txt"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold"/>
|
||||
<ImageView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="match_parent"
|
||||
android:src="@mipmap/setting_img"
|
||||
android:scaleType="centerInside"
|
||||
android:id="@+id/setting_iv"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentEnd="true"/>
|
||||
</RelativeLayout>
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="#DDDDDD"/>
|
||||
<WebView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/webview"/>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
414
market/src/main/res/layout/activity_main2.xml
Normal file
@@ -0,0 +1,414 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="false"
|
||||
android:keepScreenOn="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.web.market.StatusLayout
|
||||
android:id="@+id/top_vvvv1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white"
|
||||
android:visibility="gone" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/top_vvvv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:layout_below="@id/top_vvvv1"
|
||||
android:background="@color/white"
|
||||
android:visibility="gone">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/back_iv"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:scaleType="centerInside"
|
||||
android:src="@drawable/ic_action_back" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="30dp"
|
||||
android:layout_centerInParent="true"
|
||||
android:src="@mipmap/ic_launcher_round" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<!-- webview 全屏状态 start -->
|
||||
<!-- <androidx.constraintlayout.widget.ConstraintLayout-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="match_parent"-->
|
||||
<!-- android:layout_below="@id/top_vvvv">-->
|
||||
|
||||
<!-- <androidx.constraintlayout.widget.ConstraintLayout-->
|
||||
<!-- android:id="@+id/layouttop_config"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:gravity="center_vertical"-->
|
||||
<!-- android:visibility="gone"-->
|
||||
<!-- app:layout_constraintTop_toTopOf="parent">-->
|
||||
|
||||
<!-- <ImageView-->
|
||||
<!-- android:id="@+id/iv_topconfig"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:background="@color/color_red"-->
|
||||
<!-- android:minHeight="80dp"-->
|
||||
<!-- app:layout_constraintTop_toTopOf="parent" />-->
|
||||
|
||||
<!-- <LinearLayout-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:orientation="horizontal"-->
|
||||
<!-- android:layout_marginBottom="10dp"-->
|
||||
<!-- app:layout_constraintBottom_toBottomOf="@+id/iv_topconfig">-->
|
||||
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/home"-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:gravity="center"-->
|
||||
<!-- android:paddingStart="5dp"-->
|
||||
<!-- android:paddingEnd="5dp"-->
|
||||
<!-- android:text="Home"-->
|
||||
<!-- android:textColor="@android:color/white"-->
|
||||
<!-- android:textSize="20sp"-->
|
||||
<!-- android:textStyle="bold" />-->
|
||||
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tv_other"-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:layout_marginStart="10dp"-->
|
||||
<!-- android:gravity="center"-->
|
||||
<!-- android:paddingStart="5dp"-->
|
||||
<!-- android:paddingEnd="5dp"-->
|
||||
<!-- android:text="Miss AV"-->
|
||||
<!-- android:textColor="@android:color/white"-->
|
||||
<!-- android:textSize="20sp"-->
|
||||
<!-- android:textStyle="bold" />-->
|
||||
<!-- </LinearLayout>-->
|
||||
<!-- </androidx.constraintlayout.widget.ConstraintLayout>-->
|
||||
|
||||
<!-- <com.tencent.smtt.sdk.WebView-->
|
||||
<!-- android:id="@+id/webview"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="0dp"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/bottom_v"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/layouttop_config"-->
|
||||
<!-- app:layout_goneMarginTop="40dp" />-->
|
||||
|
||||
<!-- <View-->
|
||||
<!-- android:id="@+id/bottom_v"-->
|
||||
<!-- android:layout_width="match_parent"-->
|
||||
<!-- android:layout_height="0dp"-->
|
||||
<!-- app:layout_constraintBottom_toBottomOf="parent" />-->
|
||||
|
||||
<!-- </androidx.constraintlayout.widget.ConstraintLayout>-->
|
||||
<!-- webview 全屏状态 end -->
|
||||
<WebView
|
||||
android:id="@+id/webview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@id/top_vvvv" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layoutError"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progress_error"
|
||||
style="@android:style/Widget.ProgressBar.Large"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="100dp"
|
||||
android:layout_gravity="center_horizontal" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/agentweb_loading" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/errormsg"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:textColor="#999999"
|
||||
android:textSize="16sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/bt_otherapp"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="90dp"
|
||||
android:layout_marginRight="20dp"
|
||||
android:visibility="invisible"
|
||||
app:cardBackgroundColor="@color/dialog_bg"
|
||||
app:cardCornerRadius="50dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_otherApp"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@mipmap/ic_shousuo" />
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<!-- 分享的app -->
|
||||
<LinearLayout
|
||||
android:id="@+id/layout_otherapp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/bt_otherapp"
|
||||
android:layout_alignStart="@+id/bt_otherapp"
|
||||
android:layout_alignEnd="@+id/bt_otherapp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/iv_home"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:background="@android:color/white"
|
||||
android:visibility="gone"
|
||||
app:cardCornerRadius="50dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:src="@mipmap/ic_hometo" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/cv_share"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:visibility="gone"
|
||||
app:cardBackgroundColor="@color/black"
|
||||
app:cardCornerRadius="50dp"
|
||||
app:cardElevation="2dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_share"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="10dp"
|
||||
android:scaleType="centerInside"
|
||||
android:src="@mipmap/share_img"/>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/iv_link"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:visibility="gone"
|
||||
app:cardBackgroundColor="@color/black"
|
||||
app:cardCornerRadius="50dp"
|
||||
app:cardElevation="2dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_linkbg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_link"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/transparent"
|
||||
android:gravity="center"
|
||||
android:lines="1"
|
||||
android:ellipsize="middle"
|
||||
android:text="MISSAV"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="bold" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/iv_facebook"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:background="@android:color/white"
|
||||
android:visibility="gone"
|
||||
app:cardCornerRadius="50dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:src="@mipmap/ic_facebook" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/iv_whatsapp"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:background="@android:color/white"
|
||||
android:visibility="gone"
|
||||
app:cardCornerRadius="50dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:src="@mipmap/ic_whatsapp" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/iv_tel"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:background="@android:color/white"
|
||||
android:visibility="gone"
|
||||
app:cardCornerRadius="50dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:src="@mipmap/ic_tel" />
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/bt_notifyitem"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:background="@android:color/black"
|
||||
app:cardBackgroundColor="@color/dialog_bg"
|
||||
android:visibility="gone"
|
||||
app:cardCornerRadius="50dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:padding="10dp"
|
||||
android:src="@mipmap/ic_email1" />
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/bt_notify"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginTop="160dp"
|
||||
android:visibility="gone"
|
||||
app:cardBackgroundColor="@color/black"
|
||||
app:cardCornerRadius="50dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_notify"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@mipmap/ic_email" />
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/show_top_ly"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@id/top_vvvv"
|
||||
android:background="@color/white"
|
||||
android:orientation="vertical"
|
||||
|
||||
android:visibility="visible">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="4"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center">
|
||||
|
||||
|
||||
<com.web.market.CircleImageView
|
||||
android:id="@+id/show_top_v"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="100dp"
|
||||
android:src="@mipmap/ic_launcher_round"
|
||||
android:visibility="visible"
|
||||
app:ease_border_color="#EEEEEE"
|
||||
app:ease_border_width="0px"
|
||||
app:es_shape_type="round" />
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/show_top_v1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="100dp"
|
||||
android:maxWidth="200dp"
|
||||
android:src="@mipmap/ic_launcher_round"
|
||||
android:visibility="gone" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="6"
|
||||
android:gravity="center">
|
||||
|
||||
<ProgressBar
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:indeterminateDrawable="@drawable/pass_word_bg1" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/videoContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progressbar"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginRight="15dp"
|
||||
android:indeterminateDrawable="@drawable/pass_word_bg2"
|
||||
android:visibility="gone" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
53
market/src/main/res/layout/activity_notifylist.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:keepScreenOn="true"
|
||||
android:background="@color/white"
|
||||
android:orientation="vertical">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/top_vvvv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:background="@color/white"
|
||||
android:visibility="visible">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/back_iv"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="centerInside"
|
||||
android:src="@drawable/ic_action_back" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_centerInParent="true"
|
||||
android:gravity="center"
|
||||
android:text="@string/app_notify_title"
|
||||
android:textColor="@color/dialog_bg"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="match_parent"
|
||||
android:src="@mipmap/setting_img"
|
||||
android:scaleType="centerInside"
|
||||
android:id="@+id/setting_iv"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentEnd="true"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler_nofity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/top_vvvv" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
100
market/src/main/res/layout/activity_setting.xml
Normal file
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="false"
|
||||
android:keepScreenOn="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:background="@color/white">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/back_iv"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="centerInside"
|
||||
android:src="@drawable/ic_action_back" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:text="@string/notification_setting_txt"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.5dp"
|
||||
android:background="#DDDDDD" />
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="56dp"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical"
|
||||
android:text="@string/dangqianbanben_txt"
|
||||
android:paddingStart="10dp"
|
||||
android:textSize="16sp"
|
||||
android:textColor="@color/black" />
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_vertical"
|
||||
android:text="1.0.0"
|
||||
android:id="@+id/version_tv"
|
||||
android:paddingEnd="10dp"
|
||||
android:textSize="14sp"
|
||||
android:textColor="@color/dialog_dark" />
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.5dp"
|
||||
android:background="#DDDDDD" />
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="56dp"
|
||||
android:id="@+id/bind_butler_ly"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_vertical"
|
||||
android:text="@string/guanjaiid_txt"
|
||||
android:paddingStart="10dp"
|
||||
android:textSize="16sp"
|
||||
android:textColor="@color/black" />
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical|right"
|
||||
android:hint="@string/guanjaiid_hint_txt"
|
||||
android:background="@null"
|
||||
android:id="@+id/bind_butler_tv"
|
||||
android:paddingEnd="10dp"
|
||||
android:textSize="16sp"
|
||||
android:textColorHint="@color/dialog_dark"
|
||||
android:textColor="@color/black" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.5dp"
|
||||
android:background="#DDDDDD" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
55
market/src/main/res/layout/activity_start.xml
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="false"
|
||||
android:keepScreenOn="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/show_top_ly"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="4"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center">
|
||||
|
||||
|
||||
<com.web.market.CircleImageView
|
||||
android:id="@+id/show_top_v"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="100dp"
|
||||
android:visibility="visible"
|
||||
app:ease_border_color="#EEEEEE"
|
||||
app:ease_border_width="0px"
|
||||
app:es_shape_type="round" />
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/show_top_v1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="100dp"
|
||||
android:maxWidth="200dp"
|
||||
android:src="@mipmap/ic_launcher_round"
|
||||
android:visibility="gone" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="6"
|
||||
android:gravity="center">
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
71
market/src/main/res/layout/dialog_action_confirm.xml
Normal file
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/shape_dialog_bg3"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="285dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="144dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/content_tv"
|
||||
android:layout_width="245dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:lineSpacingExtra="4dp"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.5dp"
|
||||
android:background="@color/white" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="62dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cancel_tv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:text="@string/cancel_txt"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<View
|
||||
android:id="@+id/line_v"
|
||||
android:layout_width="0.5dp"
|
||||
android:layout_height="42dp"
|
||||
android:background="@color/white" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sumbit_tv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:text="@string/sure_txt"
|
||||
android:textColor="@color/dialog_textcolor"
|
||||
android:textSize="16sp" />
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
78
market/src/main/res/layout/dialog_bind_butler.xml
Normal file
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="285dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/shape_dialog_bg"
|
||||
android:minHeight="144dp"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/guanjaiid_hint_txt"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="16sp" />
|
||||
<EditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:background="@drawable/input_bg1"
|
||||
android:layout_margin="10dp"
|
||||
android:hint="@string/guanjaiid_txt"
|
||||
android:id="@+id/butler_et"
|
||||
android:inputType="number"
|
||||
android:textColor="@color/black"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingEnd="10dp"
|
||||
android:textColorHint="@color/dialog_dark"/>
|
||||
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.5dp"
|
||||
android:background="@color/notify_jumplinkcolor" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="62dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cancel_tv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:text="@string/cancel_txt"
|
||||
android:textColor="@color/dialog_dark"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<View
|
||||
android:id="@+id/line_v"
|
||||
android:layout_width="0.5dp"
|
||||
android:layout_height="42dp"
|
||||
android:background="@color/notify_jumplinkcolor" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sumbit_tv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:text="@string/sure_txt"
|
||||
android:textColor="@color/dialog_textcolor"
|
||||
android:textSize="16sp" />
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
176
market/src/main/res/layout/item_notify_list.xml
Normal file
@@ -0,0 +1,176 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="vertical"
|
||||
tools:ignore="MissingDefaultResource">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
app:cardCornerRadius="10dp"
|
||||
app:cardElevation="4dp">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/big_bg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/notify_imagecolor"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingEnd="10dp">
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/iv_icon"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:src="@mipmap/ic_notifylogo"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/tv_msg_type"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_msg_type" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_msg_type"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:background="@drawable/shape_notify_typebg"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingTop="2dp"
|
||||
android:paddingEnd="10dp"
|
||||
android:paddingBottom="2dp"
|
||||
android:textColor="@android:color/black"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintStart_toEndOf="@+id/iv_icon"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_msg_time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="2025-1-8"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="12sp"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/tv_msg_type"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_msg_type" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/iv_readtype"
|
||||
android:layout_width="10dp"
|
||||
android:layout_height="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:background="@drawable/shape_btn_bg"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintRight_toRightOf="@+id/iv_icon"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_msg_title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:paddingStart="5dp"
|
||||
android:textColor="#383838"
|
||||
android:textSize="14sp"
|
||||
app:layout_constraintStart_toStartOf="@+id/iv_icon"
|
||||
app:layout_constraintTop_toBottomOf="@+id/iv_icon" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ic_notify_pull"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:background="@mipmap/ic_notify_xiala"
|
||||
android:paddingStart="5dp"
|
||||
android:textColor="#6d80ff"
|
||||
android:textSize="14sp"
|
||||
android:layout_marginTop="4dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_msg_title" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/look_iv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:drawableLeft="@mipmap/look_img"
|
||||
android:drawablePadding="5dp"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingStart="5dp"
|
||||
android:text="0"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="12sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
android:layout_marginTop="4dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_msg_title" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layout_more"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
|
||||
android:visibility="gone">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:background="@android:color/black" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_notifyimage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:adjustViewBounds="true" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/iv_notifycontent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingEnd="10dp"
|
||||
android:textColor="#383838"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/iv_notifyjumpclick"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingEnd="10dp"
|
||||
android:textColor="#4169E1"
|
||||
android:textSize="16sp"
|
||||
android:visibility="gone" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
5
market/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
BIN
market/src/main/res/mipmap-hdpi/ic_empty.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
market/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
market/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
market/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
market/src/main/res/mipmap-hdpi/ic_pull_down.png
Normal file
|
After Width: | Height: | Size: 271 B |
BIN
market/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 984 B |
BIN
market/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
market/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_close.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_email.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_email1.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_facebook.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_hometo.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_link.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_menu.png
Normal file
|
After Width: | Height: | Size: 779 B |
BIN
market/src/main/res/mipmap-xhdpi/ic_notify_email.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_notify_normal.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_notify_shangla.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_notify_xiala.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_notifylogo.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_notifylogo_img.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_notifylogo_link.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_shousuo.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_tel.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_whatsapp.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
market/src/main/res/mipmap-xhdpi/ic_zhangkai.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
market/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
market/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
market/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
market/src/main/res/mipmap-xxhdpi/look_img.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
market/src/main/res/mipmap-xxhdpi/setting_img.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
market/src/main/res/mipmap-xxhdpi/share_img.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
market/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
market/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
market/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
19
market/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<resources>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
|
||||
<string name="app_notify_title">NOTIFICATIONS</string>
|
||||
<string name="agentweb_loading">Loading…</string>
|
||||
<string name="text_title">Text</string>
|
||||
<string name="image_title">Image</string>
|
||||
<string name="link_title">Jump link</string>
|
||||
<string name="index_txt">Home</string>
|
||||
<string name="dangqianbanben_txt">Version</string>
|
||||
<string name="guanjaiid_txt">Butler ID</string>
|
||||
<string name="guanjaiid_hint_txt">Input Manager ID</string>
|
||||
<string name="bind_nofind_tips_txt">The butler does not exist.</string>
|
||||
</resources>
|
||||
64
market/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,64 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/white</item>
|
||||
<item name="colorPrimaryDark">@color/white</item>
|
||||
<item name="colorAccent">@color/white</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
<item name="android:windowBackground">@color/white</item>
|
||||
|
||||
<item name="android:navigationBarColor">@color/white</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
</style>
|
||||
</resources>
|
||||
23
market/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">PROPERTY</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">0</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://1xaud.com/</string>
|
||||
|
||||
<string name="home_url">https://www.deepseek.com/</string>
|
||||
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">0</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">1</string>
|
||||
<!--是否需要通讯录权限 1 要 0 不要-->
|
||||
<!-- <string name="has_contact">0</string>-->
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#FFFFFF</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#FFFFFF</color>
|
||||
</resources>
|
||||
23
market/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#FFFFFFFF</color>
|
||||
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
<color name="dialog_dark1">#EEEEEE</color>
|
||||
|
||||
<color name="notify_textcolor">#ACDFEE</color>
|
||||
<color name="notify_imagecolor">#BDDDB7</color>
|
||||
<color name="notify_jumplinkcolor">#C3B5D0</color>
|
||||
|
||||
</resources>
|
||||
4
market/src/main/res/values/ic_launcher_background.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#1A1A1A</color>
|
||||
</resources>
|
||||
18
market/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<resources>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_notify_title">通知</string>
|
||||
<string name="agentweb_loading">Loading…</string>
|
||||
<string name="text_title">文本</string>
|
||||
<string name="image_title">图片</string>
|
||||
<string name="link_title">链接</string>
|
||||
<string name="index_txt">首页</string>
|
||||
<string name="dangqianbanben_txt">当前版本</string>
|
||||
<string name="guanjaiid_txt">管家ID</string>
|
||||
<string name="guanjaiid_hint_txt">请输入管家ID</string>
|
||||
<string name="bind_nofind_tips_txt">管家不存在绑定失败</string>
|
||||
|
||||
</resources>
|
||||
94
market/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,94 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowBackground">@color/white</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="android:navigationBarColor">@color/white</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
market/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
market/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
market/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.maucuci">
|
||||
package="com.xyz.cucimau">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
|
||||
82
maucuci/src/main/java/com/xyz/cucimau/MainActivity.java
Normal file
@@ -0,0 +1,82 @@
|
||||
package com.xyz.cucimau;
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
18
maucuci/src/main/java/com/xyz/cucimau/WebApplication.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
2
meemee99/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
meemee99/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
meemee99/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
meemee99/justlet.jks
Normal file
32
meemee99/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
meemee99/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.meemee99">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PAAppThemeStartCKAGES" />
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<service
|
||||
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
|
||||
android:label="dexopt"
|
||||
android:process=":dexopt" />
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
82
meemee99/src/main/java/com/xyz/meemee99/MainActivity.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
18
meemee99/src/main/java/com/xyz/meemee99/WebApplication.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
8
meemee99/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
BIN
meemee99/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 111 KiB |
52
meemee99/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
meemee99/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
18
meemee99/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">MeeMee99</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">232</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://www.meemee99.com/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">1</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">1</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#000000</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#000000</color>
|
||||
</resources>
|
||||
16
meemee99/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
53
meemee99/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
meemee99/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
meemee99/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
meemee99/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
meemee99/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<!-- <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />-->
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
BIN
nova9sg/dskjweb.jks
Normal file
@@ -9,14 +9,14 @@
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<!-- <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />-->
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="#000000"
|
||||
android:endColor="#191919"/>
|
||||
android:startColor="#e9c9f0"
|
||||
android:endColor="#eadbfe"/>
|
||||
</shape>
|
||||
|
Before Width: | Height: | Size: 191 KiB After Width: | Height: | Size: 82 KiB |
@@ -1,5 +1,5 @@
|
||||
<resources>
|
||||
<string name="app_name">Nova</string>
|
||||
<string name="app_name">Nova9</string>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
|
||||
2
nyonya9/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
nyonya9/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
nyonya9/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
nyonya9/justlet.jks
Normal file
32
nyonya9/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
nyonya9/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.nyonya9">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PAAppThemeStartCKAGES" />
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<!-- <service-->
|
||||
<!-- android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"-->
|
||||
<!-- android:label="dexopt"-->
|
||||
<!-- android:process=":dexopt" />-->
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
80
nyonya9/src/main/java/com/xyz/nyonya9/MainActivity.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
16
nyonya9/src/main/java/com/xyz/nyonya9/WebApplication.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
8
nyonya9/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
BIN
nyonya9/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
52
nyonya9/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
nyonya9/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
18
nyonya9/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">NYONYA9</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">238</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://nyonya9.vip/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">0</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">0</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#ffba03</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#413100</color>
|
||||
</resources>
|
||||
16
nyonya9/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
53
nyonya9/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
nyonya9/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
nyonya9/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
nyonya9/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
nyonya9/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
2
samamenang/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
samamenang/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
samamenang/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
samamenang/justlet.jks
Normal file
32
samamenang/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
samamenang/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.samamenang">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PAAppThemeStartCKAGES" />
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<service
|
||||
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
|
||||
android:label="dexopt"
|
||||
android:process=":dexopt" />
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
8
samamenang/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
BIN
samamenang/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 60 KiB |
52
samamenang/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
samamenang/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
18
samamenang/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">SamaMenang</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">235</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://samamenang.world/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">1</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">1</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#070707</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#0d0502</color>
|
||||
</resources>
|
||||
16
samamenang/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
53
samamenang/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
samamenang/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
samamenang/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
samamenang/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
samamenang/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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'
|
||||
2
singbet8/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/release
|
||||
80
singbet8/build.gradle
Normal file
@@ -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')
|
||||
}
|
||||
29
singbet8/google-services.json
Normal file
@@ -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"
|
||||
}
|
||||
BIN
singbet8/justlet.jks
Normal file
32
singbet8/proguard-rules.pro
vendored
Normal file
@@ -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.** {
|
||||
*;
|
||||
}
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@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());
|
||||
}
|
||||
}
|
||||
92
singbet8/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.singbet8">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" />-->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<!-- <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />-->
|
||||
<!-- 多媒体相关 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- 8.0+系统需要-->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<!--推送权限-->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.media.action.IMAGE_CAPTURE" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application
|
||||
android:name=".WebApplication"
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/app_logo1"
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:roundIcon="@mipmap/app_logo1"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@style/AppThemeStart">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<!-- <service-->
|
||||
<!-- android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"-->
|
||||
<!-- android:label="dexopt"-->
|
||||
<!-- android:process=":dexopt" />-->
|
||||
|
||||
<service
|
||||
android:name=".MyFirebaseMessageingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/app_logo" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_color"
|
||||
android:resource="@color/notify_color" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/app_name" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
BIN
singbet8/src/main/ic_launcher-playstore.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
82
singbet8/src/main/java/com/xyz/singbet8/MainActivity.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
16
singbet8/src/main/java/com/xyz/singbet8/WebApplication.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
8
singbet8/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:angle="270"
|
||||
android:startColor="@color/windows_color"
|
||||
android:endColor="@color/style_color"/>
|
||||
</shape>
|
||||
5
singbet8/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
BIN
singbet8/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
singbet8/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
singbet8/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
singbet8/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
singbet8/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
singbet8/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
singbet8/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
singbet8/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
singbet8/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
singbet8/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 297 KiB |
BIN
singbet8/src/main/res/mipmap-xxhdpi/app_logo1.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
singbet8/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
singbet8/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
singbet8/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
singbet8/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
52
singbet8/src/main/res/values-en/strings.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<resources>
|
||||
<!-- <string name="app_name">SlotKaki33</string>-->
|
||||
<string name="qsrlwmm_txt">Please Set Your Password</string>
|
||||
<string name="cancel_txt">Cancel</string>
|
||||
<string name="sure_txt">Sure</string>
|
||||
<string name="banbengengxin_txt">New Version Update</string>
|
||||
<string name="xiacigengxin_txt">Next Update</string>
|
||||
<string name="lijigengxin_txt">Update Immediately</string>
|
||||
<string name="app_updater_error_notification_content">Click to close notification</string>
|
||||
<string name="app_updater_error_notification_content_re_download">Click to re-download</string>
|
||||
<string name="app_updater_error_notification_title">Download failed</string>
|
||||
<string name="app_updater_finish_notification_content">Click to install</string>
|
||||
<string name="app_updater_finish_notification_title">Download completed</string>
|
||||
<string name="app_updater_progress_notification_content">Downloading...</string>
|
||||
<string name="app_updater_progress_notification_title">Version update</string>
|
||||
<string name="app_updater_progress_notification_title_2">Downloading game</string>
|
||||
<string name="app_updater_start_notification_content">Getting download data...</string>
|
||||
<string name="app_updater_start_notification_title">Version update</string>
|
||||
<string name="app_updater_start_notification_title_2">Downloading game</string>
|
||||
<string name="notification_title_txt">Need to turn on mobile phone notification permission</string>
|
||||
<string name="notification_cancel_txt">Exit</string>
|
||||
<string name="notification_setting_txt">Setting</string>
|
||||
<string name="app_tishi">Tip</string>
|
||||
<string name="app_hint">Please enter the invitation code</string>
|
||||
<string name="app_sharetitle">My invitation code:</string>
|
||||
<string name="app_sharetitle2">Superior invitation code:</string>
|
||||
<string name="app_totalinvite">Total number of invites:</string>
|
||||
<string name="app_sharecontent">App download link:</string>
|
||||
<string name="app_share">Share</string>
|
||||
<string name="app_checklist">Check Invitation Records</string>
|
||||
<string name="app_invitetitle">Invitation Records</string>
|
||||
<string name="app_checklist_number">Total number of invitees: %d</string>
|
||||
<string name="app_nodata">No Data</string>
|
||||
<string name="app_withdrawtitle">Withdrawal Record</string>
|
||||
<string name="app_withdrawapply_title">Withdrawal Application</string>
|
||||
<string name="app_bankinfo_title">Edit Bank Card Information</string>
|
||||
<string name="app_bankinfo_countrycode">60</string>
|
||||
<string name="app_bankinfo_name">Name:</string>
|
||||
<string name="app_bankinfo_name_hint">Please enter the bank card name</string>
|
||||
<string name="app_bankinfo_code">Bank card account:</string>
|
||||
<string name="app_bankinfo_code_hint">Please enter the bank card account</string>
|
||||
<string name="app_bankinfo_bankcountry">Country:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">Please select a country</string>
|
||||
<string name="app_bankinfo_bankname">Bank Name:</string>
|
||||
<string name="app_bankinfo_bankname_hint">Please select a bank name</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">Note: Please enter the country code before selecting the bank name!</string>
|
||||
<string name="app_balance">Balance: %s</string>
|
||||
<string name="app_totalearning">Total Earnings: %s</string>
|
||||
<string name="app_withdraw_amount">Amount: %s</string>
|
||||
<string name="app_withdraw_apply_hint">Please enter the withdrawal amount</string>
|
||||
<string name="app_toastapply">Withdrawal application has been submitted</string>
|
||||
</resources>
|
||||
70
singbet8/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,70 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Calculcator" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
20
singbet8/src/main/res/values/app_config.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--需要修改的配置项都在这里了-->
|
||||
<!--APP名字-->
|
||||
<string name="app_name">SINGBET8</string>
|
||||
<!--唯一ID-->
|
||||
<string name="userId">240</string>
|
||||
<!--初始域名-->
|
||||
<string name="base_url">https://singbet8.com/</string>
|
||||
<!--任务栏的文字颜色 0 黑 1白 默认黑-->
|
||||
<string name="is_white">0</string>
|
||||
<!--启动页logo 0 原图显示 1 强制修改为原型图片logo-->
|
||||
<string name="is_round">0</string>
|
||||
<!--是否需要通讯录权限 1 要 0 不要-->
|
||||
<string name="has_contact">0</string>
|
||||
<!--底部操作栏色调-->
|
||||
<color name="style_color">#000000</color>
|
||||
<!--整体背景色调 style_color和windows_color 一致 就是纯色 不然就是 w-s的上下渐变色-->
|
||||
<color name="windows_color">#00c0ff</color>
|
||||
</resources>
|
||||
16
singbet8/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFFFFF</color>
|
||||
<color name="purple_500">#FFFFFF</color>
|
||||
<color name="purple_700">#FFFFFF</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="jisuanqi">#EF4723</color>
|
||||
<color name="notify_color">#1251a1</color>
|
||||
<color name="dialog_bg">#2C2C2E</color>
|
||||
<color name="dialog_textcolor">#FFA722</color>
|
||||
<color name="dialog_input_bg">#434343</color>
|
||||
<color name="dialog_dark">#BCBCBC</color>
|
||||
</resources>
|
||||
4
singbet8/src/main/res/values/ic_launcher_background.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#FCFBF7</color>
|
||||
</resources>
|
||||
53
singbet8/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources>
|
||||
<string name="qsrlwmm_txt">请输入6位密码</string>
|
||||
<string name="cancel_txt">取消</string>
|
||||
<string name="sure_txt">确定</string>
|
||||
<string name="banbengengxin_txt">版本更新</string>
|
||||
<string name="xiacigengxin_txt">下次更新</string>
|
||||
<string name="lijigengxin_txt">立即更新</string>
|
||||
<string name="app_updater_error_notification_content">点击关闭通知</string>
|
||||
<string name="app_updater_error_notification_content_re_download">点击重新下载</string>
|
||||
<string name="app_updater_error_notification_title">下载失败</string>
|
||||
<string name="app_updater_finish_notification_content">点击安装</string>
|
||||
<string name="app_updater_finish_notification_title">下载完成</string>
|
||||
<string name="app_updater_progress_notification_content">正在下载…</string>
|
||||
<string name="app_updater_progress_notification_title">版本更新</string>
|
||||
<string name="app_updater_progress_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_title">版本更新</string>
|
||||
<string name="app_updater_start_notification_title_2">下载游戏中</string>
|
||||
<string name="app_updater_start_notification_content">正在获取下载数据…</string>
|
||||
<string name="notification_title_txt">需要打开手机通知权限</string>
|
||||
<string name="notification_cancel_txt">退出</string>
|
||||
<string name="notification_setting_txt">设置</string>
|
||||
<string name="app_tishi">提示</string>
|
||||
<string name="app_hint">请输入邀请码</string>
|
||||
<string name="app_sharetitle">我的邀请码:</string>
|
||||
<string name="app_sharetitle2">上级邀请码:</string>
|
||||
<string name="app_totalinvite">总邀请人数:</string>
|
||||
<string name="app_sharecontent">邀请您下载:</string>
|
||||
<string name="app_share">分享</string>
|
||||
<string name="app_checklist">查看邀请记录</string>
|
||||
<string name="app_invitetitle">邀请记录</string>
|
||||
<string name="app_checklist_number">总邀请人数: %d</string>
|
||||
<string name="app_nodata">暂无数据</string>
|
||||
<string name="app_withdrawtitle">提现记录</string>
|
||||
<string name="app_withdrawapply_title">提现申请</string>
|
||||
<string name="app_bankinfo_title">编辑银行卡信息</string>
|
||||
<string name="app_bankinfo_countrycode">86</string>
|
||||
<string name="app_bankinfo_name">持卡人姓名:</string>
|
||||
<string name="app_bankinfo_name_hint">请输入持卡人姓名</string>
|
||||
<string name="app_bankinfo_bankcountry">国家地区:</string>
|
||||
<string name="app_bankinfo_bankcountry_hint">请选择国家地区</string>
|
||||
<string name="app_bankinfo_bankname">开户行名称:</string>
|
||||
<string name="app_bankinfo_bankname_hint">请选择开户行名称</string>
|
||||
<string name="app_bankinfo_code">银行户口:</string>
|
||||
<string name="app_bankinfo_code_hint">请输入银行卡户口</string>
|
||||
<string name="app_bankinfo_bankinfo_tips">(注:请先输入国家区号再选择开户行名称!)</string>
|
||||
<string name="app_balance">余额: %s</string>
|
||||
<string name="app_totalearning">总收益: %s</string>
|
||||
<string name="app_withdraw_amount">金额: %s</string>
|
||||
<string name="app_withdraw_apply_hint">请输入提现金额</string>
|
||||
<string name="app_toastapply">提现申请已提交</string>
|
||||
|
||||
|
||||
</resources>
|
||||
90
singbet8/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">#000000</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Calculcator1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
||||
<declare-styleable name="CircleImageView">
|
||||
<attr name="ease_border_color" format="color" />
|
||||
<attr name="ease_border_width" format="dimension" />
|
||||
<attr name="ease_press_alpha" format="integer" />
|
||||
<attr name="ease_press_color" format="color" />
|
||||
<attr name="ease_radius" format="dimension" />
|
||||
<attr name="es_shape_type" format="enum">
|
||||
<enum name="none" value="0" />
|
||||
<enum name="round" value="1" />
|
||||
<enum name="rectangle" value="2" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
|
||||
<!-- 注意:当前AppTheme主题,在values-v23中单独重复维护。原因是Android 6以下系统不支持设置
|
||||
系统状态栏颜色,如果按照设计,状态栏使用素色则在android6以下手机上就看不清系统状态栏文字了(
|
||||
因为系统文字是白色)。在values-v23表示当Android 23(即android 6)及以上版本将自动使用该目录
|
||||
下的主题(即 colorPrimaryDark 使用素色,从而跟标题栏颜色保持一致,实现沉浸式ui效果)。-->
|
||||
<style name="AppThemeStart" parent="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="colorPrimary">@color/windows_color</item>
|
||||
<item name="colorPrimaryDark">@color/windows_color</item>
|
||||
<item name="colorAccent">@color/windows_color</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- 隐藏Activity窗口的Title标题栏 -->
|
||||
<item name="windowNoTitle">true</item>
|
||||
<!-- <item name="android:windowFullscreen">true</item>-->
|
||||
<!-- <item name="android:windowBackground">@drawable/splah_bg</item>-->
|
||||
|
||||
<item name="android:navigationBarColor">@color/style_color</item>
|
||||
<!-- <item name="android:windowBackground">@mipmap/big_bg</item>-->
|
||||
<item name="android:forceDarkAllowed" tools:ignore="NewApi">false</item>
|
||||
<item name="android:windowBackground">@drawable/big_bg</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="MaterialDesignDialog" parent="@style/Theme.AppCompat.Dialog">
|
||||
<!-- 背景透明 -->
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<!-- 浮于Activity之上 -->
|
||||
<item name="android:windowIsFloating">true</item>
|
||||
<!-- 边框 -->
|
||||
<item name="android:windowFrame">@null</item>
|
||||
<!-- Dialog以外的区域模糊效果 -->
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
<!-- 无标题 -->
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<!-- 半透明 -->
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:windowCloseOnTouchOutside">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
10
singbet8/src/main/res/xml/app_updater_paths.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<root-path name="app_root_path" path="/"/>
|
||||
<external-path name="app_external_path" path="/"/>
|
||||
<external-cache-path name="app_external_cache_path" path="/"/>
|
||||
<external-files-path name="app_external_files_path" path="/"/>
|
||||
<files-path name="app_files_path" path="/"/>
|
||||
<cache-path name="app_cache_path" path="/"/>
|
||||
|
||||
</paths>
|
||||
4
singbet8/src/main/res/xml/network_security_config.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
13
singbet8/src/main/res/xml/provider_paths.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding= "utf-8"?>
|
||||
<resources>
|
||||
<paths >
|
||||
<external-path name="external_files" path="."/>
|
||||
<root-path name="root" path="." />
|
||||
<files-path name="files" path="." />
|
||||
<cache-path name="cache" path="." />
|
||||
<external-files-path name="external_files_f" path="." />
|
||||
<external-cache-path name="external_cache" path="." />
|
||||
</paths >
|
||||
</resources>
|
||||
<!-- 适配7.0及其以上,配合com.eva.android.OpenFileUtil,用于解决调用系统Intent查看大文件内
|
||||
容、拍照保存图片的功能时出现"android.os.FileUriExposedException"异常的问题 -->
|
||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.slotkaki33">
|
||||
package="com.xyz.slotkkk">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
package com.xyz.slotkaki33;
|
||||
|
||||
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<String, String> 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());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.xyz.slotkaki33;
|
||||
package com.xyz.slotkkk;
|
||||
|
||||
|
||||
import android.content.pm.PackageInfo;
|
||||
@@ -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<String, String> 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());
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.xyz.oorag23;
|
||||
package com.xyz.slotkkk;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
@@ -9,7 +9,7 @@
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 获取通讯录-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" /> <!– 获取通讯录–>-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
@@ -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')
|
||||
}
|
||||
BIN
toto88new/justlet.jks
Normal file
@@ -9,7 +9,7 @@
|
||||
android:name="android.hardware.camera2"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 获取通讯录-->
|
||||
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" /> <!– 获取通讯录–>-->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
@@ -9,7 +9,7 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
//70
|
||||
applicationId "com.xyz.u88"
|
||||
applicationId "com.xyz.you88"
|
||||
minSdkVersion 24
|
||||
targetSdkVersion 31
|
||||
versionCode rootProject.ext.versionCode
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.xyz.u88">
|
||||
package="com.xyz.you88">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.xyz.u88;
|
||||
package com.xyz.you88;
|
||||
|
||||
|
||||
import android.content.pm.PackageInfo;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.xyz.u88;
|
||||
package com.xyz.you88;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.xyz.u88;
|
||||
package com.xyz.you88;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||