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