diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3fc75df730..0a6bf379c1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -99,6 +99,9 @@
android:name="android.permission.GET_TASKS"
tools:node="remove" />
+
+
callback) {
-
- final Context activityContext = checkDialogContext(context);
-
- // 区分此 dialog 是点击 dialog 外部取消的还是点击返回取消的
- AtomicBoolean isCanceledByClickOutsideOfDialog = new AtomicBoolean(true);
-
- final Dialog dialog = new Dialog(activityContext, R.style.GhAlertDialog);
- View contentView = LayoutInflater.from(activityContext).inflate(R.layout.dialog_privacy_policy, null);
- dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- dialog.setContentView(contentView);
-
- Window window = dialog.getWindow();
- if (window != null) {
- window.setBackgroundDrawableResource(android.R.color.transparent);
- WindowManager.LayoutParams params = window.getAttributes();
- params.horizontalMargin = 0;
- params.width = context.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(40);
-// int height = context.getResources().getDisplayMetrics().heightPixels - DisplayUtils.dip2px(120);
-// int maxHeight = DisplayUtils.dip2px(446);
-// if (height > maxHeight) {
-// params.height = maxHeight;
-// } else {
-// params.height = height;
-// }
- window.setAttributes(params);
- }
-
- TextView title = contentView.findViewById(R.id.title);
- TextView bottomContent = contentView.findViewById(R.id.bottom_content);
- TextView topContent = contentView.findViewById(R.id.top_content);
- TextView allowButton = contentView.findViewById(R.id.allow_button);
- TextView disallowButton = contentView.findViewById(R.id.disallow_button);
- TextView linkContent = contentView.findViewById(R.id.link_content);
- RecyclerView permissions = contentView.findViewById(R.id.permissions_content);
-
- permissions.setLayoutManager(new FixLinearLayoutManager(context));
- permissions.setAdapter(new BaseRecyclerAdapter(context) {
- @NonNull
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- View view = mLayoutInflater.inflate(R.layout.privacy_item, parent, false);
- return new PrivacyPolicyItemViewHolder(PrivacyItemBinding.bind(view));
- }
-
- @Override
- public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
- if (holder instanceof PrivacyPolicyItemViewHolder) {
- PrivacyPolicyItemViewHolder viewHolder = (PrivacyPolicyItemViewHolder) holder;
- PrivacyItemBinding binding = viewHolder.getBinding();
- final PermissionsEntity permissionsEntity = entity.getPermissions().get(position);
- ImageUtils.display(binding.icon, permissionsEntity.getIcon());
- binding.name.setText(permissionsEntity.getName());
- binding.intro.setText(permissionsEntity.getIntro());
- GenericDraweeHierarchy hierarchy = binding.icon.getHierarchy();
- if (hierarchy != null) {
- if (position == 0) {
- hierarchy.setPlaceholderImage(R.drawable.permission_storage);
- } else if (position == 1) {
- hierarchy.setPlaceholderImage(R.drawable.permission_phone_state);
- }
- }
- }
- }
-
- @Override
- public int getItemCount() {
- return entity.getPermissions().size();
- }
- });
-
- SpannableStringBuilder skipText = new SpannableStringBuilder("查看完整版的隐私政策和用户协议");
- skipText.setSpan(new ClickableSpan() {
- @Override
- public void updateDrawState(@NonNull TextPaint ds) {
- super.updateDrawState(ds);
- ds.setColor(ContextCompat.getColor(activityContext, R.color.theme_font));
- ds.setUnderlineText(false);
- }
-
- @Override
- public void onClick(@NonNull View widget) {
-// MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击隐私政策");
- DirectUtils.directToExternalBrowser(context, context.getString(R.string.privacy_policy_url));
- }
- }, skipText.length() - 9, skipText.length() - 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-
- skipText.setSpan(new ClickableSpan() {
- @Override
- public void updateDrawState(@NonNull TextPaint ds) {
- super.updateDrawState(ds);
- ds.setColor(ContextCompat.getColor(activityContext, R.color.theme_font));
- ds.setUnderlineText(false);
- }
-
- @Override
- public void onClick(@NonNull View widget) {
-// MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击用户协议");
- DirectUtils.directToExternalBrowser(context, context.getString(R.string.disclaimer_url));
- }
- }, skipText.length() - 4, skipText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-
- /*skipText.setSpan(new ClickableSpan() {
- @Override
- public void updateDrawState(@NonNull TextPaint ds) {
- super.updateDrawState(ds);
- ds.setColor(ContextCompat.getColor(activityContext, R.color.theme_font));
- ds.setUnderlineText(false);
- }
-
- @Override
- public void onClick(@NonNull View widget) {
-// MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击第三方SDK接入说明");
- activityContext.startActivity(WebActivity.getThirdPartySdkStatementIntent(activityContext));
- }
- }, skipText.length() - 10, skipText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);*/
-
- title.setText(entity.getTitle());
- linkContent.setText(skipText);
- linkContent.setMovementMethod(LinkMovementMethod.getInstance());
- topContent.setText(entity.getTopContent());
- bottomContent.setText(ExtensionsKt.fromHtml(entity.getBottomContent()));
- bottomContent.setMovementMethod(CustomLinkMovementMethod.getInstance());
-
- // Remove underline
- Spannable sa = (Spannable) bottomContent.getText();
- for (URLSpan u : sa.getSpans(0, sa.length(), URLSpan.class)) {
- sa.setSpan(new UnderlineSpan() {
- public void updateDrawState(TextPaint tp) {
- tp.setUnderlineText(false);
- }
- }, sa.getSpanStart(u), sa.getSpanEnd(u), 0);
- }
-
- allowButton.setOnClickListener(view -> {
- dialog.dismiss();
- callback.onCallback(true);
-// MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击同意");
- });
-
- disallowButton.setOnClickListener(v -> {
- dialog.dismiss();
- callback.onCallback(false);
-// showPrivacyPolicyDisallowDialog(activityContext, entity, callback);
-// MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "不同意并退出App");
- });
-
- dialog.setOnCancelListener(cd -> {
- if (isCanceledByClickOutsideOfDialog.get()) {
-// MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击空白");
- }
- });
-
- dialog.setOnKeyListener((dialog1, keyCode, event) -> {
- if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
- isCanceledByClickOutsideOfDialog.set(false);
-// MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击返回");
- }
- return false;
- });
- // 用户未同意隐私策略不应该触发 MTA 事件
-// MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "出现弹窗");
-
- try {
- dialog.setCancelable(false);
- dialog.show();
- } catch (Exception ignored) {
- }
- }
-
public static void showPrivacyPolicyDisallowDialog(Context context,
- @NonNull PrivacyPolicyEntity entity,
EmptyCallback callback) {
final Context activityContext = checkDialogContext(context);
diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt
index 769e56e384..d3ecc4868e 100644
--- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt
+++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt
@@ -890,6 +890,7 @@ object DownloadItemUtils {
gameEntity.id,
gameEntity.name ?: "",
gameEntity.categoryChinese,
+ gameEntity.getApk().firstOrNull()?.format,
clickRunnable
)
}
diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt
index 78de8f8211..86aa960598 100644
--- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt
+++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.kt
@@ -1,57 +1,40 @@
package com.gh.gamecenter
-import android.Manifest
+import android.app.NotificationChannel
+import android.app.NotificationManager
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.os.Build
import android.os.Bundle
import android.preference.PreferenceManager
-import android.text.method.ScrollingMovementMethod
import android.view.KeyEvent
-import android.view.View
-import android.view.ViewGroup
-import android.widget.ImageView
-import android.widget.TextView
-import androidx.core.app.ActivityCompat
-import androidx.viewpager.widget.PagerAdapter
-import androidx.viewpager.widget.ViewPager
+import androidx.annotation.RequiresApi
+import androidx.core.app.NotificationCompat
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
-import com.g00fy2.versioncompare.Version
-import com.gh.ad.AdDelegateHelper
import com.gh.common.dialog.NewPrivacyPolicyDialogFragment
import com.gh.common.util.*
import com.gh.common.util.GameSubstituteRepositoryHelper.updateGameSubstituteRepository
import com.gh.common.util.UsageStatsHelper.checkAndPostUsageStats
import com.gh.download.DownloadManager
import com.gh.gamecenter.common.base.activity.BaseActivity
-import com.gh.gamecenter.common.callback.SimpleCallback
import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.constant.RouteConsts
-import com.gh.gamecenter.common.exposure.meta.MetaUtil
import com.gh.gamecenter.common.tracker.TrackerLogger
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.provider.IAppProvider
import com.gh.gamecenter.core.provider.IPackageUtilsProvider
import com.gh.gamecenter.core.runOnIoThread
-import com.gh.gamecenter.core.utils.*
-import com.gh.gamecenter.entity.PrivacyPolicyEntity
+import com.gh.gamecenter.core.utils.DisplayUtils
+import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.feature.utils.PlatformUtils
import com.gh.gamecenter.pkg.PkgHelper
-import com.gh.vspace.VHelper
import com.halo.assistant.HaloApp
-import com.lightgame.download.FileUtils
import org.json.JSONObject
-import pub.devrel.easypermissions.AfterPermissionGranted
-import pub.devrel.easypermissions.EasyPermissions
-import java.io.BufferedReader
-import java.io.File
-import java.io.IOException
-import java.io.InputStreamReader
+import splitties.systemservices.notificationManager
import java.text.SimpleDateFormat
import java.util.*
-import kotlin.collections.ArrayList
/**
* 引导页面
@@ -61,22 +44,9 @@ class SplashScreenActivity : BaseActivity() {
private var mSharedPreferences: SharedPreferences? = null
private var mIsNewForThisVersion = false
- private var mStartMainActivityDirectly = false // 是否不需要用户点击立即体验就直接跳转首页
private var mViewModel: SplashScreenViewModel? = null
private var mShouldPrefetchData = true
- private val mPermissions by lazy {
- if (isStoragePermissionsRequired) {
- arrayOf(
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- PermissionHelper.PERMISSION_GET_INSTALLED_LIST
- )
- } else {
- arrayOf(PermissionHelper.PERMISSION_GET_INSTALLED_LIST)
- }
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
mViewModel = viewModelProvider()
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
@@ -104,18 +74,11 @@ class SplashScreenActivity : BaseActivity() {
// 判断是不是这个版本的新用户
if (mIsNewForThisVersion) {
- mContentView.setPadding(0, 0, 0, 0)
- val guideLayout = findViewById(R.id.splash_intro_vp_guide)
- guideLayout.adapter = GuidePagerAdapter()
-
// 判断是不是光环的新用户
if (HaloApp.getInstance().isBrandNewInstall) {
- // 引导页需用户点击 “立即体验” 按钮才进入首页,所以这里不能置为true
- // https://git.ghzs.com/pm/halo-app-issues/-/issues/1422(第3点)
-// mStartMainActivityDirectly = true;
SPUtils.setLong(Constants.SP_INITIAL_USAGE_TIME, System.currentTimeMillis())
if (!PackageFlavorHelper.IS_TEST_FLAVOR) {
- showPrivacyDialog(guideLayout)
+ showPrivacyDialog()
} else {
// Test dex2oat
executeDex2OatInAdvance()
@@ -127,11 +90,11 @@ class SplashScreenActivity : BaseActivity() {
"测试环境",
{
SPUtils.setBoolean(Constants.SP_IS_DEV_ENV, false)
- showPrivacyDialog(guideLayout)
+ showPrivacyDialog()
},
{
SPUtils.setBoolean(Constants.SP_IS_DEV_ENV, true)
- showPrivacyDialog(guideLayout)
+ showPrivacyDialog()
},
false,
"",
@@ -140,15 +103,10 @@ class SplashScreenActivity : BaseActivity() {
}
} else {
cancelPreviousUpdateTask()
- guideLayout.visibility = View.VISIBLE
- //requestPermission()
- }
- } else {
- if (com.gh.gamecenter.common.BuildConfig.BUILD_TIME != 0L) {
- showGitLogDialogIfNeeded()
- } else {
launchMainActivity()
}
+ } else {
+ launchMainActivity()
}
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, "")
@@ -180,41 +138,63 @@ class SplashScreenActivity : BaseActivity() {
SPUtils.setBoolean(Constants.SP_SENSORS_IS_FIRST_TIME, false)
}
- private fun showPrivacyDialog(guideLayout: ViewPager) {
+ private fun showPrivacyDialog() {
NewPrivacyPolicyDialogFragment.show(this, null) { isSuccess: Boolean ->
if (isSuccess) {
mShouldPrefetchData = false
prefetchData()
- val callback = object : SimpleCallback {
- override fun onCallback(arg: Boolean) {
- // Dialog dismiss 后的回调
- guideLayout.visibility = View.VISIBLE
- SPUtils.setBoolean(Constants.SP_BRAND_NEW_USER, false)
- if (arg) {
- requestPermission()
- } else {
- mStartMainActivityDirectly = false
- }
- }
- }
+ SPUtils.setBoolean(Constants.SP_BRAND_NEW_USER, false)
- mViewModel?.showPrivacyPolicy({
- DialogUtils.showPrivacyPolicyDialog(this@SplashScreenActivity, it, callback)
- }, {
- DialogUtils.showPrivacyPolicyDialog(this@SplashScreenActivity, PrivacyPolicyEntity.createDefaultData(), callback)
- })
+ // 荣耀高版本系统设备在获取已安装列表权限时,会把存储权限等的东西也一并弹出来,导致超量获取权限
+ // 神奇的是,只需要在获取权限前弹出一条通知,再获取权限就会恢复正常.....
+ val isMalfunctioningHonorDevice = Build.MANUFACTURER.lowercase() == "honor"
+ && Build.VERSION.SDK_INT > Build.VERSION_CODES.R
+
+ if (isMalfunctioningHonorDevice) {
+ showHonorNotification()
+ mBaseHandler.postDelayed({
+ requestGetInstallListPermissionAndLaunchMainActivity()
+ }, 100L)
+ } else {
+ requestGetInstallListPermissionAndLaunchMainActivity()
+ }
} else {
- DialogUtils.showPrivacyPolicyDisallowDialog(
- this,
- PrivacyPolicyEntity.createDefaultData()
- ) {
- showPrivacyDialog(guideLayout)
+ DialogUtils.showPrivacyPolicyDisallowDialog(this) {
+ showPrivacyDialog()
}
}
}
}
+ @RequiresApi(Build.VERSION_CODES.O)
+ private fun showHonorNotification() {
+ val channel =
+ NotificationChannel(HONOR_CULPRIT_CHANNEL, HONOR_CULPRIT_CHANNEL, NotificationManager.IMPORTANCE_MIN)
+ notificationManager.createNotificationChannel(channel)
+ val builder = NotificationCompat.Builder(HaloApp.getInstance().application, HONOR_CULPRIT_CHANNEL)
+ .setSmallIcon(R.mipmap.logo)
+ .setContentTitle("光环助手荣耀设备启动服务")
+
+ val notification = builder.build()
+
+ notificationManager.notify(HONOR_CULPRIT_CHANNEL, HONOR_CULPRIT_ID, notification)
+ notificationManager.cancel(HONOR_CULPRIT_ID)
+ }
+
+ // 尝试获取安装应用列表权限并启动首页(不在乎结果)
+ private fun requestGetInstallListPermissionAndLaunchMainActivity() {
+ if (PackageUtils.isSupportGetInstalledAppsPermission(this)
+ && PermissionHelper.isGetInstalledListPermissionDisabled(this)
+ ) {
+ PermissionHelper.requestGetInstalledAppsListPermission(this, true) {
+ launchMainActivity()
+ }
+ } else {
+ launchMainActivity()
+ }
+ }
+
// 删除更新后的光环助手包
private fun cancelPreviousUpdateTask() {
val all = DownloadManager.getInstance().allDownloadEntity
@@ -237,26 +217,12 @@ class SplashScreenActivity : BaseActivity() {
}
}
- private fun requestPermission() {
- if (!EasyPermissions.hasPermissions(this, *mPermissions)) {
- checkAndRequestPermission()
- }
- }
-
- override fun getLayoutId(): Int {
- return if (mIsNewForThisVersion) {
- R.layout.activity_splash_intro
- } else 0
- }
+ override fun getLayoutId() = 0
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK && event.repeatCount == 0) {
- if (mIsNewForThisVersion && EasyPermissions.hasPermissions(this, *mPermissions)) {
- if (com.gh.gamecenter.common.BuildConfig.BUILD_TIME != 0L) {
- showGitLogDialogIfNeeded()
- } else {
- launchMainActivity()
- }
+ if (mIsNewForThisVersion) {
+ launchMainActivity()
} else {
return true
}
@@ -293,77 +259,6 @@ class SplashScreenActivity : BaseActivity() {
SensorsBridge.init(HaloApp.getInstance(), HaloApp.getInstance().channel)
}
- private fun getGitLogString(): String {
- if (com.gh.gamecenter.common.BuildConfig.BUILD_TIME != 0L) {
- val stringBuilder = StringBuilder()
- var bufferedReader: BufferedReader? = null
- var inputStreamReader: InputStreamReader? = null
- try {
- inputStreamReader = InputStreamReader(assets.open("gitlog.txt"))
- bufferedReader = BufferedReader(inputStreamReader)
- var line: String?
- stringBuilder.append("本光环安装包最近20次代码变更如下:")
- stringBuilder.append(System.getProperty("line.separator"))
- while (bufferedReader.readLine().also { line = it } != null) {
- line?.let {
- val urlRegex = Regex("http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?")
- if (urlRegex.containsMatchIn(it)) {
- line = urlRegex.replace(it, "")
- }
- }
- stringBuilder.append(line)
- stringBuilder.append(System.getProperty("line.separator"))
- }
- } catch (e: IOException) {
- e.printStackTrace()
- } finally {
- inputStreamReader?.close()
- bufferedReader?.close()
- }
- return stringBuilder.toString()
- } else {
- return ""
- }
- }
-
- private fun showGitLogDialogIfNeeded() {
- if (com.gh.gamecenter.common.BuildConfig.BUILD_TIME != 0L) {
- val gitLog = getGitLogString()
- if (gitLog.isNotEmpty()) {
- val md5 = MD5Utils.getContentMD5(gitLog)
- if (SPUtils.getString(Constants.GIT_LOG_MD5, "") != md5) {
- SPUtils.setString(Constants.GIT_LOG_MD5, md5)
- DialogHelper.showDialog(
- this,
- "${PackageUtils.getGhVersionName()} ${com.gh.gamecenter.common.BuildConfig.BUILD_TIME}",
- gitLog,
- "确定",
- "",
- {
- launchMainActivity()
- },
- extraConfig = DialogHelper.Config(
- centerTitle = true,
- centerContent = false
- ),
- uiModificationCallback = { binding ->
- binding.contentTv.run {
- maxHeight = 500F.dip2px()
- textSize = 10F
- isVerticalScrollBarEnabled = true
- movementMethod = ScrollingMovementMethod.getInstance()
- }
- },
- )
- } else {
- launchMainActivity()
- }
- } else {
- launchMainActivity()
- }
- }
- }
-
private fun prefetchData() {
runOnIoThread {
mViewModel?.deviceDialogSetting()
@@ -393,112 +288,11 @@ class SplashScreenActivity : BaseActivity() {
}
}
- @AfterPermissionGranted(REQUEST_PERMISSION_TAG)
- private fun checkAndRequestPermission() {
- if (EasyPermissions.hasPermissions(this, *mPermissions)) {
- onPermissionsGranted(REQUEST_PERMISSION_TAG, ArrayList(mPermissions.toList()))
-
- if (mStartMainActivityDirectly) {
- if (com.gh.gamecenter.common.BuildConfig.BUILD_TIME != 0L) {
- showGitLogDialogIfNeeded()
- } else {
- launchMainActivity()
- }
- }
- } else {
- ActivityCompat.requestPermissions(this, mPermissions, REQUEST_PERMISSION_TAG)
- }
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: List) {
- if (mStartMainActivityDirectly) {
- if (com.gh.gamecenter.common.BuildConfig.BUILD_TIME != 0L) {
- showGitLogDialogIfNeeded()
- } else {
- launchMainActivity()
- }
- }
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList?) {
- super.onPermissionsGranted(requestCode, perms)
-
- if (perms?.contains(Manifest.permission.READ_EXTERNAL_STORAGE) == true) {
- // 恢复畅玩数据
- VHelper.recoverVDataIfPossible()
- // 检查是否有旧版本光环,有就删掉
- runOnIoThread { deleteOutdatedUpdatePackage() }
- }
- }
-
- // 检查下载文件夹下是否有旧版本的光环助手的包,有则删除
- private fun deleteOutdatedUpdatePackage() {
- try {
- val folder = File(FileUtils.getDownloadDir(this) + File.separator)
- if (folder.isDirectory) {
- for (file in folder.listFiles()) {
- if (!file.isDirectory && file.name.startsWith("光环助手V")) {
- val name = file.name
- val index = name.indexOf("_")
- if (index != -1) {
- val versionString = name.substring(name.indexOf("V") + 1, index)
- val currentVersion = Version(PackageUtils.getGhVersionName())
- if (currentVersion.isHigherThan(versionString) || currentVersion.isEqual(versionString)) {
- file.delete()
- }
- }
- }
- }
- }
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
-
- private inner class GuidePagerAdapter : PagerAdapter() {
- private val mPics = intArrayOf(R.drawable.splash_01)
- override fun getCount(): Int {
- return mPics.size
- }
-
- override fun instantiateItem(container: ViewGroup, position: Int): Any {
- val view = View.inflate(container.context, R.layout.splash_guide_item, null)
- val ivImage = view.findViewById(R.id.splsh_guide_iv_image)
- ivImage.setImageResource(mPics[position])
- if (position == mPics.size - 1) {
- val tvSkip = view.findViewById(R.id.splsh_guide_tv_skip)
- // 如果屏幕特短,或者是平板的横屏显示,把图片改成按高度显示
- if (DisplayUtils.isUltraShortScreen(this@SplashScreenActivity)) {
- ivImage.scaleType = ImageView.ScaleType.CENTER_INSIDE
- }
- tvSkip.setOnClickListener {
- if (com.gh.gamecenter.common.BuildConfig.BUILD_TIME != 0L) {
- showGitLogDialogIfNeeded()
- } else {
- launchMainActivity()
- }
- }
- }
- container.addView(view)
- return view
- }
-
- override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
- container.removeView(`object` as View)
- }
-
- override fun isViewFromObject(view: View, `object`: Any): Boolean {
- return view === `object`
- }
- }
companion object {
- private const val REQUEST_PERMISSION_TAG = 30001
- // 启动时的存储权限获取是否开启
- val isStoragePermissionsRequired by lazy {
- HaloApp.getInstance().channel != "GH_206" && HaloApp.getInstance().channel != "GH_110"
- }
+ const val HONOR_CULPRIT_ID = 12324
+ const val HONOR_CULPRIT_CHANNEL = "荣耀通道"
@JvmStatic
fun getSplashScreenIntent(context: Context?, bundle: Bundle?): Intent {
diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenViewModel.kt b/app/src/main/java/com/gh/gamecenter/SplashScreenViewModel.kt
index 0e51deb6d9..5e98e7a566 100644
--- a/app/src/main/java/com/gh/gamecenter/SplashScreenViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/SplashScreenViewModel.kt
@@ -15,7 +15,6 @@ import com.gh.gamecenter.core.utils.GsonUtils
import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.feature.entity.AuthDialogEntity
import com.gh.gamecenter.entity.DeviceDialogEntity
-import com.gh.gamecenter.entity.PrivacyPolicyEntity
import com.gh.gamecenter.retrofit.RetrofitManager
import com.halo.assistant.HaloApp
import io.reactivex.android.schedulers.AndroidSchedulers
@@ -91,25 +90,6 @@ class SplashScreenViewModel(application: Application) : AndroidViewModel(applica
})
}
- /**
- * 获取隐私政策指引概要
- */
- @SuppressLint("CheckResult")
- fun showPrivacyPolicy(successCallBack: (PrivacyPolicyEntity) -> Unit, onFailureCallBack: () -> Unit) {
- mApi.privacyPolicy
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(object : BiResponse() {
- override fun onSuccess(data: PrivacyPolicyEntity) {
- successCallBack.invoke(data)
- }
-
- override fun onFailure(exception: Exception) {
- onFailureCallBack.invoke()
- }
- })
- }
-
/**
* 判断新老用户
*/
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.kt b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.kt
index ea78734866..7f00ebbd27 100644
--- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.kt
+++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.kt
@@ -210,10 +210,11 @@ class DetailViewHolder(
return
} else if (XapkUnzipStatus.FAILURE.name == xapkStatus) {
PermissionHelper.checkStoragePermissionBeforeAction(
- mViewHolder.context,
- mGameEntity.id,
- (if (mGameEntity.name != null) mGameEntity.name else "")!!,
- mGameEntity.categoryChinese
+ context = mViewHolder.context,
+ gameId = mGameEntity.id,
+ gameName = (if (mGameEntity.name != null) mGameEntity.name else "")!!,
+ gameType = mGameEntity.categoryChinese,
+ gameFormat = mGameEntity.getApk().firstOrNull()?.format
) {
if (mDownloadEntity != null) {
val path = mDownloadEntity!!.path
@@ -303,7 +304,8 @@ class DetailViewHolder(
context = mViewHolder.context,
gameId = mGameEntity.id,
gameName = mGameEntity.name ?: "",
- gameType = mGameEntity.categoryChinese
+ gameType = mGameEntity.categoryChinese,
+ gameFormat = mGameEntity.getApk().firstOrNull()?.format
) {
DownloadDialog.showDownloadDialog(
context = mViewHolder.context,
@@ -364,7 +366,8 @@ class DetailViewHolder(
context = mViewHolder.context,
gameId = mGameEntity.id,
gameName = (if (mGameEntity.name != null) mGameEntity.name else "")!!,
- gameType = mGameEntity.categoryChinese
+ gameType = mGameEntity.categoryChinese,
+ gameFormat = mGameEntity.getApk().firstOrNull()?.format
) {
if (mDownloadEntity == null) {
mDownloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(mGameEntity)
diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java
index 9d977ed764..a05ca984d0 100644
--- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java
@@ -291,6 +291,7 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter {
downloadEntity.getGameId(),
downloadEntity.getName(),
ExtensionsKt.getCategoryChinese(downloadEntity),
+ downloadEntity.getFormat(),
() -> {
final String path = downloadEntity.getPath();
if (downloadEntity.isPluggable()
@@ -336,6 +337,7 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter {
downloadEntity.getGameId(),
downloadEntity.getName(),
ExtensionsKt.getCategoryChinese(downloadEntity),
+ downloadEntity.getFormat(),
() -> {
// 下载管理不用判断是否大于50M
DialogUtils.checkDownload(mContext, Float.toString(100F), downloadEntity.getGameId(), downloadEntity.getName(), ExtensionsKt.getGameCategory(downloadEntity), isSubscribe -> {
@@ -368,6 +370,7 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter {
downloadEntity.getGameId(),
downloadEntity.getName(),
ExtensionsKt.getCategoryChinese(downloadEntity),
+ downloadEntity.getFormat(),
() -> {
final String path = downloadEntity.getPath();
if (downloadEntity.isPluggable()
diff --git a/app/src/main/java/com/gh/gamecenter/download/NewInstalledGameFragment.kt b/app/src/main/java/com/gh/gamecenter/download/NewInstalledGameFragment.kt
index c5c3ca44b0..cb42cb9fd4 100644
--- a/app/src/main/java/com/gh/gamecenter/download/NewInstalledGameFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/download/NewInstalledGameFragment.kt
@@ -153,7 +153,7 @@ class NewInstalledGameFragment : ToolbarFragment() {
reuseNoneData.reuseNoneDataDescTv.text = " 及时获悉游戏最新的更新消息"
reuseNoneData.reuseResetLoadTv.text = "去开启"
reuseNoneData.reuseResetLoadTv.setOnClickListener {
- PermissionHelper.checkGetInstalledAppsListBeforeAction(requireActivity()) {
+ PermissionHelper.requestGetInstalledAppsListPermission(requireActivity()) {
updateNoDataView()
PackageRepository.initData()
}
diff --git a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameAdapter.kt b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameAdapter.kt
index 7c81ff29b0..c46037560d 100644
--- a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameAdapter.kt
+++ b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameAdapter.kt
@@ -397,7 +397,8 @@ class UpdatableGameAdapter(private var mViewModel: UpdatableGameViewModel) :
(CurrentActivityHolder.getCurrentActivity() as? FragmentActivity)?.checkStoragePermissionBeforeAction(
gameId = downloadEntity?.gameId ?: "",
gameName = downloadEntity?.name ?: "",
- gameType = downloadEntity?.categoryChinese ?: ""
+ gameType = downloadEntity?.categoryChinese ?: "",
+ gameFormat = downloadEntity?.format ?: "",
) {
DialogUtils.checkDownload(
updateBtn.context,
diff --git a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameFragment.kt b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameFragment.kt
index dc63bd3c8a..5f62dc7434 100644
--- a/app/src/main/java/com/gh/gamecenter/download/UpdatableGameFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/download/UpdatableGameFragment.kt
@@ -103,8 +103,9 @@ class UpdatableGameFragment : LazyFragment() {
noDataContainer.reuseNoneDataDescTv.text = "及时获悉游戏最新的更新消息"
noDataContainer.reuseResetLoadTv.text = "去开启"
noDataContainer.reuseResetLoadTv.setOnClickListener {
- PermissionHelper.checkGetInstalledAppsListBeforeAction(
+ PermissionHelper.requestGetInstalledAppsListPermission(
requireActivity(),
+ false,
object : EmptyCallback {
override fun onCallback() {
updateNoDataView()
diff --git a/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt
deleted file mode 100644
index 8c559cc6d6..0000000000
--- a/app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.gh.gamecenter.entity
-
-import com.gh.gamecenter.R
-import com.gh.gamecenter.SplashScreenActivity
-import com.google.gson.annotations.SerializedName
-
-class PrivacyPolicyEntity(
- var title: String = "",
- @SerializedName("top_content")
- var topContent: String = "",
- @SerializedName("bottom_content")
- var bottomContent: String = "",
- var permissions: List = arrayListOf()
-) {
-
- companion object {
- @JvmStatic
- fun createDefaultData(): PrivacyPolicyEntity {
- val data = PrivacyPolicyEntity()
- data.title = "欢迎来到光环助手"
- data.topContent = "为提供完整的功能与稳定的服务,光环助手将向你申请开启以下权限:"
- data.bottomContent =
- "点击查看权限应用场景,你可以在系统设置中关闭授权,但可能会影响部分功能的正常使用"
- val permissions = arrayListOf()
- if (SplashScreenActivity.isStoragePermissionsRequired) {
- permissions.add(
- PermissionsEntity(
- icon = "res:///" + R.drawable.permission_storage,
- name = "存储权限",
- intro = "用于下载游戏,以及实现内容缓存提升浏览体验"
- )
- )
- }
- permissions.add(
- PermissionsEntity(
- icon = "res:///" + R.drawable.permission_installed_list,
- name = "已安装应用列表",
- intro = "提供检测您所安装游戏的版本更新功能"
- )
- )
- data.permissions = permissions
- return data
- }
- }
-}
-
-class PermissionsEntity(
- val icon: String = "",
- val name: String = "",
- val intro: String = ""
-)
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt b/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt
index 4d2329a26a..ff1ec3ef15 100644
--- a/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/forum/home/CommunityHomeFragment.kt
@@ -466,51 +466,45 @@ class CommunityHomeFragment : LazyFragment() {
NewLogUtils.logBbsPostPanelClick("推荐信息流", "", "")
contentView.findViewById(R.id.community_edit_article_container).setOnClickListener {
context?.ifLogin("论坛首页-发布-发帖子", action = {
- checkStoragePermissionBeforeAction {
- showRegulationTestDialogIfNeeded {
- MtaHelper.onEvent("论坛首页", "发布", "发帖子")
- NewLogUtils.logArticleEditEnter("推荐信息流", "", "")
- startActivityForResult(
- ArticleEditActivity.getIntent(requireContext(), null, entrance = "社区推荐Tab"),
- ARTICLE_REQUEST_CODE
- )
- dialog.dismiss()
- }
+ showRegulationTestDialogIfNeeded {
+ MtaHelper.onEvent("论坛首页", "发布", "发帖子")
+ NewLogUtils.logArticleEditEnter("推荐信息流", "", "")
+ startActivityForResult(
+ ArticleEditActivity.getIntent(requireContext(), null, entrance = "社区推荐Tab"),
+ ARTICLE_REQUEST_CODE
+ )
+ dialog.dismiss()
}
})
}
contentView.findViewById(R.id.community_edit_question_container).setOnClickListener {
context?.ifLogin("论坛首页-发布-提问", action = {
- checkStoragePermissionBeforeAction {
- showRegulationTestDialogIfNeeded {
- MtaHelper.onEvent("论坛首页", "发布", "提问")
- NewLogUtils.logQuestionEditEnter("推荐信息流", "", "")
- startActivityForResult(
- QuestionEditActivity.getIntent(requireContext(), entrance = "社区推荐Tab"),
- QUESTION_REQUEST_CODE
- )
- dialog.dismiss()
- }
+ showRegulationTestDialogIfNeeded {
+ MtaHelper.onEvent("论坛首页", "发布", "提问")
+ NewLogUtils.logQuestionEditEnter("推荐信息流", "", "")
+ startActivityForResult(
+ QuestionEditActivity.getIntent(requireContext(), entrance = "社区推荐Tab"),
+ QUESTION_REQUEST_CODE
+ )
+ dialog.dismiss()
}
})
}
contentView.findViewById(R.id.community_edit_video_container).setOnClickListener {
context?.ifLogin("论坛首页-发布-视频", action = {
- checkStoragePermissionBeforeAction {
- showRegulationTestDialogIfNeeded {
- MtaHelper.onEvent("论坛首页", "发布", "发视频")
- NewLogUtils.logPublishVideoEnter("推荐信息流", "", "")
- startActivityForResult(
- VideoPublishActivity.getIntent(
- context = requireContext(),
- type = "",
- entrance = mEntrance,
- path = "论坛首页"
- ),
- VIDEO_REQUEST_CODE
- )
- dialog.dismiss()
- }
+ showRegulationTestDialogIfNeeded {
+ MtaHelper.onEvent("论坛首页", "发布", "发视频")
+ NewLogUtils.logPublishVideoEnter("推荐信息流", "", "")
+ startActivityForResult(
+ VideoPublishActivity.getIntent(
+ context = requireContext(),
+ type = "",
+ entrance = mEntrance,
+ path = "论坛首页"
+ ),
+ VIDEO_REQUEST_CODE
+ )
+ dialog.dismiss()
}
})
}
diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/draft/AnswerDraftAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/answer/draft/AnswerDraftAdapter.java
index 39c3891afe..19490c5c35 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/answer/draft/AnswerDraftAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/qa/answer/draft/AnswerDraftAdapter.java
@@ -128,7 +128,7 @@ class AnswerDraftAdapter extends ListAdapter {
});
draftViewHolder.itemView.setOnClickListener(v -> {
PermissionHelper.checkStoragePermissionBeforeAction(
- mContext, "", "", "",
+ mContext, "", "", "", "",
() -> {
if (mContext instanceof AnswerDraftActivity) {
// 不需要回传任何数据
diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java
index f456ac1875..d02e6decce 100644
--- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java
+++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java
@@ -67,7 +67,6 @@ import com.gh.gamecenter.entity.NewsDetailEntity;
import com.gh.gamecenter.entity.PackageFilter;
import com.gh.gamecenter.entity.PackageGame;
import com.gh.gamecenter.entity.PersonalHistoryEntity;
-import com.gh.gamecenter.entity.PrivacyPolicyEntity;
import com.gh.gamecenter.entity.Rating;
import com.gh.gamecenter.entity.RatingComment;
import com.gh.gamecenter.entity.RatingDraftEntity;
@@ -1511,12 +1510,6 @@ public interface ApiService {
@GET("games/tags")
Single> getRelatedTags(@Query("filter") String filter);
- /**
- * 获取隐私政策指引概要
- */
- @GET("privacy_policy")
- Single getPrivacyPolicy();
-
/**
* 获取视频详情列表
*/
diff --git a/app/src/main/java/com/halo/assistant/fragment/user/SelectPortraitFragment.java b/app/src/main/java/com/halo/assistant/fragment/user/SelectPortraitFragment.java
index 4ff4c6447b..919e0f7d9b 100644
--- a/app/src/main/java/com/halo/assistant/fragment/user/SelectPortraitFragment.java
+++ b/app/src/main/java/com/halo/assistant/fragment/user/SelectPortraitFragment.java
@@ -156,7 +156,7 @@ public class SelectPortraitFragment extends ToolbarFragment {
postUserIcon(8);
} else if (id == R.id.skip_media_store) {
PermissionHelper.checkStoragePermissionBeforeAction(
- requireContext(), "", "", "", this::startMediaStore
+ requireContext(), "", "", "", "", this::startMediaStore
);
}
}
diff --git a/app/src/main/res/drawable-nodpi/splash_01.webp b/app/src/main/res/drawable-nodpi/splash_01.webp
deleted file mode 100644
index a14416fffb..0000000000
Binary files a/app/src/main/res/drawable-nodpi/splash_01.webp and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/permission_installed_list.png b/app/src/main/res/drawable-xxxhdpi/permission_installed_list.png
deleted file mode 100644
index fec07575ac..0000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/permission_installed_list.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/permission_phone_state.webp b/app/src/main/res/drawable-xxxhdpi/permission_phone_state.webp
deleted file mode 100644
index ed85a119ce..0000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/permission_phone_state.webp and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/permission_storage.webp b/app/src/main/res/drawable-xxxhdpi/permission_storage.webp
deleted file mode 100644
index 834a49ae5a..0000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/permission_storage.webp and /dev/null differ
diff --git a/app/src/main/res/layout/activity_splash_intro.xml b/app/src/main/res/layout/activity_splash_intro.xml
deleted file mode 100644
index 669d0a68ee..0000000000
--- a/app/src/main/res/layout/activity_splash_intro.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_privacy_policy.xml b/app/src/main/res/layout/dialog_privacy_policy.xml
deleted file mode 100644
index f0d6a14e1c..0000000000
--- a/app/src/main/res/layout/dialog_privacy_policy.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dependencies.gradle b/dependencies.gradle
index 2dfac57dfe..2449cb5d83 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -7,8 +7,8 @@ ext {
targetSdkVersion = 28
// application info (每个大版本之间的 versionCode 增加 20)
- versionCode = 997
- versionName = "5.32.7"
+ versionCode = 998
+ versionName = "5.32.8"
applicationId = "com.gh.gamecenter"
// AndroidX
diff --git a/libraries/LGLibrary b/libraries/LGLibrary
index cb574791be..2f765e072e 160000
--- a/libraries/LGLibrary
+++ b/libraries/LGLibrary
@@ -1 +1 @@
-Subproject commit cb574791bef4b33cd783cb8c5da01e1660b87a39
+Subproject commit 2f765e072e8d0daeff48ee45a9feb8815a4cdf68
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/constant/Constants.java b/module_common/src/main/java/com/gh/gamecenter/common/constant/Constants.java
index 721e09527e..eaafeb6c96 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/constant/Constants.java
+++ b/module_common/src/main/java/com/gh/gamecenter/common/constant/Constants.java
@@ -485,6 +485,7 @@ public class Constants {
public static final String V_GAME = "smooth";
public static final String V_GAME_32 = "smooth_32";
+ public static final String APK_FORMAT = "apk";
public static final String XAPK_FORMAT = "xapk";
public static final String XAPK_APKS_FORMAT = "xapk(apks)";
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/DialogHelper.kt b/module_common/src/main/java/com/gh/gamecenter/common/utils/DialogHelper.kt
index 30b66a969d..c9c88faf0a 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/utils/DialogHelper.kt
+++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/DialogHelper.kt
@@ -924,6 +924,8 @@ object DialogHelper {
val cancelTv: TextView get() = binding.cancelTv
val confirmTv: TextView get() = binding.confirmTv
val lineView: View get() = binding.lineView
+ val extraContentView: View get() = binding.extraContentView
+ val extraContentTv: TextView get() = binding.extraContentTv
}
/**
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt b/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt
index 1f4fb55911..cd28a499a5 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt
+++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/Extensions.kt
@@ -746,9 +746,10 @@ fun FragmentActivity.checkStoragePermissionBeforeAction(
gameId: String = "",
gameName: String = "",
gameType: String = "",
+ gameFormat: String? = "",
action: (() -> Unit)
) {
- PermissionHelper.checkStoragePermissionBeforeAction(this, gameId, gameName, gameType) {
+ PermissionHelper.checkStoragePermissionBeforeAction(this, gameId, gameName, gameType, gameFormat) {
action.invoke()
}
}
diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/PermissionHelper.kt b/module_common/src/main/java/com/gh/gamecenter/common/utils/PermissionHelper.kt
index 5731231712..dae12601ea 100644
--- a/module_common/src/main/java/com/gh/gamecenter/common/utils/PermissionHelper.kt
+++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/PermissionHelper.kt
@@ -10,7 +10,9 @@ import android.content.pm.PermissionInfo
import android.net.Uri
import android.os.Build
import android.provider.Settings
-import androidx.appcompat.app.AppCompatActivity
+import android.view.View
+import androidx.appcompat.content.res.AppCompatResources
+import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentActivity
import com.alibaba.android.arouter.launcher.ARouter
@@ -18,7 +20,6 @@ import com.gh.gamecenter.common.R
import com.gh.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.constant.RouteConsts
import com.gh.gamecenter.core.AppExecutor
-import com.gh.gamecenter.core.provider.IActivationProvider
import com.gh.gamecenter.core.provider.IAppProvider
import com.gh.gamecenter.core.provider.IDirectProvider
import com.gh.gamecenter.core.utils.EmptyCallback
@@ -31,30 +32,14 @@ object PermissionHelper {
const val PERMISSION_GET_INSTALLED_LIST = "com.android.permission.GET_INSTALLED_APPS"
- private const val HINT_CHECK_USAGE = "查看权限应用场景"
-
- /**
- * 在执行 emptyCallback 的 action 前先判断是否有获取已安装列表的权限
- */
- @SuppressLint("CheckResult")
- @JvmStatic
- fun checkGetInstalledAppsListBeforeAction(
- context: Context,
- emptyCallback: EmptyCallback
- ) {
- if (context is AppCompatActivity && isGetInstalledListPermissionDisabled(context)) {
- showDialogBeforeRequestingGetInstalledListDialog(context, emptyCallback)
- } else {
- emptyCallback.onCallback()
- }
- }
+ private const val HINT_CHECK_USAGE = "查看权限应用场景 "
/**
* 请求获取已安装列表权限
*/
@SuppressLint("CheckResult")
- fun requestGetInstalledAppsListPermission(context: FragmentActivity, emptyCallback: EmptyCallback) {
- tryWithDefaultCatch {
+ fun requestGetInstalledAppsListPermission(context: FragmentActivity, ignoreResult: Boolean = false, emptyCallback: EmptyCallback) {
+ try {
val rxPermission = RxPermissions(context)
rxPermission
.requestEachCombined(PERMISSION_GET_INSTALLED_LIST)
@@ -65,16 +50,26 @@ object PermissionHelper {
}
permission.shouldShowRequestPermissionRationale -> {
- // do nothing
+ if (ignoreResult) {
+ emptyCallback.onCallback()
+ }
}
else -> {
- val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
- intent.data = Uri.parse("package:" + context.packageName)
- context.startActivity(intent)
+ if (ignoreResult) {
+ emptyCallback.onCallback()
+ } else {
+ val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
+ intent.data = Uri.parse("package:" + context.packageName)
+ context.startActivity(intent)
+ }
}
}
}
+ } catch (e: Exception) {
+ if (ignoreResult) {
+ emptyCallback.onCallback()
+ }
}
}
@@ -85,8 +80,18 @@ object PermissionHelper {
gameId: String = "",
gameName: String = "",
gameType: String = "",
+ gameFormat: String? = "",
emptyCallback: EmptyCallback
) {
+
+ // 无需申请存储权限的场景 (gameFormat 等于 APK)
+ val ignoreStoragePermission = gameFormat == Constants.APK_FORMAT
+
+ if (ignoreStoragePermission) {
+ emptyCallback.onCallback()
+ return
+ }
+
if (context is FragmentActivity) {
if (context.checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
&& context.checkCallingOrSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
@@ -140,85 +145,6 @@ object PermissionHelper {
}
}
- @SuppressLint("CheckResult")
- @JvmStatic
- fun checkReadPhoneStateAndStoragePermissionBeforeAction(context: Context, emptyCallback: EmptyCallback) {
- if (context is FragmentActivity) {
- if (context.checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
- && context.checkCallingOrSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
- ) {
- emptyCallback.onCallback()
- } else {
- val rxPermission = RxPermissions(context)
-
- tryWithDefaultCatch {
- rxPermission
- .requestEachCombined(
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE
- )
- .subscribe { permission ->
- when {
- permission.granted -> {
- emptyCallback.onCallback()
-
- val provider = ARouter.getInstance().build(RouteConsts.provider.activation)
- .navigation() as? IActivationProvider
- provider?.sendActivationInfo()
- }
-
- permission.shouldShowRequestPermissionRationale -> {
- // do nothing
- }
-
- else -> {
- val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
- intent.data = Uri.parse("package:" + context.getPackageName())
- context.startActivity(intent)
- }
- }
- }
- }
- }
- }
- }
-
- @SuppressLint("CheckResult")
- @JvmStatic
- fun checkReadPhoneStatePermissionBeforeAction(context: Context, emptyCallback: EmptyCallback) {
- emptyCallback.onCallback()
-// if (context is FragmentActivity) {
-//
-// if (context.checkCallingOrSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
-// emptyCallback.onCallback()
-// } else {
-// val rxPermission = RxPermissions(context)
-//
-// tryWithDefaultCatch {
-// rxPermission
-// .requestEachCombined(Manifest.permission.READ_PHONE_STATE)
-// .subscribe { permission ->
-// when {
-// permission.granted -> {
-// emptyCallback.onCallback()
-// val provider = ARouter.getInstance().build(RouteConsts.provider.activation).navigation() as? IActivationProvider
-// provider?.sendActivationInfo()
-// }
-// permission.shouldShowRequestPermissionRationale -> {
-// // do nothing
-// }
-// else -> {
-// val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
-// intent.data = Uri.parse("package:" + context.getPackageName())
-// context.startActivity(intent)
-// }
-// }
-// }
-// }
-// }
-// }
- }
-
/**
* 跳转到权限设置
*
@@ -296,7 +222,7 @@ object PermissionHelper {
DialogHelper.showDialog(
context,
title = "权限申请",
- content = "光环助手将向您申请开启设备的存储权限,以保证游戏下载/图片/视频上传等功能的正常使用。拒绝授权将无法使用该部分功能。",
+ content = "光环助手将申请设备的存储权限,具体场景如下:",
cancelText = "放弃",
confirmText = "去授权",
cancelClickCallback = {
@@ -329,6 +255,8 @@ object PermissionHelper {
},
extraConfig = DialogHelper.Config(hint = HINT_CHECK_USAGE),
uiModificationCallback = {
+ it.hintTv.text = HINT_CHECK_USAGE
+ it.hintTv.setDrawableEnd(AppCompatResources.getDrawable(context, R.drawable.ic_blue_arrow_right))
it.hintTv.setTextColor(ContextCompat.getColor(context, R.color.theme_font))
it.hintTv.setOnClickListener {
val provider =
@@ -342,32 +270,14 @@ object PermissionHelper {
gameType = gameType
)
}
- it.contentTv.setTextColor(ContextCompat.getColor(context, R.color.text_title))
- }
- )
- }
- private fun showDialogBeforeRequestingGetInstalledListDialog(
- context: FragmentActivity,
- emptyCallback: EmptyCallback
- ) {
- DialogHelper.showDialog(
- context,
- title = "权限申请",
- content = "光环助手将向您申请开启设备的应用列表权限,以保证能正常使用相关功能。拒绝授权将无法正常使用部分功能。",
- cancelText = "放弃",
- confirmText = "去授权",
- cancelClickCallback = null,
- confirmClickCallback = { requestGetInstalledAppsListPermission(context, emptyCallback) },
- extraConfig = DialogHelper.Config(hint = HINT_CHECK_USAGE),
- uiModificationCallback = {
- it.hintTv.setTextColor(ContextCompat.getColor(context, R.color.theme_font))
- it.hintTv.setOnClickListener {
- val provider =
- ARouter.getInstance().build(RouteConsts.provider.directUtils).navigation() as? IDirectProvider
- provider?.directToWebView(context, Constants.PERMISSION_SCENARIO_ADDRESS, "(权限弹窗)")
+ (it.lineView.layoutParams as ConstraintLayout.LayoutParams).apply {
+ topMargin = 24F.dip2px()
}
- it.contentTv.setTextColor(ContextCompat.getColor(context, R.color.text_title))
+ it.extraContentTv.text = context.getString(R.string.storage_permission_intro)
+ it.extraContentView.visibility = View.VISIBLE
+
+ it.contentTv.setTextColor(ContextCompat.getColor(context, R.color.text_subtitle))
}
)
}
diff --git a/app/src/main/res/drawable/bg_shape_space_radius_4.xml b/module_common/src/main/res/drawable/bg_shape_space_radius_4.xml
similarity index 100%
rename from app/src/main/res/drawable/bg_shape_space_radius_4.xml
rename to module_common/src/main/res/drawable/bg_shape_space_radius_4.xml
diff --git a/module_common/src/main/res/drawable/ic_blue_arrow_right.xml b/module_common/src/main/res/drawable/ic_blue_arrow_right.xml
new file mode 100644
index 0000000000..84d5c8d767
--- /dev/null
+++ b/module_common/src/main/res/drawable/ic_blue_arrow_right.xml
@@ -0,0 +1,13 @@
+
+
+
diff --git a/app/src/main/res/drawable/privacy_scrollbar_vertical.xml b/module_common/src/main/res/drawable/privacy_scrollbar_vertical.xml
similarity index 100%
rename from app/src/main/res/drawable/privacy_scrollbar_vertical.xml
rename to module_common/src/main/res/drawable/privacy_scrollbar_vertical.xml
diff --git a/module_common/src/main/res/layout/dialog_alert_default.xml b/module_common/src/main/res/layout/dialog_alert_default.xml
index 8d715a5ca6..a0ef594dd9 100644
--- a/module_common/src/main/res/layout/dialog_alert_default.xml
+++ b/module_common/src/main/res/layout/dialog_alert_default.xml
@@ -60,6 +60,42 @@
app:layout_constraintTop_toBottomOf="@id/titleTv"
tools:text="这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文,这里是正文。" />
+
+
+
+
+
view绑定的对象
用户协议与免责声明
- http://api.ghzs666.com/v2d6/disclaimer
+ https://resource.ghzs.com/page/privacy_policies/User_agreement.html
隐私政策
https://resource.ghzs.com/page/privacy_policies/privacy_policies.html
@@ -87,5 +87,6 @@
请输入文字...
搜索
+ 1. 游戏下载功能(XAPK与APKS文件下载)\n2. 图片上传功能(头像、主页背景、帖子、游戏单)\n3. 视频上传功能(视频流、帖子)\n4. 图片保存功能\n5. 游戏投稿功能
\ No newline at end of file