Commit f0acd09f authored by sheteng's avatar sheteng

与 H5 对接

parent f6b90158
package com.ccwangluo.accelerator.model
data class NewsRes(
val avatar: String?,
val content: String?,
val createdDate: String?,
val greatNum: Int?,
val id: Int?,
val nickname: String?,
val title: String?,
val video: String?,
val videoName: String?
)
\ No newline at end of file
......@@ -18,7 +18,7 @@ import com.xuexiang.xui.adapter.FragmentAdapter
import com.xuexiang.xutil.common.CollectionUtils
@Page(name = "主页")
@Page(name = "main")
class BottomNavigationFragment : XPageFragment(), ViewPager.OnPageChangeListener,
BottomNavigationView.OnNavigationItemSelectedListener {
private lateinit var accelertorViewModel: AccelertorViewModel
......@@ -37,15 +37,20 @@ class BottomNavigationFragment : XPageFragment(), ViewPager.OnPageChangeListener
}
var titles = arrayOf("加速", "资讯", "我的")
var fragments = arrayOf(
AccelertorFragment.newInstance(),
NewsFragment.newInstance(),
MineFragment.newInstance()
)
override fun initViews() {
val adapter = FragmentAdapter<XPageFragment>(
childFragmentManager
)
adapter.addFragment(AccelertorFragment.newInstance(), titles[0])
adapter.addFragment(NewsFragment.newInstance(), titles[1])
adapter.addFragment(MineFragment.newInstance(), titles[2])
adapter.addFragment(fragments[0], titles[0])
adapter.addFragment(fragments[1], titles[1])
adapter.addFragment(fragments[2], titles[2])
binding.viewPager.setOffscreenPageLimit(titles.size - 1);
binding.viewPager.adapter = adapter
......@@ -61,11 +66,13 @@ class BottomNavigationFragment : XPageFragment(), ViewPager.OnPageChangeListener
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
fragments[binding.viewPager.currentItem].onHiddenChanged(hidden)
if (hidden) {
getUserProfile()
}
}
fun getUserProfile() {
LoginUtils.token?.let {
LoginUtils.getUserProfile(this) {
......
......@@ -10,9 +10,8 @@ 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.LoginUtils
import com.ccwangluo.accelerator.utils.PhoneUtils
import com.ccwangluo.accelerator.utils.http.HttpConfig
import com.github.shadowsocks.HttpConfig
import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.github.shadowsocks.utils.StartService
import com.hjq.toast.ToastUtils
......@@ -85,14 +84,14 @@ class MainActivity() : XPageActivity(), TencentLocationListener {
Tencent.setIsPermissionGranted(true)
//隐私协议
if (!SettingSPUtils.isAgreePrivacy) {
PrivacyDialog(this, HttpConfig.privacy_url, {
PrivacyDialog(this, HttpConfig.privacy_url) {
if (it) {
SettingSPUtils.isAgreePrivacy = true
} else {
finish()
}
}).show<PrivacyDialog>()
}.show<PrivacyDialog>()
}
AcceleratorUtils.initConnect(this, connect)
......
......@@ -5,7 +5,7 @@ import android.os.Bundle
import android.widget.ImageView
import com.ccwangluo.accelerator.R
import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment
import com.ccwangluo.accelerator.utils.http.HttpConfig
import com.github.shadowsocks.HttpConfig
import com.xuexiang.xpage.base.XPageFragment
import com.xuexiang.xui.widget.dialog.materialdialog.CustomMaterialDialog
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
......
package com.ccwangluo.accelerator.ui.home
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
......@@ -12,10 +13,12 @@ import com.ccwangluo.accelerator.R
import com.ccwangluo.accelerator.databinding.FragmentQuickBinding
import com.ccwangluo.accelerator.ui.dialog.CommonDialog
import com.ccwangluo.accelerator.ui.dialog.MemberDialog
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.cc_quickly.utils.SettingSPUtils
import com.github.shadowsocks.HttpConfig
import com.github.shadowsocks.bg.BaseService
import com.hjq.toast.ToastUtils
import com.xuexiang.xpage.base.XPageFragment
......@@ -97,17 +100,45 @@ class AccelertorFragment : XPageFragment() {
freshData(it, acc_timer)
})
accelertorViewModel.userProfile.observe(this,{
accelertorViewModel.userProfile.observe(this, {
if (it.hasUnreadNotice) {
binding.iconNoticeBadge.visibility = View.VISIBLE
} else {
binding.iconNoticeBadge.visibility = View.GONE
}
})
binding.progressViewCircleSmall.setProgressTextVisibility(false)
}
override fun initListeners() {
binding.iconNotice.setOnClickListener {
openToWebview("/message")
}
binding.gamePage.setOnClickListener {
openToWebview("/game")
}
binding.smartAccOpen.setOnClickListener {
if (!SettingSPUtils.isSmartAccOpen) {
openToWebview("/setting")
}
}
binding.smartAccOpenBtn.setOnClickListener {
if (!SettingSPUtils.isSmartAccOpen) {
openToWebview("/setting")
}
}
binding.preventAccLost.setOnClickListener {
openToWebview("/questionDetail")
}
binding.preventAccInvalid.setOnClickListener {
openToWebview("/speed")
}
binding.btnExpend.setOnClickListener {
if (binding.expandableLayout1.isExpanded) {
binding.expandableLayout1.toggle()
......@@ -160,6 +191,22 @@ class AccelertorFragment : XPageFragment() {
}
}
fun openToWebview(url: String) {
val params = Bundle()
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY, HttpConfig.UI_MAIN_URL + url)
LoginUtils.token?.let {
openPage(CommonWebViewFragment::class.java, params)
} ?: let {
LoginUtils.login(this, {
if (true) {
openPage(CommonWebViewFragment::class.java, params)
}
})
}
}
override fun onResume() {
super.onResume()
AcceleratorUtils.registerStateListener { state, l, net ->
......
......@@ -25,6 +25,7 @@ class AccelertorViewModel : ViewModel() {
//加速状态
var accState = MutableLiveData<BaseService.State>()
//用户状态
var userProfile = MutableLiveData<UserProfile>()
}
\ No newline at end of file
package com.ccwangluo.accelerator.ui.home
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
......@@ -8,7 +9,7 @@ import androidx.fragment.app.Fragment
import com.ccwangluo.accelerator.databinding.FragmentMineBinding
import com.ccwangluo.accelerator.ui.web.AndroidInterface
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.http.HttpConfig
import com.github.shadowsocks.HttpConfig
import com.just.agentweb.core.AgentWeb
import com.just.agentweb.core.client.DefaultWebClient
import com.xuexiang.xpage.base.XPageFragment
......@@ -18,7 +19,7 @@ import com.xuexiang.xpage.utils.TitleBar
class MineFragment : XPageFragment() {
private var _binding: FragmentMineBinding? = null
private val binding get() = _binding!!
var agentWeb: AgentWeb? = null
private var agentWeb: AgentWeb? = null
override fun initTitleBar(): TitleBar? {
//不使用@Page标注的一定要注意覆盖这个方法
......@@ -35,9 +36,9 @@ class MineFragment : XPageFragment() {
LoginUtils.token?.let {
weburl = weburl + "?token=$it"
}
val agentWeb =
agentWeb =
createAgentWeb(this, binding.mineWebview, weburl)
agentWeb.getJsInterfaceHolder().addJavaObject("android", AndroidInterface(this, agentWeb))
agentWeb?.getJsInterfaceHolder()?.addJavaObject("android", AndroidInterface(this, agentWeb!!))
}
override fun initListeners() {
......@@ -72,11 +73,29 @@ class MineFragment : XPageFragment() {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser) {
LoginUtils.token?.let {
// TODO: 2022/2/16 调用h5 设置token
agentWeb?.getJsAccessEntrace()
?.quickCallJs("userToken", it)
} ?: let {
agentWeb?.getJsAccessEntrace()
?.quickCallJs("clearToken")
}
}
}
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
if (!hidden) {
LoginUtils.token?.let {
agentWeb?.getJsAccessEntrace()
?.quickCallJs("userToken", it)
} ?: let {
agentWeb?.getJsAccessEntrace()
?.quickCallJs("clearToken")
}
}
}
override fun onPause() {
agentWeb?.getWebLifeCycle()?.onPause()
super.onPause()
......
......@@ -26,7 +26,7 @@ class NewsFragment : XPageFragment() {
return binding.root
}
val titles = arrayOf("动态", "攻略", "视频", "评价", "问答")
val titles = arrayOf("全部", "攻略", "视频", "评价", "问答")
var adapter: DemoCollectionAdapter? = null
override fun initViews() {
newsViewModel.refreshState.observe(this, {
......
......@@ -8,6 +8,8 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.RecyclerView
import com.ccwangluo.accelerator.R
import com.ccwangluo.accelerator.adapter.KotlinDataAdapter
import com.ccwangluo.accelerator.model.NewsRes
import com.ccwangluo.accelerator.ui.home.NewsViewModel
import com.ccwangluo.accelerator.ui.news.DemoCollectionAdapter.Companion.ARG_OBJECT
......@@ -16,6 +18,8 @@ class DemoObjectFragment : Fragment() {
var recycle_view: RecyclerView? = null
private lateinit var newsViewModel: NewsViewModel
private val deviceList = arrayListOf<NewsRes>()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
......@@ -29,21 +33,21 @@ class DemoObjectFragment : Fragment() {
arguments?.takeIf { it.containsKey(ARG_OBJECT) }?.apply {
val position = getInt(ARG_OBJECT).toString()
recycle_view = view.findViewById(R.id.recycle_view)
val adapter = KotlinDataAdapter.Builder<NewsRes>()
.setData(deviceList)
.setLayoutId(R.layout.item_dynamic)
.addBindView { itemView, itemData ->
}
.create()
recycle_view?.adapter = adapter
}
// val adapter = KotlinDataAdapter.Builder<DeviceModel>()
// .setData(deviceList)
// .setLayoutId(R.layout.item_device)
// .addBindView { itemView, itemData ->
// itemView.tv_device_name.text = if (itemData.platform.isEmpty()) "未命名" else
// }
// .create()
}
fun refresh() {
recycle_view?.postDelayed({
newsViewModel.refreshState.postValue(false )
newsViewModel.refreshState.postValue(false)
}, 1000)
}
......
package com.ccwangluo.accelerator.ui.web
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.webkit.JavascriptInterface
import androidx.core.content.ContextCompat.checkSelfPermission
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.http.HttpConfig
import com.github.shadowsocks.HttpConfig
import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.ccwangluo.cc_quickly.utils.XToastUtils
import com.just.agentweb.core.AgentWeb
......@@ -43,9 +40,32 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
@JavascriptInterface
fun openWebview(url: String) {
LoginUtils.token?.let {
val params = Bundle()
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY, HttpConfig.UI_MAIN_URL + url)
xPageFragment.openPage(CommonWebViewFragment::class.java, params)
} ?: let {
LoginUtils.login(xPageFragment) {
LoginUtils.token?.let {
agentWeb.getJsAccessEntrace()
.quickCallJs("userToken", it)
}
}
}
}
//打开系统设置
@JavascriptInterface
fun openSysSetting() {
PermissionUtils.openAppSettings()
}
@JavascriptInterface
fun openAsideWebview(url: String) {
val params = Bundle()
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY, url)
xPageFragment.openPage(CommonWebViewFragment::class.java, params)
}
@JavascriptInterface
......@@ -66,6 +86,15 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
SettingSPUtils.isSmartAccOpen = isopen
}
/**
* 智能极限加速
*/
@JavascriptInterface
fun getSmartAccStatus(callback: String) {
agentWeb.getJsAccessEntrace()
.quickCallJs(callback, SettingSPUtils.isSmartAccOpen.toString())
}
/**
* 清除token
*/
......@@ -81,8 +110,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
@JavascriptInterface
fun getPermissionState(key: String, callback: String) {
xPageFragment.context?.let {
PermissionUtils.openAppSettings()
val hasPermission: Boolean = if (checkSelfPermission(it, key) > 0) true else false
val hasPermission: Boolean = PermissionUtils.isGranted(key)
agentWeb.getJsAccessEntrace()
.quickCallJs(callback, key, hasPermission.toString())
}
......
......@@ -54,7 +54,8 @@ object LoginUtils {
val dateToStamp = TimeUtils.dateToStamp(it.vipExpireTime) + 24 * 60 * 60 * 1000
// && it.vipExpireTime > System.currentTimeMillis()
callBack(it.vip && dateToStamp > System.currentTimeMillis())
} ?: let {
return
}
getUserProfile(xPageFragment) {
it?.let {
callBack(true)
......@@ -63,7 +64,6 @@ object LoginUtils {
}
}
}
}
fun getUserHasTimer(callBack: (Boolean) -> Unit) {
userProfile?.let {
......
package com.ccwangluo.accelerator.utils.http
import android.util.Log
import com.ccwangluo.accelerator.model.BaseModel
import com.ccwangluo.accelerator.utils.LoginUtils
import com.github.shadowsocks.HttpConfig
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.hjq.toast.ToastUtils
......@@ -10,11 +10,9 @@ import okhttp3.*
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody
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.Logger
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLSocketFactory
import javax.net.ssl.X509TrustManager
......
......@@ -7,7 +7,7 @@
android:layout_height="match_parent">
<FrameLayout
android:layout_marginTop="36dp"
android:layout_marginTop="30dp"
android:id="@+id/mine_webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
......
......@@ -42,18 +42,19 @@
<RelativeLayout
android:id="@+id/icon_notice"
android:layout_width="19dp"
android:layout_height="21dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="58.5dp"
android:layout_height="21dp">
android:layout_marginEnd="58.5dp">
<com.xuexiang.xui.widget.button.roundbutton.RoundButton
android:id="@+id/icon_notice_badge"
android:layout_width="4dp"
android:visibility="gone"
android:layout_alignParentEnd="true"
android:layout_height="4dp"
app:rb_radius="4dp"
app:rb_backgroundColor="@color/red"/>
android:layout_alignParentEnd="true"
android:visibility="gone"
app:rb_backgroundColor="@color/red"
app:rb_radius="4dp" />
<ImageView
android:layout_width="19dp"
......@@ -119,9 +120,10 @@
android:layout_height="200dp"
android:layout_centerInParent="true"
android:clickable="true"
app:srcCompat="@mipmap/dnf_logo"
app:riv_border_width="1px"
app:riv_is_circle="true" />
app:riv_is_circle="true"
app:srcCompat="@mipmap/dnf_logo" />
<com.xuexiang.xui.widget.progress.CircleProgressView
android:id="@+id/progressView_circle_small"
android:layout_width="220dp"
......@@ -134,10 +136,10 @@
app:cpv_isFilled="false"
app:cpv_isTracked="true"
app:cpv_progress_duration="2000"
app:cpv_progress_textVisibility="true"
app:cpv_progress_width="4dp"
app:cpv_progress_textColor="#8BE7FA"
app:cpv_progress_textSize="50sp"
app:cpv_progress_textVisibility="true"
app:cpv_progress_width="4dp"
app:cpv_start_color="#8BE7FA"
app:cpv_start_progress="0"
app:cpv_track_color="#57595B"
......@@ -146,6 +148,7 @@
</RelativeLayout>
<LinearLayout
android:id="@+id/game_page"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
......@@ -569,6 +572,7 @@
android:textSize="14sp" />
<com.xuexiang.xui.widget.button.roundbutton.RoundButton
android:id="@+id/prevent_acc_lost"
android:layout_width="70dp"
android:layout_height="25dp"
android:gravity="center"
......@@ -603,6 +607,7 @@
android:textSize="14sp" />
<com.xuexiang.xui.widget.button.roundbutton.RoundButton
android:id="@+id/prevent_acc_invalid"
android:layout_width="70dp"
android:layout_height="25dp"
android:gravity="center"
......
......@@ -2,10 +2,10 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<FrameLayout
android:layout_marginTop="36dp"
android:id="@+id/common_webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
......
package com.ccwangluo.accelerator.utils.http
package com.github.shadowsocks
object HttpConfig {
......@@ -8,7 +8,7 @@ object HttpConfig {
/**
* 主页h5
*/
val UI_MAIN_URL = "http://test-cc-tt-front.orangenet.org.cn/#"
val UI_MAIN_URL = "http://10.3.0.217:8080/#"
//隐私协议地址
val privacy_url = "http:wwww.baidu.com"
......
......@@ -7,6 +7,7 @@ import com.android.volley.toolbox.RequestFuture
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import com.github.shadowsocks.Core
import com.github.shadowsocks.HttpConfig
import com.github.shadowsocks.acl.Acl
import com.github.shadowsocks.database.Profile
import com.github.shadowsocks.database.ProfileManager
......@@ -100,7 +101,7 @@ object AuthManager {
val tokenRequest =
StringRequest(
Request.Method.GET,
"http://10.3.0.34:9000",
HttpConfig.baseUrl,
tokenFuture,
tokenFuture
)
......
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