diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index 62f870f086..b8dd6ee060 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -924,10 +924,11 @@ public class DialogUtils { return dialog; } - public static void showPrivacyPolicyDialog(Context context, String content) { + public static void showPrivacyPolicyDialog(Context context, String title, String content, EmptyCallback callback) { final Context activityContext = checkDialogContext(context); String privacyPolicyContent; + String privacyPolicyTitle = (TextUtils.isEmpty(title)) ? "个人信息保护指引" : title; if (TextUtils.isEmpty(content)) { privacyPolicyContent = "您的个人信息安全对我们来说至关重要。一直以来," + "光环都致力于为每位用户提供更安全的互联网环境。" + @@ -971,11 +972,12 @@ public class DialogUtils { skipTv.setText(skipText); skipTv.setMovementMethod(new LinkMovementMethod()); contentTv.setText(Html.fromHtml(privacyPolicyContent)); - titleTv.setText("隐私政策指引概要"); + titleTv.setText(privacyPolicyTitle); positiveTv.setText("我知道了"); positiveTv.setOnClickListener(view -> { dialog.dismiss(); + callback.onCallback(); MtaHelper.onEvent("隐私政策弹窗", "隐私政策弹窗", "点击我知道了"); }); diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java index ae447926f2..8c61f06f75 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -389,12 +389,19 @@ public class DownloadItemUtils { if (gameEntity.getApk().size() == 1) { downloadBtn.setOnClickListener(v -> { - PermissionHelper.checkStoragePermissionBeforeAction(context, () -> { + EmptyCallback clickRunnable = () -> { onNormalClick(context, downloadBtn, gameEntity, position, adapter, entrance, location, traceEvent); if (clickCallback != null) { clickCallback.onCallback(); } - }); + }; + + // 启动不需要请求存储权限 + if (downloadBtn.getText().toString().equals(context.getString(R.string.launch))) { + clickRunnable.onCallback(); + } else { + PermissionHelper.checkStoragePermissionBeforeAction(context, clickRunnable); + } }); } else { downloadBtn.setOnClickListener(v -> { @@ -440,7 +447,7 @@ public class DownloadItemUtils { DataLogUtils.uploadGameLog(context, gameEntity.getId(), gameEntity.getName(), entrance); } else if (str.equals(context.getString(R.string.pluggable))) { if (entrance.contains("我的游戏")) { - DataUtils.onMtaEvent(context, "我的游戏_启动", "插件化", gameEntity.getName()); + MtaHelper.onEvent("我的游戏_启动", "插件化", gameEntity.getName()); } DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { DialogUtils.checkDownload(context, apk.getSize(), @@ -450,7 +457,7 @@ public class DownloadItemUtils { install(context, gameEntity, position, adapter); } else if (str.equals(context.getString(R.string.launch))) { if (entrance.contains("我的游戏")) { - DataUtils.onMtaEvent(context, "我的游戏_启动", "启动", gameEntity.getName()); + MtaHelper.onEvent( "我的游戏_启动", "启动", gameEntity.getName()); } DataUtils.onGameLaunchEvent(context, gameEntity.getName(), gameEntity.getApk().get(0).getPlatform(), location); PackageUtils.launchApplicationByPackageName(context, gameEntity.getApk().get(0).getPackageName()); @@ -462,7 +469,7 @@ public class DownloadItemUtils { }); } else if (str.equals(context.getString(R.string.update))) { if (entrance.contains("我的游戏")) { - DataUtils.onMtaEvent(context, "我的游戏_启动", "更新", gameEntity.getName()); + MtaHelper.onEvent( "我的游戏_启动", "更新", gameEntity.getName()); } DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { DialogUtils.checkDownload(context, apk.getSize(), diff --git a/app/src/main/java/com/gh/common/util/Extensions.kt b/app/src/main/java/com/gh/common/util/Extensions.kt index d184992d43..e9866c4562 100644 --- a/app/src/main/java/com/gh/common/util/Extensions.kt +++ b/app/src/main/java/com/gh/common/util/Extensions.kt @@ -232,4 +232,31 @@ fun PopupWindow.showAutoOrientation(anchorView: View) { animationStyle = R.style.popwindow_option_anim_style showAtLocation(anchorView, Gravity.TOP or Gravity.START, windowPos[0], windowPos[1]) +} + +/** + * 权限相关 + */ +fun Fragment.checkReadPhoneStateAndStoragePermissionBeforeAction(action: (() -> Unit)) { + PermissionHelper.checkReadPhoneStateAndStoragePermissionBeforeAction(requireContext(), object : EmptyCallback { + override fun onCallback() { + action.invoke() + } + }) +} + +fun Fragment.checkReadPhoneStatePermissionBeforeAction(action: (() -> Unit)) { + PermissionHelper.checkReadPhoneStatePermissionBeforeAction(requireContext(), object : EmptyCallback { + override fun onCallback() { + action.invoke() + } + }) +} + +fun Fragment.checkStoragePermissionBeforeAction(action: (() -> Unit)) { + PermissionHelper.checkStoragePermissionBeforeAction(requireContext(), object : EmptyCallback { + override fun onCallback() { + action.invoke() + } + }) } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/PermissionHelper.kt b/app/src/main/java/com/gh/common/util/PermissionHelper.kt index 1109653de6..99cc968dda 100644 --- a/app/src/main/java/com/gh/common/util/PermissionHelper.kt +++ b/app/src/main/java/com/gh/common/util/PermissionHelper.kt @@ -50,6 +50,44 @@ object PermissionHelper { } } + @SuppressLint("CheckResult") + @JvmStatic + fun checkReadPhoneStateAndStoragePermissionBeforeAction(context: Context, emptyCallback: EmptyCallback) { + if (context is FragmentActivity) { + val rxPermission = RxPermissions(context) + rxPermission + .requestEachCombined( + Manifest.permission.READ_PHONE_STATE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE) + .subscribe { permission -> + when { + permission.granted -> { + emptyCallback.onCallback() + + ActivationHelper.sendActivationInfo() + } + permission.shouldShowRequestPermissionRationale -> { + DialogUtils.showPermissionDialog(context, "权限申请", + "光环助手需要获取存储权限和手机信息权限,以保证能正常使用相关功能", "重试", "放弃", + { checkStoragePermissionBeforeAction(context, emptyCallback) }, null) + } + else -> { + DialogUtils.showPermissionDialog(context, "权限申请", + "在设置-应用-光环助手-权限中开启获取存储权限和手机信息,以保证能正常使用相关功能", + "去设置", + "放弃", + { + val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + intent.data = Uri.parse("package:" + context.getPackageName()) + context.startActivity(intent) + }, null) + } + } + } + } + } + @SuppressLint("CheckResult") @JvmStatic fun checkReadPhoneStatePermissionBeforeAction(context: Context, emptyCallback: EmptyCallback) { @@ -85,4 +123,5 @@ object PermissionHelper { } } + } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index b0a0a2f963..91bbb14bc1 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -25,11 +25,13 @@ import com.gh.common.util.DataUtils; import com.gh.common.util.DeviceTokenUtils; import com.gh.common.util.DeviceUtils; import com.gh.common.util.DialogUtils; +import com.gh.common.util.EmptyCallback; import com.gh.common.util.GameRepositoryHelper; import com.gh.common.util.GdtHelper; import com.gh.common.util.MtaHelper; import com.gh.common.util.PackageUtils; import com.gh.common.util.PlatformUtils; +import com.gh.common.util.SPUtils; import com.gh.common.util.TagUtils; import com.gh.common.util.TimestampUtils; import com.gh.download.DownloadManager; @@ -65,12 +67,11 @@ public class SplashScreenActivity extends BaseActivity { private SharedPreferences mSharedPreferences; - private long start; - private boolean isFirst; private boolean isNewFirstLaunch; - private final static int REQUEST_PERMISSION_TAG = 30001; + private static final int REQUEST_PERMISSION_TAG = 30001; + private static final String SP_BRAND_NEW_USER = "brand_new_user"; // 用于标记是否为新用户,应用更新再打开的不算是新用户 private String[] mPermissions = { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, @@ -101,12 +102,11 @@ public class SplashScreenActivity extends BaseActivity { return; } - start = System.currentTimeMillis(); - TimestampUtils.initMap(); isFirst = true; + // 判断是不是这个版本的新用户 if (isNewFirstLaunch) { setTheme(R.style.AppGuideTheme); @@ -123,15 +123,33 @@ public class SplashScreenActivity extends BaseActivity { ViewPager guideLayout = findViewById(R.id.splash_intro_vp_guide); guideLayout.setAdapter(new GuidePagerAdapter()); - - showPrivacyPolicy(); + // 判断是不是光环的新用户 + if (SPUtils.getBoolean(SP_BRAND_NEW_USER, true)) { + showPrivacyPolicy(() -> { + // 用户点击我知道了 + SPUtils.setBoolean(SP_BRAND_NEW_USER, false); + requestPermissionAndLaunchMainActivity(); + }); + } else { + requestPermissionAndLaunchMainActivity(); + } } else { setTheme(R.style.AppFullScreenTheme); + launchMainActivity(); + } + } + + private void requestPermissionAndLaunchMainActivity() { + if (EasyPermissions.hasPermissions(this, mPermissions)) { + GdtHelper.INSTANCE.logAction(ActionType.START_APP, GdtHelper.NETWORK_TYPE, DeviceUtils.getNetwork(this)); + launchMainActivity(); + } else { + checkAndRequestPermission(); } } @SuppressLint("CheckResult") - private void showPrivacyPolicy() { + private void showPrivacyPolicy(EmptyCallback callback) { RetrofitManager.getInstance(this).getApi() .getPrivacyPolicy() .subscribeOn(Schedulers.io()) @@ -139,17 +157,21 @@ public class SplashScreenActivity extends BaseActivity { .subscribe(new BiResponse() { @Override public void onSuccess(ResponseBody data) { + String content = null; + String title = null; try { - String content = new JSONObject(data.string()).getString("content"); - DialogUtils.showPrivacyPolicyDialog(SplashScreenActivity.this, content); + content = new JSONObject(data.string()).getString("content"); + title = new JSONObject(data.string()).getString("title"); } catch (Exception e) { e.printStackTrace(); + } finally { + DialogUtils.showPrivacyPolicyDialog(SplashScreenActivity.this, title, content, callback); } } @Override public void onFailure(@NotNull Exception exception) { - DialogUtils.showPrivacyPolicyDialog(SplashScreenActivity.this, null); + DialogUtils.showPrivacyPolicyDialog(SplashScreenActivity.this, null, null, callback); } }); } @@ -171,7 +193,7 @@ public class SplashScreenActivity extends BaseActivity { public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { if (isNewFirstLaunch && EasyPermissions.hasPermissions(this, mPermissions)) { - launch(); + launchMainActivity(); } else { return true; } @@ -180,14 +202,17 @@ public class SplashScreenActivity extends BaseActivity { } // 跳转到主界面 - private void launch() { + private void launchMainActivity() { getUniqueId(); - Bundle bundle = getIntent().getExtras(); - Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class); - if (bundle != null) intent.putExtras(bundle); - startActivity(intent); - finish(); + long delay = isNewFirstLaunch ? 2000 : 1000; + getWindow().getDecorView().postDelayed(() -> { + Bundle bundle = getIntent().getExtras(); + Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class); + if (bundle != null) intent.putExtras(bundle); + startActivity(intent); + finish(); + }, delay); } private void getUniqueId() { @@ -226,33 +251,13 @@ public class SplashScreenActivity extends BaseActivity { DownloadManager.getInstance(this).initDownloadService(); }); - - // 检查权限 - if (EasyPermissions.hasPermissions(this, mPermissions)) { - GdtHelper.INSTANCE.logAction(ActionType.START_APP, GdtHelper.NETWORK_TYPE, DeviceUtils.getNetwork(this)); - if (!isNewFirstLaunch) { - long end = System.currentTimeMillis() - start; - if (end < 2000) { - getWindow().getDecorView().postDelayed(this::launch, 2000 - end); - } else { - launch(); - } - } - } else { - // 仅首次启动申请授权 - if (isNewFirstLaunch) { - checkAndRequestPermission(); - } else { - launch(); - } - } } } @AfterPermissionGranted(REQUEST_PERMISSION_TAG) private void checkAndRequestPermission() { if (EasyPermissions.hasPermissions(this, mPermissions)) { - launch(); + launchMainActivity(); MtaHelper.onEvent("授权情况", "启动授权", "都授权"); // 检查是否有旧版本光环,有就删掉 HaloApp.getInstance().getMainExecutor().execute(this::checkOldGhFile); @@ -271,7 +276,7 @@ public class SplashScreenActivity extends BaseActivity { intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); }, () -> { - launch(); + launchMainActivity(); logGrantedPermission(perms); }); } else { @@ -279,7 +284,7 @@ public class SplashScreenActivity extends BaseActivity { "在设置-应用-光环助手-权限中开启存储和手机信息权限,以保证能正常使用相关功能", "重试", "放弃", this::checkAndRequestPermission, () -> { - launch(); + launchMainActivity(); logGrantedPermission(perms); }); } @@ -340,7 +345,7 @@ public class SplashScreenActivity extends BaseActivity { TextView tvSkip = view.findViewById(R.id.splsh_guide_tv_skip); tvSkip.setOnClickListener(v -> { if (EasyPermissions.hasPermissions(SplashScreenActivity.this, mPermissions)) { - launch(); + launchMainActivity(); } }); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java index 8e82736acb..688f1fca63 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java @@ -167,11 +167,13 @@ public class DetailViewHolder { DataUtils.onGameLaunchEvent(mViewHolder.context, mGameEntity.getName(), mGameEntity.getApk().get(0).getPlatform(), mName); PackageUtils.launchApplicationByPackageName(mViewHolder.context, mGameEntity.getApk().get(0).getPackageName()); } else { - DownloadDialog.getInstance(mViewHolder.context).showPopupWindowAutoDownload(v, - mGameEntity, - autoDownloadPlatform, - StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), - mName + ":" + mTitle, null); + PermissionHelper.checkStoragePermissionBeforeAction(mViewHolder.context, () -> { + DownloadDialog.getInstance(mViewHolder.context).showPopupWindowAutoDownload(v, + mGameEntity, + autoDownloadPlatform, + StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), + mName + ":" + mTitle, null); + }); } break; case INSTALL_PLUGIN: diff --git a/app/src/main/java/com/gh/gamecenter/category/CategoryListFragment.kt b/app/src/main/java/com/gh/gamecenter/category/CategoryListFragment.kt index 75bfcdf6b1..799766a212 100644 --- a/app/src/main/java/com/gh/gamecenter/category/CategoryListFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/category/CategoryListFragment.kt @@ -2,6 +2,7 @@ package com.gh.gamecenter.category import android.os.Bundle import android.view.View +import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import butterknife.BindView @@ -29,7 +30,7 @@ class CategoryListFragment : BaseFragment(), OnTitleClickListener { @BindView(R.id.reuse_ll_loading) lateinit var mPbSubject: View @BindView(R.id.reuse_no_connection) - lateinit var reuse_no_connection: View + lateinit var mReuseNoConnection: View @BindView(R.id.reuse_none_data) lateinit var mNoData: View @@ -48,7 +49,7 @@ class CategoryListFragment : BaseFragment(), OnTitleClickListener { private var mIsOrder: Boolean = false private var mScrollTop = false - private var page = 1 + private var mPage = 1 companion object { const val OPEN_APPBAR = "openAppBar" @@ -56,7 +57,7 @@ class CategoryListFragment : BaseFragment(), OnTitleClickListener { } // 黄壮华 添加观察者 修改2015/8/15 - private val dataWatcher = object : DataWatcher() { + private val mDataWatcher = object : DataWatcher() { override fun onDataChanged(downloadEntity: DownloadEntity) { val locationList = mCategoryAdapter!!.locationMap[downloadEntity.packageName] if (locationList != null) { @@ -87,17 +88,17 @@ class CategoryListFragment : BaseFragment(), OnTitleClickListener { mEntrance = arguments.getString(EntranceUtils.KEY_ENTRANCE) mTitle = arguments.getString(EntranceUtils.KEY_CATEGORY_TITLE) - reuse_no_connection.setOnClickListener { + mReuseNoConnection.setOnClickListener { mPbSubject.visibility = View.VISIBLE mRvSubject.visibility = View.VISIBLE - reuse_no_connection.visibility = View.GONE + mReuseNoConnection.visibility = View.GONE mCategoryAdapter = CategoryListAdapter(context, this, mType, mId, mName, mEntrance, mListOrder, mTagType, mIsOrder, mTitle) mRvSubject.adapter = mCategoryAdapter } mLayoutManager = LinearLayoutManager(context) - (mRvSubject.itemAnimator as androidx.recyclerview.widget.DefaultItemAnimator).supportsChangeAnimations = false + (mRvSubject.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false mRvSubject.addItemDecoration(VerticalItemDecoration(context, 8F, true)) mRvSubject.setHasFixedSize(true) mRvSubject.layoutManager = mLayoutManager @@ -119,7 +120,7 @@ class CategoryListFragment : BaseFragment(), OnTitleClickListener { if (!mCategoryAdapter!!.isRemove && mCategoryAdapter!!.isLoaded && newState == RecyclerView.SCROLL_STATE_IDLE && mCategoryAdapter!!.itemCount == mLayoutManager!!.findLastVisibleItemPosition() + 1) { - mCategoryAdapter!!.initList(page) + mCategoryAdapter!!.initList(mPage) } } @@ -137,13 +138,13 @@ class CategoryListFragment : BaseFragment(), OnTitleClickListener { if (isEverPause && mCategoryAdapter != null) { mCategoryAdapter!!.notifyDataSetChanged() } - DownloadManager.getInstance(context).addObserver(dataWatcher) + DownloadManager.getInstance(context).addObserver(mDataWatcher) super.onResume() } override fun onPause() { super.onPause() - DownloadManager.getInstance(context).removeObserver(dataWatcher) + DownloadManager.getInstance(context).removeObserver(mDataWatcher) } override fun loadDone() { @@ -151,11 +152,11 @@ class CategoryListFragment : BaseFragment(), OnTitleClickListener { if (mPbSubject.visibility == View.VISIBLE) { mPbSubject.visibility = View.GONE } - page++ + mPage++ mCategoryAdapter?.itemCount?.let { - if (page == 2 && it < 5) { + if (mPage == 2 && it < 5) { mRvSubject.postDelayed({ - mCategoryAdapter?.initList(page) + mCategoryAdapter?.initList(mPage) }, 500) } } @@ -166,14 +167,14 @@ class CategoryListFragment : BaseFragment(), OnTitleClickListener { mPbSubject.visibility = View.GONE } mRvSubject.visibility = View.GONE - reuse_no_connection.visibility = View.VISIBLE + mReuseNoConnection.visibility = View.VISIBLE mNoData.visibility = View.GONE } override fun loadEmpty() { super.loadEmpty() mNoData.visibility = View.VISIBLE - reuse_no_connection.visibility = View.GONE + mReuseNoConnection.visibility = View.GONE } // 下载被删除事件 @@ -222,10 +223,10 @@ class CategoryListFragment : BaseFragment(), OnTitleClickListener { @Subscribe(threadMode = ThreadMode.MAIN) fun onEventMainThread(busNetworkState: EBNetworkState) { if (busNetworkState.isNetworkConnected) { - if (reuse_no_connection.visibility == View.VISIBLE) { + if (mReuseNoConnection.visibility == View.VISIBLE) { mRvSubject.visibility = View.VISIBLE mPbSubject.visibility = View.VISIBLE - reuse_no_connection.visibility = View.GONE + mReuseNoConnection.visibility = View.GONE mCategoryAdapter = CategoryListAdapter(context, this, mType, mId, mName, mEntrance, mListOrder, mTagType, mIsOrder, mTitle) mRvSubject.adapter = mCategoryAdapter } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.java index fb2cce519e..d575736632 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.java @@ -33,6 +33,7 @@ import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; import com.gh.common.util.GdtHelper; import com.gh.common.util.ImageUtils; +import com.gh.common.util.PermissionHelper; import com.gh.common.util.SPUtils; import com.gh.common.util.ShareUtils; import com.gh.common.view.DrawableView; @@ -477,12 +478,14 @@ public class GameDetailFragment extends NormalFragment { startActivity(intent); break; case R.id.menu_concern: - CheckLoginUtils.checkLogin(getContext(), "游戏详情-[关注]", () -> { - if (mGameDetailEntity != null && mGameDetailEntity.getMe().isGameConcerned()) { - DialogUtils.showCancelDialog(getContext(), () -> mViewModel.concernCommand(false), null); - } else { - mViewModel.concernCommand(true); - } + PermissionHelper.checkReadPhoneStatePermissionBeforeAction(requireContext(), () -> { + CheckLoginUtils.checkLogin(getContext(), "游戏详情-[关注]", () -> { + if (mGameDetailEntity != null && mGameDetailEntity.getMe().isGameConcerned()) { + DialogUtils.showCancelDialog(getContext(), () -> mViewModel.concernCommand(false), null); + } else { + mViewModel.concernCommand(true); + } + }); }); break; case R.id.menu_share: diff --git a/app/src/main/java/com/gh/gamecenter/qa/AskFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/AskFragment.kt index b15a653fbe..9ae62c1872 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/AskFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/AskFragment.kt @@ -25,6 +25,7 @@ import com.gh.base.fragment.BaseFragment import com.gh.base.onDoubleTapListener import com.gh.common.util.MtaHelper import com.gh.common.util.addOnPageChangeListener +import com.gh.common.util.checkReadPhoneStateAndStoragePermissionBeforeAction import com.gh.common.util.ifLogin import com.gh.gamecenter.R import com.gh.gamecenter.entity.ResultEntity @@ -266,7 +267,9 @@ class AskFragment : BaseFragment() { MtaHelper.onEvent("问答页面", "问答页面", positionType) MtaHelper.onEvent("问答页面", UserManager.getInstance().community.name, positionType) context?.ifLogin("(首页-问答)", action = { - startActivity(QuestionEditActivity.getIntent(context!!)) + checkReadPhoneStateAndStoragePermissionBeforeAction { + startActivity(QuestionEditActivity.getIntent(requireContext())) + } }) } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt index 3b6748ef4a..e0e2333417 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailFragment.kt @@ -777,13 +777,17 @@ class AnswerDetailFragment : NormalFragment() { } NOT_ANSWERED_YET -> ifLogin("回答详情-[我来回答]") { - val question = mViewModel.answerDetail!!.question - startActivity(AnswerEditActivity.getIntent(context!!, question.id, question.title, true, question.communityName)) + checkReadPhoneStateAndStoragePermissionBeforeAction { + val question = mViewModel.answerDetail!!.question + startActivity(AnswerEditActivity.getIntent(context!!, question.id, question.title, true, question.communityName)) + } } NOT_ANSWERED_BUT_HAVE_DRAFT -> ifLogin("回答详情-[继续回答]") { - val question = mViewModel.answerDetail!!.question - startActivity(AnswerEditActivity.getIntent(context!!, question.id, question.title, true, question.communityName)) + checkReadPhoneStateAndStoragePermissionBeforeAction { + val question = mViewModel.answerDetail!!.question + startActivity(AnswerEditActivity.getIntent(context!!, question.id, question.title, true, question.communityName)) + } } } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleFragment.kt index 658189ff00..e22fbd2675 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleFragment.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.view.MenuItem import androidx.lifecycle.ViewModelProviders import com.gh.common.util.EntranceUtils +import com.gh.common.util.checkReadPhoneStateAndStoragePermissionBeforeAction import com.gh.common.util.ifLogin import com.gh.gamecenter.R import com.gh.gamecenter.baselist.ListFragment @@ -67,8 +68,10 @@ class MyArticleFragment : ListFragment { + PermissionHelper.checkReadPhoneStatePermissionBeforeAction(requireContext(), this::postComment); + }); } else { toast("操作太快,慢一点嘛"); } diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.java b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.java index c5c4acb3f8..e23de68ff0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.java @@ -38,6 +38,7 @@ import com.gh.common.util.EntranceUtils; import com.gh.common.util.GdtHelper; import com.gh.common.util.LogUtils; import com.gh.common.util.MtaHelper; +import com.gh.common.util.PermissionHelper; import com.gh.common.util.ShareUtils; import com.gh.common.util.StringUtils; import com.gh.common.util.UrlFilterUtils; @@ -394,8 +395,10 @@ public class QuestionsDetailFragment case R.id.reuse_nodata_skip: CheckLoginUtils.checkLogin(getContext(), "问题详情-[我来回答]", () -> { - startActivityForResult(AnswerEditActivity.Companion.getIntent(getContext(), mQuestionsId - , getQuestionsTitle(), mQuestionsDetailEntity.getCommunity().getName()), QUESTIONS_DETAIL_ANSWER_REQUEST); + PermissionHelper.checkReadPhoneStateAndStoragePermissionBeforeAction(requireContext(), () -> { + startActivityForResult(AnswerEditActivity.Companion.getIntent(requireContext(), mQuestionsId + , getQuestionsTitle(), mQuestionsDetailEntity.getCommunity().getName()), QUESTIONS_DETAIL_ANSWER_REQUEST); + }); }); break; } diff --git a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchActivity.java b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchActivity.java index a2d8d59360..5f136387e2 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchActivity.java +++ b/app/src/main/java/com/gh/gamecenter/qa/search/AskSearchActivity.java @@ -5,11 +5,6 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Message; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentTransaction; - import android.text.Editable; import android.text.InputFilter; import android.text.TextUtils; @@ -20,11 +15,16 @@ import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; + import com.gh.base.BaseActivity; import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.EntranceUtils; import com.gh.common.util.LogUtils; import com.gh.common.util.MtaHelper; +import com.gh.common.util.PermissionHelper; import com.gh.common.util.TextHelper; import com.gh.gamecenter.R; import com.gh.gamecenter.db.AskSearchHistoryDao; @@ -34,7 +34,6 @@ import com.gh.gamecenter.qa.questions.edit.QuestionEditActivity; import com.gh.gamecenter.qa.search.history.HistoryFragment; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; -import com.gh.gamecenter.search.SearchDefaultFragment; import com.lightgame.utils.Util_System_Keyboard; import org.greenrobot.eventbus.Subscribe; @@ -184,7 +183,9 @@ public class AskSearchActivity extends BaseActivity { mSearchEt.setText(""); } else if (v.getId() == R.id.search_questions_skip) { CheckLoginUtils.checkLogin(this, "问答-搜索-提问", () -> { - startActivityForResult(QuestionEditActivity.Companion.getIntent(this, mSearchKey), QUESTION_REQUEST_CODE); + PermissionHelper.checkReadPhoneStateAndStoragePermissionBeforeAction(this, () -> { + startActivityForResult(QuestionEditActivity.Companion.getIntent(this, mSearchKey), QUESTION_REQUEST_CODE); + }); }); } else if (v.getId() == R.id.bar_question_btn) { String key = mSearchEt.getText().toString().trim(); diff --git a/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java b/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java index e94e2d3bb5..a5d1330e55 100644 --- a/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java @@ -2,8 +2,6 @@ package com.halo.assistant.fragment.comment; import android.app.Dialog; import android.os.Bundle; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import android.text.Editable; import android.text.InputFilter; import android.text.TextWatcher; @@ -11,10 +9,14 @@ import android.view.View; import android.widget.EditText; import android.widget.TextView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.EntranceUtils; import com.gh.common.util.ErrorHelper; +import com.gh.common.util.PermissionHelper; import com.gh.common.util.PostCommentUtils; import com.gh.common.util.TextHelper; import com.gh.gamecenter.NewsDetailActivity; @@ -83,7 +85,7 @@ public class CommentDetailFragment extends NormalFragment implements OnCommentCa mArticle = getArguments().getParcelable(MessageEntity.Article.TAG); mCommentDetailCommentEt.addTextChangedListener(watcher); - mCommentDetailCommentEt.setFilters(new InputFilter[]{TextHelper.getFilter(140,"评论不能多于140字")}); + mCommentDetailCommentEt.setFilters(new InputFilter[]{TextHelper.getFilter(140, "评论不能多于140字")}); mNoDataTv.setText(R.string.content_delete_hint); mAdapter = new CommentDetailAdapter(getContext(), commentId, this, mNoData, mRecyclerView); mLayoutManager = new LinearLayoutManager(getContext()); @@ -145,53 +147,55 @@ public class CommentDetailFragment extends NormalFragment implements OnCommentCa @OnClick({R.id.comment_send_btn}) public void OnSendCommentListener() { - final String content = mCommentDetailCommentEt.getText().toString(); + PermissionHelper.checkReadPhoneStatePermissionBeforeAction(requireContext(), () -> { + final String content = mCommentDetailCommentEt.getText().toString(); - if (content.length() == 0) { - toast("评论内容不能为空!"); - return; - } + if (content.length() == 0) { + toast("评论内容不能为空!"); + return; + } - mSendingDialog = DialogUtils.showWaitDialog(getContext(), getString(R.string.post_dialog_hint)); + mSendingDialog = DialogUtils.showWaitDialog(getContext(), getString(R.string.post_dialog_hint)); - JSONObject jsonObject = new JSONObject(); - try { - jsonObject.put("content", content); - } catch (JSONException e) { - e.printStackTrace(); - } - if (mCommentEntity != null && mCommentEntity.getId() == null) { - toast("评论异常 id null"); - mSendingDialog.cancel(); - return; - } + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("content", content); + } catch (JSONException e) { + e.printStackTrace(); + } + if (mCommentEntity != null && mCommentEntity.getId() == null) { + toast("评论异常 id null"); + mSendingDialog.cancel(); + return; + } - PostCommentUtils.addCommentData(getContext(), null, jsonObject.toString(), mCommentEntity, - new PostCommentUtils.PostCommentListener() { - @Override - public void postSuccess(JSONObject response) { - mSendingDialog.dismiss(); - toast("发表成功"); - mCommentDetailCommentEt.setText(""); + PostCommentUtils.addCommentData(getContext(), null, jsonObject.toString(), mCommentEntity, + new PostCommentUtils.PostCommentListener() { + @Override + public void postSuccess(JSONObject response) { + mSendingDialog.dismiss(); + toast("发表成功"); + mCommentDetailCommentEt.setText(""); - setSoftInput(false); + setSoftInput(false); - } - - @Override - public void postFailed(Throwable e) { - mSendingDialog.dismiss(); - String errorString = null; - if (e instanceof HttpException) { - try { - errorString = ((HttpException) e).response().errorBody().string(); - } catch (Exception e1) { - e1.printStackTrace(); - } } - ErrorHelper.handleError(requireContext(), errorString, false); - } - }); + + @Override + public void postFailed(Throwable e) { + mSendingDialog.dismiss(); + String errorString = null; + if (e instanceof HttpException) { + try { + errorString = ((HttpException) e).response().errorBody().string(); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + ErrorHelper.handleError(requireContext(), errorString, false); + } + }); + }); } //软键盘控制