Compare commits
3 Commits
593f72ce8b
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 348ed78fe6 | |||
| e76ec1b335 | |||
| a32c98848f |
22
.idea/androidTestResultsUserPreferences.xml
generated
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AndroidTestResultsUserPreferences">
|
||||||
|
<option name="androidTestResultsTableState">
|
||||||
|
<map>
|
||||||
|
<entry key="28629151">
|
||||||
|
<value>
|
||||||
|
<AndroidTestResultsTableState>
|
||||||
|
<option name="preferredColumnWidths">
|
||||||
|
<map>
|
||||||
|
<entry key="Duration" value="90" />
|
||||||
|
<entry key="Tests" value="360" />
|
||||||
|
<entry key="Xiaomi 21091116C" value="120" />
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
</AndroidTestResultsTableState>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/appInsightsSettings.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AppInsightsSettings">
|
||||||
|
<option name="selectedTabId" value="Firebase Crashlytics" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
195
.idea/deploymentTargetSelector.xml
generated
@@ -2,56 +2,175 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="deploymentTargetSelector">
|
<component name="deploymentTargetSelector">
|
||||||
<selectionStates>
|
<selectionStates>
|
||||||
<SelectionState runConfigName="app">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="powercuci">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="cucislot365">
|
<SelectionState runConfigName="cucislot365">
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
</SelectionState>
|
<DialogSelection />
|
||||||
<SelectionState runConfigName="lorongjudi33">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="telur33">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="1xhuat">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="winway">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="winway_jisuanqi">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="workbuddy">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="protein">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="1xsgd">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="redspin8">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
|
||||||
<SelectionState runConfigName="aa7au">
|
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
|
||||||
</SelectionState>
|
</SelectionState>
|
||||||
<SelectionState runConfigName="bng1au">
|
<SelectionState runConfigName="bng1au">
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
</SelectionState>
|
</SelectionState>
|
||||||
<SelectionState runConfigName="gk9">
|
<SelectionState runConfigName="1xsgd">
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
</SelectionState>
|
</SelectionState>
|
||||||
<SelectionState runConfigName="fight996">
|
<SelectionState runConfigName="1xhuat">
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="winway_jisuanqi">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
</SelectionState>
|
</SelectionState>
|
||||||
<SelectionState runConfigName="auplayx">
|
<SelectionState runConfigName="auplayx">
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="aa7au">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="redspin8">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="protein">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="winway">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="telur33">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="fight996">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="powercuci">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="lorongjudi33">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="pantas3342">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="cosmojack">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="slotkaki33">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="live22">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="redspin3343">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="bantuan88">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="jk123hk">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="kaki33">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="mgmhotram">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="diriwan888">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
|
</SelectionState>
|
||||||
|
<SelectionState runConfigName="mg8vipmyr">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
<DropdownSelection timestamp="2026-03-31T01:28:57.909708Z">
|
||||||
|
<Target type="DEFAULT_BOOT">
|
||||||
|
<handle>
|
||||||
|
<DeviceId pluginId="PhysicalDevice" identifier="serial=huovhmt4ay6p6xby" />
|
||||||
|
</handle>
|
||||||
|
</Target>
|
||||||
|
</DropdownSelection>
|
||||||
|
<DialogSelection />
|
||||||
</SelectionState>
|
</SelectionState>
|
||||||
</selectionStates>
|
</selectionStates>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
13
.idea/deviceManager.xml
generated
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DeviceTable">
|
||||||
|
<option name="columnSorters">
|
||||||
|
<list>
|
||||||
|
<ColumnSorterState>
|
||||||
|
<option name="column" value="Name" />
|
||||||
|
<option name="order" value="ASCENDING" />
|
||||||
|
</ColumnSorterState>
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
11
.idea/gradle.xml
generated
@@ -14,16 +14,27 @@
|
|||||||
<option value="$PROJECT_DIR$/1xsgd" />
|
<option value="$PROJECT_DIR$/1xsgd" />
|
||||||
<option value="$PROJECT_DIR$/aa7au" />
|
<option value="$PROJECT_DIR$/aa7au" />
|
||||||
<option value="$PROJECT_DIR$/auplayx" />
|
<option value="$PROJECT_DIR$/auplayx" />
|
||||||
|
<option value="$PROJECT_DIR$/bantuan88" />
|
||||||
<option value="$PROJECT_DIR$/base" />
|
<option value="$PROJECT_DIR$/base" />
|
||||||
<option value="$PROJECT_DIR$/base_noupdata" />
|
<option value="$PROJECT_DIR$/base_noupdata" />
|
||||||
<option value="$PROJECT_DIR$/bng1au" />
|
<option value="$PROJECT_DIR$/bng1au" />
|
||||||
|
<option value="$PROJECT_DIR$/cosmojack" />
|
||||||
<option value="$PROJECT_DIR$/cucislot365" />
|
<option value="$PROJECT_DIR$/cucislot365" />
|
||||||
|
<option value="$PROJECT_DIR$/diriwan888" />
|
||||||
<option value="$PROJECT_DIR$/fight996" />
|
<option value="$PROJECT_DIR$/fight996" />
|
||||||
<option value="$PROJECT_DIR$/gk9" />
|
<option value="$PROJECT_DIR$/gk9" />
|
||||||
|
<option value="$PROJECT_DIR$/jk123hk" />
|
||||||
|
<option value="$PROJECT_DIR$/kaki33" />
|
||||||
|
<option value="$PROJECT_DIR$/live22" />
|
||||||
<option value="$PROJECT_DIR$/lorongjudi33" />
|
<option value="$PROJECT_DIR$/lorongjudi33" />
|
||||||
|
<option value="$PROJECT_DIR$/mg8vipmyr" />
|
||||||
|
<option value="$PROJECT_DIR$/mgmhotram" />
|
||||||
|
<option value="$PROJECT_DIR$/pantas3342" />
|
||||||
<option value="$PROJECT_DIR$/powercuci" />
|
<option value="$PROJECT_DIR$/powercuci" />
|
||||||
<option value="$PROJECT_DIR$/protein" />
|
<option value="$PROJECT_DIR$/protein" />
|
||||||
|
<option value="$PROJECT_DIR$/redspin3343" />
|
||||||
<option value="$PROJECT_DIR$/redspin8" />
|
<option value="$PROJECT_DIR$/redspin8" />
|
||||||
|
<option value="$PROJECT_DIR$/slotkaki33" />
|
||||||
<option value="$PROJECT_DIR$/telur33" />
|
<option value="$PROJECT_DIR$/telur33" />
|
||||||
<option value="$PROJECT_DIR$/winway" />
|
<option value="$PROJECT_DIR$/winway" />
|
||||||
<option value="$PROJECT_DIR$/winway_jisuanqi" />
|
<option value="$PROJECT_DIR$/winway_jisuanqi" />
|
||||||
|
|||||||
8
.idea/markdown.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="MarkdownSettings">
|
||||||
|
<option name="previewPanelProviderInfo">
|
||||||
|
<ProviderInfo name="Compose (experimental)" className="com.intellij.markdown.compose.preview.ComposePanelProvider" />
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -11,8 +11,8 @@ android {
|
|||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 24
|
minSdkVersion 24
|
||||||
targetSdk 36
|
targetSdk 36
|
||||||
versionCode rootProject.ext.versionCode
|
versionCode 141
|
||||||
versionName rootProject.ext.versionName
|
versionName "v1.4.1"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
//包名
|
//包名
|
||||||
|
|||||||
BIN
apks/1xhuatdsigiudsogdfghdfghdf.apk
Normal file
BIN
apks/1xsgdsdgsdlgfsdgdflgdfh.apk
Normal file
BIN
apks/Cosmojack.apk
Normal file
BIN
apks/MGMHOTRAM.apk
Normal file
BIN
apks/REDSPIN3343.apk
Normal file
BIN
apks/SlotKaki33.apk
Normal file
BIN
apks/SlotKaki3311.apk
Normal file
BIN
apks/aa7audjgkdfgkdflgkldfsgdfhfd.apk
Normal file
BIN
apks/auplayxdgkldfgldffdg.apk
Normal file
BIN
apks/bantu.apk
Normal file
BIN
apks/bng1aujgfdkgjdkflghdffdhfgggg.apk
Normal file
BIN
apks/cucislotjehtjuewrhrrregrgg.apk
Normal file
BIN
apks/diriwan888.apk
Normal file
BIN
apks/fight996gjdfklgjdkfhgfkdlhdf.apk
Normal file
BIN
apks/jk123hk.apk
Normal file
BIN
apks/jugfjkdjgkdfgdfkgdffff.apk
Normal file
BIN
apks/kaki.apk
Normal file
BIN
apks/live22.apk
Normal file
BIN
apks/lorongjudi33dgkdfklgjdkfljghkdf.apk
Normal file
BIN
apks/mg8vipmyr.apk
Normal file
BIN
apks/pantas33.apk
Normal file
BIN
apks/pantas3342.apk
Normal file
BIN
apks/powercucidgkjdfkjgkdfshv.apk
Normal file
BIN
apks/proteinkfkkhkfghfdghgg.apk
Normal file
BIN
apks/redspin8jghdjfghjdfgjkdfgjd.apk
Normal file
BIN
apks/winway-calculator-v3.2.4-44.apk
Normal file
BIN
apks/winway-calculator_44.apk
Normal file
2
bantuan88/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
bantuan88/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "bantu"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode 141
|
||||||
|
versionName "v1.4.1"
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.xyz.bantu"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#E9E9E7')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#E9E9E7')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'Bantuan88')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://live22x.com/\""
|
||||||
|
buildConfigField "int", "USERID", "174"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "true"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
bantuan88/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "855080274946",
|
||||||
|
"project_id": "ba4nt1uan88",
|
||||||
|
"storage_bucket": "ba4nt1uan88.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:855080274946:android:ddda2b3a70427e1e9a6b1b",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.xyz.bantu"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDll-tndxLqFb-e4yujeYNRP01iglD8tlI"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
bantuan88/justlet.jks
Normal file
32
bantuan88/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
bantuan88/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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>
|
||||||
79
bantuan88/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(R.string.app_name))
|
||||||
|
.setSmallIcon(R.mipmap.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
}
|
||||||
|
notificationManager.notify(0, notificationBuilder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
19
bantuan88/src/main/java/com/webclip/base/WebApplication.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
bantuan88/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
bantuan88/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 318 KiB |
91
bantuan88/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
bantuan88/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
bantuan88/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
bantuan88/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"异常的问题 -->
|
||||||
BIN
bantuan88/telur33.jks
Normal file
@@ -660,9 +660,9 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
regFcm();
|
regFcm();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
facebookUrl = dataInfo.getFbUrl().trim();
|
facebookUrl = dataInfo.getFbUrl() == null ? "" : dataInfo.getFbUrl().trim();
|
||||||
telegramUrl = dataInfo.getTgUrl().trim();
|
telegramUrl = dataInfo.getTgUrl() == null ? "" : dataInfo.getTgUrl().trim();
|
||||||
whatsappUrl = dataInfo.getWsUrl().trim();
|
whatsappUrl = dataInfo.getWsUrl() == null ? "" : dataInfo.getWsUrl().trim();
|
||||||
|
|
||||||
//外链逻辑修改
|
//外链逻辑修改
|
||||||
if (!TextUtils.isEmpty(facebookUrl)) {
|
if (!TextUtils.isEmpty(facebookUrl)) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
outputPath = "F:/webApp2"
|
outputPath = "${project.rootDir}/apks"
|
||||||
versionCode = 134
|
versionCode = 134
|
||||||
versionName = "v1.3.4"
|
versionName = "v1.3.4"
|
||||||
namespace = "com.webclip.base"
|
namespace = "com.webclip.base"
|
||||||
|
|||||||
2
cosmojack/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
cosmojack/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "Cosmojack"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode rootProject.ext.versionCode
|
||||||
|
versionName rootProject.ext.versionName
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.exam.Cosmojack"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#030904')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#000000')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'Cosmojack')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://cosmojack.app/\""
|
||||||
|
buildConfigField "int", "USERID", "261"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "true"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
cosmojack/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "746926916870",
|
||||||
|
"project_id": "cosmojack-6d9b6",
|
||||||
|
"storage_bucket": "cosmojack-6d9b6.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:746926916870:android:14e75755e31bd97f498a87",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.exam.Cosmojack"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyCP1IuEriDO_2IuEEGyGcDy-RBIeJOK-BE"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
cosmojack/justlet.jks
Normal file
32
cosmojack/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
cosmojack/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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>
|
||||||
79
cosmojack/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(R.string.app_name))
|
||||||
|
.setSmallIcon(R.mipmap.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
}
|
||||||
|
notificationManager.notify(0, notificationBuilder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
19
cosmojack/src/main/java/com/webclip/base/WebApplication.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
cosmojack/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
cosmojack/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 387 KiB |
91
cosmojack/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
cosmojack/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
cosmojack/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
cosmojack/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"异常的问题 -->
|
||||||
BIN
cosmojack/telur33.jks
Normal file
2
diriwan888/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
diriwan888/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "diriwan888"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode rootProject.ext.versionCode
|
||||||
|
versionName rootProject.ext.versionName
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.exm102.diriwan888"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#FFFFFF')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#CECECF')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'diriwan888')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://diriwan888.pro/\""
|
||||||
|
buildConfigField "int", "USERID", "265"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "false"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
diriwan888/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "117992635576",
|
||||||
|
"project_id": "diriwan888-aa9e0",
|
||||||
|
"storage_bucket": "diriwan888-aa9e0.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:117992635576:android:57d533ed0686783deb484d",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.exm102.diriwan888"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDnYD7BFdiooseDh5K6x7Cr-ql6EXfWd78"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
diriwan888/justlet.jks
Normal file
32
diriwan888/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
diriwan888/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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>
|
||||||
79
diriwan888/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
diriwan888/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
diriwan888/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 77 KiB |
91
diriwan888/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
diriwan888/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
diriwan888/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
diriwan888/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"异常的问题 -->
|
||||||
BIN
diriwan888/telur33.jks
Normal file
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
|||||||
#Mon Mar 09 14:34:00 CST 2026
|
#Mon Mar 09 14:34:00 CST 2026
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.13-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
2
jk123hk/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
jk123hk/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "jk123hk"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode rootProject.ext.versionCode
|
||||||
|
versionName rootProject.ext.versionName
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.asdhia.jk123hk"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#060606')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#191C1D')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'JK123hk')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://jk123hk.com/\""
|
||||||
|
buildConfigField "int", "USERID", "263"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "false"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
jk123hk/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "835413751163",
|
||||||
|
"project_id": "jk123hk-cc695",
|
||||||
|
"storage_bucket": "jk123hk-cc695.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:835413751163:android:877fb37cea435fd0ce39de",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.asdhia.jk123hk"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyA2vz1Nkrk9DNjzpzcnWtDmrujlaPrnwlw"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
jk123hk/justlet.jks
Normal file
32
jk123hk/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
66
jk123hk/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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" />
|
||||||
|
|
||||||
|
</intent-filter>
|
||||||
|
</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/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>
|
||||||
79
jk123hk/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(R.string.app_name))
|
||||||
|
.setSmallIcon(R.mipmap.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
}
|
||||||
|
notificationManager.notify(0, notificationBuilder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
19
jk123hk/src/main/java/com/webclip/base/WebApplication.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
jk123hk/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
jk123hk/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 26 KiB |
91
jk123hk/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
jk123hk/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
jk123hk/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
jk123hk/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"异常的问题 -->
|
||||||
BIN
jk123hk/telur33.jks
Normal file
2
kaki33/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
kaki33/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "kaki"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode rootProject.ext.versionCode
|
||||||
|
versionName rootProject.ext.versionName
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.asdaaaa.kaki33"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#FFFFFF')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#02193D')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'kaki33')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://live22x.com/\""
|
||||||
|
buildConfigField "int", "USERID", "157"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "true"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
kaki33/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "670790998254",
|
||||||
|
"project_id": "kaki33-9f202",
|
||||||
|
"storage_bucket": "kaki33-9f202.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:670790998254:android:5d0f9e8a938718fe2dfbff",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.asdaaaa.kaki33"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDWQ2pBQSia1XCQNX3u7ABqkyvLzejUms8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
kaki33/justlet.jks
Normal file
32
kaki33/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
kaki33/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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>
|
||||||
79
kaki33/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(R.string.app_name))
|
||||||
|
.setSmallIcon(R.mipmap.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
}
|
||||||
|
notificationManager.notify(0, notificationBuilder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
19
kaki33/src/main/java/com/webclip/base/WebApplication.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
kaki33/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
kaki33/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 335 KiB |
91
kaki33/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
kaki33/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
kaki33/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
kaki33/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"异常的问题 -->
|
||||||
BIN
kaki33/telur33.jks
Normal file
2
live22/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
live22/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "live22"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode rootProject.ext.versionCode
|
||||||
|
versionName rootProject.ext.versionName
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.daidn.live22"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#440F6F')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#360B58')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'LIVE22')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://live22x.com/\""
|
||||||
|
buildConfigField "int", "USERID", "262"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "true"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
live22/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "717557626585",
|
||||||
|
"project_id": "live22-997e3",
|
||||||
|
"storage_bucket": "live22-997e3.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:717557626585:android:4bd86e3e5e825bb85f70c8",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.daidn.live22"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyBL6vtzuXlVfoSWiKHtk4p-TiLts0faqUQ"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
live22/justlet.jks
Normal file
32
live22/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
live22/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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>
|
||||||
79
live22/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(R.string.app_name))
|
||||||
|
.setSmallIcon(R.mipmap.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
}
|
||||||
|
notificationManager.notify(0, notificationBuilder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
19
live22/src/main/java/com/webclip/base/WebApplication.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
live22/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
live22/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 33 KiB |
91
live22/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
live22/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
live22/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
live22/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"异常的问题 -->
|
||||||
BIN
live22/telur33.jks
Normal file
2
mg8vipmyr/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
mg8vipmyr/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "mg8vipmyr"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode rootProject.ext.versionCode
|
||||||
|
versionName rootProject.ext.versionName
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.exm1003.mg8vipmyr"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#FAFAF8')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#D2D3D5')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'mg8vipmyr')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://mg8vipmyr.pro/\""
|
||||||
|
buildConfigField "int", "USERID", "266"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "false"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
mg8vipmyr/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "339195334275",
|
||||||
|
"project_id": "mg8vipmyr-92a41",
|
||||||
|
"storage_bucket": "mg8vipmyr-92a41.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:339195334275:android:d299da845e38e21b5a55b6",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.exm1003.mg8vipmyr"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyBSWrUV2rFn2v1TMh_eg80y38KM__yW42k"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
mg8vipmyr/justlet.jks
Normal file
32
mg8vipmyr/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
mg8vipmyr/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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>
|
||||||
79
mg8vipmyr/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(R.string.app_name))
|
||||||
|
.setSmallIcon(R.mipmap.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
}
|
||||||
|
notificationManager.notify(0, notificationBuilder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
19
mg8vipmyr/src/main/java/com/webclip/base/WebApplication.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
mg8vipmyr/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
mg8vipmyr/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 42 KiB |
91
mg8vipmyr/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
mg8vipmyr/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
mg8vipmyr/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
mg8vipmyr/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"异常的问题 -->
|
||||||
BIN
mg8vipmyr/telur33.jks
Normal file
2
mgmhotram/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
mgmhotram/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "MGMHOTRAM"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode rootProject.ext.versionCode
|
||||||
|
versionName rootProject.ext.versionName
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.examp101.mgmhotram"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#080001')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#080001')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'MGMHOTRAM')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://mgmhotram.org/\""
|
||||||
|
buildConfigField "int", "USERID", "264"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "true"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
mgmhotram/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "131401023907",
|
||||||
|
"project_id": "mgmhotram-28032",
|
||||||
|
"storage_bucket": "mgmhotram-28032.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:131401023907:android:409d24bb24f0aef3ca5a16",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.examp101.mgmhotram"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyAr2mjtSYJgYHSBJ25Ue4xTeW8GD-txGqA"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
mgmhotram/justlet.jks
Normal file
32
mgmhotram/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
mgmhotram/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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>
|
||||||
79
mgmhotram/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(R.string.app_name))
|
||||||
|
.setSmallIcon(R.mipmap.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
}
|
||||||
|
notificationManager.notify(0, notificationBuilder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
19
mgmhotram/src/main/java/com/webclip/base/WebApplication.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
mgmhotram/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
mgmhotram/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 62 KiB |
91
mgmhotram/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
mgmhotram/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
mgmhotram/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
mgmhotram/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"异常的问题 -->
|
||||||
BIN
mgmhotram/telur33.jks
Normal file
2
pantas3342/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
pantas3342/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "pantas33"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode 142
|
||||||
|
versionName "v1.4.2"
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.and.pantas3342"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#1C322A')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#1C322A')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'Pantas33')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://www.pantas33e.com/\""
|
||||||
|
buildConfigField "int", "USERID", "142"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "true"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
pantas3342/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "541726336017",
|
||||||
|
"project_id": "pantas3342",
|
||||||
|
"storage_bucket": "pantas3342.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:541726336017:android:6589c2c468ba77847b7db0",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.and.pantas3342"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyBoBUGvJs5V9XxNhBQXoy7XLO84oT-ycng"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
pantas3342/justlet.jks
Normal file
32
pantas3342/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
pantas3342/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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>
|
||||||
79
pantas3342/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
pantas3342/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
pantas3342/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
91
pantas3342/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
pantas3342/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
pantas3342/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
pantas3342/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"异常的问题 -->
|
||||||
BIN
pantas3342/telur33.jks
Normal file
2
redspin3343/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
redspin3343/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "REDSPIN3343"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode rootProject.ext.versionCode
|
||||||
|
versionName rootProject.ext.versionName
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.exmp23.REDSPIN3343"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#4D0707')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#4D0707')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'REDSPIN3343')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://redspinplay.com/\""
|
||||||
|
buildConfigField "int", "USERID", "263"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "true"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
redspin3343/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "106504396785",
|
||||||
|
"project_id": "redspin3343",
|
||||||
|
"storage_bucket": "redspin3343.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:106504396785:android:4c3418417383689c50ee50",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.exmp23.REDSPIN3343"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyB1TQRzpp2XWRt8w_H-nQRu4s2L_v8Zah0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
redspin3343/justlet.jks
Normal file
32
redspin3343/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
redspin3343/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
redspin3343/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
redspin3343/src/main/res/mipmap-xxhdpi/app_logo.png
Normal file
|
After Width: | Height: | Size: 389 KiB |
91
redspin3343/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
redspin3343/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
redspin3343/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
redspin3343/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"异常的问题 -->
|
||||||
BIN
redspin3343/telur33.jks
Normal file
@@ -37,3 +37,18 @@ include ':aa7au'//257
|
|||||||
include ':bng1au'//258
|
include ':bng1au'//258
|
||||||
include ':fight996'//259
|
include ':fight996'//259
|
||||||
include ':auplayx'//260
|
include ':auplayx'//260
|
||||||
|
include ':pantas3342'//142
|
||||||
|
include ':cosmojack'//261
|
||||||
|
include ':slotkaki33' //223
|
||||||
|
include ':live22' //262
|
||||||
|
include ':redspin3343' //263
|
||||||
|
include ':bantuan88' //174
|
||||||
|
include ':jk123hk' //264
|
||||||
|
include ':kaki33' //265
|
||||||
|
include ':mgmhotram'//264
|
||||||
|
include ':diriwan888' //265
|
||||||
|
include ':mg8vipmyr' //266
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
slotkaki33/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/build
|
||||||
|
/release
|
||||||
93
slotkaki33/build.gradle
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
plugins {
|
||||||
|
id 'com.android.application'
|
||||||
|
id 'com.google.gms.google-services'
|
||||||
|
}
|
||||||
|
|
||||||
|
def appOutPutName = "SlotKaki33"
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace rootProject.ext.namespace
|
||||||
|
compileSdk 36
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
targetSdk 36
|
||||||
|
versionCode 151
|
||||||
|
versionName "v1.5.1"
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
applicationId "com.asdaaaa.kaki33"
|
||||||
|
|
||||||
|
//app大背景色
|
||||||
|
resValue('color', 'windows_color', '#122752')
|
||||||
|
//底部导航栏颜色 大背景颜色为 windows_color——style_color的上下渐变色
|
||||||
|
resValue('color', 'style_color', '#122752')
|
||||||
|
//app 名字
|
||||||
|
resValue('string', 'app_name', 'Slotkaki33')
|
||||||
|
|
||||||
|
|
||||||
|
buildConfigField "String", "BASE_URL", "\"https://slotkaki33.net/\""
|
||||||
|
buildConfigField "int", "USERID", "223"
|
||||||
|
buildConfigField "boolean", "IS_WHITE", "false"
|
||||||
|
buildConfigField "boolean", "IS_ROUND", "true"
|
||||||
|
buildConfigField "int", "ROUND_RADIUS", "10"
|
||||||
|
buildConfigField "boolean", "HAS_CONTACT", "false"
|
||||||
|
buildConfigField "boolean", "HAS_HOOK", "false"
|
||||||
|
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
debug {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
release {
|
||||||
|
storeFile file('telur33.jks')
|
||||||
|
storePassword "android2014"
|
||||||
|
keyAlias 'key0'
|
||||||
|
keyPassword "android2014"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
targetCompatibility rootProject.ext.JAVA_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
applicationVariants.all { variant ->
|
||||||
|
variant.outputs.all {
|
||||||
|
def outputDir = new File(rootProject.ext.outputPath)
|
||||||
|
outputDir.mkdirs()
|
||||||
|
def outputFileName = "${appOutPutName}.apk"
|
||||||
|
setOutputFileName(outputFileName)
|
||||||
|
def newOutputFile = new File(outputDir, outputFileName)
|
||||||
|
newOutputFile.parentFile.mkdirs()
|
||||||
|
variant.assemble.doLast {
|
||||||
|
try {
|
||||||
|
java.nio.file.Files.copy(
|
||||||
|
outputFile.toPath(),
|
||||||
|
newOutputFile.toPath(),
|
||||||
|
java.nio.file.StandardCopyOption.REPLACE_EXISTING
|
||||||
|
)
|
||||||
|
} catch (java.io.IOException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(path: ':base')
|
||||||
|
}
|
||||||
29
slotkaki33/google-services.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "670790998254",
|
||||||
|
"project_id": "kaki33-9f202",
|
||||||
|
"storage_bucket": "kaki33-9f202.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:670790998254:android:5d0f9e8a938718fe2dfbff",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.asdaaaa.kaki33"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDWQ2pBQSia1XCQNX3u7ABqkyvLzejUms8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
BIN
slotkaki33/justlet.jks
Normal file
32
slotkaki33/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.** {
|
||||||
|
*;
|
||||||
|
}
|
||||||
67
slotkaki33/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
<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=".IndexActivity"
|
||||||
|
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=".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>
|
||||||
79
slotkaki33/src/main/java/com/webclip/base/IndexActivity.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import com.google.firebase.messaging.FirebaseMessaging;
|
||||||
|
|
||||||
|
public class IndexActivity extends MainActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
initConfig();
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
initWinwdowLogoConfig();
|
||||||
|
// registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void regFcm() {
|
||||||
|
super.regFcm();
|
||||||
|
registerFCM();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册FCM
|
||||||
|
*/
|
||||||
|
private void registerFCM() {
|
||||||
|
//订阅主题
|
||||||
|
LogUtils.i("支持FCM 去注册");
|
||||||
|
try {
|
||||||
|
FirebaseMessaging.getInstance().subscribeToTopic("demo")
|
||||||
|
.addOnCompleteListener(task -> {
|
||||||
|
String msg = "Subscribed";
|
||||||
|
if (!task.isSuccessful()) {
|
||||||
|
msg = "Subscribe failed";
|
||||||
|
}else{
|
||||||
|
checkNotify();
|
||||||
|
}
|
||||||
|
LogUtils.i("支持FCM 结果:"+msg);
|
||||||
|
});
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LogUtils.i("支持FCM Exception");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于修改大背景渐变色 不设置
|
||||||
|
*/
|
||||||
|
private void initWinwdowLogoConfig() {
|
||||||
|
//全局大背景 一个上下渐变 不要动
|
||||||
|
setBackDrawables(R.drawable.big_bg);
|
||||||
|
setImageView(BuildConfig.IS_ROUND,BuildConfig.ROUND_RADIUS);
|
||||||
|
getWindow().getDecorView().setBackgroundResource(R.drawable.big_bg);
|
||||||
|
|
||||||
|
//需要修改启动页logo在这里弄 一般启动页logo就是app_logo 没特殊要求 不要动
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基础配置都在这里
|
||||||
|
* 不要动
|
||||||
|
*/
|
||||||
|
private void initConfig() {
|
||||||
|
|
||||||
|
//===========================以下是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
userId = BuildConfig.USERID;
|
||||||
|
saveInt(IndexActivity.this,"user_code",userId);
|
||||||
|
|
||||||
|
saveString(this, "base_url",BuildConfig.BASE_URL);
|
||||||
|
styleColor = getColor(R.color.style_color);
|
||||||
|
windowsColor = getColor(R.color.windows_color);
|
||||||
|
isWhite = BuildConfig.IS_WHITE;
|
||||||
|
hasContact = BuildConfig.HAS_CONTACT;
|
||||||
|
hasHook = BuildConfig.HAS_HOOK;
|
||||||
|
|
||||||
|
//===========================以上是APP的配置信息 都写在 app_config.xml中==================================
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
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.webclip.base.GsonUtils;
|
||||||
|
import com.webclip.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, 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.app_logo)
|
||||||
|
.setContentTitle(messageInfo.getTitle())
|
||||||
|
.setContentText(messageInfo.getContent())
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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, 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.app_logo)
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(body)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(pendingIntent);
|
||||||
|
} else {
|
||||||
|
notificationBuilder = new NotificationCompat.Builder(this, getString(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,19 @@
|
|||||||
|
package com.webclip.base;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.webclip.base.LogUtils;
|
||||||
|
|
||||||
|
public class WebApplication extends Application {
|
||||||
|
|
||||||
|
|
||||||
|
public static Context application;
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
// 设置开启优化方案
|
||||||
|
application = this;
|
||||||
|
LogUtils.isDebug = BuildConfig.BUILD_TYPE.equals("debug");
|
||||||
|
}
|
||||||
|
}
|
||||||
9
slotkaki33/src/main/res/drawable/big_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?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:centerColor="@color/windows_color"
|
||||||
|
android:endColor="@color/style_color"/>
|
||||||
|
</shape>
|
||||||
BIN
slotkaki33/src/main/res/mipmap-xxhdpi/app_logo.jpg
Normal file
|
After Width: | Height: | Size: 95 KiB |
91
slotkaki33/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<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
slotkaki33/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
slotkaki33/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
slotkaki33/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"异常的问题 -->
|
||||||