diff --git a/app/src/main/java/com/gh/common/util/DisplayUtils.java b/app/src/main/java/com/gh/common/util/DisplayUtils.java index c2ab699db4..ed729a7024 100644 --- a/app/src/main/java/com/gh/common/util/DisplayUtils.java +++ b/app/src/main/java/com/gh/common/util/DisplayUtils.java @@ -271,6 +271,16 @@ public class DisplayUtils { return metrics.heightPixels; } + public static int getToastOffset() { + int i = Resources.getSystem().getIdentifier("toast_y_offset", "dimen", "android"); + return HaloApp.getInstance().getApplication().getResources().getDimensionPixelSize(i); + } + + public static int getToastDefaultGravity() { + int i = Resources.getSystem().getIdentifier("config_toastDefaultGravity", "integer", "android"); + return HaloApp.getInstance().getApplication().getResources().getInteger(i); + } + public static boolean hasSoftKeys(Context context) { if (!(context instanceof Activity)) return false; diff --git a/app/src/main/java/com/gh/common/util/ToastUtils.kt b/app/src/main/java/com/gh/common/util/ToastUtils.kt index 08204262a3..a536811a8d 100644 --- a/app/src/main/java/com/gh/common/util/ToastUtils.kt +++ b/app/src/main/java/com/gh/common/util/ToastUtils.kt @@ -30,23 +30,26 @@ object ToastUtils { * @param message * @param gravity */ - fun showToast(message: String, gravity: Int = -1) { + fun showToast(message: String, gravity: Int = -1, yOffset: Int = 0) { if (mToast == null) { mToast = Toast.makeText(HaloApp.getInstance().application, message, Toast.LENGTH_SHORT) - if (gravity != -1) mToast!!.setGravity(gravity, 0, 0) + if (gravity != -1) mToast!!.setGravity(gravity, 0, yOffset) else + mToast!!.setGravity(DisplayUtils.getToastDefaultGravity(), 0, DisplayUtils.getToastOffset()) mToast!!.show() mOneTime = System.currentTimeMillis() } else { mTwoTime = System.currentTimeMillis() if (message == mOldMsg) { if (mTwoTime - mOneTime > Toast.LENGTH_SHORT) { - if (gravity != -1) mToast!!.setGravity(gravity, 0, 0) + if (gravity != -1) mToast!!.setGravity(gravity, 0, yOffset) else + mToast!!.setGravity(DisplayUtils.getToastDefaultGravity(), 0, DisplayUtils.getToastOffset()) mToast!!.show() } } else { mOldMsg = message mToast!!.setText(message) - if (gravity != -1) mToast!!.setGravity(gravity, 0, 0) + if (gravity != -1) mToast!!.setGravity(gravity, 0, yOffset) else + mToast!!.setGravity(DisplayUtils.getToastDefaultGravity(), 0, DisplayUtils.getToastOffset()) mToast!!.show() } } 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 0a79466c67..8051880a85 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 @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.content.Intent +import android.graphics.Rect import android.os.Build import android.os.Bundle import android.text.TextUtils @@ -28,7 +29,6 @@ import com.halo.assistant.HaloApp import com.lightgame.utils.Utils import com.qq.gdt.action.ActionType import com.walkud.rom.checker.RomIdentifier -import kotlinx.android.synthetic.main.rating_comment_item.* import okhttp3.MediaType import okhttp3.RequestBody import org.json.JSONObject @@ -36,7 +36,7 @@ import retrofit2.HttpException import wendu.dsbridge.DWebView import wendu.dsbridge.OnReturnValue -class RatingEditActivity : ToolBarActivity() { +class RatingEditActivity : ToolBarActivity(), KeyboardHeightObserver { private var mPostDialog: WaitingDialogFragment? = null private var mInstallPackageName: String? = null @@ -54,6 +54,8 @@ class RatingEditActivity : ToolBarActivity() { private lateinit var mPlaceholder: String private var mLoadFinish = false private var mLoadError = false + private var mKeyboardHeightProvider: KeyboardHeightProvider? = null + private var mIsKeyBoardShow = false override fun getLayoutId(): Int { return R.layout.activity_rating_edit @@ -81,6 +83,8 @@ class RatingEditActivity : ToolBarActivity() { mDraft = mViewModel.getRatingDraft() mBinding = ActivityRatingEditBinding.bind(mContentView) + mKeyboardHeightProvider = KeyboardHeightProvider(this) + mBinding.root.post { mKeyboardHeightProvider?.start() } initView() initWebView() @@ -341,16 +345,16 @@ class RatingEditActivity : ToolBarActivity() { mBinding.mWebView.callHandler("getComment", OnReturnValue { content -> val rating = mBinding.ratingScore.rating if (rating == 0F) { - ToastUtils.showToast("请先给游戏打分", Gravity.CENTER) + ToastUtils.showToast("请先给游戏打分", if (mIsKeyBoardShow) Gravity.CENTER else -1) return@OnReturnValue } if (content.isEmpty()) { - ToastUtils.showToast("评论内容不能为空喔~", Gravity.CENTER) + ToastUtils.showToast("评论内容不能为空喔~", if (mIsKeyBoardShow) Gravity.CENTER else -1) return@OnReturnValue } if (content.length > 10000) { - ToastUtils.showToast("评论最多10000个字", Gravity.CENTER) + ToastUtils.showToast("评论最多10000个字", if (mIsKeyBoardShow) Gravity.CENTER else -1) return@OnReturnValue } @@ -378,6 +382,25 @@ class RatingEditActivity : ToolBarActivity() { }) } + override fun onResume() { + super.onResume() + mKeyboardHeightProvider?.setKeyboardHeightObserver(this) + } + + override fun onPause() { + super.onPause() + mKeyboardHeightProvider?.setKeyboardHeightObserver(null) + } + + override fun onDestroy() { + super.onDestroy() + mKeyboardHeightProvider?.close() + } + + override fun onKeyboardHeightChanged(height: Int, orientation: Int) { + mIsKeyBoardShow = height > 0 + } + override fun handleBackPressed(): Boolean { mBinding.mWebView.callHandler("getComment", OnReturnValue { content -> diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt index f5801e8913..e4ec20a5a2 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt @@ -55,6 +55,8 @@ class AnswerEditActivity : BaseRichEditorActivity(), KeyboardHeightObserver { private var mKeyboardHeightProvider: KeyboardHeightProvider? = null + private var mIsKeyBoardShow = false + override fun mtaEventName(): String { return "回答详情" // issues 定的就是回答详情 } @@ -137,6 +139,7 @@ class AnswerEditActivity : BaseRichEditorActivity(), KeyboardHeightObserver { override fun onKeyboardHeightChanged(height: Int, orientation: Int) { if (height > 0) mBinding.appBar.setExpanded(false, true) + mIsKeyBoardShow = height > 0 } override fun onResume() { @@ -360,7 +363,7 @@ class AnswerEditActivity : BaseRichEditorActivity(), KeyboardHeightObserver { val answerLength = HtmlUtils.stripHtml(answerContent).length if (answerLength < MIN_ANSWER_TEXT_LENGTH) { // toast(R.string.answer_beneath_length_limit) - ToastUtils.showToast(getString(R.string.answer_beneath_length_limit), Gravity.CENTER) + ToastUtils.showToast(getString(R.string.answer_beneath_length_limit), if (mIsKeyBoardShow) Gravity.CENTER else -1) return@postDelayed } else if (answerLength > MAX_ANSWER_TEXT_LENGTH) { /* DialogUtils.showAlertDialog(this, @@ -371,7 +374,7 @@ class AnswerEditActivity : BaseRichEditorActivity(), KeyboardHeightObserver { getString(R.string.answer_resume_edit), "", { // do nothing }, null)*/ - ToastUtils.showToast("回答最多输入10000个字", Gravity.CENTER) + ToastUtils.showToast("回答最多输入10000个字", if (mIsKeyBoardShow) Gravity.CENTER else -1) return@postDelayed } mViewModel.postAnswer(answerContent) diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt index 3f93d7987e..7ed4ea9877 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt @@ -44,7 +44,7 @@ import com.zhihu.matisse.MimeType import kotterknife.bindView import org.greenrobot.eventbus.EventBus -class ArticleEditActivity : BaseRichEditorActivity() { +class ArticleEditActivity : BaseRichEditorActivity(), KeyboardHeightObserver { private val mEditPlaceholder by bindView(R.id.article_placeholder) private val mGameNameTitle by bindView(R.id.article_game_name_title) @@ -60,6 +60,8 @@ class ArticleEditActivity : BaseRichEditorActivity() { private var mPostDraftsCount: Int = 0 private var mAgreePostPic = false private val FILE_HOST = "file:///" + private var mKeyboardHeightProvider: KeyboardHeightProvider? = null + private var mIsKeyBoardShow = false override fun mtaEventName(): String { return "社区文章详情" // issues 定的就是社区文章详情 @@ -107,6 +109,9 @@ class ArticleEditActivity : BaseRichEditorActivity() { mViewModel.openArticleInNewPage = intent.getBooleanExtra(EntranceUtils.KEY_ARTICLE_OPEN_IN_NEW_PAGE, false) mGameNameTitle.text = Html.fromHtml(getString(R.string.article_edit_game_name)) + mKeyboardHeightProvider = KeyboardHeightProvider(this) + mEditTitle.post { mKeyboardHeightProvider?.start() } + mRichEditor.setOnTextChangeListener { t -> if (t.contains(" 0 + } + + override fun onResume() { + super.onResume() + mKeyboardHeightProvider?.setKeyboardHeightObserver(this) + } + + override fun onPause() { + super.onPause() + mKeyboardHeightProvider?.setKeyboardHeightObserver(null) + } + + override fun onDestroy() { + super.onDestroy() + mKeyboardHeightProvider?.close() + } + companion object { const val SAVE_DRAFTS_INTERVAL_TIME = 15000 const val ARTICLE_DRAFT_REQUEST_CODE = 105 diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditViewModel.kt index 73eaa7ded1..59cc3d053f 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditViewModel.kt @@ -86,14 +86,14 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat * 检查标题是否符合规则 * 根据问题标题获取相应标签(问题编辑无需获取) */ - fun checkDataAndLoadTitleTag() { + fun checkDataAndLoadTitleTag(isKeyBoardShow: Boolean = false) { if (mSelectCommunityData == null) { - ToastUtils.showToast("请选择游戏", Gravity.CENTER) + ToastUtils.showToast("请选择游戏", if (isKeyBoardShow) Gravity.CENTER else -1) return } if (TextUtils.isEmpty(title)) { - ToastUtils.showToast("标题不能为空", Gravity.CENTER) + ToastUtils.showToast("标题不能为空", if (isKeyBoardShow) Gravity.CENTER else -1) return } @@ -102,17 +102,17 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat // title = title?.replace(" ", "")?.replace("\n", "") title = title?.replace("\n", "") if (title!!.length < QuestionEditViewModel.QUESTION_TITLE_MIN_LENGTH) { - ToastUtils.showToast("标题至少${QuestionEditViewModel.QUESTION_TITLE_MIN_LENGTH}个字", Gravity.CENTER) + ToastUtils.showToast("标题至少${QuestionEditViewModel.QUESTION_TITLE_MIN_LENGTH}个字", if (isKeyBoardShow) Gravity.CENTER else -1) return } val articleContent = HtmlUtils.stripHtml(content).length if (articleContent < MIN_ARTICLE_TEXT_LENGTH) { - ToastUtils.showToast("正文至少${QuestionEditViewModel.QUESTION_TITLE_MIN_LENGTH}个字", Gravity.CENTER) + ToastUtils.showToast("正文至少${QuestionEditViewModel.QUESTION_TITLE_MIN_LENGTH}个字", if (isKeyBoardShow) Gravity.CENTER else -1) return } if (articleContent > MAX_ARTICLE_TEXT_LENGTH) { - ToastUtils.showToast("文章最多输入${MAX_ARTICLE_TEXT_LENGTH}个字", Gravity.CENTER) + ToastUtils.showToast("文章最多输入${MAX_ARTICLE_TEXT_LENGTH}个字", if (isKeyBoardShow) Gravity.CENTER else -1) return }