Skip to content

Commit ce63412

Browse files
authored
Merge pull request #453 from RedrockMobile/lyt/fix_user_privacy
🎨 修改mine模块界面,完善用户协议和隐私权声明
2 parents a50fc3b + 1c38fd8 commit ce63412

File tree

19 files changed

+466
-409
lines changed

19 files changed

+466
-409
lines changed

lib_config/src/main/java/com/mredrock/cyxbs/config/route/RouteTable.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,8 @@ const val UFIELD_DETAIL_ENTRY = "/ufield/detail/entry"
116116
const val DECLARE_ENTRY = "/declare/entry"
117117
//美食页面
118118
const val FOOD_ENTRY = "/food/entry"
119+
120+
//跳转到用户协议的activity
121+
const val USER_PROTOCOL = "/login/user"
122+
//跳转到隐私协议的activity
123+
const val PRIVACY_PROTOCOL = "/protocol/privacy"

lib_protocol/build.gradle.kts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ plugins {
44

55

66
dependLibCommon() // TODO common 模块不再使用,新模块请依赖 base 和 utils 模块
7+
dependLibConfig()
8+
dependLibUtils()
9+
710

811
useDataBinding()
9-
useARouter()
12+
useARouter()
13+

lib_protocol/src/main/AndroidManifest.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,25 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
33

44
<application>
5+
<activity
6+
android:name=".activity.PrivacyActivity"
7+
android:exported="false" />
58
<activity
69
android:name=".activity.ReceiveActivity"
710
android:exported="true">
811
<intent-filter>
912
<category android:name="android.intent.category.DEFAULT" />
13+
1014
<action android:name="android.intent.action.VIEW" />
15+
1116
<category android:name="android.intent.category.BROWSABLE" />
17+
1218
<data
1319
android:host="redrock.team"
1420
android:scheme="cyxbs" />
1521
</intent-filter>
1622
</activity>
1723
<activity android:name=".activity.WebContainerActivity" />
1824
</application>
25+
1926
</manifest>
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.mredrock.cyxbs.protocol.activity
2+
3+
import android.annotation.SuppressLint
4+
import android.content.res.Configuration
5+
import android.os.Bundle
6+
import android.view.ViewGroup
7+
import android.webkit.WebSettings
8+
import android.widget.ImageView
9+
import android.widget.LinearLayout
10+
import com.alibaba.android.arouter.facade.annotation.Route
11+
import com.mredrock.cyxbs.common.ui.BaseActivity
12+
import com.mredrock.cyxbs.common.webView.LiteJsWebView
13+
import com.mredrock.cyxbs.config.route.PRIVACY_PROTOCOL
14+
import com.mredrock.cyxbs.protocol.R
15+
16+
/**
17+
* @author: lytMoon
18+
* @description: 由于掌邮协议变更,现在把负责隐私协议的activity放在lib_protocol中,并解决了WebView错误用法的隐私泄露(删除 login 和 mine 模块对应部分)
19+
* @time: 2023/12/1
20+
* @version: 1.0
21+
*/
22+
23+
@Route(path = PRIVACY_PROTOCOL)
24+
class PrivacyActivity : BaseActivity() {
25+
26+
private companion object {
27+
const val USER_PRIVACY_URL = "https://fe-prod.redrock.cqupt.edu.cn/privacy-policy/"
28+
}
29+
30+
private val mWebView by lazy { LiteJsWebView(applicationContext) }
31+
private val webViewParentContainer by R.id.protocol_webView_container.view<LinearLayout>()
32+
private val mBack by R.id.protocol_mBack.view<ImageView>()
33+
34+
@SuppressLint("SetJavaScriptEnabled")
35+
override fun onCreate(savedInstanceState: Bundle?) {
36+
super.onCreate(savedInstanceState)
37+
setContentView(R.layout.protocol_activity_privacy)
38+
mWebView.apply {
39+
layoutParams = ViewGroup.LayoutParams(
40+
ViewGroup.LayoutParams.MATCH_PARENT,
41+
ViewGroup.LayoutParams.MATCH_PARENT
42+
)
43+
settings.apply {
44+
javaScriptEnabled = true
45+
domStorageEnabled = true
46+
useWideViewPort = true
47+
loadWithOverviewMode = true
48+
setSupportZoom(true)
49+
builtInZoomControls = true
50+
displayZoomControls = false
51+
mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
52+
mediaPlaybackRequiresUserGesture = false
53+
}
54+
loadUrl(USER_PRIVACY_URL)
55+
// 适配黑夜模式
56+
val uiMode = resources.configuration.uiMode
57+
if ((uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES) {
58+
loadUrl("javascript:showInfoFromJava('true')")
59+
}
60+
}
61+
webViewParentContainer.addView(mWebView)
62+
63+
mBack.setOnClickListener {
64+
finish()
65+
}
66+
}
67+
68+
override fun onDestroy() {
69+
super.onDestroy()
70+
removeWebView()
71+
}
72+
73+
private fun removeWebView() {
74+
(mWebView.parent as? ViewGroup)?.removeView(mWebView)
75+
}
76+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="9dp"
3+
android:height="18dp"
4+
android:viewportWidth="9"
5+
android:viewportHeight="18">
6+
<path
7+
android:pathData="M8,1L1,9L8,17"
8+
android:strokeLineJoin="round"
9+
android:strokeWidth="2"
10+
android:fillColor="@android:color/transparent"
11+
android:strokeColor="@color/config_level_two_font_color"
12+
android:strokeLineCap="round"/>
13+
</vector>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:layout_width="match_parent"
6+
android:layout_height="match_parent"
7+
android:background="@color/config_white_black"
8+
tools:ignore="ResourceName"
9+
android:orientation="vertical">
10+
11+
<androidx.appcompat.widget.Toolbar
12+
android:id="@+id/protocol_toolbar"
13+
android:layout_width="match_parent"
14+
android:layout_height="wrap_content"
15+
android:layout_marginTop="40dp"
16+
app:layout_constraintLeft_toLeftOf="parent"
17+
app:layout_constraintTop_toTopOf="parent">
18+
19+
<ImageView
20+
android:id="@+id/protocol_mBack"
21+
android:layout_width="10dp"
22+
android:layout_height="18dp"
23+
android:layout_centerInParent="true"
24+
android:layout_gravity="center_vertical"
25+
android:layout_marginStart="8dp"
26+
android:background="@drawable/protocol_ic_back" />
27+
28+
<TextView
29+
android:layout_width="wrap_content"
30+
android:layout_height="wrap_content"
31+
android:layout_gravity="center_vertical"
32+
android:layout_marginStart="30dp"
33+
android:text="@string/protocol_privacy_text"
34+
android:textColor="@color/config_level_three_font_color"
35+
android:textSize="21sp"
36+
app:layout_constraintBottom_toBottomOf="@id/protocol_toolbar"
37+
app:layout_constraintStart_toEndOf="@+id/protocol_toolbar"
38+
app:layout_constraintTop_toTopOf="parent"
39+
tools:ignore="HardcodedText" />
40+
</androidx.appcompat.widget.Toolbar>
41+
42+
<LinearLayout
43+
android:id="@+id/protocol_webView_container"
44+
android:layout_width="match_parent"
45+
android:layout_height="match_parent"
46+
android:orientation="vertical" />
47+
48+
</LinearLayout>
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
<resources>
2-
<string name="protocol_find_the_page">找不到页面</string>
1+
<resources>
2+
<string name="protocol_find_the_page">找不到页面</string>
3+
<string name="protocol_privacy_text">隐私权政策</string>
34
</resources>

module_login/src/main/AndroidManifest.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
<activity
66
android:name=".page.login.ui.LoginActivity"
77
android:launchMode="singleTask" />
8-
<activity
9-
android:name=".page.privacy.PrivacyActivity"
10-
android:exported="false" />
118
<activity
129
android:name=".page.useragree.UserAgreeActivity"
1310
android:exported="false" />

module_login/src/main/java/com/mredrock/cyxbs/login/page/login/ui/LoginActivity.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import com.mredrock.cyxbs.api.account.IAccountService
3131
import com.mredrock.cyxbs.api.update.IAppUpdateService
3232
import com.mredrock.cyxbs.config.route.MAIN_MAIN
3333
import com.mredrock.cyxbs.config.route.MINE_FORGET_PASSWORD
34+
import com.mredrock.cyxbs.config.route.PRIVACY_PROTOCOL
3435
import com.mredrock.cyxbs.config.sp.SP_PRIVACY_AGREED
3536
import com.mredrock.cyxbs.config.sp.defaultSp
3637
import com.mredrock.cyxbs.lib.base.BaseApp
@@ -41,7 +42,6 @@ import com.mredrock.cyxbs.lib.utils.service.impl
4142
import com.mredrock.cyxbs.lib.utils.utils.judge.NetworkUtil
4243
import com.mredrock.cyxbs.login.R
4344
import com.mredrock.cyxbs.login.page.login.viewmodel.LoginViewModel
44-
import com.mredrock.cyxbs.login.page.privacy.PrivacyActivity
4545
import com.mredrock.cyxbs.login.page.useragree.UserAgreeActivity
4646
import com.mredrock.cyxbs.login.ui.UserAgreementDialog
4747

@@ -108,7 +108,7 @@ class LoginActivity : BaseActivity() {
108108
private val mTvForget by R.id.login_tv_forget_password.view<TextView>()
109109
private val mTvUserAgreement by R.id.login_tv_user_agreement.view<TextView>()
110110
private val mContainer by R.id.login_container.view<ViewGroup>()
111-
111+
112112
// 后端是否可用
113113
private var mIsServerAvailable = true
114114

@@ -166,7 +166,7 @@ class LoginActivity : BaseActivity() {
166166
mTvForget.setOnSingleClickListener {
167167
ARouter.getInstance().build(MINE_FORGET_PASSWORD).navigation()
168168
}
169-
169+
170170
if (!mViewModel.userAgreementIsCheck) {
171171
// 显示用户协议 dialog
172172
showUserAgreement()
@@ -194,8 +194,7 @@ class LoginActivity : BaseActivity() {
194194
}.wrapByNoLeak(mTvUserAgreement) // 防止内存泄漏
195195
val privacyClickSpan = object : ClickableSpan() {
196196
override fun onClick(widget: View) {
197-
val intent = Intent(this@LoginActivity, PrivacyActivity::class.java)
198-
startActivity(intent)
197+
ServiceManager.activity(PRIVACY_PROTOCOL)
199198
}
200199

201200
override fun updateDrawState(ds: TextPaint) {
@@ -305,7 +304,7 @@ class LoginActivity : BaseActivity() {
305304
private fun initUpdate() {
306305
IAppUpdateService::class.impl.tryNoticeUpdate(this, true)
307306
}
308-
307+
309308
private fun initCheckNetWork() {
310309
launch {
311310
NetworkUtil.tryPingNetWork()?.onFailure {

module_login/src/main/java/com/mredrock/cyxbs/login/page/privacy/PrivacyActivity.kt

Lines changed: 0 additions & 51 deletions
This file was deleted.

module_login/src/main/java/com/mredrock/cyxbs/login/page/useragree/UserAgreeActivity.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,23 @@ import android.view.View
55
import android.widget.ProgressBar
66
import androidx.recyclerview.widget.LinearLayoutManager
77
import androidx.recyclerview.widget.RecyclerView
8+
import com.alibaba.android.arouter.facade.annotation.Route
9+
import com.mredrock.cyxbs.config.route.USER_PROTOCOL
810
import com.mredrock.cyxbs.lib.base.ui.BaseActivity
9-
import com.mredrock.cyxbs.lib.utils.extensions.*
10-
import com.mredrock.cyxbs.lib.utils.network.*
11+
import com.mredrock.cyxbs.lib.utils.extensions.gone
12+
import com.mredrock.cyxbs.lib.utils.extensions.setOnSingleClickListener
13+
import com.mredrock.cyxbs.lib.utils.network.CommonApiService
14+
import com.mredrock.cyxbs.lib.utils.network.DownMessage
15+
import com.mredrock.cyxbs.lib.utils.network.DownMessageParams
16+
import com.mredrock.cyxbs.lib.utils.network.commonApi
17+
import com.mredrock.cyxbs.lib.utils.network.mapOrInterceptException
1118
import com.mredrock.cyxbs.login.R
1219
import com.mredrock.cyxbs.login.page.login.adapter.UserAgreementAdapter
1320
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
1421
import io.reactivex.rxjava3.schedulers.Schedulers
1522
import java.util.concurrent.TimeUnit
1623

24+
@Route(path = USER_PROTOCOL)
1725
class UserAgreeActivity : BaseActivity() {
1826

1927
private val mBack by R.id.login_view_user_agree_back.view<View>()
@@ -36,7 +44,8 @@ class UserAgreeActivity : BaseActivity() {
3644
getDownMessage()
3745
} else {
3846
// savedInstanceState 不为 null 时说明界面重新被异常摧毁重建了
39-
val downMessage = savedInstanceState.getSerializable(this::mDownMessage.name) as DownMessage?
47+
val downMessage =
48+
savedInstanceState.getSerializable(this::mDownMessage.name) as DownMessage?
4049
if (downMessage != null) {
4150
mRecyclerView.adapter = UserAgreementAdapter(downMessage.textList)
4251
} else {

module_login/src/main/java/com/mredrock/cyxbs/login/ui/UserAgreementDialog.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ import android.view.ViewGroup
1616
import android.widget.LinearLayout
1717
import android.widget.TextView
1818
import androidx.core.content.ContextCompat
19+
import com.mredrock.cyxbs.config.route.PRIVACY_PROTOCOL
1920
import com.mredrock.cyxbs.lib.base.dailog.ChooseDialog
2021
import com.mredrock.cyxbs.lib.utils.extensions.color
2122
import com.mredrock.cyxbs.lib.utils.extensions.dp2px
2223
import com.mredrock.cyxbs.lib.utils.extensions.wrapByNoLeak
23-
import com.mredrock.cyxbs.login.page.privacy.PrivacyActivity
24+
import com.mredrock.cyxbs.lib.utils.service.ServiceManager
2425
import com.mredrock.cyxbs.login.page.useragree.UserAgreeActivity
2526

2627
/**
@@ -104,8 +105,7 @@ class UserAgreementDialog private constructor(
104105
}.wrapByNoLeak(view) // 防止内存泄漏
105106
val privacyClickSpan = object : ClickableSpan() {
106107
override fun onClick(widget: View) {
107-
val intent = Intent(context, PrivacyActivity::class.java)
108-
context.startActivity(intent)
108+
ServiceManager.activity(PRIVACY_PROTOCOL)
109109
}
110110

111111
override fun updateDrawState(ds: TextPaint) {

0 commit comments

Comments
 (0)