Commit 1342942d authored by sheteng's avatar sheteng

打点

parent 518ef4a0
...@@ -7,6 +7,8 @@ import android.os.Environment ...@@ -7,6 +7,8 @@ import android.os.Environment
import androidx.multidex.MultiDex import androidx.multidex.MultiDex
import com.ccwangluo.accelerator.ui.MainActivity import com.ccwangluo.accelerator.ui.MainActivity
import com.ccwangluo.accelerator.utils.PhoneUtils import com.ccwangluo.accelerator.utils.PhoneUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.github.shadowsocks.Core import com.github.shadowsocks.Core
import com.hjq.toast.ToastUtils import com.hjq.toast.ToastUtils
import com.tencent.bugly.Bugly import com.tencent.bugly.Bugly
...@@ -35,11 +37,11 @@ class App : Application(), androidx.work.Configuration.Provider by Core { ...@@ -35,11 +37,11 @@ class App : Application(), androidx.work.Configuration.Provider by Core {
MultiDex.install(this) MultiDex.install(this)
Core.init(this, MainActivity::class) Core.init(this, MainActivity::class)
MMKV.initialize(this) MMKV.initialize(this)
XGPushConfig.enableDebug(this,true); XGPushConfig.enableDebug(this, true);
XUtil.init(this) XUtil.init(this)
} }
fun initBugly(){ fun initBugly() {
/** /**
* true表示app启动自动初始化升级模块; false不会自动初始化; * true表示app启动自动初始化升级模块; false不会自动初始化;
* 开发者如果担心sdk初始化影响app启动速度,可以设置为false, * 开发者如果担心sdk初始化影响app启动速度,可以设置为false,
......
...@@ -9,8 +9,8 @@ import com.ccwangluo.accelerator.ui.home.AccelertorFragment ...@@ -9,8 +9,8 @@ import com.ccwangluo.accelerator.ui.home.AccelertorFragment
import com.ccwangluo.accelerator.ui.home.AccelertorViewModel 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.AcceleratorUtils
import com.ccwangluo.accelerator.utils.LoginUtils import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
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
...@@ -100,6 +100,10 @@ class BottomNavigationFragment : XPageFragment(), ViewPager.OnPageChangeListener ...@@ -100,6 +100,10 @@ class BottomNavigationFragment : XPageFragment(), ViewPager.OnPageChangeListener
val index: Int = CollectionUtils.arrayIndexOf(titles, item.getTitle()) val index: Int = CollectionUtils.arrayIndexOf(titles, item.getTitle())
if (index != -1) { if (index != -1) {
binding.viewPager.setCurrentItem(index, true) binding.viewPager.setCurrentItem(index, true)
when(index){
0 -> DataReoortUtils.report("st_speed_tab_clk")
1 -> DataReoortUtils.report("st_msg_tab_clk")
}
return true return true
} }
return false return false
......
...@@ -34,6 +34,7 @@ import android.hardware.SensorEventListener ...@@ -34,6 +34,7 @@ import android.hardware.SensorEventListener
import android.os.Handler import android.os.Handler
import android.util.Log import android.util.Log
import com.ccwangluo.accelerator.utils.SysUtils import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.xuexiang.xutil.net.NetworkUtils import com.xuexiang.xutil.net.NetworkUtils
import com.xuexiang.xutil.system.PermissionUtils import com.xuexiang.xutil.system.PermissionUtils
import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer
...@@ -50,6 +51,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener { ...@@ -50,6 +51,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
private val connect = registerForActivityResult(StartService()) { private val connect = registerForActivityResult(StartService()) {
if (it) { if (it) {
DataReoortUtils.report("st_speed_result", mapOf("result" to 0,"cause" to 2))
ToastUtils.show("开启vpn权限失败") ToastUtils.show("开启vpn权限失败")
} }
} }
...@@ -63,6 +65,12 @@ class MainActivity() : XPageActivity(), TencentLocationListener { ...@@ -63,6 +65,12 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
accelertorViewModel = accelertorViewModel =
ViewModelProvider(this).get(AccelertorViewModel::class.java) ViewModelProvider(this).get(AccelertorViewModel::class.java)
// app 启动
if (SettingSPUtils.lastAPPOpenReportTime == 0L ||
System.currentTimeMillis() - SettingSPUtils.lastAPPOpenReportTime > 30 * 60 * 1000
) {
DataReoortUtils.report("start_app")
}
initPhoneUtils() initPhoneUtils()
//获取权限 //获取权限
Dexter.withContext(this) Dexter.withContext(this)
...@@ -105,6 +113,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener { ...@@ -105,6 +113,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
PrivacyDialog(this, HttpConfig.HTML_HOST_PRIVACY+"index.html") { PrivacyDialog(this, HttpConfig.HTML_HOST_PRIVACY+"index.html") {
if (it) { if (it) {
SettingSPUtils.isAgreePrivacy = true SettingSPUtils.isAgreePrivacy = true
DataReoortUtils.report("st_agrmt_ok")
} else { } else {
finish() finish()
} }
...@@ -115,6 +124,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener { ...@@ -115,6 +124,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
AcceleratorUtils.initConnect(this, connect) AcceleratorUtils.initConnect(this, connect)
mSensorManager = getSystemService(SENSOR_SERVICE) as SensorManager mSensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
mSensorEventListener = JCVideoPlayer.JCAutoFullscreenListener() mSensorEventListener = JCVideoPlayer.JCAutoFullscreenListener()
DataReoortUtils.report("st_app_open")
} }
...@@ -125,6 +135,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener { ...@@ -125,6 +135,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
override fun onSuccess(data: Any, flag: Int) { override fun onSuccess(data: Any, flag: Int) {
//token在设备卸载重装的时候有可能会变 //token在设备卸载重装的时候有可能会变
Log.d("TPush", "注册成功,设备token为:$data") Log.d("TPush", "注册成功,设备token为:$data")
DataReoortUtils.report("st_app_start_push")
} }
override fun onFail(data: Any, errCode: Int, msg: String) { override fun onFail(data: Any, errCode: Int, msg: String) {
......
...@@ -20,6 +20,7 @@ import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment ...@@ -20,6 +20,7 @@ import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment
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.SysUtils import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.cc_quickly.utils.SettingSPUtils import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.github.shadowsocks.http.HttpConfig import com.github.shadowsocks.http.HttpConfig
import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.bg.BaseService
...@@ -80,7 +81,7 @@ class AccelertorFragment : XPageFragment() { ...@@ -80,7 +81,7 @@ class AccelertorFragment : XPageFragment() {
binding.netDelay2Unit.visibility = View.GONE binding.netDelay2Unit.visibility = View.GONE
} }
if (!it.lossRate.isEmpty()&&state == BaseService.State.Connected) { if (!it.lossRate.isEmpty() && state == BaseService.State.Connected) {
binding.netLost1.setText(it.lossRate) binding.netLost1.setText(it.lossRate)
binding.netLost2.setText(it.lossRate) binding.netLost2.setText(it.lossRate)
binding.netLost1Unit.visibility = View.VISIBLE binding.netLost1Unit.visibility = View.VISIBLE
...@@ -150,10 +151,17 @@ class AccelertorFragment : XPageFragment() { ...@@ -150,10 +151,17 @@ class AccelertorFragment : XPageFragment() {
override fun initListeners() { override fun initListeners() {
binding.iconNotice.setOnClickListener { binding.iconNotice.setOnClickListener {
DataReoortUtils.report("st_speed_sysmsg_clk")
openToWebview(HttpConfig.UI_MESSAGE_URL) openToWebview(HttpConfig.UI_MESSAGE_URL)
} }
binding.accShare.setOnClickListener {
DataReoortUtils.report("st_share_clk")
// TODO: 2022/3/14 share
}
binding.gamePage.setOnClickListener { binding.gamePage.setOnClickListener {
DataReoortUtils.report("st_game_sysmsg_clk")
openWebviewForResult(HttpConfig.UI_GAME_URL + "?gameId=${AcceleratorUtils.game?.id}") openWebviewForResult(HttpConfig.UI_GAME_URL + "?gameId=${AcceleratorUtils.game?.id}")
} }
...@@ -170,13 +178,16 @@ class AccelertorFragment : XPageFragment() { ...@@ -170,13 +178,16 @@ class AccelertorFragment : XPageFragment() {
} }
binding.preventAccLost.setOnClickListener { binding.preventAccLost.setOnClickListener {
DataReoortUtils.report("st_speed_lostcon_clk")
openToWebview(HttpConfig.UI_SPEED_URL + "?id=1") openToWebview(HttpConfig.UI_SPEED_URL + "?id=1")
} }
binding.preventAccInvalid.setOnClickListener { binding.preventAccInvalid.setOnClickListener {
DataReoortUtils.report("st_speed_disabl_clk")
openToWebview(HttpConfig.UI_SPEED_URL + "?id=2") openToWebview(HttpConfig.UI_SPEED_URL + "?id=2")
} }
binding.btnExpend.setOnClickListener { binding.btnExpend.setOnClickListener {
DataReoortUtils.report("st_speed_msg_clk")
if (binding.expandableLayout1.isExpanded) { if (binding.expandableLayout1.isExpanded) {
binding.expandableLayout1.toggle() binding.expandableLayout1.toggle()
binding.expandableLayout2.expand() binding.expandableLayout2.expand()
...@@ -188,20 +199,24 @@ class AccelertorFragment : XPageFragment() { ...@@ -188,20 +199,24 @@ class AccelertorFragment : XPageFragment() {
} }
} }
binding.btnQuick.setOnClickListener { binding.btnQuick.setOnClickListener {
//Beta.checkUpgrade(true,false)
accelertorViewModel.accState.value?.let { accelertorViewModel.accState.value?.let {
if (it.canStop) { if (it.canStop) {
context?.let { context?.let {
CommonDialog(it).setTitle("加速停止确认") CommonDialog(it).setTitle("加速停止确认")
.setContent("停止加速可能会导致游戏断线,是否确认停止?") .setContent("停止加速可能会导致游戏断线,是否确认停止?")
.setBtnLeft("取消", {}).setBtnRight("停止加速", { .setBtnLeft("取消", {
DataReoortUtils.report("st_speed_stop_pop_cancel_clk")
}).setBtnRight("停止加速", {
DataReoortUtils.report("st_speed_stop_pop_ok_clk")
AcceleratorUtils.stopAccelerator() AcceleratorUtils.stopAccelerator()
}).show<CommonDialog>() }).show<CommonDialog>()
DataReoortUtils.report("st_speed_stop_pop_show")
} }
DataReoortUtils.report("st_speed_stop_clk")
return@setOnClickListener return@setOnClickListener
} else {
DataReoortUtils.report("st_speed_start_clk")
} }
} }
if (!LoginUtils.hasToken()) { if (!LoginUtils.hasToken()) {
context?.let { it1 -> context?.let { it1 ->
...@@ -209,6 +224,7 @@ class AccelertorFragment : XPageFragment() { ...@@ -209,6 +224,7 @@ class AccelertorFragment : XPageFragment() {
}) })
} }
DataReoortUtils.report("st_speed_result", mapOf("result" to 0, "cause" to "3"))
return@setOnClickListener return@setOnClickListener
} }
...@@ -218,6 +234,7 @@ class AccelertorFragment : XPageFragment() { ...@@ -218,6 +234,7 @@ class AccelertorFragment : XPageFragment() {
binding.quickTopToastTx.postDelayed({ binding.quickTopToastTx.postDelayed({
binding.quickTopToast.visibility = View.GONE binding.quickTopToast.visibility = View.GONE
}, 2000) }, 2000)
DataReoortUtils.report("st_speed_result", mapOf("result" to 0, "cause" to "3"))
return@setOnClickListener return@setOnClickListener
} }
AcceleratorUtils.getGameList(this) { AcceleratorUtils.getGameList(this) {
...@@ -230,6 +247,10 @@ class AccelertorFragment : XPageFragment() { ...@@ -230,6 +247,10 @@ class AccelertorFragment : XPageFragment() {
binding.quickTopToastTx.postDelayed({ binding.quickTopToastTx.postDelayed({
binding.quickTopToast.visibility = View.GONE binding.quickTopToast.visibility = View.GONE
}, 2000) }, 2000)
DataReoortUtils.report(
"st_speed_result",
mapOf("result" to 0, "cause" to "1")
)
return@getGameList return@getGameList
} }
} }
...@@ -239,10 +260,15 @@ class AccelertorFragment : XPageFragment() { ...@@ -239,10 +260,15 @@ class AccelertorFragment : XPageFragment() {
binding.btnQuick.isEnabled = false binding.btnQuick.isEnabled = false
startAnim() startAnim()
} else { } else {
DataReoortUtils.report(
"st_speed_result",
mapOf("result" to 0, "cause" to 3)
)
MemberDialog(this@AccelertorFragment).show<MemberDialog>() MemberDialog(this@AccelertorFragment).show<MemberDialog>()
} }
} }
} else { } else {
DataReoortUtils.report("st_speed_result", mapOf("result" to 0, "cause" to "3"))
ToastUtils.show("获取游戏配置异常") ToastUtils.show("获取游戏配置异常")
} }
} }
...@@ -253,7 +279,12 @@ class AccelertorFragment : XPageFragment() { ...@@ -253,7 +279,12 @@ class AccelertorFragment : XPageFragment() {
binding.gameStart.setOnClickListener { binding.gameStart.setOnClickListener {
if (!binding.expandableLayout1.isExpanded) { if (!binding.expandableLayout1.isExpanded) {
AcceleratorUtils.game?.let { AcceleratorUtils.game?.let {
DataReoortUtils.report("st_speed_game_start_clk")
try {
AppUtils.launchApp(it.packageName) AppUtils.launchApp(it.packageName)
} catch (e: Exception) {
}
if (state == BaseService.State.Connected) { if (state == BaseService.State.Connected) {
binding.gameStart.postDelayed({ binding.gameStart.postDelayed({
ToastUtils.show("TT正在为游戏加速") ToastUtils.show("TT正在为游戏加速")
...@@ -262,6 +293,8 @@ class AccelertorFragment : XPageFragment() { ...@@ -262,6 +293,8 @@ class AccelertorFragment : XPageFragment() {
} }
} }
} }
} }
fun openToWebview(url: String) { fun openToWebview(url: String) {
...@@ -282,12 +315,12 @@ class AccelertorFragment : XPageFragment() { ...@@ -282,12 +315,12 @@ class AccelertorFragment : XPageFragment() {
override fun onFragmentResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onFragmentResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onFragmentResult(requestCode, resultCode, data) super.onFragmentResult(requestCode, resultCode, data)
if(requestCode==CLICK_START_ACC_REQUEST_CODE){ if (requestCode == CLICK_START_ACC_REQUEST_CODE) {
binding.btnQuick.performClick() binding.btnQuick.performClick()
} }
} }
private val CLICK_START_ACC_REQUEST_CODE:Int=100; private val CLICK_START_ACC_REQUEST_CODE: Int = 100;
private fun openWebviewForResult(url: String) { private fun openWebviewForResult(url: String) {
LoginUtils.token?.let { LoginUtils.token?.let {
PageOption.to(CommonWebViewFragment::class.java) PageOption.to(CommonWebViewFragment::class.java)
...@@ -297,7 +330,7 @@ class AccelertorFragment : XPageFragment() { ...@@ -297,7 +330,7 @@ class AccelertorFragment : XPageFragment() {
} ?: let { } ?: let {
context?.let { it1 -> context?.let { it1 ->
LoginUtils.login(it1) { LoginUtils.login(it1) {
if(it){ if (it) {
PageOption.to(CommonWebViewFragment::class.java) PageOption.to(CommonWebViewFragment::class.java)
.putString( .putString(
CommonWebViewFragment.WEBVIEW_URL_KEY, CommonWebViewFragment.WEBVIEW_URL_KEY,
...@@ -319,10 +352,14 @@ class AccelertorFragment : XPageFragment() { ...@@ -319,10 +352,14 @@ class AccelertorFragment : XPageFragment() {
context?.let { context?.let {
CommonDialog(it).setTitle("防止加速掉线") CommonDialog(it).setTitle("防止加速掉线")
.setContent("为了防止加速进程被手机系统中断,影响游戏加速,请确保完成相关设置") .setContent("为了防止加速进程被手机系统中断,影响游戏加速,请确保完成相关设置")
.setBtnLeft("取消", {}).setBtnRight("去设置", { .setBtnLeft("取消", {
DataReoortUtils.report("st_speed_course_pop_cancel_clk")
}).setBtnRight("去设置", {
openToWebview(HttpConfig.UI_SPEED_URL + "?id=1") openToWebview(HttpConfig.UI_SPEED_URL + "?id=1")
DataReoortUtils.report("st_speed_course_pop_set_clk")
}).show<CommonDialog>() }).show<CommonDialog>()
SettingSPUtils.isFirstAccSuccess = false SettingSPUtils.isFirstAccSuccess = false
DataReoortUtils.report("st_speed_course_pop_show")
} }
} }
...@@ -389,8 +426,9 @@ class AccelertorFragment : XPageFragment() { ...@@ -389,8 +426,9 @@ class AccelertorFragment : XPageFragment() {
binding.progressViewCircleSmall.startProgressAnimation() binding.progressViewCircleSmall.startProgressAnimation()
} }
fun startAccSuccess(){ fun startAccSuccess() {
if (binding.gameStart.visibility == View.GONE) { if (binding.gameStart.visibility == View.GONE) {
DataReoortUtils.report("st_speed_result", mapOf("result" to 1))
binding.gamePicIn1.startAnimation(getDefaultAnim()) binding.gamePicIn1.startAnimation(getDefaultAnim())
binding.accStateTx.visibility = View.VISIBLE binding.accStateTx.visibility = View.VISIBLE
binding.btnQuick.setBackgroundResource(R.mipmap.quick_stop) binding.btnQuick.setBackgroundResource(R.mipmap.quick_stop)
......
...@@ -24,14 +24,17 @@ import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment ...@@ -24,14 +24,17 @@ import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment
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.SysUtils import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.cc_quickly.utils.XToastUtils import com.ccwangluo.cc_quickly.utils.XToastUtils
import com.github.shadowsocks.http.HttpConfig import com.github.shadowsocks.http.HttpConfig
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
import com.hjq.toast.ToastUtils import com.hjq.toast.ToastUtils
import com.just.agentweb.download.DownloadTask import com.just.agentweb.download.DownloadTask
import com.xuexiang.xpage.base.XPageFragment import com.xuexiang.xpage.base.XPageFragment
import com.xuexiang.xpage.utils.TitleBar import com.xuexiang.xpage.utils.TitleBar
import com.xuexiang.xui.widget.tabbar.TabSegment
import com.xuexiang.xui.widget.toast.XToast import com.xuexiang.xui.widget.toast.XToast
import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.XUtil
import com.xuexiang.xutil.app.AppUtils import com.xuexiang.xutil.app.AppUtils
...@@ -101,12 +104,14 @@ class NewsFragment : XPageFragment() { ...@@ -101,12 +104,14 @@ class NewsFragment : XPageFragment() {
if (itemData.type == 1) { if (itemData.type == 1) {
itemData.url?.let { itemData.url?.let {
DataReoortUtils.report("st_qq_clk", mapOf("scene" to 3))
context?.let { it1 -> SysUtils.joinQQGroup(it1) } context?.let { it1 -> SysUtils.joinQQGroup(it1) }
} }
} }
if (itemData.type == 2) { if (itemData.type == 2) {
itemData.url?.let { itemData.url?.let {
DataReoortUtils.report("st_google_clk", mapOf("scene" to 3))
openToWebview(it) openToWebview(it)
} }
} }
...@@ -133,6 +138,24 @@ class NewsFragment : XPageFragment() { ...@@ -133,6 +138,24 @@ class NewsFragment : XPageFragment() {
tab.setCustomView(R.layout.item_tab) tab.setCustomView(R.layout.item_tab)
tab.text = titles[position] tab.text = titles[position]
}.attach() }.attach()
binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
tab?.let {
DataReoortUtils.report("st_msg_channel_clk", mapOf("headline" to it.position.toString()))
}
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
override fun onTabReselected(tab: TabLayout.Tab?) {
}
})
AcceleratorUtils.getGameList(this) { AcceleratorUtils.getGameList(this) {
if (it) { if (it) {
AcceleratorUtils.game?.let { AcceleratorUtils.game?.let {
......
...@@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModel ...@@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.ccwangluo.accelerator.model.LoginRes import com.ccwangluo.accelerator.model.LoginRes
import com.ccwangluo.accelerator.utils.LoginUtils import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.accelerator.utils.http.HttpGo import com.ccwangluo.accelerator.utils.http.HttpGo
import com.hjq.toast.ToastUtils import com.hjq.toast.ToastUtils
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
...@@ -26,9 +27,18 @@ class LoginViewModel : ViewModel() { ...@@ -26,9 +27,18 @@ class LoginViewModel : ViewModel() {
val res = HttpGo.postSync<LoginRes>("/api/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) {
DataReoortUtils.report("st_login_vercode_result", mapOf("result" to 1))
LoginUtils.token = it.data?.token LoginUtils.token = it.data?.token
LoginUtils.uid = it.data?.phone
loginState.postValue(true) loginState.postValue(true)
} else { } else {
val map = mutableMapOf<String, Any>("result" to 0)
it.error?.let { it1 ->
map.put("cause", it1)
}
DataReoortUtils.report(
"st_login_vercode_result", map
)
ToastUtils.show(it.error) ToastUtils.show(it.error)
} }
} }
...@@ -48,7 +58,7 @@ class LoginViewModel : ViewModel() { ...@@ -48,7 +58,7 @@ class LoginViewModel : ViewModel() {
sendCodeState.postValue(false) sendCodeState.postValue(false)
ToastUtils.show(it.error) ToastUtils.show(it.error)
} }
}?:let { } ?: let {
sendCodeState.postValue(false) sendCodeState.postValue(false)
} }
} }
......
...@@ -10,6 +10,7 @@ import com.ccwangluo.accelerator.ui.web.BlankActivity ...@@ -10,6 +10,7 @@ import com.ccwangluo.accelerator.ui.web.BlankActivity
import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment
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.dataReport.DataReoortUtils
import com.github.shadowsocks.http.HttpConfig import com.github.shadowsocks.http.HttpConfig
import com.hjq.toast.ToastUtils import com.hjq.toast.ToastUtils
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
...@@ -32,6 +33,7 @@ class PhoneLoginActivity : XPageActivity() { ...@@ -32,6 +33,7 @@ class PhoneLoginActivity : XPageActivity() {
setContentView(binding.root) setContentView(binding.root)
initViews() initViews()
initListeners() initListeners()
DataReoortUtils.report("st_login_vercode_show")
} }
fun initViews() { fun initViews() {
...@@ -50,6 +52,16 @@ class PhoneLoginActivity : XPageActivity() { ...@@ -50,6 +52,16 @@ class PhoneLoginActivity : XPageActivity() {
binding.login.isEnabled = false binding.login.isEnabled = false
} }
} }
binding.phoneEt.setOnFocusChangeListener { v, hasFocus ->
if (hasFocus) {
DataReoortUtils.report("st_login_ph_input")
}
}
binding.authCodeEt.setOnFocusChangeListener { v, hasFocus ->
if (hasFocus) {
DataReoortUtils.report("st_login_vercode_write")
}
}
binding.authCodeEt.addTextChangedListener { binding.authCodeEt.addTextChangedListener {
val authCdoe = it.toString().trim() val authCdoe = it.toString().trim()
...@@ -77,6 +89,7 @@ class PhoneLoginActivity : XPageActivity() { ...@@ -77,6 +89,7 @@ class PhoneLoginActivity : XPageActivity() {
loginViewModel.loginState.observe(this, { loginViewModel.loginState.observe(this, {
if (it) { if (it) {
LoginUtils.stopTimer() LoginUtils.stopTimer()
DataReoortUtils.report("role_entry", mutableMapOf("login" to "login_vercode"))
finish() finish()
} }
}) })
...@@ -105,7 +118,7 @@ class PhoneLoginActivity : XPageActivity() { ...@@ -105,7 +118,7 @@ class PhoneLoginActivity : XPageActivity() {
} }
binding.userAggreement.setOnClickListener { binding.userAggreement.setOnClickListener {
val intent = Intent(this,BlankActivity::class.java) val intent = Intent(this, BlankActivity::class.java)
intent.putExtra(CommonWebViewFragment.WEBVIEW_URL_KEY, HttpConfig.url_user_agreement) intent.putExtra(CommonWebViewFragment.WEBVIEW_URL_KEY, HttpConfig.url_user_agreement)
startActivity(intent) startActivity(intent)
} }
...@@ -115,6 +128,7 @@ class PhoneLoginActivity : XPageActivity() { ...@@ -115,6 +128,7 @@ class PhoneLoginActivity : XPageActivity() {
} }
binding.authCodeBtn.setOnClickListener { binding.authCodeBtn.setOnClickListener {
DataReoortUtils.report("st_login_vercode_request_clk")
val phone = binding.phoneEt.text.toString() val phone = binding.phoneEt.text.toString()
if (StringUtils.isEmpty(phone) || !isPhone(phone)) { if (StringUtils.isEmpty(phone) || !isPhone(phone)) {
ToastUtils.show("输入正确的手机号") ToastUtils.show("输入正确的手机号")
...@@ -129,6 +143,7 @@ class PhoneLoginActivity : XPageActivity() { ...@@ -129,6 +143,7 @@ class PhoneLoginActivity : XPageActivity() {
} }
binding.login.setOnClickListener { binding.login.setOnClickListener {
DataReoortUtils.report("st_login_vercode_btn_clk")
//检查验证码,手机号格式 //检查验证码,手机号格式
val phone = binding.phoneEt.text.toString() val phone = binding.phoneEt.text.toString()
val authCdoe = binding.authCodeEt.text.toString() val authCdoe = binding.authCodeEt.text.toString()
......
...@@ -26,6 +26,7 @@ import android.util.DisplayMetrics ...@@ -26,6 +26,7 @@ import android.util.DisplayMetrics
import android.util.Log import android.util.Log
import com.ccwangluo.accelerator.utils.AcceleratorUtils import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.SysUtils import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.github.shadowsocks.bg.BaseService import com.github.shadowsocks.bg.BaseService
import com.github.shadowsocks.plugin.PluginContract import com.github.shadowsocks.plugin.PluginContract
import com.tencent.bugly.beta.Beta import com.tencent.bugly.beta.Beta
...@@ -91,10 +92,13 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb) ...@@ -91,10 +92,13 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
@JavascriptInterface @JavascriptInterface
fun openWebviewByWholeUrl(url: String) { fun openWebviewByWholeUrl(url: String) {
val params = Bundle() val params = Bundle()
if(url.startsWith("http:")||url.startsWith("https:")){ if (url.startsWith("http:") || url.startsWith("https:")) {
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY,url) params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY, url)
}else{ } else {
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY, HttpConfig.HTML_HOST_PRIVACY+url) params.putString(
CommonWebViewFragment.WEBVIEW_URL_KEY,
HttpConfig.HTML_HOST_PRIVACY + url
)
} }
xPageFragment.openPage(CommonWebViewFragment::class.java, params) xPageFragment.openPage(CommonWebViewFragment::class.java, params)
...@@ -103,7 +107,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb) ...@@ -103,7 +107,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
//打开系统设置 //打开系统设置
@JavascriptInterface @JavascriptInterface
fun openSysSetting() { fun openSysSetting() {
xPageFragment.startActivity( Intent(Settings.ACTION_SETTINGS)); xPageFragment.startActivity(Intent(Settings.ACTION_SETTINGS));
} }
@JavascriptInterface @JavascriptInterface
...@@ -129,7 +133,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb) ...@@ -129,7 +133,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
* 获取token * 获取token
*/ */
@JavascriptInterface @JavascriptInterface
fun getToken(callback: String){ fun getToken(callback: String) {
agentWeb.getJsAccessEntrace() agentWeb.getJsAccessEntrace()
.quickCallJs(callback, LoginUtils.token) .quickCallJs(callback, LoginUtils.token)
} }
...@@ -143,11 +147,16 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb) ...@@ -143,11 +147,16 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
//是否有更新:1有 0没有 //是否有更新:1有 0没有
//最新安装包的版本名称 //最新安装包的版本名称
agentWeb.jsAccessEntrace agentWeb.jsAccessEntrace
.quickCallJs(callback, "1", AppUtils.getAppVersionName(),it.versionName) .quickCallJs(callback, "1", AppUtils.getAppVersionName(), it.versionName)
} ?: let{ } ?: let {
agentWeb.jsAccessEntrace agentWeb.jsAccessEntrace
.quickCallJs(callback, "0", AppUtils.getAppVersionName(),AppUtils.getAppVersionName()) .quickCallJs(
callback,
"0",
AppUtils.getAppVersionName(),
AppUtils.getAppVersionName()
)
} }
} }
...@@ -155,23 +164,23 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb) ...@@ -155,23 +164,23 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
* 当前加速状态 1 加速中,0 未加速 * 当前加速状态 1 加速中,0 未加速
*/ */
@JavascriptInterface @JavascriptInterface
fun getAccelerateState(callback: String){ fun getAccelerateState(callback: String) {
if(BaseService.State.Connected==AcceleratorUtils.state){ if (BaseService.State.Connected == AcceleratorUtils.state) {
agentWeb.jsAccessEntrace agentWeb.jsAccessEntrace
.quickCallJs(callback, "1") .quickCallJs(callback, "1")
}else{ } else {
agentWeb.jsAccessEntrace agentWeb.jsAccessEntrace
.quickCallJs(callback, "0") .quickCallJs(callback, "0")
} }
} }
private val handler:Handler =Handler() private val handler: Handler = Handler()
/** /**
* 点击游戏主页下面的加速按钮调用 * 点击游戏主页下面的加速按钮调用
*/ */
@JavascriptInterface @JavascriptInterface
fun clickAccelerateBtn(){ fun clickAccelerateBtn() {
handler.post { handler.post {
xPageFragment.setFragmentResult(500, Intent()) xPageFragment.setFragmentResult(500, Intent())
xPageFragment.popToBack() xPageFragment.popToBack()
...@@ -183,7 +192,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb) ...@@ -183,7 +192,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
*/ */
@JavascriptInterface @JavascriptInterface
fun doAppUpdate() { fun doAppUpdate() {
Beta.checkUpgrade(true,false) Beta.checkUpgrade(true, false)
} }
/** /**
...@@ -326,7 +335,8 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb) ...@@ -326,7 +335,8 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
.quickCallJs( .quickCallJs(
callback, callback,
android.os.Build.VERSION.RELEASE, android.os.Build.VERSION.RELEASE,
SysUtils.getDpi(xPageFragment).toString(),android.os.Build.VERSION.SDK_INT.toString() SysUtils.getDpi(xPageFragment).toString(),
android.os.Build.VERSION.SDK_INT.toString()
) )
} }
...@@ -345,4 +355,9 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb) ...@@ -345,4 +355,9 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
System.exit(0) System.exit(0)
} }
@JavascriptInterface
fun dataReport(event: String, data: String) {
DataReoortUtils.report(event, data)
}
} }
\ No newline at end of file
...@@ -9,6 +9,7 @@ import androidx.appcompat.app.AppCompatActivity ...@@ -9,6 +9,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.ccwangluo.accelerator.model.* import com.ccwangluo.accelerator.model.*
import com.ccwangluo.accelerator.ui.dialog.CommonDialog import com.ccwangluo.accelerator.ui.dialog.CommonDialog
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.accelerator.utils.http.HttpGo import com.ccwangluo.accelerator.utils.http.HttpGo
import com.ccwangluo.cc_quickly.utils.SettingSPUtils import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.github.shadowsocks.Core import com.github.shadowsocks.Core
...@@ -215,6 +216,7 @@ object AcceleratorUtils { ...@@ -215,6 +216,7 @@ object AcceleratorUtils {
AcceleratorUtils.state = state AcceleratorUtils.state = state
stateListener(state, getAccTime(), null) stateListener(state, getAccTime(), null)
if (state == BaseService.State.Stopped && !msg.isNullOrBlank()) { if (state == BaseService.State.Stopped && !msg.isNullOrBlank()) {
DataReoortUtils.report("st_speed_result", mapOf("result" to 0, "cause" to 3.toString()))
if("vip到期".equals(msg)||(msg!=null&&msg.startsWith("vip已到期"))){ if("vip到期".equals(msg)||(msg!=null&&msg.startsWith("vip已到期"))){
vipExpireListener() vipExpireListener()
}else{ }else{
......
...@@ -8,6 +8,7 @@ import androidx.lifecycle.lifecycleScope ...@@ -8,6 +8,7 @@ import androidx.lifecycle.lifecycleScope
import com.ccwangluo.accelerator.model.LoginRes import com.ccwangluo.accelerator.model.LoginRes
import com.ccwangluo.accelerator.model.UserProfile import com.ccwangluo.accelerator.model.UserProfile
import com.ccwangluo.accelerator.ui.login.PhoneLoginActivity import com.ccwangluo.accelerator.ui.login.PhoneLoginActivity
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
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
import com.github.shadowsocks.Core import com.github.shadowsocks.Core
...@@ -116,9 +117,11 @@ object LoginUtils { ...@@ -116,9 +117,11 @@ object LoginUtils {
res?.let { res?.let {
if (it.code == 200) { if (it.code == 200) {
token = it.data?.token token = it.data?.token
uid = it.data?.phone
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
ToastUtils.show("登录成功") ToastUtils.show("登录成功")
OneKeyLoginManager.getInstance().finishAuthActivity() OneKeyLoginManager.getInstance().finishAuthActivity()
DataReoortUtils.report("role_entry", mutableMapOf("login" to "login_all"))
callBack(true) callBack(true)
} }
} else { } else {
...@@ -161,6 +164,12 @@ object LoginUtils { ...@@ -161,6 +164,12 @@ object LoginUtils {
return !AuthManager.authToken.isNullOrBlank() return !AuthManager.authToken.isNullOrBlank()
} }
var uid: String?
get() = MMKV.defaultMMKV().decodeString("ACC_UID", null)
set(acc_uid) {
MMKV.defaultMMKV().putString("ACC_UID", acc_uid)
}
fun logout() { fun logout() {
} }
......
...@@ -11,6 +11,7 @@ import android.widget.RelativeLayout ...@@ -11,6 +11,7 @@ import android.widget.RelativeLayout
import android.widget.TextView import android.widget.TextView
import com.ccwangluo.accelerator.R import com.ccwangluo.accelerator.R
import com.ccwangluo.accelerator.ui.login.PhoneLoginActivity import com.ccwangluo.accelerator.ui.login.PhoneLoginActivity
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.chuanglan.shanyan_sdk.OneKeyLoginManager import com.chuanglan.shanyan_sdk.OneKeyLoginManager
import com.chuanglan.shanyan_sdk.tool.ShanYanUIConfig import com.chuanglan.shanyan_sdk.tool.ShanYanUIConfig
...@@ -20,9 +21,6 @@ import com.xuexiang.xpage.core.PageOption ...@@ -20,9 +21,6 @@ import com.xuexiang.xpage.core.PageOption
import org.json.JSONObject import org.json.JSONObject
object PhoneUtils { object PhoneUtils {
private val TAG: String = PhoneUtils.javaClass.name private val TAG: String = PhoneUtils.javaClass.name
...@@ -58,13 +56,22 @@ object PhoneUtils { ...@@ -58,13 +56,22 @@ object PhoneUtils {
{ code, result -> { code, result ->
if (code != 1000) { if (code != 1000) {
callback(false, "") callback(false, "")
} else {
DataReoortUtils.report("st_login_one_show")
} }
Log.i(TAG, "openLoginAuth: $result") Log.i(TAG, "openLoginAuth: $result")
} }
) { code, result -> ) { code, result ->
if (code == 1000) { if (code == 1000) {
val json = JSONObject(result) val json = JSONObject(result)
DataReoortUtils.report("st_login_one_result", mapOf("result" to 1))
callback(true, json.getString("token")) callback(true, json.getString("token"))
} else {
DataReoortUtils.report(
"st_login_one_result",
mapOf("result" to 0, "cause" to result)
)
} }
} }
} }
...@@ -139,9 +146,10 @@ object PhoneUtils { ...@@ -139,9 +146,10 @@ object PhoneUtils {
.addCustomView( .addCustomView(
mOtherTv, true, false mOtherTv, true, false
) { context, view -> ) { context, view ->
val intent = Intent(context,PhoneLoginActivity::class.java) val intent = Intent(context, PhoneLoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent) context.startActivity(intent)
DataReoortUtils.report("st_login_other_clk")
} }
.setPrivacyState(false) .setPrivacyState(false)
.setCheckedImgPath(mCheckedImg) .setCheckedImgPath(mCheckedImg)
......
...@@ -12,6 +12,7 @@ object SettingSPUtils { ...@@ -12,6 +12,7 @@ object SettingSPUtils {
private val IS_FIRST_ACC_SUCCESS = "is_first_acc_success" private val IS_FIRST_ACC_SUCCESS = "is_first_acc_success"
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" private val IS_SMART_ACC_OPEN = "is_smart_acc_open"
private val LAST_APP_SRART_TIME = "LAST_APP_SRART_TIME"
/** /**
...@@ -41,5 +42,11 @@ object SettingSPUtils { ...@@ -41,5 +42,11 @@ object SettingSPUtils {
MMKV.defaultMMKV().putBoolean(IS_SMART_ACC_OPEN, isSmartAccOpen) MMKV.defaultMMKV().putBoolean(IS_SMART_ACC_OPEN, isSmartAccOpen)
} }
var lastAPPOpenReportTime: Long
get() = MMKV.defaultMMKV().decodeLong(LAST_APP_SRART_TIME, 0L)
set(lastAPPOpenReportTime) {
MMKV.defaultMMKV().putLong(LAST_APP_SRART_TIME, lastAPPOpenReportTime)
}
} }
\ No newline at end of file
...@@ -2,22 +2,21 @@ package com.ccwangluo.accelerator.utils ...@@ -2,22 +2,21 @@ package com.ccwangluo.accelerator.utils
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Build
import android.text.TextUtils import android.text.TextUtils
import android.util.DisplayMetrics import android.util.DisplayMetrics
import com.ccwangluo.accelerator.model.NetState
import com.xuexiang.xpage.base.XPageFragment import com.xuexiang.xpage.base.XPageFragment
import com.xuexiang.xutil.net.NetworkUtils import com.xuexiang.xutil.net.NetworkUtils
import java.io.BufferedReader
import java.io.InputStreamReader
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
import android.app.DownloadManager import android.app.DownloadManager
import android.content.Intent import android.content.Intent
import android.net.* import android.net.*
import android.os.Build
import com.hjq.toast.ToastUtils import com.hjq.toast.ToastUtils
import com.tencent.mmkv.MMKV
import com.xuexiang.xpage.base.XPageActivity import com.xuexiang.xpage.base.XPageActivity
import com.xuexiang.xutil.system.DeviceUtils
import java.lang.Exception import java.lang.Exception
...@@ -41,7 +40,6 @@ object SysUtils { ...@@ -41,7 +40,6 @@ object SysUtils {
} }
/* /*
* 判断设备 是否使用代理上网 * 判断设备 是否使用代理上网
* */ * */
...@@ -118,23 +116,12 @@ object SysUtils { ...@@ -118,23 +116,12 @@ object SysUtils {
} }
fun joinQQGroup(context: Context) { fun joinQQGroup(context: Context) {
/**
val key = "388Tnjzn_jkY7SNKO1ACI6PL5gbhpeYR" val key = "5CmyFzMWyucgmmLTM7JLG_sSArmaFQxT"
val intent = Intent() val intent = Intent()
intent.data = intent.data =
Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D$key") Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D$key")
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
try {
context.startActivity(intent)
} catch (e: Exception) {
ToastUtils.show("没有安装qq")
}*/
val key="5CmyFzMWyucgmmLTM7JLG_sSArmaFQxT"
val intent = Intent()
intent.data =Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D$key")
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
// 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) // 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
// 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) // 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
try { try {
...@@ -144,4 +131,45 @@ object SysUtils { ...@@ -144,4 +131,45 @@ object SysUtils {
ToastUtils.show("没有安装qq") ToastUtils.show("没有安装qq")
} }
} }
fun getDeviceUUID(): String? {
var uuid = loadDeviceUUID()
if (TextUtils.isEmpty(uuid)) {
uuid = buildDeviceUUID()
saveDeviceUUID(uuid)
}
return uuid
}
private fun buildDeviceUUID(): String {
var androidId: String = DeviceUtils.getAndroidID()
if ("9774d56d682e549c" == androidId) {
val random = Random()
androidId = (Integer.toHexString(random.nextInt())
+ Integer.toHexString(random.nextInt())
+ Integer.toHexString(random.nextInt()))
}
return UUID(androidId.hashCode().toLong(), getBuildInfo().hashCode().toLong()).toString()
}
fun getBuildInfo(): String {
val buildSB = StringBuffer()
buildSB.append(Build.BRAND).append("/")
buildSB.append(Build.PRODUCT).append("/")
buildSB.append(Build.DEVICE).append("/")
buildSB.append(Build.ID).append("/")
buildSB.append(Build.VERSION.INCREMENTAL)
return buildSB.toString()
}
private fun saveDeviceUUID(uuid: String) {
//device_uuid
MMKV.defaultMMKV().putString("device_uuid", uuid)
}
private fun loadDeviceUUID(): String? {
return MMKV.defaultMMKV().decodeString("device_uuid", null)
}
} }
\ No newline at end of file
package com.ccwangluo.accelerator.utils.dataReport
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.SysUtils
import com.google.gson.JsonObject
import com.xuexiang.xutil.net.NetworkUtils
import org.json.JSONObject
import java.time.LocalDateTime
data class BaseData(
var channel: Int = 0,
var client_ip: String = NetworkUtils.getIPAddress(true),
var did: String? = SysUtils.getDeviceUUID(),
var ds: String = LocalDateTime.now().toString(),
var event: String = "",
var ouid: String? = LoginUtils.uid,
var platform: Int = 1,
var role_id: String = "0",
var server: Int = 0,
var data: JsonObject? = null
)
package com.ccwangluo.accelerator.utils.dataReport
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.http.HttpGo
import com.google.gson.Gson
import com.google.gson.JsonParser
import com.xuexiang.xutil.net.NetworkUtils
import org.json.JSONObject
import java.time.LocalDateTime
/**
* 日志上报
*/
object DataReoortUtils {
val list = mutableSetOf<BaseData>()
val gson = Gson()
fun report(eventName: String, param: Map<String, out Any>) {
report(eventName, gson.toJson(param).toString())
}
fun report(eventName: String, dataInfo: String?) {
val data = BaseData()
dataInfo?.let {
data.data = JsonParser().parse(it).asJsonObject
}
data.event = eventName
list.add(data)
if (SysUtils.getConnectivityStatus()) {
var set = mutableSetOf<BaseData>()
set.addAll(list)
list.clear()
HttpGo.postDataASync("https://d-tt-agent.srccwl.com/data/batch", set) {
if (!it) {
list.addAll(set)
}
}
}
}
fun report(eventName: String) {
report(eventName, null)
}
}
\ No newline at end of file
...@@ -2,20 +2,26 @@ package com.ccwangluo.accelerator.utils.http ...@@ -2,20 +2,26 @@ package com.ccwangluo.accelerator.utils.http
import com.ccwangluo.accelerator.model.BaseModel import com.ccwangluo.accelerator.model.BaseModel
import com.ccwangluo.accelerator.utils.LoginUtils import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.dataReport.BaseData
import com.github.shadowsocks.http.HttpConfig import com.github.shadowsocks.http.HttpConfig
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 com.tencent.bugly.proguard.T
import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.XUtil
import com.umeng.vt.diff.V import com.umeng.vt.diff.V
import okhttp3.* import okhttp3.*
import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import timber.log.Timber import timber.log.Timber
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.Level
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
...@@ -37,6 +43,7 @@ object HttpGo { ...@@ -37,6 +43,7 @@ object HttpGo {
.sslSocketFactory(initSSLSocketFactory(), initTrustManager()) .sslSocketFactory(initSSLSocketFactory(), initTrustManager())
.build() .build()
gson = Gson() gson = Gson()
Logger.getLogger(OkHttpClient::class.java.getName()).setLevel(Level.FINE)
} }
...@@ -59,11 +66,11 @@ object HttpGo { ...@@ -59,11 +66,11 @@ object HttpGo {
if (response.isSuccessful) { if (response.isSuccessful) {
val type = object : TypeToken<BaseModel<T>>() {}.type val type = object : TypeToken<BaseModel<T>>() {}.type
val string = response.body?.string() val string = response.body?.string()
val result : BaseModel<T>? = gson.fromJson(string, type) val result: BaseModel<T>? = gson.fromJson(string, type)
return result return result
} else if (response.code == 401){ } else if (response.code == 401) {
LoginUtils.clearToken() LoginUtils.clearToken()
LoginUtils.login(XUtil.getContext(),{}) LoginUtils.login(XUtil.getContext(), {})
} else { } else {
ToastUtils.show("网络错误") ToastUtils.show("网络错误")
} }
...@@ -81,7 +88,10 @@ object HttpGo { ...@@ -81,7 +88,10 @@ object HttpGo {
/** /**
* 同步请求 * 同步请求
*/ */
inline fun <reified T> postSync(url: String, param: MutableMap<String, out Any>): BaseModel<T>? { inline fun <reified T> postSync(
url: String,
param: MutableMap<String, out Any>
): 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.Builder() val request = Request.Builder()
...@@ -95,20 +105,14 @@ object HttpGo { ...@@ -95,20 +105,14 @@ object HttpGo {
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()
Timber.i("postSync:"+string.toString()) Timber.i("postSync:" + string.toString())
val type = object : TypeToken<BaseModel<T>>() {}.type val type = object : TypeToken<BaseModel<T>>() {}.type
val result : BaseModel<T>? = gson.fromJson(string, type) val result: BaseModel<T>? = gson.fromJson(string, type)
result?.let {
if(it.code == 401) {
LoginUtils.clearToken()
LoginUtils.login(XUtil.getContext(),{})
}
}
return result return result
}else if (response.code == 401){ } else if (response.code == 401) {
LoginUtils.clearToken() LoginUtils.clearToken()
LoginUtils.login(XUtil.getContext(),{}) LoginUtils.login(XUtil.getContext(), {})
} else { } else {
ToastUtils.show("网络错误") ToastUtils.show("网络错误")
...@@ -119,6 +123,35 @@ object HttpGo { ...@@ -119,6 +123,35 @@ object HttpGo {
return null return null
} }
/**
* 异步请求 (专用于数据上报)
*/
fun postDataASync(url: String, param: MutableSet<BaseData>, callback: (Boolean) -> Unit) {
try {
val prebody = gson.toJson(param).toString()
Timber.i("pre postDataASync:%s", prebody)
val body: RequestBody = prebody.toRequestBody(jsonType)
val request = Request.Builder()
.url(url)
.post(body)
val call = okHttpClient.newCall(request.build())
call.enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
callback(false)
}
override fun onResponse(call: Call, response: Response) {
var result = response.body?.string()
Timber.i("success postDataASync:%s", result)
callback(true)
}
})
} catch (e: java.lang.Exception) {
Timber.i("error postASync:" + e)
}
}
private fun initSSLSocketFactory(): SSLSocketFactory { private fun initSSLSocketFactory(): SSLSocketFactory {
var sslContext: SSLContext? = null var sslContext: SSLContext? = null
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
<item> <item>
<shape> <shape>
<gradient <gradient
android:endColor="#6646DE" android:endColor="#ee6646DE"
android:startColor="#4FDDE3" /> android:startColor="#ee4FDDE3" />
<corners android:radius="2dp"/> <corners android:radius="2dp"/>
</shape> </shape>
</item> </item>
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
android:textSize="16sp" /> android:textSize="16sp" />
<ImageView <ImageView
android:id="@+id/acc_share"
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="20dp" android:layout_height="20dp"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
android:layout_width="32dp" android:layout_width="32dp"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:layout_height="5dp" android:layout_height="5dp"
android:layout_marginBottom="5dp"
android:src="@drawable/tab_bg" /> android:src="@drawable/tab_bg" />
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
......
...@@ -36,6 +36,7 @@ object AuthManager { ...@@ -36,6 +36,7 @@ object AuthManager {
val okHttpClient: OkHttpClient val okHttpClient: OkHttpClient
val gson: Gson val gson: Gson
val mmkv = MMKV.mmkvWithID("InterProcessKV", MMKV.MULTI_PROCESS_MODE)
private const val KEY_TOKEN = "com.ccwangluo.KEY_TOKEN" private const val KEY_TOKEN = "com.ccwangluo.KEY_TOKEN"
...@@ -53,33 +54,33 @@ object AuthManager { ...@@ -53,33 +54,33 @@ object AuthManager {
} }
var gameId: String? var gameId: String?
get() = MMKV.defaultMMKV().decodeString("CONFIG_GAMEID", null) get() = mmkv.decodeString("CONFIG_GAMEID", null)
set(gameId) { set(gameId) {
MMKV.defaultMMKV().putString("CONFIG_GAMEID", gameId) mmkv.putString("CONFIG_GAMEID", gameId)
} }
var area: String? var area: String?
get() = MMKV.defaultMMKV().decodeString("CONFIG_AREA", null) get() = mmkv.decodeString("CONFIG_AREA", null)
set(gameId) { set(gameId) {
MMKV.defaultMMKV().putString("CONFIG_AREA", gameId) mmkv.putString("CONFIG_AREA", gameId)
} }
var authToken: String? var authToken: String?
get() = MMKV.mmkvWithID("InterProcessKV", MMKV.MULTI_PROCESS_MODE).decodeString(KEY_TOKEN, null) get() = mmkv.decodeString(KEY_TOKEN, null)
set(token) { set(token) {
MMKV.mmkvWithID("InterProcessKV", MMKV.MULTI_PROCESS_MODE).putString(KEY_TOKEN, token) mmkv.putString(KEY_TOKEN, token)
} }
// 加速时长 // 加速时长
var ACC_TIME: Long var ACC_TIME: Long
get() = MMKV.defaultMMKV().decodeLong("ACC_TIME", 0L) get() = mmkv.decodeLong("ACC_TIME", 0L)
set(acc_time) { set(acc_time) {
MMKV.defaultMMKV().putLong("ACC_TIME", acc_time) mmkv.putLong("ACC_TIME", acc_time)
} }
var Last_ACC_TIme: Long var Last_ACC_TIme: Long
get() = MMKV.defaultMMKV().decodeLong("LAST_ACC_TIME", 0L) get() = mmkv.decodeLong("LAST_ACC_TIME", 0L)
set(last_acc_time) { set(last_acc_time) {
MMKV.defaultMMKV().putLong("LAST_ACC_TIME", last_acc_time) mmkv.putLong("LAST_ACC_TIME", last_acc_time)
} }
class AuthException(msg: String) : IOException(msg), BaseService.ExpectedException class AuthException(msg: String) : IOException(msg), BaseService.ExpectedException
......
...@@ -12,7 +12,7 @@ object HttpConfig { ...@@ -12,7 +12,7 @@ object HttpConfig {
* 主页h5 * 主页h5
*/ */
val UI_MAIN_URL = "https://test-cc-tt-front.orangenet.org.cn/#" //测试 val UI_MAIN_URL = "https://test-cc-tt-front.orangenet.org.cn/#" //测试
//val UI_MAIN_URL = "http://10.3.64.200:8080/#" // val UI_MAIN_URL = "http://10.3.64.200:8080/#"
//val UI_MAIN_URL = "https://cc-tt-front.srccwl.com/#" //生产 //val UI_MAIN_URL = "https://cc-tt-front.srccwl.com/#" //生产
//隐私协议地址 //隐私协议地址
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment