Commit 1342942d authored by sheteng's avatar sheteng

打点

parent 518ef4a0
......@@ -7,6 +7,8 @@ import android.os.Environment
import androidx.multidex.MultiDex
import com.ccwangluo.accelerator.ui.MainActivity
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.hjq.toast.ToastUtils
import com.tencent.bugly.Bugly
......@@ -35,11 +37,11 @@ class App : Application(), androidx.work.Configuration.Provider by Core {
MultiDex.install(this)
Core.init(this, MainActivity::class)
MMKV.initialize(this)
XGPushConfig.enableDebug(this,true);
XGPushConfig.enableDebug(this, true);
XUtil.init(this)
}
fun initBugly(){
fun initBugly() {
/**
* true表示app启动自动初始化升级模块; false不会自动初始化;
* 开发者如果担心sdk初始化影响app启动速度,可以设置为false,
......
......@@ -9,8 +9,8 @@ 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.NewsFragment
import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xpage.base.XPageFragment
......@@ -100,6 +100,10 @@ class BottomNavigationFragment : XPageFragment(), ViewPager.OnPageChangeListener
val index: Int = CollectionUtils.arrayIndexOf(titles, item.getTitle())
if (index != -1) {
binding.viewPager.setCurrentItem(index, true)
when(index){
0 -> DataReoortUtils.report("st_speed_tab_clk")
1 -> DataReoortUtils.report("st_msg_tab_clk")
}
return true
}
return false
......
......@@ -34,6 +34,7 @@ import android.hardware.SensorEventListener
import android.os.Handler
import android.util.Log
import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.xuexiang.xutil.net.NetworkUtils
import com.xuexiang.xutil.system.PermissionUtils
import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer
......@@ -50,6 +51,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
private val connect = registerForActivityResult(StartService()) {
if (it) {
DataReoortUtils.report("st_speed_result", mapOf("result" to 0,"cause" to 2))
ToastUtils.show("开启vpn权限失败")
}
}
......@@ -63,6 +65,12 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
accelertorViewModel =
ViewModelProvider(this).get(AccelertorViewModel::class.java)
// app 启动
if (SettingSPUtils.lastAPPOpenReportTime == 0L ||
System.currentTimeMillis() - SettingSPUtils.lastAPPOpenReportTime > 30 * 60 * 1000
) {
DataReoortUtils.report("start_app")
}
initPhoneUtils()
//获取权限
Dexter.withContext(this)
......@@ -105,6 +113,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
PrivacyDialog(this, HttpConfig.HTML_HOST_PRIVACY+"index.html") {
if (it) {
SettingSPUtils.isAgreePrivacy = true
DataReoortUtils.report("st_agrmt_ok")
} else {
finish()
}
......@@ -115,6 +124,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
AcceleratorUtils.initConnect(this, connect)
mSensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
mSensorEventListener = JCVideoPlayer.JCAutoFullscreenListener()
DataReoortUtils.report("st_app_open")
}
......@@ -125,6 +135,7 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
override fun onSuccess(data: Any, flag: Int) {
//token在设备卸载重装的时候有可能会变
Log.d("TPush", "注册成功,设备token为:$data")
DataReoortUtils.report("st_app_start_push")
}
override fun onFail(data: Any, errCode: Int, msg: String) {
......
......@@ -20,6 +20,7 @@ import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment
import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.github.shadowsocks.http.HttpConfig
import com.github.shadowsocks.bg.BaseService
......@@ -80,7 +81,7 @@ class AccelertorFragment : XPageFragment() {
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.netLost2.setText(it.lossRate)
binding.netLost1Unit.visibility = View.VISIBLE
......@@ -150,10 +151,17 @@ class AccelertorFragment : XPageFragment() {
override fun initListeners() {
binding.iconNotice.setOnClickListener {
DataReoortUtils.report("st_speed_sysmsg_clk")
openToWebview(HttpConfig.UI_MESSAGE_URL)
}
binding.accShare.setOnClickListener {
DataReoortUtils.report("st_share_clk")
// TODO: 2022/3/14 share
}
binding.gamePage.setOnClickListener {
DataReoortUtils.report("st_game_sysmsg_clk")
openWebviewForResult(HttpConfig.UI_GAME_URL + "?gameId=${AcceleratorUtils.game?.id}")
}
......@@ -170,13 +178,16 @@ class AccelertorFragment : XPageFragment() {
}
binding.preventAccLost.setOnClickListener {
DataReoortUtils.report("st_speed_lostcon_clk")
openToWebview(HttpConfig.UI_SPEED_URL + "?id=1")
}
binding.preventAccInvalid.setOnClickListener {
DataReoortUtils.report("st_speed_disabl_clk")
openToWebview(HttpConfig.UI_SPEED_URL + "?id=2")
}
binding.btnExpend.setOnClickListener {
DataReoortUtils.report("st_speed_msg_clk")
if (binding.expandableLayout1.isExpanded) {
binding.expandableLayout1.toggle()
binding.expandableLayout2.expand()
......@@ -188,20 +199,24 @@ class AccelertorFragment : XPageFragment() {
}
}
binding.btnQuick.setOnClickListener {
//Beta.checkUpgrade(true,false)
accelertorViewModel.accState.value?.let {
if (it.canStop) {
context?.let {
CommonDialog(it).setTitle("加速停止确认")
.setContent("停止加速可能会导致游戏断线,是否确认停止?")
.setBtnLeft("取消", {}).setBtnRight("停止加速", {
.setBtnLeft("取消", {
DataReoortUtils.report("st_speed_stop_pop_cancel_clk")
}).setBtnRight("停止加速", {
DataReoortUtils.report("st_speed_stop_pop_ok_clk")
AcceleratorUtils.stopAccelerator()
}).show<CommonDialog>()
DataReoortUtils.report("st_speed_stop_pop_show")
}
DataReoortUtils.report("st_speed_stop_clk")
return@setOnClickListener
} else {
DataReoortUtils.report("st_speed_start_clk")
}
}
if (!LoginUtils.hasToken()) {
context?.let { it1 ->
......@@ -209,6 +224,7 @@ class AccelertorFragment : XPageFragment() {
})
}
DataReoortUtils.report("st_speed_result", mapOf("result" to 0, "cause" to "3"))
return@setOnClickListener
}
......@@ -218,6 +234,7 @@ class AccelertorFragment : XPageFragment() {
binding.quickTopToastTx.postDelayed({
binding.quickTopToast.visibility = View.GONE
}, 2000)
DataReoortUtils.report("st_speed_result", mapOf("result" to 0, "cause" to "3"))
return@setOnClickListener
}
AcceleratorUtils.getGameList(this) {
......@@ -230,6 +247,10 @@ class AccelertorFragment : XPageFragment() {
binding.quickTopToastTx.postDelayed({
binding.quickTopToast.visibility = View.GONE
}, 2000)
DataReoortUtils.report(
"st_speed_result",
mapOf("result" to 0, "cause" to "1")
)
return@getGameList
}
}
......@@ -239,10 +260,15 @@ class AccelertorFragment : XPageFragment() {
binding.btnQuick.isEnabled = false
startAnim()
} else {
DataReoortUtils.report(
"st_speed_result",
mapOf("result" to 0, "cause" to 3)
)
MemberDialog(this@AccelertorFragment).show<MemberDialog>()
}
}
} else {
DataReoortUtils.report("st_speed_result", mapOf("result" to 0, "cause" to "3"))
ToastUtils.show("获取游戏配置异常")
}
}
......@@ -253,7 +279,12 @@ class AccelertorFragment : XPageFragment() {
binding.gameStart.setOnClickListener {
if (!binding.expandableLayout1.isExpanded) {
AcceleratorUtils.game?.let {
AppUtils.launchApp(it.packageName)
DataReoortUtils.report("st_speed_game_start_clk")
try {
AppUtils.launchApp(it.packageName)
} catch (e: Exception) {
}
if (state == BaseService.State.Connected) {
binding.gameStart.postDelayed({
ToastUtils.show("TT正在为游戏加速")
......@@ -262,6 +293,8 @@ class AccelertorFragment : XPageFragment() {
}
}
}
}
fun openToWebview(url: String) {
......@@ -282,12 +315,12 @@ class AccelertorFragment : XPageFragment() {
override fun onFragmentResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onFragmentResult(requestCode, resultCode, data)
if(requestCode==CLICK_START_ACC_REQUEST_CODE){
if (requestCode == CLICK_START_ACC_REQUEST_CODE) {
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) {
LoginUtils.token?.let {
PageOption.to(CommonWebViewFragment::class.java)
......@@ -297,7 +330,7 @@ class AccelertorFragment : XPageFragment() {
} ?: let {
context?.let { it1 ->
LoginUtils.login(it1) {
if(it){
if (it) {
PageOption.to(CommonWebViewFragment::class.java)
.putString(
CommonWebViewFragment.WEBVIEW_URL_KEY,
......@@ -319,10 +352,14 @@ class AccelertorFragment : XPageFragment() {
context?.let {
CommonDialog(it).setTitle("防止加速掉线")
.setContent("为了防止加速进程被手机系统中断,影响游戏加速,请确保完成相关设置")
.setBtnLeft("取消", {}).setBtnRight("去设置", {
.setBtnLeft("取消", {
DataReoortUtils.report("st_speed_course_pop_cancel_clk")
}).setBtnRight("去设置", {
openToWebview(HttpConfig.UI_SPEED_URL + "?id=1")
DataReoortUtils.report("st_speed_course_pop_set_clk")
}).show<CommonDialog>()
SettingSPUtils.isFirstAccSuccess = false
DataReoortUtils.report("st_speed_course_pop_show")
}
}
......@@ -389,8 +426,9 @@ class AccelertorFragment : XPageFragment() {
binding.progressViewCircleSmall.startProgressAnimation()
}
fun startAccSuccess(){
fun startAccSuccess() {
if (binding.gameStart.visibility == View.GONE) {
DataReoortUtils.report("st_speed_result", mapOf("result" to 1))
binding.gamePicIn1.startAnimation(getDefaultAnim())
binding.accStateTx.visibility = View.VISIBLE
binding.btnQuick.setBackgroundResource(R.mipmap.quick_stop)
......
......@@ -24,14 +24,17 @@ import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment
import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.cc_quickly.utils.XToastUtils
import com.github.shadowsocks.http.HttpConfig
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.hjq.toast.ToastUtils
import com.just.agentweb.download.DownloadTask
import com.xuexiang.xpage.base.XPageFragment
import com.xuexiang.xpage.utils.TitleBar
import com.xuexiang.xui.widget.tabbar.TabSegment
import com.xuexiang.xui.widget.toast.XToast
import com.xuexiang.xutil.XUtil
import com.xuexiang.xutil.app.AppUtils
......@@ -101,12 +104,14 @@ class NewsFragment : XPageFragment() {
if (itemData.type == 1) {
itemData.url?.let {
DataReoortUtils.report("st_qq_clk", mapOf("scene" to 3))
context?.let { it1 -> SysUtils.joinQQGroup(it1) }
}
}
if (itemData.type == 2) {
itemData.url?.let {
DataReoortUtils.report("st_google_clk", mapOf("scene" to 3))
openToWebview(it)
}
}
......@@ -133,6 +138,24 @@ class NewsFragment : XPageFragment() {
tab.setCustomView(R.layout.item_tab)
tab.text = titles[position]
}.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) {
if (it) {
AcceleratorUtils.game?.let {
......
......@@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.ccwangluo.accelerator.model.LoginRes
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.accelerator.utils.http.HttpGo
import com.hjq.toast.ToastUtils
import kotlinx.coroutines.Dispatchers
......@@ -26,9 +27,18 @@ class LoginViewModel : ViewModel() {
val res = HttpGo.postSync<LoginRes>("/api/user/verifyCode/login", map)
res?.let {
if (it.code == 200) {
DataReoortUtils.report("st_login_vercode_result", mapOf("result" to 1))
LoginUtils.token = it.data?.token
LoginUtils.uid = it.data?.phone
loginState.postValue(true)
} 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)
}
}
......@@ -48,7 +58,7 @@ class LoginViewModel : ViewModel() {
sendCodeState.postValue(false)
ToastUtils.show(it.error)
}
}?:let {
} ?: let {
sendCodeState.postValue(false)
}
}
......
......@@ -10,6 +10,7 @@ import com.ccwangluo.accelerator.ui.web.BlankActivity
import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment
import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.github.shadowsocks.http.HttpConfig
import com.hjq.toast.ToastUtils
import com.xuexiang.xpage.annotation.Page
......@@ -32,6 +33,7 @@ class PhoneLoginActivity : XPageActivity() {
setContentView(binding.root)
initViews()
initListeners()
DataReoortUtils.report("st_login_vercode_show")
}
fun initViews() {
......@@ -50,6 +52,16 @@ class PhoneLoginActivity : XPageActivity() {
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 {
val authCdoe = it.toString().trim()
......@@ -77,6 +89,7 @@ class PhoneLoginActivity : XPageActivity() {
loginViewModel.loginState.observe(this, {
if (it) {
LoginUtils.stopTimer()
DataReoortUtils.report("role_entry", mutableMapOf("login" to "login_vercode"))
finish()
}
})
......@@ -105,7 +118,7 @@ class PhoneLoginActivity : XPageActivity() {
}
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)
startActivity(intent)
}
......@@ -115,6 +128,7 @@ class PhoneLoginActivity : XPageActivity() {
}
binding.authCodeBtn.setOnClickListener {
DataReoortUtils.report("st_login_vercode_request_clk")
val phone = binding.phoneEt.text.toString()
if (StringUtils.isEmpty(phone) || !isPhone(phone)) {
ToastUtils.show("输入正确的手机号")
......@@ -129,6 +143,7 @@ class PhoneLoginActivity : XPageActivity() {
}
binding.login.setOnClickListener {
DataReoortUtils.report("st_login_vercode_btn_clk")
//检查验证码,手机号格式
val phone = binding.phoneEt.text.toString()
val authCdoe = binding.authCodeEt.text.toString()
......
......@@ -26,6 +26,7 @@ import android.util.DisplayMetrics
import android.util.Log
import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.github.shadowsocks.bg.BaseService
import com.github.shadowsocks.plugin.PluginContract
import com.tencent.bugly.beta.Beta
......@@ -91,10 +92,13 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
@JavascriptInterface
fun openWebviewByWholeUrl(url: String) {
val params = Bundle()
if(url.startsWith("http:")||url.startsWith("https:")){
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY,url)
}else{
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY, HttpConfig.HTML_HOST_PRIVACY+url)
if (url.startsWith("http:") || url.startsWith("https:")) {
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY, url)
} else {
params.putString(
CommonWebViewFragment.WEBVIEW_URL_KEY,
HttpConfig.HTML_HOST_PRIVACY + url
)
}
xPageFragment.openPage(CommonWebViewFragment::class.java, params)
......@@ -103,7 +107,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
//打开系统设置
@JavascriptInterface
fun openSysSetting() {
xPageFragment.startActivity( Intent(Settings.ACTION_SETTINGS));
xPageFragment.startActivity(Intent(Settings.ACTION_SETTINGS));
}
@JavascriptInterface
......@@ -129,7 +133,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
* 获取token
*/
@JavascriptInterface
fun getToken(callback: String){
fun getToken(callback: String) {
agentWeb.getJsAccessEntrace()
.quickCallJs(callback, LoginUtils.token)
}
......@@ -143,11 +147,16 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
//是否有更新:1有 0没有
//最新安装包的版本名称
agentWeb.jsAccessEntrace
.quickCallJs(callback, "1", AppUtils.getAppVersionName(),it.versionName)
.quickCallJs(callback, "1", AppUtils.getAppVersionName(), it.versionName)
} ?: let{
} ?: let {
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)
* 当前加速状态 1 加速中,0 未加速
*/
@JavascriptInterface
fun getAccelerateState(callback: String){
if(BaseService.State.Connected==AcceleratorUtils.state){
fun getAccelerateState(callback: String) {
if (BaseService.State.Connected == AcceleratorUtils.state) {
agentWeb.jsAccessEntrace
.quickCallJs(callback, "1")
}else{
} else {
agentWeb.jsAccessEntrace
.quickCallJs(callback, "0")
}
}
private val handler:Handler =Handler()
private val handler: Handler = Handler()
/**
* 点击游戏主页下面的加速按钮调用
*/
@JavascriptInterface
fun clickAccelerateBtn(){
fun clickAccelerateBtn() {
handler.post {
xPageFragment.setFragmentResult(500, Intent())
xPageFragment.popToBack()
......@@ -183,7 +192,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
*/
@JavascriptInterface
fun doAppUpdate() {
Beta.checkUpgrade(true,false)
Beta.checkUpgrade(true, false)
}
/**
......@@ -326,7 +335,8 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
.quickCallJs(
callback,
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)
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
import androidx.lifecycle.lifecycleScope
import com.ccwangluo.accelerator.model.*
import com.ccwangluo.accelerator.ui.dialog.CommonDialog
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.accelerator.utils.http.HttpGo
import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.github.shadowsocks.Core
......@@ -215,6 +216,7 @@ object AcceleratorUtils {
AcceleratorUtils.state = state
stateListener(state, getAccTime(), null)
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已到期"))){
vipExpireListener()
}else{
......
......@@ -8,6 +8,7 @@ import androidx.lifecycle.lifecycleScope
import com.ccwangluo.accelerator.model.LoginRes
import com.ccwangluo.accelerator.model.UserProfile
import com.ccwangluo.accelerator.ui.login.PhoneLoginActivity
import com.ccwangluo.accelerator.utils.dataReport.DataReoortUtils
import com.ccwangluo.accelerator.utils.http.HttpGo
import com.chuanglan.shanyan_sdk.OneKeyLoginManager
import com.github.shadowsocks.Core
......@@ -116,9 +117,11 @@ object LoginUtils {
res?.let {
if (it.code == 200) {
token = it.data?.token
uid = it.data?.phone
withContext(Dispatchers.Main) {
ToastUtils.show("登录成功")
OneKeyLoginManager.getInstance().finishAuthActivity()
DataReoortUtils.report("role_entry", mutableMapOf("login" to "login_all"))
callBack(true)
}
} else {
......@@ -161,6 +164,12 @@ object LoginUtils {
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() {
}
......
......@@ -11,6 +11,7 @@ import android.widget.RelativeLayout
import android.widget.TextView
import com.ccwangluo.accelerator.R
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.tool.ShanYanUIConfig
......@@ -20,9 +21,6 @@ import com.xuexiang.xpage.core.PageOption
import org.json.JSONObject
object PhoneUtils {
private val TAG: String = PhoneUtils.javaClass.name
......@@ -58,13 +56,22 @@ object PhoneUtils {
{ code, result ->
if (code != 1000) {
callback(false, "")
} else {
DataReoortUtils.report("st_login_one_show")
}
Log.i(TAG, "openLoginAuth: $result")
}
) { code, result ->
if (code == 1000) {
val json = JSONObject(result)
DataReoortUtils.report("st_login_one_result", mapOf("result" to 1))
callback(true, json.getString("token"))
} else {
DataReoortUtils.report(
"st_login_one_result",
mapOf("result" to 0, "cause" to result)
)
}
}
}
......@@ -92,7 +99,7 @@ object PhoneUtils {
RelativeLayout.LayoutParams.WRAP_CONTENT
)
val screenHeight = AbScreenUtils.getScreenHeight(context, false)
val mOtherTvTop = AbScreenUtils.dp2px(context, 100f)
val mOtherTvTop = AbScreenUtils.dp2px(context, 100f)
otherLayoutParams.setMargins(0, screenHeight - mOtherTvTop, 0, 0)
otherLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL)
mOtherTv.layoutParams = otherLayoutParams
......@@ -139,10 +146,11 @@ object PhoneUtils {
.addCustomView(
mOtherTv, true, false
) { context, view ->
val intent = Intent(context,PhoneLoginActivity::class.java)
val intent = Intent(context, PhoneLoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent)
}
DataReoortUtils.report("st_login_other_clk")
}
.setPrivacyState(false)
.setCheckedImgPath(mCheckedImg)
.setUncheckedImgPath(mCunheckedImg)
......
......@@ -12,6 +12,7 @@ object SettingSPUtils {
private val IS_FIRST_ACC_SUCCESS = "is_first_acc_success"
private val IS_AGREE_PRIVACY_KEY = "is_agree_privacy_key"
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 {
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
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.text.TextUtils
import android.util.DisplayMetrics
import com.ccwangluo.accelerator.model.NetState
import com.xuexiang.xpage.base.XPageFragment
import com.xuexiang.xutil.net.NetworkUtils
import java.io.BufferedReader
import java.io.InputStreamReader
import java.text.SimpleDateFormat
import java.util.*
import kotlin.collections.ArrayList
import android.app.DownloadManager
import android.content.Intent
import android.net.*
import android.os.Build
import com.hjq.toast.ToastUtils
import com.tencent.mmkv.MMKV
import com.xuexiang.xpage.base.XPageActivity
import com.xuexiang.xutil.system.DeviceUtils
import java.lang.Exception
......@@ -41,7 +40,6 @@ object SysUtils {
}
/*
* 判断设备 是否使用代理上网
* */
......@@ -118,23 +116,12 @@ object SysUtils {
}
fun joinQQGroup(context: Context) {
/**
val key = "388Tnjzn_jkY7SNKO1ACI6PL5gbhpeYR"
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)
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)
try {
......@@ -144,4 +131,45 @@ object SysUtils {
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
import com.ccwangluo.accelerator.model.BaseModel
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.dataReport.BaseData
import com.github.shadowsocks.http.HttpConfig
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.hjq.toast.ToastUtils
import com.tencent.bugly.proguard.T
import com.xuexiang.xutil.XUtil
import com.umeng.vt.diff.V
import okhttp3.*
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import timber.log.Timber
import java.io.IOException
import java.security.SecureRandom
import java.security.cert.X509Certificate
import java.util.concurrent.TimeUnit
import java.util.logging.Level
import java.util.logging.Logger
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLSocketFactory
import javax.net.ssl.X509TrustManager
......@@ -37,6 +43,7 @@ object HttpGo {
.sslSocketFactory(initSSLSocketFactory(), initTrustManager())
.build()
gson = Gson()
Logger.getLogger(OkHttpClient::class.java.getName()).setLevel(Level.FINE)
}
......@@ -59,11 +66,11 @@ object HttpGo {
if (response.isSuccessful) {
val type = object : TypeToken<BaseModel<T>>() {}.type
val string = response.body?.string()
val result : BaseModel<T>? = gson.fromJson(string, type)
val result: BaseModel<T>? = gson.fromJson(string, type)
return result
} else if (response.code == 401){
LoginUtils.clearToken()
LoginUtils.login(XUtil.getContext(),{})
} else if (response.code == 401) {
LoginUtils.clearToken()
LoginUtils.login(XUtil.getContext(), {})
} else {
ToastUtils.show("网络错误")
}
......@@ -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 {
val body: RequestBody = gson.toJson(param).toString().toRequestBody(jsonType)
val request = Request.Builder()
......@@ -95,20 +105,14 @@ object HttpGo {
val response: Response = call.execute()
if (response.isSuccessful) {
val string = response.body?.string()
Timber.i("postSync:"+string.toString())
Timber.i("postSync:" + string.toString())
val type = object : TypeToken<BaseModel<T>>() {}.type
val result : BaseModel<T>? = gson.fromJson(string, type)
result?.let {
if(it.code == 401) {
LoginUtils.clearToken()
LoginUtils.login(XUtil.getContext(),{})
}
}
val result: BaseModel<T>? = gson.fromJson(string, type)
return result
}else if (response.code == 401){
} else if (response.code == 401) {
LoginUtils.clearToken()
LoginUtils.login(XUtil.getContext(),{})
LoginUtils.clearToken()
LoginUtils.login(XUtil.getContext(), {})
} else {
ToastUtils.show("网络错误")
......@@ -119,6 +123,35 @@ object HttpGo {
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 {
var sslContext: SSLContext? = null
......
......@@ -4,8 +4,8 @@
<item>
<shape>
<gradient
android:endColor="#6646DE"
android:startColor="#4FDDE3" />
android:endColor="#ee6646DE"
android:startColor="#ee4FDDE3" />
<corners android:radius="2dp"/>
</shape>
</item>
......
......@@ -32,6 +32,7 @@
android:textSize="16sp" />
<ImageView
android:id="@+id/acc_share"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentEnd="true"
......
......@@ -10,6 +10,7 @@
android:layout_width="32dp"
android:layout_centerHorizontal="true"
android:layout_height="5dp"
android:layout_marginBottom="5dp"
android:src="@drawable/tab_bg" />
<com.google.android.material.textview.MaterialTextView
......
......@@ -36,6 +36,7 @@ object AuthManager {
val okHttpClient: OkHttpClient
val gson: Gson
val mmkv = MMKV.mmkvWithID("InterProcessKV", MMKV.MULTI_PROCESS_MODE)
private const val KEY_TOKEN = "com.ccwangluo.KEY_TOKEN"
......@@ -53,33 +54,33 @@ object AuthManager {
}
var gameId: String?
get() = MMKV.defaultMMKV().decodeString("CONFIG_GAMEID", null)
get() = mmkv.decodeString("CONFIG_GAMEID", null)
set(gameId) {
MMKV.defaultMMKV().putString("CONFIG_GAMEID", gameId)
mmkv.putString("CONFIG_GAMEID", gameId)
}
var area: String?
get() = MMKV.defaultMMKV().decodeString("CONFIG_AREA", null)
get() = mmkv.decodeString("CONFIG_AREA", null)
set(gameId) {
MMKV.defaultMMKV().putString("CONFIG_AREA", gameId)
mmkv.putString("CONFIG_AREA", gameId)
}
var authToken: String?
get() = MMKV.mmkvWithID("InterProcessKV", MMKV.MULTI_PROCESS_MODE).decodeString(KEY_TOKEN, null)
get() = mmkv.decodeString(KEY_TOKEN, null)
set(token) {
MMKV.mmkvWithID("InterProcessKV", MMKV.MULTI_PROCESS_MODE).putString(KEY_TOKEN, token)
mmkv.putString(KEY_TOKEN, token)
}
// 加速时长
var ACC_TIME: Long
get() = MMKV.defaultMMKV().decodeLong("ACC_TIME", 0L)
get() = mmkv.decodeLong("ACC_TIME", 0L)
set(acc_time) {
MMKV.defaultMMKV().putLong("ACC_TIME", acc_time)
mmkv.putLong("ACC_TIME", acc_time)
}
var Last_ACC_TIme: Long
get() = MMKV.defaultMMKV().decodeLong("LAST_ACC_TIME", 0L)
get() = mmkv.decodeLong("LAST_ACC_TIME", 0L)
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
......
......@@ -12,7 +12,7 @@ object HttpConfig {
* 主页h5
*/
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/#" //生产
//隐私协议地址
......
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