diff --git a/app/src/main/java/com/gh/common/dialog/PrivacyDialogFragment.kt b/app/src/main/java/com/gh/common/dialog/PrivacyDialogFragment.kt index 9acac07dc2..bd9620a631 100644 --- a/app/src/main/java/com/gh/common/dialog/PrivacyDialogFragment.kt +++ b/app/src/main/java/com/gh/common/dialog/PrivacyDialogFragment.kt @@ -2,23 +2,27 @@ package com.gh.common.dialog import android.app.Dialog import android.content.DialogInterface -import android.os.Build import android.os.Bundle +import android.text.SpannableStringBuilder +import android.text.Spanned +import android.text.TextPaint +import android.text.method.ScrollingMovementMethod +import android.text.style.ClickableSpan import android.view.* -import android.webkit.WebSettings -import android.webkit.WebView import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.fragment.app.FragmentTransaction import com.gh.base.fragment.BaseDialogFragment +import com.gh.common.util.DirectUtils.directToExternalBrowser import com.gh.common.util.dip2px +import com.gh.common.view.CustomLinkMovementMethod import com.gh.gamecenter.R class PrivacyDialogFragment : BaseDialogFragment() { - private val mLocalPrivacyHtml = "file:///android_asset/privacy_policies.html" - private val mLocalRegulationHtml = "file:///android_asset/user_regulation.html" +// private val mLocalPrivacyHtml = "file:///android_asset/privacy_policies.html" +// private val mLocalRegulationHtml = "file:///android_asset/user_regulation.html" var containerView: View? = null var mCallBack: ((isSuccess: Boolean) -> Unit)? = null @@ -30,76 +34,73 @@ class PrivacyDialogFragment : BaseDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val mWebViewPrivacy = containerView?.findViewById(R.id.webView) - val mWebViewRegulation = containerView?.findViewById(R.id.webView2) +// val mWebViewPrivacy = containerView?.findViewById(R.id.webView) +// val mWebViewRegulation = containerView?.findViewById(R.id.webView2) +// +// mWebViewPrivacy?.isHorizontalScrollBarEnabled = false +// mWebViewRegulation?.isHorizontalScrollBarEnabled = false - mWebViewPrivacy?.isHorizontalScrollBarEnabled = false - mWebViewRegulation?.isHorizontalScrollBarEnabled = false + val contentTv = containerView?.findViewById(R.id.contentTv) + val descTv = containerView?.findViewById(R.id.descTv) + contentTv?.movementMethod = ScrollingMovementMethod() - val mTitlePrivacyTv = containerView?.findViewById(R.id.privacyTitleTv) - val mTitleRegulationTv = containerView?.findViewById(R.id.userRegulationTitleTv) - - val settingsArrayList = arrayListOf(mWebViewPrivacy?.settings, mWebViewRegulation?.settings) - - for (settings in settingsArrayList) { - settings?.javaScriptEnabled = true - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - settings?.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW - } - // 避免提示网页有害信息不能访问 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - settings?.safeBrowsingEnabled = false + val skipText = SpannableStringBuilder("查看完整版的隐私政策和用户协议") + skipText.setSpan(object : ClickableSpan() { + override fun updateDrawState(ds: TextPaint) { + super.updateDrawState(ds) + ds.color = ContextCompat.getColor(requireContext(), R.color.theme_font) + ds.isUnderlineText = false } - // 适配大于屏幕宽度的页面 - settings?.useWideViewPort = true - settings?.loadWithOverviewMode = true - settings?.domStorageEnabled = true - - // 自适应屏幕 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - settings?.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING + override fun onClick(widget: View) { + directToExternalBrowser(context!!, context!!.getString(R.string.privacy_policy_url)) } - } + }, skipText.length - 9, skipText.length - 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) -// if (NetworkUtils.isNetworkConnected(requireContext())) { -// mWebViewPrivacy?.loadUrl(requireContext().getString(R.string.privacy_policy_url)) -// mWebViewRegulation?.loadUrl(requireContext().getString(R.string.user_regulation_url)) -// } else { - mWebViewPrivacy?.loadUrl(mLocalPrivacyHtml) - mWebViewRegulation?.loadUrl(mLocalRegulationHtml) -// } + skipText.setSpan(object : ClickableSpan() { + override fun updateDrawState(ds: TextPaint) { + super.updateDrawState(ds) + ds.color = ContextCompat.getColor(requireContext(), R.color.theme_font) + ds.isUnderlineText = false + } -// val client = object : WebViewClient() { -// override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) { -// super.onReceivedError(view, request, error) -// if (view == mWebViewPrivacy) { -// view?.loadUrl(mLocalPrivacyHtml) -// } else { -// view?.loadUrl(mLocalRegulationHtml) -// } + override fun onClick(widget: View) { + directToExternalBrowser(requireContext(), requireContext().getString(R.string.disclaimer_url)) + } + }, skipText.length - 4, skipText.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + descTv?.movementMethod = CustomLinkMovementMethod() + descTv?.text = skipText + +// val mWebViewPrivacy = containerView?.findViewById(R.id.webView) +// +// mWebViewPrivacy?.isHorizontalScrollBarEnabled = false +// +// val settingsArrayList = arrayListOf(mWebViewPrivacy?.settings, mWebViewRegulation?.settings) +// +// for (settings in settingsArrayList) { +// settings?.javaScriptEnabled = true +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// settings?.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW +// } +// // 避免提示网页有害信息不能访问 +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { +// settings?.safeBrowsingEnabled = false +// } +// +// // 适配大于屏幕宽度的页面 +// settings?.useWideViewPort = true +// settings?.loadWithOverviewMode = true +// settings?.domStorageEnabled = true +// +// // 自适应屏幕 +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { +// settings?.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING // } // } // mWebViewPrivacy?.webViewClient = client // mWebViewRegulation?.webViewClient = client - mTitlePrivacyTv?.setOnClickListener { - mTitlePrivacyTv.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white)) - mTitleRegulationTv?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.text_F5F5F5)) - - mWebViewPrivacy?.visibility = View.VISIBLE - mWebViewRegulation?.visibility = View.GONE - } - - mTitleRegulationTv?.setOnClickListener { - mTitlePrivacyTv?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.text_F5F5F5)) - mTitleRegulationTv.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white)) - - mWebViewPrivacy?.visibility = View.GONE - mWebViewRegulation?.visibility = View.VISIBLE - } - containerView?.findViewById(R.id.refuseTv)?.setOnClickListener { mCallBack?.invoke(false) dismiss() diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index 386bacb999..41b4d78e44 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -1025,8 +1025,6 @@ public class DialogUtils { hierarchy.setPlaceholderImage(R.drawable.permission_storage); } else if (position == 1) { hierarchy.setPlaceholderImage(R.drawable.permission_phone_state); - } else { - hierarchy.setPlaceholderImage(R.drawable.permission_sdk); } } } diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index e846cf6cbb..06da7837ba 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -15,6 +15,12 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import com.g00fy2.versioncompare.Version; import com.gh.base.BaseActivity; import com.gh.common.AppExecutor; @@ -56,11 +62,6 @@ import java.util.Date; import java.util.List; import java.util.Locale; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.app.ActivityCompat; -import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; @@ -74,7 +75,8 @@ public class SplashScreenActivity extends BaseActivity { private SharedPreferences mSharedPreferences; - private boolean isNewFirstLaunch; + private boolean mIsNewForThisVersion; + private boolean mStartMainActivityDirectly = false; // 是否不需要用户点击立即体验就直接跳转首页 private static final int REQUEST_PERMISSION_TAG = 30001; private String[] mPermissions = { @@ -94,7 +96,7 @@ public class SplashScreenActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - isNewFirstLaunch = mSharedPreferences.getBoolean("isNewFirstLaunchV" + PackageUtils.getVersionName(), true); + mIsNewForThisVersion = mSharedPreferences.getBoolean("isNewFirstLaunchV" + PackageUtils.getVersionName(), true); super.onCreate(savedInstanceState); @@ -105,13 +107,14 @@ public class SplashScreenActivity extends BaseActivity { } // 判断是不是这个版本的新用户 - if (isNewFirstLaunch) { + if (mIsNewForThisVersion) { mContentView.setPadding(0, 0, 0, 0); ViewPager guideLayout = findViewById(R.id.splash_intro_vp_guide); guideLayout.setAdapter(new GuidePagerAdapter()); // 判断是不是光环的新用户 if (SPUtils.getBoolean(Constants.SP_BRAND_NEW_USER, true)) { + mStartMainActivityDirectly = true; SPUtils.setLong(Constants.SP_INITIAL_USAGE_TIME, System.currentTimeMillis()); HaloApp.getInstance().isBrandNewInstall = true; showPrivacyDialog(guideLayout); @@ -136,7 +139,7 @@ public class SplashScreenActivity extends BaseActivity { requestPermission(); }); } else { - DialogUtils.showPrivacyPolicyDisallowDialog(this, PrivacyPolicyEntity.createDefaultData(),()->{ + DialogUtils.showPrivacyPolicyDisallowDialog(this, PrivacyPolicyEntity.createDefaultData(), () -> { showPrivacyDialog(guideLayout); }); } @@ -245,7 +248,7 @@ public class SplashScreenActivity extends BaseActivity { @Override protected int getLayoutId() { - if (isNewFirstLaunch) { + if (mIsNewForThisVersion) { return R.layout.activity_splash_intro; } else { return 0; @@ -255,7 +258,7 @@ public class SplashScreenActivity extends BaseActivity { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { - if (isNewFirstLaunch && EasyPermissions.hasPermissions(this, mPermissions)) { + if (mIsNewForThisVersion && EasyPermissions.hasPermissions(this, mPermissions)) { launchMainActivity(); } else { return true; @@ -336,6 +339,9 @@ public class SplashScreenActivity extends BaseActivity { MtaHelper.onEvent("授权情况", "启动授权", "都授权"); // 检查是否有旧版本光环,有就删掉 AppExecutor.getIoExecutor().execute(this::deleteOutdatedUpdatePackage); + if (mStartMainActivityDirectly) { + launchMainActivity(); + } } else { ActivityCompat.requestPermissions(this, mPermissions, REQUEST_PERMISSION_TAG); } @@ -350,12 +356,22 @@ public class SplashScreenActivity extends BaseActivity { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); - }, () -> logGrantedPermission(perms)); + }, () -> { + logGrantedPermission(perms); + if (mStartMainActivityDirectly) { + launchMainActivity(); + } + }); } else { DialogUtils.showPermissionDialog(this, "权限申请", "在设置-应用-光环助手-权限中开启存储和手机信息权限,以保证能正常使用相关功能", "重试", "放弃", this::checkAndRequestPermission, - () -> logGrantedPermission(perms)); + () -> { + logGrantedPermission(perms); + if (mStartMainActivityDirectly) { + launchMainActivity(); + } + }); } } diff --git a/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt index ceda1fc35d..4b970d2035 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt @@ -26,7 +26,7 @@ data class PrivacyPolicyEntity( permissions.add(PermissionsEntity( icon = "res:///" + R.drawable.permission_phone_state, name = "设备信息", - intro = "获取设备型号等信息,保证功能的适配与完整性")) + intro = "为保障您的账号安全及使用软件与服务可安全运行")) // permissions.add(PermissionsEntity( // icon = "res:///" + R.drawable.permission_sdk, // name = "第三方SDK使用信息提醒", diff --git a/app/src/main/res/drawable/webview_scrollbar_thumb_vertical.xml b/app/src/main/res/drawable/webview_scrollbar_thumb_vertical.xml index 697ecc46e6..3d61648f67 100644 --- a/app/src/main/res/drawable/webview_scrollbar_thumb_vertical.xml +++ b/app/src/main/res/drawable/webview_scrollbar_thumb_vertical.xml @@ -1,7 +1,7 @@ - + diff --git a/app/src/main/res/layout/dialog_privacy_policy.xml b/app/src/main/res/layout/dialog_privacy_policy.xml index e06a308e99..e212b1b6b2 100644 --- a/app/src/main/res/layout/dialog_privacy_policy.xml +++ b/app/src/main/res/layout/dialog_privacy_policy.xml @@ -120,6 +120,7 @@ android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" + android:layout_marginBottom="16dp" app:layout_constraintBottom_toTopOf="@id/disallow_button" /> - - - - - - - + app:layout_constraintTop_toTopOf="parent" /> + android:layout_marginLeft="16dp" + android:layout_marginRight="16dp" + android:layout_marginBottom="16dp" + app:layout_constraintBottom_toTopOf="@id/descTv" + app:layout_constraintTop_toBottomOf="@id/privacyTitleTv"> - - - - + android:includeFontPadding="false" + android:lineSpacingExtra="8dp" + android:paddingRight="6dp" + android:scrollbarStyle="outsideOverlay" + android:scrollbarThumbVertical="@drawable/webview_scrollbar_thumb_vertical" + android:scrollbars="vertical" + android:text="@string/dialog_privacy_policy_content" + android:textColor="@color/text_333333" + android:textSize="14sp" /> + + + app:layout_constraintTop_toBottomOf="@+id/descTv" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 759dabcd36..1d93b248eb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -780,6 +780,7 @@ 将已安装游戏标记为玩过的游戏 https://v.douyin.com/C9UHr6/ 你有%1$d]]>款预约的游戏上线啦 + 欢迎您使用光环助手!\n在您使用光环助手之前,请您认真阅读《用户协议》和《隐私政策》的全部内容,以了解用户权利义务和个人信息处理规则。主要内容向您说明如下:\n1.为了正常地提供优质的产品服务,基于您的授权我们会获取必要的个人信息,您有权拒绝或取消授权\n2.我们会采取合理的安全措施保护您的个人信息,防止数据被不当使用或未经授权的情况下被访问、公开披露、使用、修改、损坏、丢失或泄漏。\n3.未经您同意,我们不会从第三方处获取、共享或向其提供您的信息\n4.您可以查询、更正、删除您的个人信息,我们也提供账户注销的渠道 此游戏下载资源由第三方提供。若该资源侵犯了您的合法权益或违反了当地法规,请点击页面右上角-版权申诉,按指引发起申诉,我们会尽快联系您并解决。 该游戏暂时仅提供试玩版本。试玩版资源来自第三方网站,可能存在bug或兼容性问题。敬请留意后续相关消息。 该游戏暂时仅提供试玩版本。试玩版可能存在bug或兼容性问题。敬请留意后续相关消息。