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 bce9d78363..3f3d628fcc 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -811,7 +811,7 @@ public class DialogUtils { TextView positiveTv = contentView.findViewById(R.id.dialog_positive); TextView skipTv = contentView.findViewById(R.id.dialog_skip); - SpannableStringBuilder skipText = new SpannableStringBuilder("你可以查看完整版的 隐藏政策"); + SpannableStringBuilder skipText = new SpannableStringBuilder("你可以查看完整版的 隐私政策"); skipText.setSpan(new ClickableSpan() { @Override public void updateDrawState(@NonNull TextPaint ds) { 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 c1a4fcffe9..73e9a65b35 100644 --- a/app/src/main/java/com/gh/common/util/Extensions.kt +++ b/app/src/main/java/com/gh/common/util/Extensions.kt @@ -318,6 +318,30 @@ fun Fragment.checkStoragePermissionBeforeAction(action: (() -> Unit)) { }) } +fun FragmentActivity.checkReadPhoneStateAndStoragePermissionBeforeAction(action: (() -> Unit)) { + PermissionHelper.checkReadPhoneStateAndStoragePermissionBeforeAction(this, object : EmptyCallback { + override fun onCallback() { + action.invoke() + } + }) +} + +fun FragmentActivity.checkReadPhoneStatePermissionBeforeAction(action: (() -> Unit)) { + PermissionHelper.checkReadPhoneStatePermissionBeforeAction(this, object : EmptyCallback { + override fun onCallback() { + action.invoke() + } + }) +} + +fun FragmentActivity.checkStoragePermissionBeforeAction(action: (() -> Unit)) { + PermissionHelper.checkStoragePermissionBeforeAction(this, object : EmptyCallback { + override fun onCallback() { + action.invoke() + } + }) +} + /** * TextView related. */ 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 8ecd624fb9..7c127db70e 100644 --- a/app/src/main/java/com/gh/common/util/PermissionHelper.kt +++ b/app/src/main/java/com/gh/common/util/PermissionHelper.kt @@ -11,8 +11,6 @@ import android.provider.Settings import androidx.fragment.app.FragmentActivity import com.tbruyelle.rxpermissions2.RxPermissions - - object PermissionHelper { @SuppressLint("CheckResult") @@ -160,7 +158,7 @@ object PermissionHelper { * * @param activity */ - fun toApplicationInfo(activity: Activity) { + private fun toApplicationInfo(activity: Activity) { val localIntent = Intent() localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) localIntent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS @@ -173,7 +171,7 @@ object PermissionHelper { * * @param activity */ - fun toSystemConfig(activity: Activity) { + private fun toSystemConfig(activity: Activity) { try { val intent = Intent(Settings.ACTION_SETTINGS) activity.startActivity(intent) diff --git a/app/src/main/java/com/gh/gamecenter/BlockActivity.kt b/app/src/main/java/com/gh/gamecenter/BlockActivity.kt index c52230d3e1..b1ad6de16c 100644 --- a/app/src/main/java/com/gh/gamecenter/BlockActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/BlockActivity.kt @@ -27,7 +27,7 @@ class BlockActivity : NormalActivity() { } override fun getActivityNameInChinese(): String { - return "板块首页" + return "板块" } } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt index c7717a3dbb..88cac2d537 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt @@ -92,18 +92,12 @@ class RatingAdapter(context: Context, if (!ClickUtils.isFastDoubleClick(ratingBar.id, 1000)) { skipRatingEdit(rating, "游戏详情-评论-点击星星") // 与传进评论编辑的星星保持一致 - ratingSelector.postDelayed({ - ratingSelector.rating = 0F - }, 500) + ratingSelector.postDelayed({ ratingSelector.rating = 0F }, 500) } } ratingEditBtn.setOnClickListener { - PermissionHelper.checkReadPhoneStatePermissionBeforeAction(mContext, object : EmptyCallback { - override fun onCallback() { - MtaHelper.onEvent("游戏详情_新", "评论Tab_点击我来评论", mListViewModel.game.name) - skipRatingEdit(0.0F, "游戏详情-评论-[我来评论]") - } - }) + MtaHelper.onEvent("游戏详情_新", "评论Tab_点击我来评论", mListViewModel.game.name) + skipRatingEdit(0.0F, "游戏详情-评论-[我来评论]") } if (ratingData?.serviceComment != null) { includeServiceComment.commentItem.visibility = View.VISIBLE @@ -187,8 +181,12 @@ class RatingAdapter(context: Context, if (mContext is Activity) { val installPackageName = mListViewModel.canUserCommentThisGame() if (mDirectComment || !installPackageName.isNullOrEmpty()) { - val intent = RatingEditActivity.getIntent(mContext, mListViewModel.game, starCount, installPackageName) - (mContext as Activity).startActivityForResult(intent, RatingFragment.RATING_EDIT_REQUEST) + PermissionHelper.checkReadPhoneStatePermissionBeforeAction(mContext, object : EmptyCallback { + override fun onCallback() { + val intent = RatingEditActivity.getIntent(mContext, mListViewModel.game, starCount, installPackageName) + (mContext as Activity).startActivityForResult(intent, RatingFragment.RATING_EDIT_REQUEST) + } + }) } else { Utils.toast(mContext, "安装游戏后才能评论哦") } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt index 1db35ff6f0..e8708a3fb6 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt @@ -77,7 +77,9 @@ class RatingEditActivity : BaseActivity() { override fun onMenuItemClick(item: MenuItem?): Boolean { if (item?.itemId == R.id.menu_game_comment) { - postGameComment() + checkReadPhoneStatePermissionBeforeAction { + postGameComment() + } } return super.onMenuItemClick(item) } diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java index cd7974a705..0ffeaeb68b 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java @@ -4,9 +4,6 @@ import android.app.Activity; import android.app.Dialog; import android.content.Intent; import android.os.Bundle; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import android.text.Editable; import android.text.InputFilter; import android.text.TextUtils; @@ -21,6 +18,7 @@ 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.common.util.TimestampUtils; @@ -53,6 +51,9 @@ import org.json.JSONObject; import java.util.List; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.OnClick; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -295,106 +296,107 @@ public class MessageDetailFragment extends NormalFragment implements OnCommentCa @OnClick(R.id.comment_send_btn) public void OnSendCommentListener() { - final String content = mMessageDetailEt.getText().toString(); - - if (content.length() == 0) { - Utils.toast(getContext(), "评论内容不能为空!"); - return; - } - - CheckLoginUtils.checkLogin(requireContext(), "资讯文章详情-评论详情-写评论", () -> { - mSendingDialog = DialogUtils.showWaitDialog(getActivity(), getString(R.string.post_dialog_hint)); - - JSONObject jsonObject = new JSONObject(); - try { - jsonObject.put("content", content); - } catch (JSONException e) { - e.printStackTrace(); - } - if (newsId == null && mConcernEntity == null || - newsId == null && mConcernEntity.getId() == null) { - Utils.toast(getContext(), "评论异常 id null"); - mSendingDialog.cancel(); + PermissionHelper.checkReadPhoneStatePermissionBeforeAction(requireContext(), () -> { + final String content = mMessageDetailEt.getText().toString(); + + if (content.length() == 0) { + Utils.toast(getContext(), "评论内容不能为空!"); return; - } else if (newsId == null) { - newsId = mConcernEntity.getId(); } - - PostCommentUtils.addCommentData(getContext(), newsId, jsonObject.toString(), mCommentEntity, - new PostCommentUtils.PostCommentListener() { - @Override - public void postSuccess(JSONObject response) { - mSendingDialog.dismiss(); - toast("发表成功"); - mMessageDetailEt.setText(""); - - try { - JSONObject cacheObject = new JSONObject(); - JSONObject cacheUser = new JSONObject(); - JSONObject userData = new JSONObject(); - cacheUser.put("_id", mUserInfo.getId()); - cacheUser.put("icon", mUserInfo.getIcon()); - cacheUser.put("name", mUserInfo.getName()); - userData.put("is_comment_own", true); - cacheObject.put("_id", response.getString("_id")); - cacheObject.put("content", content); - cacheObject.put("time", System.currentTimeMillis() / 1000); - cacheObject.put("vote", 0); - cacheObject.put("user", cacheUser); - cacheObject.put("me", userData); - - if (mCommentEntity != null) { - JSONObject cacheParent = new JSONObject(); - JSONObject cacheParentUser = new JSONObject(); - cacheParentUser.put("_id", mCommentEntity.getId()); - cacheParentUser.put("name", mCommentEntity.getUser().getName()); - cacheParent.put("user", cacheParentUser); - cacheParent.put("comment", mCommentEntity.getContent()); - cacheObject.put("parent", cacheParent); - } - - CommentEntity commentEntity = new Gson().fromJson(cacheObject.toString(), CommentEntity.class); - if (mConcernEntity != null) { - adapter.addNormalComment(commentEntity); - } - - modifyNewsCommentOkhttpCache(adapter.findTheLastPriorComment(), cacheObject, newsId); - } catch (JSONException e) { - e.printStackTrace(); + + CheckLoginUtils.checkLogin(requireContext(), "资讯文章详情-评论详情-写评论", () -> { + mSendingDialog = DialogUtils.showWaitDialog(getActivity(), getString(R.string.post_dialog_hint)); + + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("content", content); + } catch (JSONException e) { + e.printStackTrace(); + } + if (newsId == null && mConcernEntity == null || newsId == null && mConcernEntity.getId() == null) { + Utils.toast(getContext(), "评论异常 id null"); + mSendingDialog.cancel(); + return; + } else if (newsId == null) { + newsId = mConcernEntity.getId(); + } + + PostCommentUtils.addCommentData(getContext(), newsId, jsonObject.toString(), mCommentEntity, new PostCommentUtils.PostCommentListener() { + @Override + public void postSuccess(JSONObject response) { + mSendingDialog.dismiss(); + toast("发表成功"); + mMessageDetailEt.setText(""); + + try { + JSONObject cacheObject = new JSONObject(); + JSONObject cacheUser = new JSONObject(); + JSONObject userData = new JSONObject(); + cacheUser.put("_id", mUserInfo.getId()); + cacheUser.put("icon", mUserInfo.getIcon()); + cacheUser.put("name", mUserInfo.getName()); + userData.put("is_comment_own", true); + cacheObject.put("_id", response.getString("_id")); + cacheObject.put("content", content); + cacheObject.put("time", System.currentTimeMillis() / 1000); + cacheObject.put("vote", 0); + cacheObject.put("user", cacheUser); + cacheObject.put("me", userData); + + if (mCommentEntity != null) { + JSONObject cacheParent = new JSONObject(); + JSONObject cacheParentUser = new JSONObject(); + cacheParentUser.put("_id", mCommentEntity.getId()); + cacheParentUser.put("name", mCommentEntity.getUser().getName()); + cacheParent.put("user", cacheParentUser); + cacheParent.put("comment", mCommentEntity.getContent()); + cacheObject.put("parent", cacheParent); } - + + CommentEntity commentEntity = new Gson().fromJson(cacheObject.toString(), CommentEntity.class); if (mConcernEntity != null) { - // 完成评论操作,添加评论数 - adapter.addCommentCount(); - //修改评论缓存 - CommentManager.updateOkhttpCacheForId(getContext(), newsId); - CommentManager.updateOkhttpCache(getContext(), newsId); - adapter.notifyItemInserted(adapter.getHotCommentListSize() + 2); - adapter.notifyItemChanged(adapter.getItemCount() - 1); //刷新脚布局高度 - } else { - showNoConnection(false); + adapter.addNormalComment(commentEntity); } - - setSoftInput(false); - + + modifyNewsCommentOkhttpCache(adapter.findTheLastPriorComment(), cacheObject, newsId); + } catch (JSONException e) { + e.printStackTrace(); } - - @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(); - } + + if (mConcernEntity != null) { + // 完成评论操作,添加评论数 + adapter.addCommentCount(); + //修改评论缓存 + CommentManager.updateOkhttpCacheForId(getContext(), newsId); + CommentManager.updateOkhttpCache(getContext(), newsId); + adapter.notifyItemInserted(adapter.getHotCommentListSize() + 2); + adapter.notifyItemChanged(adapter.getItemCount() - 1); //刷新脚布局高度 + } else { + showNoConnection(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); } - }); + ErrorHelper.handleError(requireContext(), errorString, false); + } + }); + }); + }); - + } private void modifyNewsCommentOkhttpCache(int offset, JSONObject commentData, String id) { diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftFragment.kt index 6b8ac61617..d49ee7f4da 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftFragment.kt @@ -1,9 +1,10 @@ package com.gh.gamecenter.qa.article.draft import android.app.Activity -import androidx.lifecycle.ViewModelProviders import android.content.Intent import android.os.Bundle +import androidx.lifecycle.ViewModelProviders +import com.gh.common.util.checkReadPhoneStateAndStoragePermissionBeforeAction import com.gh.gamecenter.R import com.gh.gamecenter.baselist.ListFragment import com.gh.gamecenter.baselist.LoadType @@ -36,10 +37,12 @@ class ArticleDraftFragment : ListFragment { - + private OnListClickListener mListClickListener; - + private ListViewModel mListViewModel; - + private String mEntrance; - - + + MyDraftAdapter(Context context, String entrance, OnListClickListener listClickListener, ListViewModel longClickListener) { super(context); mListClickListener = listClickListener; mListViewModel = longClickListener; mEntrance = entrance; } - + @Override protected boolean areItemsTheSame(AnswerEntity oldItem, AnswerEntity newItem) { return !TextUtils.isEmpty(oldItem.getId()) && oldItem.getId().equals(newItem.getId()); } - + @Override protected boolean areContentsTheSame(AnswerEntity oldItem, AnswerEntity newItem) { return oldItem == newItem; } - + @Override protected void setListData(List updateData) { if (updateData != null && mEntityList != null && updateData.size() == mEntityList.size()) { @@ -73,13 +74,13 @@ class MyDraftAdapter extends ListAdapter { } super.setListData(updateData); } - + @Override public int getItemViewType(int position) { if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER; return ItemViewType.ITEM_BODY; } - + @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; @@ -94,7 +95,7 @@ class MyDraftAdapter extends ListAdapter { return null; } } - + @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { @@ -124,14 +125,18 @@ class MyDraftAdapter extends ListAdapter { mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.getId(), mEntrance, "我的问答-我的草稿")); }); binding.answerDraftItemDelete.setOnClickListener(v -> { - DialogUtils.showAlertDialog(mContext, "警告", "确定要删除回答草稿吗?删除之后不可恢复" - , "确定", "取消" - , () -> deleteAnswerDraft(answerEntity), null); + DialogUtils.showAlertDialog(mContext, "警告", "确定要删除回答草稿吗?删除之后不可恢复", "确定", "取消", () -> deleteAnswerDraft(answerEntity), null); }); draftViewHolder.itemView.setOnClickListener(v -> { - mContext.startActivity(AnswerEditActivity.Companion.getIntent(mContext, - answerEntity.getQuestions().getId(), answerEntity.getQuestions().getTitle(), - answerEntity.getId(), true, answerEntity.getCommunityName())); + PermissionHelper.checkReadPhoneStateAndStoragePermissionBeforeAction(mContext, () -> { + mContext.startActivity(AnswerEditActivity.Companion.getIntent( + mContext, + answerEntity.getQuestions().getId(), + answerEntity.getQuestions().getTitle(), + answerEntity.getId(), + true, + answerEntity.getCommunityName())); + }); }); break; case ItemViewType.ITEM_FOOTER: @@ -141,28 +146,29 @@ class MyDraftAdapter extends ListAdapter { break; } } - + @Override public int getItemCount() { return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; } - - + + private void deleteAnswerDraft(AnswerEntity entity) { - RetrofitManager.getInstance(mContext).getApi() - .deleteAnswerDrafts(UserManager.getInstance().getUserId(), entity.getId()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(ResponseBody response) { - mListViewModel.load(LoadType.REFRESH); - } - - @Override - public void onFailure(HttpException e) { - Utils.toast(mContext, R.string.loading_network_error); - } - }); + RetrofitManager.getInstance(mContext) + .getApi() + .deleteAnswerDrafts(UserManager.getInstance().getUserId(), entity.getId()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(ResponseBody response) { + mListViewModel.load(LoadType.REFRESH); + } + + @Override + public void onFailure(HttpException e) { + Utils.toast(mContext, R.string.loading_network_error); + } + }); } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt index 3b0380bd80..b06f65ab43 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/QuestionsDetailFragment.kt @@ -269,13 +269,14 @@ class QuestionsDetailFragment : } } R.id.questionsdetail_answer -> if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) - CheckLoginUtils.checkLogin(context, "问题详情-[我来回答]") { - if (mQuestionsDetailEntity != null && !TextUtils.isEmpty(mQuestionsDetailEntity!!.me.myAnswerId)) { - val intent = AnswerDetailActivity.getIntent(context, mQuestionsDetailEntity!!.me.myAnswerId, - mEntrance, "问题详情-答案列表") - startActivityForResult(intent, QUESTIONS_DETAIL_ANSWER_REQUEST) - } else { - startActivityForResult(AnswerEditActivity.getIntent(context!!, mQuestionsId, questionsTitle, mQuestionsDetailEntity!!.community.name), QUESTIONS_DETAIL_ANSWER_REQUEST) + checkReadPhoneStateAndStoragePermissionBeforeAction { + ifLogin("问题详情-[我来回答]") { + if (mQuestionsDetailEntity != null && !TextUtils.isEmpty(mQuestionsDetailEntity!!.me.myAnswerId)) { + val intent = AnswerDetailActivity.getIntent(context, mQuestionsDetailEntity!!.me.myAnswerId, mEntrance, "问题详情-答案列表") + startActivityForResult(intent, QUESTIONS_DETAIL_ANSWER_REQUEST) + } else { + startActivityForResult(AnswerEditActivity.getIntent(context!!, mQuestionsId, questionsTitle, mQuestionsDetailEntity!!.community.name), QUESTIONS_DETAIL_ANSWER_REQUEST) + } } } R.id.questionsdetail_invite -> {