From 2bb61e8e4bf600409ffdd9af617c852e1dc0cf81 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Tue, 26 Dec 2023 11:50:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=9A=90=E7=A7=81=E5=90=88=E8=A7=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98-12/22=20https://jira.shanqu.cc/browse/GHZS-4?= =?UTF-8?q?446?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 3 + .../chain/CheckStoragePermissionHandler.kt | 3 +- .../simulator/SimulatorDownloadManager.kt | 12 +- .../java/com/gh/common/util/DialogUtils.java | 192 ---------- .../com/gh/common/util/DownloadItemUtils.kt | 1 + .../com/gh/gamecenter/SplashScreenActivity.kt | 330 ++++-------------- .../gh/gamecenter/SplashScreenViewModel.kt | 20 -- .../adapter/viewholder/DetailViewHolder.kt | 15 +- .../download/GameDownloadFragmentAdapter.java | 3 + .../download/NewInstalledGameFragment.kt | 2 +- .../download/UpdatableGameAdapter.kt | 3 +- .../download/UpdatableGameFragment.kt | 3 +- .../gamecenter/entity/PrivacyPolicyEntity.kt | 51 --- .../forum/home/CommunityHomeFragment.kt | 64 ++-- .../qa/answer/draft/AnswerDraftAdapter.java | 2 +- .../retrofit/service/ApiService.java | 7 - .../fragment/user/SelectPortraitFragment.java | 2 +- .../main/res/drawable-nodpi/splash_01.webp | Bin 91490 -> 0 bytes .../permission_installed_list.png | Bin 949 -> 0 bytes .../permission_phone_state.webp | Bin 1242 -> 0 bytes .../drawable-xxxhdpi/permission_storage.webp | Bin 1620 -> 0 bytes .../main/res/layout/activity_splash_intro.xml | 12 - .../main/res/layout/dialog_privacy_policy.xml | 156 --------- dependencies.gradle | 4 +- libraries/LGLibrary | 2 +- .../gamecenter/common/constant/Constants.java | 1 + .../gamecenter/common/utils/DialogHelper.kt | 2 + .../gh/gamecenter/common/utils/Extensions.kt | 3 +- .../common/utils/PermissionHelper.kt | 168 +++------ .../res/drawable/bg_shape_space_radius_4.xml | 0 .../main/res/drawable/ic_blue_arrow_right.xml | 13 + .../drawable/privacy_scrollbar_vertical.xml | 0 .../main/res/layout/dialog_alert_default.xml | 42 ++- module_common/src/main/res/values/strings.xml | 3 +- 34 files changed, 227 insertions(+), 892 deletions(-) delete mode 100644 app/src/main/java/com/gh/gamecenter/entity/PrivacyPolicyEntity.kt delete mode 100644 app/src/main/res/drawable-nodpi/splash_01.webp delete mode 100644 app/src/main/res/drawable-xxxhdpi/permission_installed_list.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/permission_phone_state.webp delete mode 100644 app/src/main/res/drawable-xxxhdpi/permission_storage.webp delete mode 100644 app/src/main/res/layout/activity_splash_intro.xml delete mode 100644 app/src/main/res/layout/dialog_privacy_policy.xml rename {app => module_common}/src/main/res/drawable/bg_shape_space_radius_4.xml (100%) create mode 100644 module_common/src/main/res/drawable/ic_blue_arrow_right.xml rename {app => module_common}/src/main/res/drawable/privacy_scrollbar_vertical.xml (100%) 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 a14416fffb986c2884de7ffde4da7dd024c5f8fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91490 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 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 fec07575ac98e69ebdc4b875fb22e5ac4458e17d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 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 S?oQz$H4$(Cjw4AFfB*m^jWCJ; 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