Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
com.ccwangluo.accelerator
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sheteng
com.ccwangluo.accelerator
Commits
f6b90158
Commit
f6b90158
authored
Feb 17, 2022
by
sheteng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
加入模块app
parent
068dc478
Changes
45
Show whitespace changes
Inline
Side-by-side
Showing
45 changed files
with
647 additions
and
210 deletions
+647
-210
app/build.gradle.kts
app/build.gradle.kts
+17
-22
app/proguard-rules.pro
app/proguard-rules.pro
+17
-0
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+52
-52
app/src/main/java/com/ccwangluo/accelerator/App.kt
app/src/main/java/com/ccwangluo/accelerator/App.kt
+1
-1
app/src/main/java/com/ccwangluo/accelerator/model/UserProfile.kt
.../main/java/com/ccwangluo/accelerator/model/UserProfile.kt
+9
-0
app/src/main/java/com/ccwangluo/accelerator/ui/BottomNavigationFragment.kt
.../com/ccwangluo/accelerator/ui/BottomNavigationFragment.kt
+19
-1
app/src/main/java/com/ccwangluo/accelerator/ui/MainActivity.kt
...rc/main/java/com/ccwangluo/accelerator/ui/MainActivity.kt
+36
-5
app/src/main/java/com/ccwangluo/accelerator/ui/dialog/CommonDialog.kt
.../java/com/ccwangluo/accelerator/ui/dialog/CommonDialog.kt
+4
-0
app/src/main/java/com/ccwangluo/accelerator/ui/dialog/MemberDialog.kt
.../java/com/ccwangluo/accelerator/ui/dialog/MemberDialog.kt
+3
-0
app/src/main/java/com/ccwangluo/accelerator/ui/dialog/PrivacyDialog.kt
...java/com/ccwangluo/accelerator/ui/dialog/PrivacyDialog.kt
+1
-0
app/src/main/java/com/ccwangluo/accelerator/ui/home/AccelertorFragment.kt
...a/com/ccwangluo/accelerator/ui/home/AccelertorFragment.kt
+66
-21
app/src/main/java/com/ccwangluo/accelerator/ui/home/AccelertorViewModel.kt
.../com/ccwangluo/accelerator/ui/home/AccelertorViewModel.kt
+8
-0
app/src/main/java/com/ccwangluo/accelerator/ui/home/MineFragment.kt
...in/java/com/ccwangluo/accelerator/ui/home/MineFragment.kt
+15
-1
app/src/main/java/com/ccwangluo/accelerator/ui/home/NewsFragment.kt
...in/java/com/ccwangluo/accelerator/ui/home/NewsFragment.kt
+0
-1
app/src/main/java/com/ccwangluo/accelerator/ui/login/LoginViewModel.kt
...java/com/ccwangluo/accelerator/ui/login/LoginViewModel.kt
+2
-2
app/src/main/java/com/ccwangluo/accelerator/ui/login/PhoneLoginFragment.kt
.../com/ccwangluo/accelerator/ui/login/PhoneLoginFragment.kt
+1
-2
app/src/main/java/com/ccwangluo/accelerator/ui/login/SplashFragment.kt
...java/com/ccwangluo/accelerator/ui/login/SplashFragment.kt
+44
-0
app/src/main/java/com/ccwangluo/accelerator/ui/web/AndroidInterface.kt
...java/com/ccwangluo/accelerator/ui/web/AndroidInterface.kt
+24
-12
app/src/main/java/com/ccwangluo/accelerator/ui/web/CommonWebViewFragment.kt
...com/ccwangluo/accelerator/ui/web/CommonWebViewFragment.kt
+18
-1
app/src/main/java/com/ccwangluo/accelerator/utils/AcceleratorUtils.kt
.../java/com/ccwangluo/accelerator/utils/AcceleratorUtils.kt
+27
-15
app/src/main/java/com/ccwangluo/accelerator/utils/LoginUtils.kt
...c/main/java/com/ccwangluo/accelerator/utils/LoginUtils.kt
+52
-16
app/src/main/java/com/ccwangluo/accelerator/utils/PhoneUtils.kt
...c/main/java/com/ccwangluo/accelerator/utils/PhoneUtils.kt
+3
-3
app/src/main/java/com/ccwangluo/accelerator/utils/SettingSPUtils.kt
...in/java/com/ccwangluo/accelerator/utils/SettingSPUtils.kt
+12
-3
app/src/main/java/com/ccwangluo/accelerator/utils/SysUtils.kt
...src/main/java/com/ccwangluo/accelerator/utils/SysUtils.kt
+14
-1
app/src/main/java/com/ccwangluo/accelerator/utils/TimeUtils.kt
...rc/main/java/com/ccwangluo/accelerator/utils/TimeUtils.kt
+19
-0
app/src/main/java/com/ccwangluo/accelerator/utils/http/HttpConfig.kt
...n/java/com/ccwangluo/accelerator/utils/http/HttpConfig.kt
+7
-2
app/src/main/java/com/ccwangluo/accelerator/utils/http/HttpGo.kt
.../main/java/com/ccwangluo/accelerator/utils/http/HttpGo.kt
+36
-41
app/src/main/res/layout/fragment_login_phone.xml
app/src/main/res/layout/fragment_login_phone.xml
+2
-0
app/src/main/res/layout/fragment_mine.xml
app/src/main/res/layout/fragment_mine.xml
+1
-0
app/src/main/res/layout/fragment_quick.xml
app/src/main/res/layout/fragment_quick.xml
+5
-0
app/src/main/res/layout/fragment_splash.xml
app/src/main/res/layout/fragment_splash.xml
+12
-0
app/src/main/res/layout/fragment_webview.xml
app/src/main/res/layout/fragment_webview.xml
+1
-0
app/src/main/res/layout/item_dynamic.xml
app/src/main/res/layout/item_dynamic.xml
+107
-0
app/src/main/res/mipmap-xxxhdpi/icon_praise_bu.png
app/src/main/res/mipmap-xxxhdpi/icon_praise_bu.png
+0
-0
app/src/main/res/mipmap-xxxhdpi/icon_praise_ga.png
app/src/main/res/mipmap-xxxhdpi/icon_praise_ga.png
+0
-0
app/src/main/res/mipmap-xxxhdpi/phone_login_logo.png
app/src/main/res/mipmap-xxxhdpi/phone_login_logo.png
+0
-0
app/src/main/res/mipmap-xxxhdpi/win_bg.png
app/src/main/res/mipmap-xxxhdpi/win_bg.png
+0
-0
app/src/main/res/values/colors.xml
app/src/main/res/values/colors.xml
+3
-0
app/src/main/res/values/strings.xml
app/src/main/res/values/strings.xml
+1
-1
app/src/main/res/values/themes.xml
app/src/main/res/values/themes.xml
+2
-2
build.gradle.kts
build.gradle.kts
+1
-1
buildSrc/src/main/kotlin/Helpers.kt
buildSrc/src/main/kotlin/Helpers.kt
+2
-2
core/src/main/java/com/github/shadowsocks/bg/ServiceNotification.kt
...ain/java/com/github/shadowsocks/bg/ServiceNotification.kt
+2
-2
core/src/main/res/mipmap-xxxhdpi/tt_logo.png
core/src/main/res/mipmap-xxxhdpi/tt_logo.png
+0
-0
repositories.gradle.kts
repositories.gradle.kts
+1
-0
No files found.
app/build.gradle.kts
View file @
f6b90158
...
@@ -21,7 +21,7 @@ android {
...
@@ -21,7 +21,7 @@ android {
// targetSdk 30
// targetSdk 30
// versionCode = 1
// versionCode = 1
// versionName = "1.0"
// versionName = "1.0"
//
// testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
// testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
// javaCompileOptions {
// javaCompileOptions {
// annotationProcessor(Options {)
// annotationProcessor(Options {)
...
@@ -31,33 +31,25 @@ android {
...
@@ -31,33 +31,25 @@ android {
// manifestPlaceholders = listOf(qqappid = "你的qq appid")
// manifestPlaceholders = listOf(qqappid = "你的qq appid")
// }
// }
// buildTypes {
buildTypes
{
// named("release"){
named
(
"release"
){
// signingConfig = signingConfigs.getByName("config")
signingConfig
=
signingConfigs
.
getByName
(
"config"
)
// isMinifyEnabled = false
isMinifyEnabled
=
false
// setProguardFiles(listOf(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"))
setProguardFiles
(
listOf
(
getDefaultProguardFile
(
"proguard-android.txt"
),
"proguard-rules.pro"
))
// buildConfigField "String", "BASE_URL", "\"http://10.16.1.98:9002/api(\"")
}
// }
named
(
"debug"
){
// named("debug"){
signingConfig
=
signingConfigs
.
getByName
(
"config"
)
// signingConfig = signingConfigs.getByName("config")
isMinifyEnabled
=
false
// isMinifyEnabled = false
}
// buildConfigField "String", "BASE_URL", "\"http://10.16.1.98:9002/api(\"")
}
// }
// }
// compileOptions {
// sourceCompatibility = JavaVersion.VERSION_1_8
// targetCompatibility = JavaVersion.VERSION_1_8
// }
// kotlinOptions {
// jvmTarget = "1.8"
// }
}
}
setupApp
()
setupApp
()
android
.
defaultConfig
.
applicationId
=
"com.ccwangluo.accelerator"
android
.
defaultConfig
.
applicationId
=
"com.ccwangluo.accelerator"
android
.
buildFeatures
.
viewBinding
=
true
android
.
buildFeatures
.
viewBinding
=
true
android
.
buildTypes
.
named
(
"release"
)
dependencies
{
dependencies
{
implementation
(
fileTree
(
mapOf
(
"dir"
to
"libs"
,
"include"
to
listOf
(
"*.jar"
,
"*.aar"
))))
implementation
(
fileTree
(
mapOf
(
"dir"
to
"libs"
,
"include"
to
listOf
(
"*.jar"
,
"*.aar"
))))
implementation
(
"androidx.appcompat:appcompat:1.3.1"
)
implementation
(
"androidx.appcompat:appcompat:1.3.1"
)
...
@@ -113,4 +105,7 @@ dependencies {
...
@@ -113,4 +105,7 @@ dependencies {
//
//
// implementation("com.umeng.umsdk:share-qq:7.1.7")//QQ完整版)
// implementation("com.umeng.umsdk:share-qq:7.1.7")//QQ完整版)
// implementation("com.squareup.okhttp3:okhttp:3.14.9")//QQ官方sdk 3.53及之后版本需要集成okhttp3.x,必选)
// implementation("com.squareup.okhttp3:okhttp:3.14.9")//QQ官方sdk 3.53及之后版本需要集成okhttp3.x,必选)
//gps
implementation
(
"com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.3.0"
)
}
}
\ No newline at end of file
app/proguard-rules.pro
View file @
f6b90158
...
@@ -148,3 +148,20 @@
...
@@ -148,3 +148,20 @@
-
keep
class
com
.
linkedin
.
**
{
*
;
}
-
keep
class
com
.
linkedin
.
**
{
*
;
}
-
keep
class
com
.
android
.
dingtalk
.
share
.
ddsharemodule
.
**
{
*
;
}
-
keep
class
com
.
android
.
dingtalk
.
share
.
ddsharemodule
.
**
{
*
;
}
-
keepattributes
Signature
-
keepattributes
Signature
-
keepclassmembers
class
**
{
public
void
on
*
Event
(...);
}
-
keep
class
c
.
t
.
**
{
*
;}
-
keep
class
com
.
tencent
.
map
.
geolocation
.
**
{
*
;}
-
keep
public
class
com
.
tencent
.
location
.
**
{
public
protected
*
;
}
-
keepclasseswithmembernames
class
*
{
native
<
methods
>
;
}
-
dontwarn
org
.
eclipse
.
jdt
.
annotation
.
**
-
dontwarn
c
.
t
.
**
app/src/main/AndroidManifest.xml
View file @
f6b90158
...
@@ -2,36 +2,38 @@
...
@@ -2,36 +2,38 @@
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"com.ccwangluo.accelerator"
>
package=
"com.ccwangluo.accelerator"
>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.CAMERA"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name=
"android.permission.REQUEST_INSTALL_PACKAGES"
/>
<uses-permission
android:name=
"android.permission.CHANGE_NETWORK_STATE"
/>
<uses-permission
android:name=
"android.permission.CHANGE_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.READ_PHONE_STATE"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission
android:name=
"android.permission.ACCESS_COARSE_LOCATION"
/>
<uses-permission
android:name=
"android.permission.CAMERA"
/>
<uses-permission
android:name=
"android.permission.REQUEST_INSTALL_PACKAGES"
/>
<uses-permission
android:name=
"android.permission.REQUEST_DELETE_PACKAGES"
/>
<uses-permission
android:name=
"android.permission.REQUEST_DELETE_PACKAGES"
/>
<!-- 通过GPS得到精确位置 -->
<uses-permission
android:name=
"android.permission.ACCESS_FINE_LOCATION"
/>
<!-- 通过网络得到粗略位置 -->
<uses-permission
android:name=
"android.permission.ACCESS_COARSE_LOCATION"
/>
<!-- 访问网络. 某些位置信息需要从网络服务器获取 -->
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<!-- 访问WiFi状态. 需要WiFi信息用于网络定位 -->
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<!-- 修改WiFi状态. 发起WiFi扫描, 需要WiFi信息用于网络定位 -->
<uses-permission
android:name=
"android.permission.CHANGE_WIFI_STATE"
/>
<!-- 访问网络状态, 检测网络的可用性. 需要网络运营商相关信息用于网络定位 -->
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission
android:name=
"android.permission.CHANGE_NETWORK_STATE"
/>
<!-- 访问手机当前状态, 需要device id用于网络定位 -->
<uses-permission
android:name=
"android.permission.READ_PHONE_STATE"
/>
<!-- 访问蓝牙状态,需要蓝牙信息用于网络定位 -->
<uses-permission
android:name=
"android.permission.BLUETOOTH"
/>
<uses-permission
android:name=
"android.permission.BLUETOOTH_ADMIN"
/>
<!-- 支持A-GPS辅助定位 -->
<uses-permission
android:name=
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
/>
<!-- 用于 log 日志 -->
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<queries>
<queries>
<package
android:name=
"com.tencent.mm"
/>
<package
android:name=
"com.tencent.mm"
/>
<package
android:name=
"com.tencent.mobileqq"
/>
<package
android:name=
"com.tencent.mobileqq"
/>
</queries>
</queries>
<application
<application
android:name=
".App"
android:name=
".App"
android:allowBackup=
"true"
android:allowBackup=
"true"
android:usesCleartextTraffic=
"true"
android:icon=
"@mipmap/tt_logo"
android:icon=
"@mipmap/tt_logo"
android:label=
"@string/app_name"
android:label=
"@string/app_name"
android:networkSecurityConfig=
"@xml/network_security_config"
android:networkSecurityConfig=
"@xml/network_security_config"
android:supportsRtl=
"true"
android:supportsRtl=
"true"
android:theme=
"@style/AppTheme"
>
android:theme=
"@style/AppTheme"
android:usesCleartextTraffic=
"true"
>
<activity
<activity
android:name=
".ui.MainActivity"
android:name=
".ui.MainActivity"
android:label=
"@string/app_name"
android:label=
"@string/app_name"
...
@@ -43,30 +45,33 @@
...
@@ -43,30 +45,33 @@
</intent-filter>
</intent-filter>
</activity>
</activity>
<meta-data
android:name=
"TencentMapSDK"
android:value=
"KZFBZ-QJ26J-WAYFC-FIO5N-FE453-QTFTT"
/>
<activity
<activity
android:name=
".wxapi.WXEntryActivity"
android:name=
".wxapi.WXEntryActivity"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:exported=
"true"
android:exported=
"true"
android:theme=
"@android:style/Theme.Translucent.NoTitleBar"
/>
android:theme=
"@android:style/Theme.Translucent.NoTitleBar"
/>
<!-- <provider -->
<!-- android:name="android.support.v4.content.FileProvider" -->
<!-- <provider-->
<!-- android:authorities="com.ccwangluo.accelerator.fileprovider" -->
<!-- android:name="android.support.v4.content.FileProvider"-->
<!-- android:exported="false" -->
<!-- android:authorities="com.ccwangluo.accelerator.fileprovider"-->
<!-- android:grantUriPermissions="true"> -->
<!-- android:exported="false"-->
<!-- <meta-data -->
<!-- android:grantUriPermissions="true">-->
<!-- android:name="android.support.FILE_PROVIDER_PATHS" -->
<!-- <meta-data-->
<!-- android:resource="@xml/filepaths"/> -->
<!-- android:name="android.support.FILE_PROVIDER_PATHS"-->
<!-- </provider> -->
<!-- android:resource="@xml/filepaths"/>-->
<!-- </provider>-->
<activity
<activity
android:name=
"com.tencent.tauth.AuthActivity"
android:name=
"com.tencent.tauth.AuthActivity"
android:
noHistory=
"true
"
android:
launchMode=
"singleTask
"
android:
launchMode=
"singleTask"
>
android:
noHistory=
"true"
>
<intent-filter>
<intent-filter>
<action
android:name=
"android.intent.action.VIEW"
/>
<action
android:name=
"android.intent.action.VIEW"
/>
<category
android:name=
"android.intent.category.DEFAULT"
/>
<category
android:name=
"android.intent.category.DEFAULT"
/>
<category
android:name=
"android.intent.category.BROWSABLE"
/>
<category
android:name=
"android.intent.category.BROWSABLE"
/>
<data
android:scheme=
"1212121"
/>
<data
android:scheme=
"1212121"
/>
</intent-filter>
</intent-filter>
</activity>
</activity>
...
@@ -74,44 +79,39 @@
...
@@ -74,44 +79,39 @@
android:name=
"com.tencent.connect.common.AssistActivity"
android:name=
"com.tencent.connect.common.AssistActivity"
android:configChanges=
"orientation|keyboardHidden"
android:configChanges=
"orientation|keyboardHidden"
android:screenOrientation=
"behind"
android:screenOrientation=
"behind"
android:theme=
"@android:style/Theme.Translucent.NoTitleBar"
/>
android:theme=
"@android:style/Theme.Translucent.NoTitleBar"
/>
<!-- <provider -->
<!-- <provider-->
<!-- android:authorities="${applicationId}.fileprovider" -->
<!-- android:authorities="${applicationId}.fileprovider"-->
<!-- android:name="android.support.v4.content.FileProvider" -->
<!-- android:name="android.support.v4.content.FileProvider"-->
<!-- android:exported="false" -->
<!-- android:exported="false"-->
<!-- android:grantUriPermissions="true" -->
<!-- android:grantUriPermissions="true"-->
<!-- > -->
<!-- >-->
<!-- <meta-data -->
<!-- <meta-data-->
<!-- android:name="android.support.FILE_PROVIDER_PATHS" -->
<!-- android:name="android.support.FILE_PROVIDER_PATHS"-->
<!-- android:resource="@xml/filepaths"/> -->
<!-- android:resource="@xml/filepaths"/>-->
<!-- </provider> -->
<!-- </provider>-->
<activity
<activity
android:name=
"com.chuanglan.shanyan_sdk.view.CmccLoginActivity"
android:name=
"com.chuanglan.shanyan_sdk.view.CmccLoginActivity"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:launchMode=
"singleTop"
android:launchMode=
"singleTop"
android:screenOrientation=
"behind"
android:screenOrientation=
"behind"
/>
/>
<activity-alias
<activity-alias
android:name=
"com.cmic.sso.sdk.view.LoginAuthActivity"
android:name=
"com.cmic.sso.sdk.view.LoginAuthActivity"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:launchMode=
"singleTop"
android:launchMode=
"singleTop"
android:screenOrientation=
"behind"
android:screenOrientation=
"behind"
android:targetActivity=
"com.chuanglan.shanyan_sdk.view.CmccLoginActivity"
android:targetActivity=
"com.chuanglan.shanyan_sdk.view.CmccLoginActivity"
/>
/>
<activity
<activity
android:name=
"com.chuanglan.shanyan_sdk.view.ShanYanOneKeyActivity"
android:name=
"com.chuanglan.shanyan_sdk.view.ShanYanOneKeyActivity"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:launchMode=
"singleTop"
android:launchMode=
"singleTop"
android:screenOrientation=
"behind"
android:screenOrientation=
"behind"
/>
/>
<activity
<activity
android:name=
"com.chuanglan.shanyan_sdk.view.CTCCPrivacyProtocolActivity"
android:name=
"com.chuanglan.shanyan_sdk.view.CTCCPrivacyProtocolActivity"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:launchMode=
"singleTop"
android:launchMode=
"singleTop"
android:screenOrientation=
"behind"
android:screenOrientation=
"behind"
/>
/>
</application>
</application>
</manifest>
</manifest>
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/App.kt
View file @
f6b90158
...
@@ -8,6 +8,7 @@ import com.ccwangluo.accelerator.ui.MainActivity
...
@@ -8,6 +8,7 @@ import com.ccwangluo.accelerator.ui.MainActivity
import
com.ccwangluo.accelerator.utils.PhoneUtils
import
com.ccwangluo.accelerator.utils.PhoneUtils
import
com.github.shadowsocks.Core
import
com.github.shadowsocks.Core
import
com.hjq.toast.ToastUtils
import
com.hjq.toast.ToastUtils
import
com.tencent.map.geolocation.TencentLocationManager
import
com.xuexiang.xpage.PageConfig
import
com.xuexiang.xpage.PageConfig
import
com.xuexiang.xpage.base.XPageActivity
import
com.xuexiang.xpage.base.XPageActivity
...
@@ -23,7 +24,6 @@ class App : Application(), androidx.work.Configuration.Provider by Core {
...
@@ -23,7 +24,6 @@ class App : Application(), androidx.work.Configuration.Provider by Core {
PhoneUtils
.
initSdk
(
this
)
PhoneUtils
.
initSdk
(
this
)
// 初始化 Toast 框架
// 初始化 Toast 框架
ToastUtils
.
init
(
this
)
ToastUtils
.
init
(
this
)
// UMConfigure.preInit()
MultiDex
.
install
(
this
)
MultiDex
.
install
(
this
)
Core
.
init
(
this
,
MainActivity
::
class
)
Core
.
init
(
this
,
MainActivity
::
class
)
}
}
...
...
app/src/main/java/com/ccwangluo/accelerator/model/UserProfile.kt
0 → 100644
View file @
f6b90158
package
com.ccwangluo.accelerator.model
data class
UserProfile
(
val
avatar
:
String
,
val
hasUnreadNotice
:
Boolean
,
val
username
:
String
,
val
vip
:
Boolean
,
val
vipExpireTime
:
String
)
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/ui/BottomNavigationFragment.kt
View file @
f6b90158
package
com.ccwangluo.accelerator.ui
package
com.ccwangluo.accelerator.ui
import
android.view.*
import
android.view.*
import
androidx.lifecycle.ViewModelProvider
import
androidx.viewpager.widget.ViewPager
import
androidx.viewpager.widget.ViewPager
import
com.ccwangluo.accelerator.databinding.FragmentBtnNavBinding
import
com.ccwangluo.accelerator.databinding.FragmentBtnNavBinding
import
com.ccwangluo.accelerator.ui.home.AccelertorFragment
import
com.ccwangluo.accelerator.ui.home.AccelertorFragment
import
com.ccwangluo.accelerator.ui.home.AccelertorViewModel
import
com.ccwangluo.accelerator.ui.home.MineFragment
import
com.ccwangluo.accelerator.ui.home.MineFragment
import
com.ccwangluo.accelerator.ui.home.NewsFragment
import
com.ccwangluo.accelerator.ui.home.NewsFragment
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.google.android.material.bottomnavigation.BottomNavigationView
import
com.google.android.material.bottomnavigation.BottomNavigationView
import
com.xuexiang.xpage.annotation.Page
import
com.xuexiang.xpage.annotation.Page
import
com.xuexiang.xpage.base.XPageFragment
import
com.xuexiang.xpage.base.XPageFragment
...
@@ -18,13 +21,16 @@ import com.xuexiang.xutil.common.CollectionUtils
...
@@ -18,13 +21,16 @@ import com.xuexiang.xutil.common.CollectionUtils
@Page
(
name
=
"主页"
)
@Page
(
name
=
"主页"
)
class
BottomNavigationFragment
:
XPageFragment
(),
ViewPager
.
OnPageChangeListener
,
class
BottomNavigationFragment
:
XPageFragment
(),
ViewPager
.
OnPageChangeListener
,
BottomNavigationView
.
OnNavigationItemSelectedListener
{
BottomNavigationView
.
OnNavigationItemSelectedListener
{
private
lateinit
var
accelertorViewModel
:
AccelertorViewModel
lateinit
var
binding
:
FragmentBtnNavBinding
lateinit
var
binding
:
FragmentBtnNavBinding
override
fun
inflateView
(
inflater
:
LayoutInflater
?,
container
:
ViewGroup
?):
View
{
override
fun
inflateView
(
inflater
:
LayoutInflater
?,
container
:
ViewGroup
?):
View
{
binding
=
FragmentBtnNavBinding
.
inflate
(
inflater
!!
,
container
,
false
)
binding
=
FragmentBtnNavBinding
.
inflate
(
inflater
!!
,
container
,
false
)
accelertorViewModel
=
ViewModelProvider
(
requireActivity
()).
get
(
AccelertorViewModel
::
class
.
java
)
return
binding
.
root
return
binding
.
root
}
}
override
fun
initTitleBar
():
TitleBar
?
{
override
fun
initTitleBar
():
TitleBar
?
{
//不使用@Page标注的一定要注意覆盖这个方法
//不使用@Page标注的一定要注意覆盖这个方法
return
null
return
null
...
@@ -55,7 +61,19 @@ class BottomNavigationFragment : XPageFragment(), ViewPager.OnPageChangeListener
...
@@ -55,7 +61,19 @@ class BottomNavigationFragment : XPageFragment(), ViewPager.OnPageChangeListener
override
fun
onHiddenChanged
(
hidden
:
Boolean
)
{
override
fun
onHiddenChanged
(
hidden
:
Boolean
)
{
super
.
onHiddenChanged
(
hidden
)
super
.
onHiddenChanged
(
hidden
)
if
(
hidden
)
{
getUserProfile
()
}
}
fun
getUserProfile
()
{
LoginUtils
.
token
?.
let
{
LoginUtils
.
getUserProfile
(
this
)
{
it
?.
let
{
accelertorViewModel
.
userProfile
.
postValue
(
it
)
}
}
}
}
}
override
fun
onPageScrolled
(
position
:
Int
,
positionOffset
:
Float
,
positionOffsetPixels
:
Int
)
{
override
fun
onPageScrolled
(
position
:
Int
,
positionOffset
:
Float
,
positionOffsetPixels
:
Int
)
{
...
...
app/src/main/java/com/ccwangluo/accelerator/ui/MainActivity.kt
View file @
f6b90158
...
@@ -3,8 +3,12 @@ package com.ccwangluo.accelerator.ui
...
@@ -3,8 +3,12 @@ package com.ccwangluo.accelerator.ui
import
android.Manifest
import
android.Manifest
import
android.content.Intent
import
android.content.Intent
import
android.os.Bundle
import
android.os.Bundle
import
android.os.Looper
import
android.view.KeyEvent
import
android.view.KeyEvent
import
androidx.lifecycle.ViewModelProvider
import
com.ccwangluo.accelerator.ui.dialog.PrivacyDialog
import
com.ccwangluo.accelerator.ui.dialog.PrivacyDialog
import
com.ccwangluo.accelerator.ui.home.AccelertorViewModel
import
com.ccwangluo.accelerator.ui.login.SplashFragment
import
com.ccwangluo.accelerator.utils.AcceleratorUtils
import
com.ccwangluo.accelerator.utils.AcceleratorUtils
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.ccwangluo.accelerator.utils.PhoneUtils
import
com.ccwangluo.accelerator.utils.PhoneUtils
...
@@ -17,6 +21,9 @@ import com.karumi.dexter.MultiplePermissionsReport
...
@@ -17,6 +21,9 @@ import com.karumi.dexter.MultiplePermissionsReport
import
com.karumi.dexter.PermissionToken
import
com.karumi.dexter.PermissionToken
import
com.karumi.dexter.listener.PermissionRequest
import
com.karumi.dexter.listener.PermissionRequest
import
com.karumi.dexter.listener.multi.MultiplePermissionsListener
import
com.karumi.dexter.listener.multi.MultiplePermissionsListener
import
com.tencent.map.geolocation.TencentLocation
import
com.tencent.map.geolocation.TencentLocationListener
import
com.tencent.map.geolocation.TencentLocationManager
import
com.tencent.mmkv.MMKV
import
com.tencent.mmkv.MMKV
import
com.tencent.tauth.Tencent
import
com.tencent.tauth.Tencent
import
com.umeng.socialize.UMShareAPI
import
com.umeng.socialize.UMShareAPI
...
@@ -24,7 +31,7 @@ import com.xuexiang.xpage.base.XPageActivity
...
@@ -24,7 +31,7 @@ import com.xuexiang.xpage.base.XPageActivity
import
com.xuexiang.xpage.core.PageOption
import
com.xuexiang.xpage.core.PageOption
class
MainActivity
()
:
XPageActivity
()
{
class
MainActivity
()
:
XPageActivity
()
,
TencentLocationListener
{
private
val
connect
=
registerForActivityResult
(
StartService
())
{
private
val
connect
=
registerForActivityResult
(
StartService
())
{
if
(
it
)
{
if
(
it
)
{
...
@@ -32,8 +39,12 @@ class MainActivity() : XPageActivity() {
...
@@ -32,8 +39,12 @@ class MainActivity() : XPageActivity() {
}
}
}
}
private
lateinit
var
accelertorViewModel
:
AccelertorViewModel
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
super
.
onCreate
(
savedInstanceState
)
accelertorViewModel
=
ViewModelProvider
(
this
).
get
(
AccelertorViewModel
::
class
.
java
)
MMKV
.
initialize
(
this
)
MMKV
.
initialize
(
this
)
initPhoneUtils
()
initPhoneUtils
()
//获取权限
//获取权限
...
@@ -41,11 +52,23 @@ class MainActivity() : XPageActivity() {
...
@@ -41,11 +52,23 @@ class MainActivity() : XPageActivity() {
.
withPermissions
(
.
withPermissions
(
Manifest
.
permission
.
READ_PHONE_STATE
,
Manifest
.
permission
.
READ_PHONE_STATE
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
,
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
,
Manifest
.
permission
.
ACCESS_FINE_LOCATION
)
)
.
withListener
(
object
:
MultiplePermissionsListener
{
.
withListener
(
object
:
MultiplePermissionsListener
{
override
fun
onPermissionsChecked
(
p0
:
MultiplePermissionsReport
?)
{
override
fun
onPermissionsChecked
(
p0
:
MultiplePermissionsReport
?)
{
println
(
p0
)
p0
?.
let
{
it
.
grantedPermissionResponses
.
forEach
{
if
(
it
.
permissionName
.
equals
(
Manifest
.
permission
.
ACCESS_FINE_LOCATION
))
{
TencentLocationManager
.
getInstance
(
this
@MainActivity
)
.
requestSingleFreshLocation
(
null
,
this
@MainActivity
,
Looper
.
getMainLooper
()
)
}
}
}
}
}
override
fun
onPermissionRationaleShouldBeShown
(
override
fun
onPermissionRationaleShouldBeShown
(
...
@@ -57,7 +80,7 @@ class MainActivity() : XPageActivity() {
...
@@ -57,7 +80,7 @@ class MainActivity() : XPageActivity() {
}
}
}).
check
()
}).
check
()
PageOption
.
to
(
BottomNavigation
Fragment
::
class
.
java
).
open
(
this
)
PageOption
.
to
(
Splash
Fragment
::
class
.
java
).
open
(
this
)
Tencent
.
setIsPermissionGranted
(
true
)
Tencent
.
setIsPermissionGranted
(
true
)
//隐私协议
//隐私协议
...
@@ -73,6 +96,7 @@ class MainActivity() : XPageActivity() {
...
@@ -73,6 +96,7 @@ class MainActivity() : XPageActivity() {
}
}
AcceleratorUtils
.
initConnect
(
this
,
connect
)
AcceleratorUtils
.
initConnect
(
this
,
connect
)
}
}
private
fun
initPhoneUtils
()
{
private
fun
initPhoneUtils
()
{
...
@@ -91,7 +115,6 @@ class MainActivity() : XPageActivity() {
...
@@ -91,7 +115,6 @@ class MainActivity() : XPageActivity() {
override
fun
onDestroy
()
{
override
fun
onDestroy
()
{
super
.
onDestroy
()
super
.
onDestroy
()
LoginUtils
.
clearToken
()
AcceleratorUtils
.
onDestroy
(
this
)
AcceleratorUtils
.
onDestroy
(
this
)
}
}
...
@@ -113,5 +136,13 @@ class MainActivity() : XPageActivity() {
...
@@ -113,5 +136,13 @@ class MainActivity() : XPageActivity() {
return
super
.
onKeyDown
(
keyCode
,
event
)
return
super
.
onKeyDown
(
keyCode
,
event
)
}
}
override
fun
onLocationChanged
(
p0
:
TencentLocation
?,
p1
:
Int
,
p2
:
String
?)
{
println
(
p0
)
}
override
fun
onStatusUpdate
(
p0
:
String
?,
p1
:
Int
,
p2
:
String
?)
{
println
(
p0
)
}
}
}
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/ui/dialog/CommonDialog.kt
View file @
f6b90158
...
@@ -54,4 +54,8 @@ class CommonDialog(
...
@@ -54,4 +54,8 @@ class CommonDialog(
return
this
return
this
}
}
init
{
mDialog
.
setCancelable
(
false
)
}
}
}
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/ui/dialog/MemberDialog.kt
View file @
f6b90158
...
@@ -32,6 +32,9 @@ class MemberDialog(
...
@@ -32,6 +32,9 @@ class MemberDialog(
fragment
.
openPage
(
CommonWebViewFragment
::
class
.
java
,
params
)
fragment
.
openPage
(
CommonWebViewFragment
::
class
.
java
,
params
)
}
}
}
}
init
{
mDialog
.
setCancelable
(
false
)
}
}
}
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/ui/dialog/PrivacyDialog.kt
View file @
f6b90158
...
@@ -42,6 +42,7 @@ class PrivacyDialog(
...
@@ -42,6 +42,7 @@ class PrivacyDialog(
val
container
=
findViewById
<
FrameLayout
>(
R
.
id
.
privacy_webview
)
val
container
=
findViewById
<
FrameLayout
>(
R
.
id
.
privacy_webview
)
val
agentWeb
=
val
agentWeb
=
createAgentWeb
(
xPageActivity
,
container
,
privacy_url
)
createAgentWeb
(
xPageActivity
,
container
,
privacy_url
)
mDialog
.
setCancelable
(
false
)
}
}
fun
createAgentWeb
(
xPageActivity
:
XPageActivity
,
viewGroup
:
ViewGroup
,
url
:
String
):
AgentWeb
{
fun
createAgentWeb
(
xPageActivity
:
XPageActivity
,
viewGroup
:
ViewGroup
,
url
:
String
):
AgentWeb
{
...
...
app/src/main/java/com/ccwangluo/accelerator/ui/home/AccelertorFragment.kt
View file @
f6b90158
package
com.ccwangluo.accelerator.ui.home
package
com.ccwangluo.accelerator.ui.home
import
android.graphics.Color
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.view.View
import
android.view.View
import
android.view.ViewGroup
import
android.view.ViewGroup
...
@@ -9,11 +10,12 @@ import android.view.animation.RotateAnimation
...
@@ -9,11 +10,12 @@ import android.view.animation.RotateAnimation
import
androidx.lifecycle.ViewModelProvider
import
androidx.lifecycle.ViewModelProvider
import
com.ccwangluo.accelerator.R
import
com.ccwangluo.accelerator.R
import
com.ccwangluo.accelerator.databinding.FragmentQuickBinding
import
com.ccwangluo.accelerator.databinding.FragmentQuickBinding
import
com.ccwangluo.accelerator.ui.dialog.CommonDialog
import
com.ccwangluo.accelerator.ui.dialog.CommonDialog
import
com.ccwangluo.accelerator.ui.dialog.MemberDialog
import
com.ccwangluo.accelerator.utils.AcceleratorUtils
import
com.ccwangluo.accelerator.utils.AcceleratorUtils
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.ccwangluo.accelerator.utils.SysUtils
import
com.ccwangluo.accelerator.utils.SysUtils
import
com.ccwangluo.cc_quickly.utils.SettingSPUtils
import
com.github.shadowsocks.bg.BaseService
import
com.github.shadowsocks.bg.BaseService
import
com.hjq.toast.ToastUtils
import
com.hjq.toast.ToastUtils
import
com.xuexiang.xpage.base.XPageFragment
import
com.xuexiang.xpage.base.XPageFragment
...
@@ -79,12 +81,30 @@ class AccelertorFragment : XPageFragment() {
...
@@ -79,12 +81,30 @@ class AccelertorFragment : XPageFragment() {
if
(
it
.
delay
!=
-
1
)
{
if
(
it
.
delay
!=
-
1
)
{
binding
.
netQuality
.
setText
(
SysUtils
.
getnetQuality
(
it
.
delay
))
binding
.
netQuality
.
setText
(
SysUtils
.
getnetQuality
(
it
.
delay
))
}
}
binding
.
activeNetwork
.
setText
(
SysUtils
.
getActiveNet
())
if
(
SettingSPUtils
.
isSmartAccOpen
)
{
binding
.
smartAccOpen
.
setText
(
"已开启"
)
binding
.
smartAccOpen
.
setTextColor
(
resources
.
getColor
(
R
.
color
.
open_acc_enable
))
binding
.
smartAccOpenBtn
.
visibility
=
View
.
GONE
}
else
{
binding
.
smartAccOpen
.
setText
(
"未开启 >"
)
binding
.
smartAccOpen
.
setTextColor
(
resources
.
getColor
(
R
.
color
.
white
))
binding
.
smartAccOpenBtn
.
visibility
=
View
.
VISIBLE
}
})
})
accelertorViewModel
.
accState
.
observe
(
this
,
{
accelertorViewModel
.
accState
.
observe
(
this
,
{
freshData
(
it
,
acc_timer
)
freshData
(
it
,
acc_timer
)
})
})
accelertorViewModel
.
userProfile
.
observe
(
this
,{
if
(
it
.
hasUnreadNotice
)
{
binding
.
iconNoticeBadge
.
visibility
=
View
.
VISIBLE
}
else
{
binding
.
iconNoticeBadge
.
visibility
=
View
.
GONE
}
})
}
}
override
fun
initListeners
()
{
override
fun
initListeners
()
{
...
@@ -110,12 +130,12 @@ class AccelertorFragment : XPageFragment() {
...
@@ -110,12 +130,12 @@ class AccelertorFragment : XPageFragment() {
return
@setOnClickListener
return
@setOnClickListener
}
}
}
}
//
if (!LoginUtils.hasToken()) {
if
(!
LoginUtils
.
hasToken
())
{
//
LoginUtils.login(this, {
LoginUtils
.
login
(
this
,
{
//
//
})
})
//
return@setOnClickListener
return
@setOnClickListener
//
}
}
if
(!
SysUtils
.
getConnectivityStatus
())
{
if
(!
SysUtils
.
getConnectivityStatus
())
{
binding
.
quickTopToast
.
visibility
=
View
.
VISIBLE
binding
.
quickTopToast
.
visibility
=
View
.
VISIBLE
...
@@ -125,25 +145,30 @@ class AccelertorFragment : XPageFragment() {
...
@@ -125,25 +145,30 @@ class AccelertorFragment : XPageFragment() {
},
2000
)
},
2000
)
return
@setOnClickListener
return
@setOnClickListener
}
}
// TODO: 2022/2/16 是否安装了这个包
//用户是否有使用时长
//用户是否有使用时长
// if (){
LoginUtils
.
getUserHasTimer
(
this
)
{
// MemberDialog(this).show<MemberDialog>()
if
(
it
)
{
// return@setOnClickListener
binding
.
btnQuick
.
isEnabled
=
false
// }
//
AcceleratorUtils
.
startAccelerator
()
AcceleratorUtils
.
startAccelerator
()
startAnim
()
startAnim
()
}
else
{
MemberDialog
(
this
).
show
<
MemberDialog
>()
}
}
}
}
}
}
override
fun
onResume
()
{
override
fun
onResume
()
{
super
.
onResume
()
super
.
onResume
()
AcceleratorUtils
.
registerStateListener
({
state
,
l
,
net
->
AcceleratorUtils
.
registerStateListener
{
state
,
l
,
net
->
net
?.
let
{
accelertorViewModel
.
netState
.
postValue
(
net
)
accelertorViewModel
.
netState
.
postValue
(
net
)
}
acc_timer
=
l
acc_timer
=
l
accelertorViewModel
.
accState
.
postValue
(
state
)
accelertorViewModel
.
accState
.
postValue
(
state
)
}
)
}
}
}
fun
freshData
(
state
:
BaseService
.
State
,
time
:
Long
)
{
fun
freshData
(
state
:
BaseService
.
State
,
time
:
Long
)
{
...
@@ -159,6 +184,18 @@ class AccelertorFragment : XPageFragment() {
...
@@ -159,6 +184,18 @@ class AccelertorFragment : XPageFragment() {
binding
.
progressViewCircleSmall
.
progress
=
0F
binding
.
progressViewCircleSmall
.
progress
=
0F
binding
.
btnQuick
.
setBackgroundResource
(
R
.
mipmap
.
quick_start
)
binding
.
btnQuick
.
setBackgroundResource
(
R
.
mipmap
.
quick_start
)
}
}
}
fun
getUserProfile
()
{
LoginUtils
.
token
?.
let
{
LoginUtils
.
getUserProfile
(
this
)
{
it
?.
let
{
accelertorViewModel
.
userProfile
.
postValue
(
it
)
}
}
}
}
}
override
fun
onPause
()
{
override
fun
onPause
()
{
...
@@ -167,6 +204,7 @@ class AccelertorFragment : XPageFragment() {
...
@@ -167,6 +204,7 @@ class AccelertorFragment : XPageFragment() {
}
}
fun
stopAnim
()
{
fun
stopAnim
()
{
binding
.
btnQuick
.
isEnabled
=
true
binding
.
progressViewCircleSmall
.
stopProgressAnimation
()
binding
.
progressViewCircleSmall
.
stopProgressAnimation
()
binding
.
progressViewCircleSmall
.
setProgressTextVisibility
(
false
)
binding
.
progressViewCircleSmall
.
setProgressTextVisibility
(
false
)
binding
.
gamePicOut
.
clearAnimation
()
binding
.
gamePicOut
.
clearAnimation
()
...
@@ -201,6 +239,13 @@ class AccelertorFragment : XPageFragment() {
...
@@ -201,6 +239,13 @@ class AccelertorFragment : XPageFragment() {
return
rotate
return
rotate
}
}
override
fun
setUserVisibleHint
(
isVisibleToUser
:
Boolean
)
{
super
.
setUserVisibleHint
(
isVisibleToUser
)
if
(
isVisibleToUser
)
{
getUserProfile
()
}
}
companion
object
{
companion
object
{
fun
newInstance
():
AccelertorFragment
{
fun
newInstance
():
AccelertorFragment
{
val
fragment
=
AccelertorFragment
()
val
fragment
=
AccelertorFragment
()
...
...
app/src/main/java/com/ccwangluo/accelerator/ui/home/AccelertorViewModel.kt
View file @
f6b90158
...
@@ -3,9 +3,14 @@ package com.ccwangluo.accelerator.ui.home
...
@@ -3,9 +3,14 @@ package com.ccwangluo.accelerator.ui.home
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.ViewModel
import
androidx.lifecycle.ViewModel
import
androidx.lifecycle.viewModelScope
import
androidx.lifecycle.viewModelScope
import
com.ccwangluo.accelerator.model.LoginRes
import
com.ccwangluo.accelerator.model.NetState
import
com.ccwangluo.accelerator.model.NetState
import
com.ccwangluo.accelerator.model.UserProfile
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.ccwangluo.accelerator.utils.SysUtils
import
com.ccwangluo.accelerator.utils.SysUtils
import
com.ccwangluo.accelerator.utils.http.HttpGo
import
com.github.shadowsocks.bg.BaseService
import
com.github.shadowsocks.bg.BaseService
import
com.hjq.toast.ToastUtils
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.launch
...
@@ -17,6 +22,9 @@ class AccelertorViewModel : ViewModel() {
...
@@ -17,6 +22,9 @@ class AccelertorViewModel : ViewModel() {
//网络状态
//网络状态
var
netState
=
MutableLiveData
<
NetState
>()
var
netState
=
MutableLiveData
<
NetState
>()
//加速状态
var
accState
=
MutableLiveData
<
BaseService
.
State
>()
var
accState
=
MutableLiveData
<
BaseService
.
State
>()
var
userProfile
=
MutableLiveData
<
UserProfile
>()
}
}
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/ui/home/MineFragment.kt
View file @
f6b90158
...
@@ -7,6 +7,7 @@ import android.widget.FrameLayout
...
@@ -7,6 +7,7 @@ import android.widget.FrameLayout
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
com.ccwangluo.accelerator.databinding.FragmentMineBinding
import
com.ccwangluo.accelerator.databinding.FragmentMineBinding
import
com.ccwangluo.accelerator.ui.web.AndroidInterface
import
com.ccwangluo.accelerator.ui.web.AndroidInterface
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.ccwangluo.accelerator.utils.http.HttpConfig
import
com.ccwangluo.accelerator.utils.http.HttpConfig
import
com.just.agentweb.core.AgentWeb
import
com.just.agentweb.core.AgentWeb
import
com.just.agentweb.core.client.DefaultWebClient
import
com.just.agentweb.core.client.DefaultWebClient
...
@@ -30,8 +31,12 @@ class MineFragment : XPageFragment() {
...
@@ -30,8 +31,12 @@ class MineFragment : XPageFragment() {
}
}
override
fun
initViews
()
{
override
fun
initViews
()
{
var
weburl
=
HttpConfig
.
UI_MAIN_URL
LoginUtils
.
token
?.
let
{
weburl
=
weburl
+
"?token=$it"
}
val
agentWeb
=
val
agentWeb
=
createAgentWeb
(
this
,
binding
.
mineWebview
,
HttpConfig
.
UI_MAIN_URL
)
createAgentWeb
(
this
,
binding
.
mineWebview
,
weburl
)
agentWeb
.
getJsInterfaceHolder
().
addJavaObject
(
"android"
,
AndroidInterface
(
this
,
agentWeb
))
agentWeb
.
getJsInterfaceHolder
().
addJavaObject
(
"android"
,
AndroidInterface
(
this
,
agentWeb
))
}
}
...
@@ -63,6 +68,15 @@ class MineFragment : XPageFragment() {
...
@@ -63,6 +68,15 @@ class MineFragment : XPageFragment() {
.
go
(
url
)
.
go
(
url
)
}
}
override
fun
setUserVisibleHint
(
isVisibleToUser
:
Boolean
)
{
super
.
setUserVisibleHint
(
isVisibleToUser
)
if
(
isVisibleToUser
)
{
LoginUtils
.
token
?.
let
{
// TODO: 2022/2/16 调用h5 设置token
}
}
}
override
fun
onPause
()
{
override
fun
onPause
()
{
agentWeb
?.
getWebLifeCycle
()
?.
onPause
()
agentWeb
?.
getWebLifeCycle
()
?.
onPause
()
super
.
onPause
()
super
.
onPause
()
...
...
app/src/main/java/com/ccwangluo/accelerator/ui/home/NewsFragment.kt
View file @
f6b90158
...
@@ -29,7 +29,6 @@ class NewsFragment : XPageFragment() {
...
@@ -29,7 +29,6 @@ class NewsFragment : XPageFragment() {
val
titles
=
arrayOf
(
"动态"
,
"攻略"
,
"视频"
,
"评价"
,
"问答"
)
val
titles
=
arrayOf
(
"动态"
,
"攻略"
,
"视频"
,
"评价"
,
"问答"
)
var
adapter
:
DemoCollectionAdapter
?
=
null
var
adapter
:
DemoCollectionAdapter
?
=
null
override
fun
initViews
()
{
override
fun
initViews
()
{
newsViewModel
.
refreshState
.
observe
(
this
,
{
newsViewModel
.
refreshState
.
observe
(
this
,
{
if
(!
it
)
{
if
(!
it
)
{
binding
.
refreshLayout
.
isRefreshing
=
false
binding
.
refreshLayout
.
isRefreshing
=
false
...
...
app/src/main/java/com/ccwangluo/accelerator/ui/login/LoginViewModel.kt
View file @
f6b90158
...
@@ -22,7 +22,7 @@ class LoginViewModel : ViewModel() {
...
@@ -22,7 +22,7 @@ class LoginViewModel : ViewModel() {
map
.
put
(
"phone"
,
phone
)
map
.
put
(
"phone"
,
phone
)
map
.
put
(
"verifyCode"
,
authCdoe
)
map
.
put
(
"verifyCode"
,
authCdoe
)
viewModelScope
.
launch
(
Dispatchers
.
IO
)
{
viewModelScope
.
launch
(
Dispatchers
.
IO
)
{
val
res
=
HttpGo
.
postSync
<
LoginRes
>(
"/user/verifyCode/login"
,
map
)
val
res
=
HttpGo
.
postSync
<
LoginRes
>(
"/
api/
user/verifyCode/login"
,
map
)
res
?.
let
{
res
?.
let
{
if
(
it
.
code
==
200
)
{
if
(
it
.
code
==
200
)
{
LoginUtils
.
token
=
it
.
data
?.
token
LoginUtils
.
token
=
it
.
data
?.
token
...
@@ -39,7 +39,7 @@ class LoginViewModel : ViewModel() {
...
@@ -39,7 +39,7 @@ class LoginViewModel : ViewModel() {
val
map
=
mutableMapOf
<
String
,
String
>()
val
map
=
mutableMapOf
<
String
,
String
>()
map
.
put
(
"phone"
,
phone
)
map
.
put
(
"phone"
,
phone
)
viewModelScope
.
launch
(
Dispatchers
.
IO
)
{
viewModelScope
.
launch
(
Dispatchers
.
IO
)
{
val
res
=
HttpGo
.
postSync
<
Boolean
>(
"/user/sendSms"
,
map
)
val
res
=
HttpGo
.
postSync
<
Boolean
>(
"/
api/
user/sendSms"
,
map
)
res
?.
let
{
res
?.
let
{
if
(
it
.
code
==
200
)
{
if
(
it
.
code
==
200
)
{
sendCodeState
.
postValue
(
true
)
sendCodeState
.
postValue
(
true
)
...
...
app/src/main/java/com/ccwangluo/accelerator/ui/login/PhoneLoginFragment.kt
View file @
f6b90158
...
@@ -23,14 +23,13 @@ import java.util.regex.Pattern
...
@@ -23,14 +23,13 @@ import java.util.regex.Pattern
* Use the [PhoneLoginFragment.newInstance] factory method to
* Use the [PhoneLoginFragment.newInstance] factory method to
* create an instance of this fragment.
* create an instance of this fragment.
*/
*/
@Page
(
name
=
"
登录
"
)
@Page
(
name
=
"
login
"
)
class
PhoneLoginFragment
:
XPageFragment
()
{
class
PhoneLoginFragment
:
XPageFragment
()
{
override
fun
initTitleBar
():
TitleBar
?
{
override
fun
initTitleBar
():
TitleBar
?
{
return
null
return
null
}
}
private
val
mHandler
:
Handler
=
Handler
(
Looper
.
getMainLooper
());
private
var
mCountTime
=
60
private
var
mCountTime
=
60
private
lateinit
var
loginViewModel
:
LoginViewModel
private
lateinit
var
loginViewModel
:
LoginViewModel
...
...
app/src/main/java/com/ccwangluo/accelerator/ui/login/SplashFragment.kt
0 → 100644
View file @
f6b90158
package
com.ccwangluo.accelerator.ui.login
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.lifecycle.lifecycleScope
import
com.ccwangluo.accelerator.databinding.FragmentSplashBinding
import
com.ccwangluo.accelerator.ui.BottomNavigationFragment
import
com.tencent.map.geolocation.TencentLocationManager
import
com.xuexiang.xpage.annotation.Page
import
com.xuexiang.xpage.base.XPageFragment
import
com.xuexiang.xpage.core.PageOption
import
com.xuexiang.xpage.utils.TitleBar
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
@Page
(
name
=
"splash"
)
class
SplashFragment
:
XPageFragment
()
{
override
fun
initTitleBar
():
TitleBar
?
{
return
null
}
override
fun
inflateView
(
inflater
:
LayoutInflater
?,
container
:
ViewGroup
?):
View
{
val
inflate
=
FragmentSplashBinding
.
inflate
(
inflater
!!
,
container
,
false
)
return
inflate
.
root
}
override
fun
initViews
()
{
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
delay
(
1000
)
withContext
(
Dispatchers
.
Main
)
{
openPage
(
BottomNavigationFragment
::
class
.
java
,
false
)
}
}
TencentLocationManager
.
getInstance
(
context
)
}
override
fun
initListeners
()
{
}
}
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/ui/web/AndroidInterface.kt
View file @
f6b90158
...
@@ -7,6 +7,8 @@ import android.webkit.JavascriptInterface
...
@@ -7,6 +7,8 @@ import android.webkit.JavascriptInterface
import
androidx.core.content.ContextCompat.checkSelfPermission
import
androidx.core.content.ContextCompat.checkSelfPermission
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.ccwangluo.accelerator.utils.SysUtils
import
com.ccwangluo.accelerator.utils.SysUtils
import
com.ccwangluo.accelerator.utils.http.HttpConfig
import
com.ccwangluo.cc_quickly.utils.SettingSPUtils
import
com.ccwangluo.cc_quickly.utils.XToastUtils
import
com.ccwangluo.cc_quickly.utils.XToastUtils
import
com.just.agentweb.core.AgentWeb
import
com.just.agentweb.core.AgentWeb
import
com.karumi.dexter.Dexter
import
com.karumi.dexter.Dexter
...
@@ -15,6 +17,8 @@ import com.karumi.dexter.PermissionToken
...
@@ -15,6 +17,8 @@ import com.karumi.dexter.PermissionToken
import
com.karumi.dexter.listener.PermissionRequest
import
com.karumi.dexter.listener.PermissionRequest
import
com.karumi.dexter.listener.multi.MultiplePermissionsListener
import
com.karumi.dexter.listener.multi.MultiplePermissionsListener
import
com.xuexiang.xpage.base.XPageFragment
import
com.xuexiang.xpage.base.XPageFragment
import
com.xuexiang.xutil.app.AppUtils
import
com.xuexiang.xutil.system.PermissionUtils
/**
/**
...
@@ -40,7 +44,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
...
@@ -40,7 +44,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
@JavascriptInterface
@JavascriptInterface
fun
openWebview
(
url
:
String
)
{
fun
openWebview
(
url
:
String
)
{
val
params
=
Bundle
()
val
params
=
Bundle
()
params
.
putString
(
CommonWebViewFragment
.
WEBVIEW_URL_KEY
,
url
)
params
.
putString
(
CommonWebViewFragment
.
WEBVIEW_URL_KEY
,
HttpConfig
.
UI_MAIN_URL
+
url
)
xPageFragment
.
openPage
(
CommonWebViewFragment
::
class
.
java
,
params
)
xPageFragment
.
openPage
(
CommonWebViewFragment
::
class
.
java
,
params
)
}
}
...
@@ -54,6 +58,22 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
...
@@ -54,6 +58,22 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
})
})
}
}
/**
* 智能极限加速
*/
@JavascriptInterface
fun
setSmartAccOpen
(
isopen
:
Boolean
)
{
SettingSPUtils
.
isSmartAccOpen
=
isopen
}
/**
* 清除token
*/
@JavascriptInterface
fun
clearToken
()
{
LoginUtils
.
clearToken
()
}
/**
/**
* 检查权限
* 检查权限
...
@@ -61,6 +81,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
...
@@ -61,6 +81,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
@JavascriptInterface
@JavascriptInterface
fun
getPermissionState
(
key
:
String
,
callback
:
String
)
{
fun
getPermissionState
(
key
:
String
,
callback
:
String
)
{
xPageFragment
.
context
?.
let
{
xPageFragment
.
context
?.
let
{
PermissionUtils
.
openAppSettings
()
val
hasPermission
:
Boolean
=
if
(
checkSelfPermission
(
it
,
key
)
>
0
)
true
else
false
val
hasPermission
:
Boolean
=
if
(
checkSelfPermission
(
it
,
key
)
>
0
)
true
else
false
agentWeb
.
getJsAccessEntrace
()
agentWeb
.
getJsAccessEntrace
()
.
quickCallJs
(
callback
,
key
,
hasPermission
.
toString
())
.
quickCallJs
(
callback
,
key
,
hasPermission
.
toString
())
...
@@ -107,7 +128,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
...
@@ -107,7 +128,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
@JavascriptInterface
@JavascriptInterface
fun
getPackageState
(
packageName
:
String
,
callback
:
String
)
{
fun
getPackageState
(
packageName
:
String
,
callback
:
String
)
{
xPageFragment
.
context
?.
let
{
xPageFragment
.
context
?.
let
{
val
packageInstall
=
SysUtils
.
isPackageInstall
(
it
,
packageName
)
val
packageInstall
=
AppUtils
.
isInstallApp
(
packageName
)
agentWeb
.
getJsAccessEntrace
()
agentWeb
.
getJsAccessEntrace
()
.
quickCallJs
(
callback
,
packageName
,
packageInstall
.
toString
())
.
quickCallJs
(
callback
,
packageName
,
packageInstall
.
toString
())
}
}
...
@@ -118,16 +139,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
...
@@ -118,16 +139,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
*/
*/
@JavascriptInterface
@JavascriptInterface
fun
uninstallPackge
(
pageName
:
String
)
{
fun
uninstallPackge
(
pageName
:
String
)
{
xPageFragment
.
context
?.
let
{
AppUtils
.
uninstallApp
(
pageName
)
//创建Intent意图
val
intent
=
Intent
(
Intent
.
ACTION_DELETE
)
//通过程序的包名创建URL
val
packageURI
=
Uri
.
parse
(
"package:${pageName}"
)
//设置Uri
intent
.
setData
(
packageURI
)
//卸载程序
it
.
startActivity
(
intent
)
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/ui/web/CommonWebViewFragment.kt
View file @
f6b90158
...
@@ -7,15 +7,21 @@ import android.view.ViewGroup
...
@@ -7,15 +7,21 @@ import android.view.ViewGroup
import
android.widget.FrameLayout
import
android.widget.FrameLayout
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
com.ccwangluo.accelerator.databinding.FragmentWebviewBinding
import
com.ccwangluo.accelerator.databinding.FragmentWebviewBinding
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.just.agentweb.core.AgentWeb
import
com.just.agentweb.core.AgentWeb
import
com.just.agentweb.core.client.DefaultWebClient
import
com.just.agentweb.core.client.DefaultWebClient
import
com.xuexiang.xpage.annotation.Page
import
com.xuexiang.xpage.annotation.Page
import
com.xuexiang.xpage.base.XPageFragment
import
com.xuexiang.xpage.base.XPageFragment
import
com.xuexiang.xpage.utils.TitleBar
@Page
(
name
=
"webview"
)
@Page
(
name
=
"webview"
)
class
CommonWebViewFragment
:
XPageFragment
()
{
class
CommonWebViewFragment
:
XPageFragment
()
{
override
fun
initTitleBar
():
TitleBar
?
{
return
null
}
var
agentWeb
:
AgentWeb
?
=
null
var
agentWeb
:
AgentWeb
?
=
null
lateinit
var
binding
:
FragmentWebviewBinding
lateinit
var
binding
:
FragmentWebviewBinding
override
fun
inflateView
(
inflater
:
LayoutInflater
?,
container
:
ViewGroup
?):
View
{
override
fun
inflateView
(
inflater
:
LayoutInflater
?,
container
:
ViewGroup
?):
View
{
...
@@ -25,8 +31,19 @@ class CommonWebViewFragment : XPageFragment() {
...
@@ -25,8 +31,19 @@ class CommonWebViewFragment : XPageFragment() {
override
fun
initViews
()
{
override
fun
initViews
()
{
val
url
=
arguments
?.
getString
(
WEBVIEW_URL_KEY
)
val
url
=
arguments
?.
getString
(
WEBVIEW_URL_KEY
)
agentWeb
=
agentWeb
=
url
?.
let
{
createAgentWeb
(
this
,
binding
.
commonWebview
,
it
)
}
url
?.
let
{
var
weburl
=
it
LoginUtils
.
token
?.
let
{
if
(
weburl
.
contains
(
"?"
)){
weburl
=
weburl
+
"&token=$it"
}
else
{
weburl
=
weburl
+
"?token=$it"
}
}
createAgentWeb
(
this
,
binding
.
commonWebview
,
weburl
)
}
agentWeb
?.
getJsInterfaceHolder
()
agentWeb
?.
getJsInterfaceHolder
()
?.
addJavaObject
(
"android"
,
AndroidInterface
(
this
,
agentWeb
!!
))
?.
addJavaObject
(
"android"
,
AndroidInterface
(
this
,
agentWeb
!!
))
}
}
...
...
app/src/main/java/com/ccwangluo/accelerator/utils/AcceleratorUtils.kt
View file @
f6b90158
...
@@ -14,10 +14,9 @@ import com.github.shadowsocks.aidl.ShadowsocksConnection
...
@@ -14,10 +14,9 @@ import com.github.shadowsocks.aidl.ShadowsocksConnection
import
com.github.shadowsocks.bg.BaseService
import
com.github.shadowsocks.bg.BaseService
import
com.github.shadowsocks.database.ProfileManager
import
com.github.shadowsocks.database.ProfileManager
import
com.xuexiang.xutil.net.NetworkUtils
import
com.xuexiang.xutil.net.NetworkUtils
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.*
import
kotlinx.coroutines.GlobalScope
import
java.util.concurrent.Executors
import
kotlinx.coroutines.delay
import
java.util.concurrent.TimeUnit
import
kotlinx.coroutines.launch
/**
/**
...
@@ -40,16 +39,17 @@ object AcceleratorUtils {
...
@@ -40,16 +39,17 @@ object AcceleratorUtils {
//加速后延迟
//加速后延迟
var
acc_net
=
-
1
var
acc_net
=
-
1
var
netState
=
NetState
(-
1
,
-
1
,
-
1
,
"0"
)
private
val
preStateList
=
mutableListOf
<
NetState
>()
//
var
count
=
0
// 加速时长
// 加速时长
var
ACC_TIME
=
0L
var
ACC_TIME
=
0L
var
stateListener
:
(
BaseService
.
State
,
Long
,
NetState
)
->
Unit
=
{
state
,
l
,
net
->
var
stateListener
:
(
BaseService
.
State
,
Long
,
NetState
?
)
->
Unit
=
{
state
,
l
,
net
->
}
}
fun
initConnect
(
context
:
AppCompatActivity
,
connect
:
ActivityResultLauncher
<
Void
?
>)
{
fun
initConnect
(
context
:
AppCompatActivity
,
connect
:
ActivityResultLauncher
<
Void
?
>)
{
this
.
context
=
context
this
.
context
=
context
this
.
connect
=
connect
this
.
connect
=
connect
...
@@ -60,13 +60,25 @@ object AcceleratorUtils {
...
@@ -60,13 +60,25 @@ object AcceleratorUtils {
val
net
=
SysUtils
.
getNetPing
(
"10.3.0.34"
)
val
net
=
SysUtils
.
getNetPing
(
"10.3.0.34"
)
if
(
state
!=
BaseService
.
State
.
Connected
)
{
if
(
state
!=
BaseService
.
State
.
Connected
)
{
pre_net
=
net
.
delay
pre_net
=
net
.
delay
acc_net
=
-
1
}
else
{
}
else
{
net
.
accNetDelay
=
if
(
net
.
delay
>
pre_net
)
pre_net
else
net
.
delay
acc_net
=
if
(
net
.
delay
>
pre_net
)
pre_net
else
net
.
delay
LoginUtils
.
getUserHasTimer
{
if
(!
it
)
{
//没有加速时长关闭服务
stopAccelerator
()
}
}
}
}
net
.
preNetDelay
=
pre_net
net
.
preNetDelay
=
pre_net
net
State
=
net
net
.
accNetDelay
=
acc_
net
stateListener
(
state
,
getAccTime
(),
net
)
stateListener
(
state
,
getAccTime
(),
net
)
delay
(
2000
)
delay
(
1000
)
}
}
context
.
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
while
(
true
)
{
stateListener
(
state
,
getAccTime
(),
null
)
delay
(
1000
)
}
}
}
}
}
}
...
@@ -75,9 +87,9 @@ object AcceleratorUtils {
...
@@ -75,9 +87,9 @@ object AcceleratorUtils {
connect
.
launch
(
null
)
connect
.
launch
(
null
)
}
}
fun
registerStateListener
(
listener
:
(
BaseService
.
State
,
Long
,
NetState
)
->
Unit
)
{
fun
registerStateListener
(
listener
:
(
BaseService
.
State
,
Long
,
NetState
?
)
->
Unit
)
{
stateListener
=
listener
stateListener
=
listener
stateListener
(
state
,
getAccTime
(),
n
etState
)
stateListener
(
state
,
getAccTime
(),
n
ull
)
}
}
fun
unRegisterStateListener
()
{
fun
unRegisterStateListener
()
{
...
@@ -93,10 +105,10 @@ object AcceleratorUtils {
...
@@ -93,10 +105,10 @@ object AcceleratorUtils {
private
val
shadowsocksConnection
=
object
:
ShadowsocksConnection
.
Callback
{
private
val
shadowsocksConnection
=
object
:
ShadowsocksConnection
.
Callback
{
override
fun
stateChanged
(
state
:
BaseService
.
State
,
profileName
:
String
?,
msg
:
String
?)
{
override
fun
stateChanged
(
state
:
BaseService
.
State
,
profileName
:
String
?,
msg
:
String
?)
{
AcceleratorUtils
.
state
=
state
AcceleratorUtils
.
state
=
state
if
(
state
==
BaseService
.
State
.
Connected
)
{
if
(
state
==
BaseService
.
State
.
Connected
)
{
ACC_TIME
=
System
.
currentTimeMillis
()
ACC_TIME
=
System
.
currentTimeMillis
()
}
}
stateListener
(
state
,
getAccTime
(),
n
etState
)
stateListener
(
state
,
getAccTime
(),
n
ull
)
}
}
override
fun
onServiceConnected
(
service
:
IShadowsocksService
)
{
override
fun
onServiceConnected
(
service
:
IShadowsocksService
)
{
...
@@ -105,7 +117,7 @@ object AcceleratorUtils {
...
@@ -105,7 +117,7 @@ object AcceleratorUtils {
}
catch
(
_
:
RemoteException
)
{
}
catch
(
_
:
RemoteException
)
{
state
=
BaseService
.
State
.
Idle
state
=
BaseService
.
State
.
Idle
}
}
stateListener
(
state
,
getAccTime
(),
n
etState
)
stateListener
(
state
,
getAccTime
(),
n
ull
)
}
}
override
fun
onBinderDied
()
{
override
fun
onBinderDied
()
{
...
...
app/src/main/java/com/ccwangluo/accelerator/utils/LoginUtils.kt
View file @
f6b90158
...
@@ -2,7 +2,9 @@ package com.ccwangluo.accelerator.utils
...
@@ -2,7 +2,9 @@ package com.ccwangluo.accelerator.utils
import
android.content.Context
import
android.content.Context
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.viewModelScope
import
com.ccwangluo.accelerator.model.LoginRes
import
com.ccwangluo.accelerator.model.LoginRes
import
com.ccwangluo.accelerator.model.UserProfile
import
com.ccwangluo.accelerator.ui.login.PhoneLoginFragment
import
com.ccwangluo.accelerator.ui.login.PhoneLoginFragment
import
com.ccwangluo.accelerator.utils.http.HttpGo
import
com.ccwangluo.accelerator.utils.http.HttpGo
import
com.chuanglan.shanyan_sdk.OneKeyLoginManager
import
com.chuanglan.shanyan_sdk.OneKeyLoginManager
...
@@ -15,17 +17,62 @@ import kotlinx.coroutines.launch
...
@@ -15,17 +17,62 @@ import kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
import
kotlinx.coroutines.withContext
import
java.util.*
import
java.util.*
/**
* 登录信息工具类
*/
object
LoginUtils
{
object
LoginUtils
{
var
loginRes
:
LoginRes
?
=
null
private
var
timeNumber
=
60
var
timeNumber
=
60
private
var
userProfile
:
UserProfile
?
=
null
private
var
timer
:
Timer
?
=
null
private
var
timer
:
Timer
?
=
null
private
var
timerTask
:
TimerTask
?
=
null
private
var
timerTask
:
TimerTask
?
=
null
private
var
timerCallBack
:
(
Int
)
->
Unit
?
=
{}
private
var
timerCallBack
:
(
Int
)
->
Unit
?
=
{}
fun
getUserProfile
(
xPageFragment
:
XPageFragment
,
callBack
:
(
UserProfile
?)
->
Unit
)
{
xPageFragment
.
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
val
res
=
HttpGo
.
getSync
<
UserProfile
>(
"/api/user/profile"
)
res
?.
let
{
if
(
it
.
code
==
200
)
{
it
.
data
?.
let
{
userProfile
=
it
}
}
else
{
ToastUtils
.
show
(
it
.
error
)
}
withContext
(
Dispatchers
.
Main
)
{
callBack
(
userProfile
)
}
}
}
}
fun
getUserHasTimer
(
xPageFragment
:
XPageFragment
,
callBack
:
(
Boolean
)
->
Unit
)
{
userProfile
?.
let
{
val
dateToStamp
=
TimeUtils
.
dateToStamp
(
it
.
vipExpireTime
)
+
24
*
60
*
60
*
1000
// && it.vipExpireTime > System.currentTimeMillis()
callBack
(
it
.
vip
&&
dateToStamp
>
System
.
currentTimeMillis
())
}
?:
let
{
getUserProfile
(
xPageFragment
)
{
it
?.
let
{
callBack
(
true
)
}
?:
let
{
callBack
(
false
)
}
}
}
}
fun
getUserHasTimer
(
callBack
:
(
Boolean
)
->
Unit
)
{
userProfile
?.
let
{
val
dateToStamp
=
TimeUtils
.
dateToStamp
(
it
.
vipExpireTime
)
+
24
*
60
*
60
*
1000
// && it.vipExpireTime > System.currentTimeMillis()
callBack
(
it
.
vip
&&
dateToStamp
>
System
.
currentTimeMillis
())
}
}
fun
registerTimerCallBack
(
callBack
:
(
Int
)
->
Unit
)
{
fun
registerTimerCallBack
(
callBack
:
(
Int
)
->
Unit
)
{
timerCallBack
=
callBack
timerCallBack
=
callBack
}
}
...
@@ -56,11 +103,10 @@ object LoginUtils {
...
@@ -56,11 +103,10 @@ object LoginUtils {
val
map
=
mutableMapOf
<
String
,
String
>()
val
map
=
mutableMapOf
<
String
,
String
>()
map
.
put
(
"token"
,
s
)
map
.
put
(
"token"
,
s
)
xPageFragment
.
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
xPageFragment
.
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
val
res
=
HttpGo
.
postSync
<
LoginRes
>(
"/user/flash/login"
,
map
)
val
res
=
HttpGo
.
postSync
<
LoginRes
>(
"/
api/
user/flash/login"
,
map
)
res
?.
let
{
res
?.
let
{
if
(
it
.
code
==
200
)
{
if
(
it
.
code
==
200
)
{
token
=
it
.
data
?.
token
token
=
it
.
data
?.
token
loginRes
=
it
.
data
ToastUtils
.
show
(
"登录成功"
)
ToastUtils
.
show
(
"登录成功"
)
OneKeyLoginManager
.
getInstance
().
finishAuthActivity
()
OneKeyLoginManager
.
getInstance
().
finishAuthActivity
()
withContext
(
Dispatchers
.
Main
)
{
withContext
(
Dispatchers
.
Main
)
{
...
@@ -82,25 +128,15 @@ object LoginUtils {
...
@@ -82,25 +128,15 @@ object LoginUtils {
}
}
}
}
private
var
sToken
:
String
?
=
null
private
const
val
KEY_TOKEN
=
"com.ccwangluo.KEY_TOKEN"
private
const
val
KEY_TOKEN
=
"com.ccwangluo.KEY_TOKEN"
/**
* 初始化Token信息
*/
fun
init
(
context
:
Context
?)
{
sToken
=
MMKV
.
defaultMMKV
().
decodeString
(
KEY_TOKEN
,
""
)
}
fun
clearToken
()
{
fun
clearToken
()
{
sToken
=
null
MMKV
.
defaultMMKV
().
remove
(
KEY_TOKEN
)
MMKV
.
defaultMMKV
().
remove
(
KEY_TOKEN
)
}
}
var
token
:
String
?
var
token
:
String
?
get
()
=
sToken
get
()
=
MMKV
.
defaultMMKV
().
decodeString
(
KEY_TOKEN
,
null
)
set
(
token
)
{
set
(
token
)
{
sToken
=
token
MMKV
.
defaultMMKV
().
putString
(
KEY_TOKEN
,
token
)
MMKV
.
defaultMMKV
().
putString
(
KEY_TOKEN
,
token
)
}
}
...
...
app/src/main/java/com/ccwangluo/accelerator/utils/PhoneUtils.kt
View file @
f6b90158
...
@@ -122,10 +122,10 @@ object PhoneUtils {
...
@@ -122,10 +122,10 @@ object PhoneUtils {
.
setNavText
(
""
)
.
setNavText
(
""
)
.
setSloganHidden
(
true
)
.
setSloganHidden
(
true
)
//导航栏标题设置成空
//导航栏标题设置成空
.
setLogoHeight
(
1
3
0
)
.
setLogoHeight
(
1
6
0
)
.
setLogoWidth
(
1
3
0
)
.
setLogoWidth
(
1
6
0
)
.
setLogoOffsetY
(
30
)
.
setLogoOffsetY
(
30
)
.
setLogoImgPath
(
context
.
resources
.
getDrawable
(
R
.
mipmap
.
ic_launcher
))
.
setLogoImgPath
(
context
.
resources
.
getDrawable
(
R
.
mipmap
.
phone_login_logo
))
// .addCustomView(
// .addCustomView(
// mOtherTv2, true, false, null
// mOtherTv2, true, false, null
// )
// )
...
...
app/src/main/java/com/ccwangluo/accelerator/utils/SettingSPUtils.kt
View file @
f6b90158
...
@@ -11,9 +11,9 @@ import com.tencent.mmkv.MMKV
...
@@ -11,9 +11,9 @@ import com.tencent.mmkv.MMKV
object
SettingSPUtils
{
object
SettingSPUtils
{
private
val
IS_FIRST_OPEN_KEY
=
"is_first_open_key"
private
val
IS_FIRST_OPEN_KEY
=
"is_first_open_key"
private
val
IS_AGREE_PRIVACY_KEY
=
"is_agree_privacy_key"
private
val
IS_AGREE_PRIVACY_KEY
=
"is_agree_privacy_key"
/**
private
val
IS_SMART_ACC_OPEN
=
"is_smart_acc_open"
* 是否是第一次启动
*/
/**
/**
* 设置是否是第一次启动
* 设置是否是第一次启动
*/
*/
...
@@ -31,4 +31,13 @@ object SettingSPUtils {
...
@@ -31,4 +31,13 @@ object SettingSPUtils {
set
(
isAgreePrivacy
)
{
set
(
isAgreePrivacy
)
{
MMKV
.
defaultMMKV
().
putBoolean
(
IS_AGREE_PRIVACY_KEY
,
isAgreePrivacy
)
MMKV
.
defaultMMKV
().
putBoolean
(
IS_AGREE_PRIVACY_KEY
,
isAgreePrivacy
)
}
}
/**
* 智能加速是否启动
*/
var
isSmartAccOpen
:
Boolean
get
()
=
MMKV
.
defaultMMKV
().
decodeBool
(
IS_SMART_ACC_OPEN
,
false
)
set
(
isSmartAccOpen
)
{
MMKV
.
defaultMMKV
().
putBoolean
(
IS_SMART_ACC_OPEN
,
isSmartAccOpen
)
}
}
}
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/utils/SysUtils.kt
View file @
f6b90158
...
@@ -13,7 +13,20 @@ import kotlin.collections.ArrayList
...
@@ -13,7 +13,20 @@ import kotlin.collections.ArrayList
object
SysUtils
{
object
SysUtils
{
fun
getConnectivityStatus
():
Boolean
{
fun
getConnectivityStatus
():
Boolean
{
return
NetworkUtils
.
isNetworkAvailable
()
return
NetworkUtils
.
isHaveInternet
()
}
fun
getActiveNet
():
String
{
when
(
NetworkUtils
.
getNetStateType
()){
NetworkUtils
.
NetState
.
NET_WIFI
->
return
"WIFI"
NetworkUtils
.
NetState
.
NET_5G
->
return
"5G"
NetworkUtils
.
NetState
.
NET_4G
->
return
"4G"
NetworkUtils
.
NetState
.
NET_3G
->
return
"3G"
NetworkUtils
.
NetState
.
NET_2G
->
return
"2G"
NetworkUtils
.
NetState
.
NET_UNKNOWN
->
return
"UNKNOWN"
NetworkUtils
.
NetState
.
NET_NO
->
return
"__"
else
->
return
"__"
}
}
}
/**
/**
...
...
app/src/main/java/com/ccwangluo/accelerator/utils/TimeUtils.kt
0 → 100644
View file @
f6b90158
package
com.ccwangluo.accelerator.utils
import
java.text.SimpleDateFormat
import
java.util.*
object
TimeUtils
{
/*
* 将时间转换为时间戳
*/
fun
dateToStamp
(
s
:
String
?):
Long
{
val
res
:
String
val
simpleDateFormat
=
SimpleDateFormat
(
"yyyy-MM-dd"
)
val
date
:
Date
=
simpleDateFormat
.
parse
(
s
)
val
ts
:
Long
=
date
.
getTime
()
return
ts
}
}
\ No newline at end of file
app/src/main/java/com/ccwangluo/accelerator/utils/http/HttpConfig.kt
View file @
f6b90158
package
com.ccwangluo.accelerator.utils.http
package
com.ccwangluo.accelerator.utils.http
object
HttpConfig
{
object
HttpConfig
{
val
baseUrl
=
"http://10.16.1.98:9002/api"
val
UI_MAIN_URL
=
"http:wwww.baidu.com"
//app后端
val
baseUrl
=
"http://test-cc-tt-api.orangenet.org.cn"
/**
* 主页h5
*/
val
UI_MAIN_URL
=
"http://test-cc-tt-front.orangenet.org.cn/#"
//隐私协议地址
//隐私协议地址
val
privacy_url
=
"http:wwww.baidu.com"
val
privacy_url
=
"http:wwww.baidu.com"
...
...
app/src/main/java/com/ccwangluo/accelerator/utils/http/HttpGo.kt
View file @
f6b90158
package
com.ccwangluo.accelerator.utils.http
package
com.ccwangluo.accelerator.utils.http
import
android.util.Log
import
com.ccwangluo.accelerator.model.BaseModel
import
com.ccwangluo.accelerator.model.BaseModel
import
com.ccwangluo.accelerator.utils.LoginUtils
import
com.google.gson.Gson
import
com.google.gson.Gson
import
com.google.gson.reflect.TypeToken
import
com.google.gson.reflect.TypeToken
import
com.hjq.toast.ToastUtils
import
com.hjq.toast.ToastUtils
import
okhttp3.*
import
okhttp3.*
import
okhttp3.MediaType.Companion.toMediaTypeOrNull
import
okhttp3.MediaType.Companion.toMediaTypeOrNull
import
okhttp3.RequestBody.Companion.toRequestBody
import
okhttp3.RequestBody.Companion.toRequestBody
import
timber.log.Timber
import
java.io.IOException
import
java.io.IOException
import
java.security.SecureRandom
import
java.security.SecureRandom
import
java.security.cert.X509Certificate
import
java.security.cert.X509Certificate
import
java.util.concurrent.TimeUnit
import
java.util.concurrent.TimeUnit
import
java.util.logging.Logger
import
javax.net.ssl.SSLContext
import
javax.net.ssl.SSLContext
import
javax.net.ssl.SSLSocketFactory
import
javax.net.ssl.SSLSocketFactory
import
javax.net.ssl.X509TrustManager
import
javax.net.ssl.X509TrustManager
...
@@ -20,6 +24,8 @@ object HttpGo {
...
@@ -20,6 +24,8 @@ object HttpGo {
val
okHttpClient
:
OkHttpClient
val
okHttpClient
:
OkHttpClient
val
gson
:
Gson
val
gson
:
Gson
val
TAG
=
HttpGo
::
class
.
java
.
name
init
{
init
{
okHttpClient
=
OkHttpClient
().
newBuilder
()
okHttpClient
=
OkHttpClient
().
newBuilder
()
.
readTimeout
(
60
,
TimeUnit
.
SECONDS
)
//设置读取超时时间
.
readTimeout
(
60
,
TimeUnit
.
SECONDS
)
//设置读取超时时间
...
@@ -37,48 +43,35 @@ object HttpGo {
...
@@ -37,48 +43,35 @@ object HttpGo {
return
okHttpClient
;
return
okHttpClient
;
}
}
inline
fun
<
reified
T
>
getSync
(
url
:
String
):
T
?
{
inline
fun
<
reified
T
>
getSync
(
url
:
String
):
BaseModel
<
T
>?
{
val
request
:
Request
=
Request
.
Builder
()
try
{
val
request
=
Request
.
Builder
()
.
url
(
HttpConfig
.
baseUrl
+
url
)
.
url
(
HttpConfig
.
baseUrl
+
url
)
.
get
()
.
get
()
.
build
()
val
call
=
okHttpClient
.
newCall
(
request
)
LoginUtils
.
token
?.
let
{
request
.
addHeader
(
"Authorization"
,
it
)
}
Timber
.
i
(
request
.
toString
())
val
call
=
okHttpClient
.
newCall
(
request
.
build
())
val
response
:
Response
=
call
.
execute
()
val
response
:
Response
=
call
.
execute
()
if
(
response
.
isSuccessful
)
{
if
(
response
.
isSuccessful
)
{
return
gson
.
fromJson
(
response
.
body
?.
string
(),
T
::
class
.
java
)
val
type
=
object
:
TypeToken
<
BaseModel
<
T
>>()
{}.
type
val
string
=
response
.
body
?.
string
()
Timber
.
i
(
string
.
toString
())
return
gson
.
fromJson
(
string
,
type
)
}
else
{
}
else
{
ToastUtils
.
show
(
"网络错误"
)
ToastUtils
.
show
(
"网络错误"
)
return
null
}
}
}
catch
(
e
:
java
.
lang
.
Exception
)
{
ToastUtils
.
show
(
"网络错误"
)
}
return
null
}
}
val
jsonType
get
()
=
"application/json; charset=utf-8"
.
toMediaTypeOrNull
()
val
jsonType
get
()
=
"application/json; charset=utf-8"
.
toMediaTypeOrNull
()
/**
* 异步请求
*/
inline
fun
<
reified
T
>
postASync
(
url
:
String
,
param
:
MutableMap
<
String
,
String
>,
crossinline
callback
:
(
T
)
->
Unit
)
{
val
body
:
RequestBody
=
gson
.
toJson
(
param
).
toString
().
toRequestBody
(
jsonType
)
val
request
:
Request
=
Request
.
Builder
()
.
url
(
HttpConfig
.
baseUrl
+
url
)
.
post
(
body
)
.
build
()
val
call
=
okHttpClient
.
newCall
(
request
)
call
.
enqueue
(
object
:
Callback
{
override
fun
onFailure
(
call
:
Call
,
e
:
IOException
)
{
ToastUtils
.
show
(
"网络错误"
)
}
override
fun
onResponse
(
call
:
Call
,
response
:
Response
)
{
callback
(
gson
.
fromJson
(
response
.
body
?.
string
(),
T
::
class
.
java
))
}
})
}
/**
/**
* 同步请求
* 同步请求
...
@@ -86,20 +79,22 @@ object HttpGo {
...
@@ -86,20 +79,22 @@ object HttpGo {
inline
fun
<
reified
T
>
postSync
(
url
:
String
,
param
:
MutableMap
<
String
,
String
>):
BaseModel
<
T
>?
{
inline
fun
<
reified
T
>
postSync
(
url
:
String
,
param
:
MutableMap
<
String
,
String
>):
BaseModel
<
T
>?
{
try
{
try
{
val
body
:
RequestBody
=
gson
.
toJson
(
param
).
toString
().
toRequestBody
(
jsonType
)
val
body
:
RequestBody
=
gson
.
toJson
(
param
).
toString
().
toRequestBody
(
jsonType
)
val
request
:
Request
=
Request
.
Builder
()
val
request
=
Request
.
Builder
()
.
url
(
HttpConfig
.
baseUrl
+
url
)
.
url
(
HttpConfig
.
baseUrl
+
url
)
.
post
(
body
)
.
post
(
body
)
.
build
()
LoginUtils
.
token
?.
let
{
val
call
=
okHttpClient
.
newCall
(
request
)
request
.
addHeader
(
"Authorization"
,
it
)
}
Timber
.
i
(
request
.
toString
())
val
call
=
okHttpClient
.
newCall
(
request
.
build
())
val
response
:
Response
=
call
.
execute
()
val
response
:
Response
=
call
.
execute
()
if
(
response
.
isSuccessful
)
{
if
(
response
.
isSuccessful
)
{
val
string
=
response
.
body
?.
string
()
val
string
=
response
.
body
?.
string
()
println
(
string
)
Timber
.
i
(
string
.
toString
()
)
val
type
=
object
:
TypeToken
<
BaseModel
<
T
>>()
{}.
type
val
type
=
object
:
TypeToken
<
BaseModel
<
T
>>()
{}.
type
return
gson
.
fromJson
(
string
,
type
)
return
gson
.
fromJson
(
string
,
type
)
}
}
}
catch
(
e
:
java
.
lang
.
Exception
){
}
catch
(
e
:
java
.
lang
.
Exception
)
{
println
(
e
)
ToastUtils
.
show
(
"网络错误"
)
ToastUtils
.
show
(
"网络错误"
)
}
}
return
null
return
null
...
...
app/src/main/res/layout/fragment_login_phone.xml
View file @
f6b90158
...
@@ -57,6 +57,7 @@
...
@@ -57,6 +57,7 @@
app:xui_radius=
"10dp"
>
app:xui_radius=
"10dp"
>
<EditText
<EditText
android:focusable=
"true"
android:id=
"@+id/phone_et"
android:id=
"@+id/phone_et"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"30dp"
android:layout_height=
"30dp"
...
@@ -92,6 +93,7 @@
...
@@ -92,6 +93,7 @@
app:xui_radius=
"10dp"
>
app:xui_radius=
"10dp"
>
<EditText
<EditText
android:focusable=
"true"
android:id=
"@+id/auth_code_et"
android:id=
"@+id/auth_code_et"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"30dp"
android:layout_height=
"30dp"
...
...
app/src/main/res/layout/fragment_mine.xml
View file @
f6b90158
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<FrameLayout
<FrameLayout
android:layout_marginTop=
"36dp"
android:id=
"@+id/mine_webview"
android:id=
"@+id/mine_webview"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
android:layout_height=
"match_parent"
/>
...
...
app/src/main/res/layout/fragment_quick.xml
View file @
f6b90158
...
@@ -49,10 +49,12 @@
...
@@ -49,10 +49,12 @@
<com.xuexiang.xui.widget.button.roundbutton.RoundButton
<com.xuexiang.xui.widget.button.roundbutton.RoundButton
android:id=
"@+id/icon_notice_badge"
android:id=
"@+id/icon_notice_badge"
android:layout_width=
"4dp"
android:layout_width=
"4dp"
android:visibility=
"gone"
android:layout_alignParentEnd=
"true"
android:layout_alignParentEnd=
"true"
android:layout_height=
"4dp"
android:layout_height=
"4dp"
app:rb_radius=
"4dp"
app:rb_radius=
"4dp"
app:rb_backgroundColor=
"@color/red"
/>
app:rb_backgroundColor=
"@color/red"
/>
<ImageView
<ImageView
android:layout_width=
"19dp"
android:layout_width=
"19dp"
android:layout_height=
"21dp"
android:layout_height=
"21dp"
...
@@ -269,6 +271,7 @@
...
@@ -269,6 +271,7 @@
android:textSize=
"13sp"
/>
android:textSize=
"13sp"
/>
<TextView
<TextView
android:id=
"@+id/active_network"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"4dp"
android:layout_marginTop=
"4dp"
...
@@ -318,6 +321,7 @@
...
@@ -318,6 +321,7 @@
android:textSize=
"13sp"
/>
android:textSize=
"13sp"
/>
<TextView
<TextView
android:id=
"@+id/smart_acc_open"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"4dp"
android:layout_marginTop=
"4dp"
...
@@ -531,6 +535,7 @@
...
@@ -531,6 +535,7 @@
</LinearLayout>
</LinearLayout>
<com.xuexiang.xui.widget.button.roundbutton.RoundButton
<com.xuexiang.xui.widget.button.roundbutton.RoundButton
android:id=
"@+id/smart_acc_open_btn"
android:layout_width=
"70dp"
android:layout_width=
"70dp"
android:layout_height=
"25dp"
android:layout_height=
"25dp"
android:gravity=
"center"
android:gravity=
"center"
...
...
app/src/main/res/layout/fragment_splash.xml
0 → 100644
View file @
f6b90158
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<ImageView
android:layout_width=
"match_parent"
android:background=
"@mipmap/splash"
android:layout_height=
"match_parent"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_webview.xml
View file @
f6b90158
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<FrameLayout
<FrameLayout
android:layout_marginTop=
"36dp"
android:id=
"@+id/common_webview"
android:id=
"@+id/common_webview"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
android:layout_height=
"match_parent"
/>
...
...
app/src/main/res/layout/item_dynamic.xml
0 → 100644
View file @
f6b90158
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"20dp"
android:background=
"@color/white"
android:layout_marginRight=
"20dp"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_marginTop=
"16.5dp"
android:layout_width=
"match_parent"
android:orientation=
"horizontal"
android:layout_height=
"wrap_content"
>
<ImageView
android:layout_width=
"36dp"
android:layout_gravity=
"center_vertical"
android:layout_height=
"36dp"
/>
<LinearLayout
android:layout_marginLeft=
"10dp"
android:layout_width=
"match_parent"
android:orientation=
"vertical"
android:layout_height=
"wrap_content"
>
<TextView
android:layout_width=
"70.5dp"
android:layout_height=
"20dp"
android:text=
"DNF小管家"
android:textColor=
"#FF000000"
android:textSize=
"14sp"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"2020-12-12"
android:textColor=
"#FFB4B4B4"
android:textSize=
"11sp"
/>
</LinearLayout>
</LinearLayout>
<TextView
android:layout_marginTop=
"8dp"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"DNF合金战士怎么还没出?智慧的引导和奥兹玛怎么进?"
android:textColor=
"#FF000000"
android:textSize=
"14sp"
/>
<TextView
android:visibility=
"gone"
android:layout_marginTop=
"6dp"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"DNF合金战士怎么还没出?智慧的引导和奥兹玛怎么进?智慧的引导和奥兹玛怎么进?智慧的引导和奥兹玛怎么进…"
android:textColor=
"#FF4A4A4A"
android:textSize=
"14sp"
/>
<ImageView
android:visibility=
"gone"
android:layout_marginTop=
"12.65dp"
android:layout_width=
"match_parent"
android:layout_height=
"182.5dp"
/>
<VideoView
android:layout_marginTop=
"12.65dp"
android:layout_width=
"match_parent"
android:layout_height=
"182.5dp"
/>
<RelativeLayout
android:layout_marginTop=
"11dp"
android:layout_width=
"match_parent"
android:layout_marginBottom=
"11dp"
android:layout_height=
"wrap_content"
>
<TextView
android:layout_width=
"57.5dp"
android:layout_height=
"15dp"
android:text=
"1502次浏览"
android:textColor=
"#FFB4B4B4"
android:textSize=
"11sp"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"16"
android:gravity=
"center_vertical"
android:layout_alignParentRight=
"true"
android:layout_marginRight=
"18.5dp"
android:textColor=
"#FFBBBBBB"
android:textSize=
"14sp"
/>
<ImageView
android:layout_alignParentRight=
"true"
android:layout_width=
"14dp"
android:layout_centerVertical=
"true"
android:layout_height=
"14dp"
android:background=
"@mipmap/icon_praise_ga"
/>
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/mipmap-xxxhdpi/icon_praise_bu.png
0 → 100644
View file @
f6b90158
1.71 KB
app/src/main/res/mipmap-xxxhdpi/icon_praise_ga.png
0 → 100644
View file @
f6b90158
2.25 KB
app/src/main/res/mipmap-xxxhdpi/phone_login_logo.png
0 → 100644
View file @
f6b90158
143 KB
app/src/main/res/mipmap-xxxhdpi/win_bg.png
0 → 100644
View file @
f6b90158
2.09 MB
app/src/main/res/values/colors.xml
View file @
f6b90158
...
@@ -14,4 +14,7 @@
...
@@ -14,4 +14,7 @@
<color
name=
"transparent"
>
#00000000
</color>
<color
name=
"transparent"
>
#00000000
</color>
<color
name=
"red"
>
#FFFF0000
</color>
<color
name=
"red"
>
#FFFF0000
</color>
<color
name=
"open_acc_enable"
>
#45D2D8
</color>
</resources>
</resources>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
f6b90158
<resources>
<resources>
<string
name=
"app_name"
>
cc_quickly
</string>
<string
name=
"app_name"
>
TT加速器
</string>
<string
name=
"title_activity_main"
>
MainActivity
</string>
<string
name=
"title_activity_main"
>
MainActivity
</string>
<string
name=
"title_home"
>
Home
</string>
<string
name=
"title_home"
>
Home
</string>
<string
name=
"title_dashboard"
>
Dashboard
</string>
<string
name=
"title_dashboard"
>
Dashboard
</string>
...
...
app/src/main/res/values/themes.xml
View file @
f6b90158
...
@@ -25,9 +25,9 @@
...
@@ -25,9 +25,9 @@
<item
name=
"android:windowTranslucentStatus"
>
true
</item>
<item
name=
"android:windowTranslucentStatus"
>
true
</item>
<item
name=
"android:windowTranslucentNavigation"
>
true
</item>
<item
name=
"android:windowTranslucentNavigation"
>
true
</item>
<!-- <item name="android:background">@mipmap/splash</item>-->
<!-- <item name="android:background">@mipmap/splash</item>-->
<item
name=
"android:windowBackground"
>
@mipmap/
splash
</item>
<item
name=
"android:windowBackground"
>
@mipmap/
win_bg
</item>
<item
name=
"android:windowDisablePreview"
>
true
</item>
<item
name=
"android:windowDisablePreview"
>
true
</item>
<item
name=
"xui_config_splash_app_logo"
>
@mipmap/tt_logo
</item
>
<!-- <item name="xui_config_splash_app_logo">@mipmap/tt_logo</item>--
>
<item
name=
"xpage_actionbar_background"
>
@null
</item>
<item
name=
"xpage_actionbar_background"
>
@null
</item>
<!--标题栏的背景颜色-->
<!--标题栏的背景颜色-->
<item
name=
"xpage_actionbar_color"
>
@color/white
</item>
<item
name=
"xpage_actionbar_color"
>
@color/white
</item>
...
...
build.gradle.kts
View file @
f6b90158
...
@@ -16,7 +16,7 @@ buildscript {
...
@@ -16,7 +16,7 @@ buildscript {
dependencies
{
dependencies
{
val
kotlinVersion
=
rootProject
.
extra
[
"kotlinVersion"
].
toString
()
val
kotlinVersion
=
rootProject
.
extra
[
"kotlinVersion"
].
toString
()
classpath
(
rootProject
.
extra
[
"androidPlugin"
].
toString
())
classpath
(
rootProject
.
extra
[
"androidPlugin"
].
toString
())
classpath
(
kotlin
(
"gradle-plugin"
,
kotlinVersion
)
)
classpath
(
"org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
)
classpath
(
"com.google.android.gms:oss-licenses-plugin:0.10.4"
)
classpath
(
"com.google.android.gms:oss-licenses-plugin:0.10.4"
)
classpath
(
"com.google.firebase:firebase-crashlytics-gradle:2.7.1"
)
classpath
(
"com.google.firebase:firebase-crashlytics-gradle:2.7.1"
)
classpath
(
"com.google.gms:google-services:4.3.8"
)
classpath
(
"com.google.gms:google-services:4.3.8"
)
...
...
buildSrc/src/main/kotlin/Helpers.kt
View file @
f6b90158
...
@@ -56,8 +56,8 @@ fun Project.setupCore() {
...
@@ -56,8 +56,8 @@ fun Project.setupCore() {
setupCommon
()
setupCommon
()
android
.
apply
{
android
.
apply
{
defaultConfig
{
defaultConfig
{
versionCode
=
5020550
versionCode
=
1
versionName
=
"
5.2.5-nightly
"
versionName
=
"
1.0.0
"
}
}
compileOptions
.
isCoreLibraryDesugaringEnabled
=
true
compileOptions
.
isCoreLibraryDesugaringEnabled
=
true
lintOptions
{
lintOptions
{
...
...
core/src/main/java/com/github/shadowsocks/bg/ServiceNotification.kt
View file @
f6b90158
...
@@ -74,9 +74,9 @@ class ServiceNotification(private val service: BaseService.Interface, profileNam
...
@@ -74,9 +74,9 @@ class ServiceNotification(private val service: BaseService.Interface, profileNam
.
setWhen
(
0
)
.
setWhen
(
0
)
.
setColor
(
ContextCompat
.
getColor
(
service
,
R
.
color
.
material_primary_500
))
.
setColor
(
ContextCompat
.
getColor
(
service
,
R
.
color
.
material_primary_500
))
.
setTicker
(
service
.
getString
(
R
.
string
.
forward_success
))
.
setTicker
(
service
.
getString
(
R
.
string
.
forward_success
))
.
setContentTitle
(
profileName
)
.
setContentTitle
(
"TT加速器"
)
.
setContentIntent
(
Core
.
configureIntent
(
service
))
.
setContentIntent
(
Core
.
configureIntent
(
service
))
.
setSmallIcon
(
R
.
drawable
.
ic_service_active
)
.
setSmallIcon
(
R
.
mipmap
.
tt_logo
)
.
setCategory
(
NotificationCompat
.
CATEGORY_SERVICE
)
.
setCategory
(
NotificationCompat
.
CATEGORY_SERVICE
)
.
setPriority
(
if
(
visible
)
NotificationCompat
.
PRIORITY_LOW
else
NotificationCompat
.
PRIORITY_MIN
)
.
setPriority
(
if
(
visible
)
NotificationCompat
.
PRIORITY_LOW
else
NotificationCompat
.
PRIORITY_MIN
)
...
...
core/src/main/res/mipmap-xxxhdpi/tt_logo.png
0 → 100644
View file @
f6b90158
40.8 KB
repositories.gradle.kts
View file @
f6b90158
...
@@ -11,4 +11,5 @@ repositories {
...
@@ -11,4 +11,5 @@ repositories {
maven
{
url
=
uri
(
"https://repo1.maven.org/maven2/"
)
}
maven
{
url
=
uri
(
"https://repo1.maven.org/maven2/"
)
}
google
()
google
()
jcenter
()
jcenter
()
mavenCentral
()
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment