回答/文章编辑增加草稿功能 https://gitlab.ghzs.com/pm/halo-app-issues/-/issues/872 (5,6)
This commit is contained in:
@ -0,0 +1,18 @@
|
||||
package com.gh.gamecenter.qa.answer.draft
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import com.gh.common.util.EntranceUtils
|
||||
import com.gh.gamecenter.NormalActivity
|
||||
|
||||
class AnswerDraftActivity : NormalActivity() {
|
||||
|
||||
companion object {
|
||||
fun getIntent(context: Context, answerId: String? = null): Intent {
|
||||
val bundle = Bundle()
|
||||
bundle.putString(EntranceUtils.KEY_ANSWER_ID, answerId)
|
||||
return getTargetIntent(context, AnswerDraftActivity::class.java, AnswerDraftFragment::class.java, bundle)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,14 +1,19 @@
|
||||
package com.gh.gamecenter.qa.myqa;
|
||||
package com.gh.gamecenter.qa.answer.draft;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.facebook.drawee.view.SimpleDraweeView;
|
||||
import com.gh.base.OnListClickListener;
|
||||
import com.gh.common.constant.ItemViewType;
|
||||
import com.gh.common.util.DialogUtils;
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.ImageUtils;
|
||||
import com.gh.common.util.PermissionHelper;
|
||||
import com.gh.gamecenter.R;
|
||||
@ -21,6 +26,7 @@ import com.gh.gamecenter.manager.UserManager;
|
||||
import com.gh.gamecenter.qa.answer.edit.AnswerEditActivity;
|
||||
import com.gh.gamecenter.qa.entity.AnswerEntity;
|
||||
import com.gh.gamecenter.qa.entity.Questions;
|
||||
import com.gh.gamecenter.qa.myqa.AnswerDraftViewHolder;
|
||||
import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity;
|
||||
import com.gh.gamecenter.retrofit.Response;
|
||||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||||
@ -29,7 +35,6 @@ import com.lightgame.utils.Utils;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import okhttp3.ResponseBody;
|
||||
@ -39,32 +44,31 @@ import retrofit2.HttpException;
|
||||
* Created by khy on 20/12/17.
|
||||
*/
|
||||
|
||||
class MyDraftAdapter extends ListAdapter<AnswerEntity> {
|
||||
|
||||
class AnswerDraftAdapter extends ListAdapter<AnswerEntity> {
|
||||
|
||||
private OnListClickListener mListClickListener;
|
||||
|
||||
|
||||
private ListViewModel mListViewModel;
|
||||
|
||||
|
||||
private String mEntrance;
|
||||
|
||||
|
||||
MyDraftAdapter(Context context, String entrance, OnListClickListener listClickListener, ListViewModel longClickListener) {
|
||||
|
||||
AnswerDraftAdapter(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<AnswerEntity> updateData) {
|
||||
if (updateData != null && mEntityList != null && updateData.size() == mEntityList.size()) {
|
||||
@ -74,13 +78,13 @@ class MyDraftAdapter extends ListAdapter<AnswerEntity> {
|
||||
}
|
||||
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;
|
||||
@ -95,7 +99,7 @@ class MyDraftAdapter extends ListAdapter<AnswerEntity> {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
switch (getItemViewType(position)) {
|
||||
@ -129,12 +133,18 @@ class MyDraftAdapter extends ListAdapter<AnswerEntity> {
|
||||
});
|
||||
draftViewHolder.itemView.setOnClickListener(v -> {
|
||||
PermissionHelper.checkReadPhoneStateAndStoragePermissionBeforeAction(mContext, () -> {
|
||||
mContext.startActivity(AnswerEditActivity.Companion.getIntent(
|
||||
mContext,
|
||||
answerEntity.getQuestions(),
|
||||
answerEntity.getId(),
|
||||
true,
|
||||
answerEntity.getCommunityName()));
|
||||
if (mContext instanceof AnswerDraftActivity) {
|
||||
// 不需要回传任何数据
|
||||
((AnswerDraftActivity) mContext).setResult(Activity.RESULT_OK);
|
||||
((AnswerDraftActivity) mContext).finish();
|
||||
} else {
|
||||
mContext.startActivity(AnswerEditActivity.Companion.getIntent(
|
||||
mContext,
|
||||
answerEntity.getQuestions(),
|
||||
answerEntity.getId(),
|
||||
true,
|
||||
answerEntity.getCommunityName()));
|
||||
}
|
||||
});
|
||||
});
|
||||
break;
|
||||
@ -145,29 +155,29 @@ class MyDraftAdapter extends ListAdapter<AnswerEntity> {
|
||||
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<ResponseBody>() {
|
||||
@Override
|
||||
public void onResponse(ResponseBody response) {
|
||||
mListViewModel.load(LoadType.REFRESH);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
Utils.toast(mContext, R.string.loading_network_error);
|
||||
}
|
||||
});
|
||||
.getApi()
|
||||
.deleteAnswerDrafts(UserManager.getInstance().getUserId(), entity.getId())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Response<ResponseBody>() {
|
||||
@Override
|
||||
public void onResponse(ResponseBody response) {
|
||||
mListViewModel.load(LoadType.REFRESH);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
Utils.toast(mContext, R.string.loading_network_error);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1,8 +1,11 @@
|
||||
package com.gh.gamecenter.qa.myqa;
|
||||
package com.gh.gamecenter.qa.answer.draft;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.gh.common.util.EntranceUtils;
|
||||
import com.gh.common.util.UrlFilterUtils;
|
||||
import com.gh.gamecenter.baselist.ListAdapter;
|
||||
import com.gh.gamecenter.baselist.ListFragment;
|
||||
import com.gh.gamecenter.baselist.LoadType;
|
||||
@ -24,26 +27,45 @@ import io.reactivex.Observable;
|
||||
* Created by khy on 20/12/17.
|
||||
*/
|
||||
|
||||
public class MyDraftFragment extends ListFragment<AnswerEntity, NormalListViewModel> {
|
||||
public class AnswerDraftFragment extends ListFragment<AnswerEntity, NormalListViewModel> {
|
||||
|
||||
private MyDraftAdapter mAdapter;
|
||||
private AnswerDraftAdapter mAdapter;
|
||||
|
||||
public static MyDraftFragment getInstance(String entrance) {
|
||||
MyDraftFragment fragment = new MyDraftFragment();
|
||||
@Nullable
|
||||
private String mAnswerId;
|
||||
|
||||
public static AnswerDraftFragment getInstance(String entrance) {
|
||||
AnswerDraftFragment fragment = new AnswerDraftFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EntranceUtils.KEY_ENTRANCE, entrance);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
Bundle arguments = getArguments();
|
||||
if (arguments != null) {
|
||||
mAnswerId = arguments.getString(EntranceUtils.KEY_ANSWER_ID);
|
||||
}
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getActivity() instanceof AnswerDraftActivity) {
|
||||
setNavigationTitle("回答草稿");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ListAdapter provideListAdapter() {
|
||||
return mAdapter == null ? mAdapter = new MyDraftAdapter(getContext(), mEntrance, this, mListViewModel) : mAdapter;
|
||||
return mAdapter == null ? mAdapter = new AnswerDraftAdapter(getContext(), mEntrance, this, mListViewModel) : mAdapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<List<AnswerEntity>> provideDataObservable(int page) {
|
||||
return RetrofitManager.getInstance(getContext()).getApi().getMyAnswerDrafts(UserManager.getInstance().getUserId(), page);
|
||||
return RetrofitManager.getInstance(getContext()).getApi().getAnswerDrafts(
|
||||
UserManager.getInstance().getUserId(),
|
||||
UrlFilterUtils.getFilterQuery("answer_id", mAnswerId),
|
||||
page);
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
@ -25,6 +25,7 @@ import com.gh.gamecenter.entity.NotificationUgc
|
||||
import com.gh.gamecenter.manager.UserManager
|
||||
import com.gh.gamecenter.mvvm.Status
|
||||
import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity
|
||||
import com.gh.gamecenter.qa.answer.draft.AnswerDraftActivity
|
||||
import com.gh.gamecenter.qa.entity.Questions
|
||||
import com.gh.gamecenter.video.VideoVerifyItemViewHolder
|
||||
import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel
|
||||
@ -65,6 +66,8 @@ class AnswerEditActivity : BaseRichEditorActivity() {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (requestCode == REQUEST_CODE_IMAGE && resultCode == Activity.RESULT_OK) {
|
||||
if (data != null) mViewModel.postImg(data)
|
||||
} else if (requestCode == ANSWER_DRAFT_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
|
||||
mViewModel.getUserAnswerDrafts()
|
||||
}
|
||||
}
|
||||
|
||||
@ -111,9 +114,11 @@ class AnswerEditActivity : BaseRichEditorActivity() {
|
||||
setNavigationTitle(getString(R.string.answer_patch_title))
|
||||
mViewModel.cacheAnswerContent = mViewModel.answerContent
|
||||
mRichEditor.setHtml(mViewModel.answerContent, false)
|
||||
mDraftBtn.visibility = View.VISIBLE
|
||||
} else {
|
||||
setNavigationTitle(getString(R.string.answer_edit_title))
|
||||
mViewModel.getUserAnswerDrafts()
|
||||
mDraftBtn.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
@ -345,7 +350,11 @@ class AnswerEditActivity : BaseRichEditorActivity() {
|
||||
override fun handleBackPressed(): Boolean {
|
||||
return if (TextUtils.isEmpty(UserManager.getInstance().token)) {
|
||||
false
|
||||
} else if (!TextUtils.isEmpty(mViewModel.answerId)) {
|
||||
} else if (!TextUtils.isEmpty(mViewModel.answerId)
|
||||
&& TextUtils.isEmpty(mViewModel.cacheAnswerContent)
|
||||
&& mRichEditor.html.contains("<img src"))
|
||||
false
|
||||
else if (!TextUtils.isEmpty(mViewModel.answerId)) {
|
||||
consume { showPatchBackDialog() }
|
||||
} else if (TextUtils.isEmpty(mViewModel.answerId)
|
||||
&& !TextUtils.isEmpty(mViewModel.cacheAnswerContent)
|
||||
@ -383,8 +392,14 @@ class AnswerEditActivity : BaseRichEditorActivity() {
|
||||
}
|
||||
|
||||
private fun showPatchBackDialog() {
|
||||
DialogUtils.showCancelAlertDialog(this, "提示", "确定退出修改?已修改的内容将丢失",
|
||||
"继续写", " 退出", null, { finish() })
|
||||
DialogUtils.showAlertDialog(this,
|
||||
"提示",
|
||||
"即将退出修改,是否需要将此次编辑保存到草稿箱?",
|
||||
"保存草稿",
|
||||
"继续退出",
|
||||
{
|
||||
saveDraft(true)
|
||||
}, { finish() })
|
||||
}
|
||||
|
||||
/**
|
||||
@ -408,7 +423,8 @@ class AnswerEditActivity : BaseRichEditorActivity() {
|
||||
R.id.editor_image,
|
||||
R.id.question_images_1,
|
||||
R.id.question_images_2,
|
||||
R.id.question_images_3)
|
||||
R.id.question_images_3,
|
||||
R.id.draft_btn)
|
||||
fun onClick(view: View) {
|
||||
val videoSize = if (!mViewModel.question.videos.isNullOrEmpty()) 1 else 0
|
||||
|
||||
@ -450,6 +466,9 @@ class AnswerEditActivity : BaseRichEditorActivity() {
|
||||
}
|
||||
R.id.question_images_2 -> showQuestionImageDetail(1 - videoSize)
|
||||
R.id.question_images_3 -> showQuestionImageDetail(2 - videoSize)
|
||||
R.id.draft_btn -> {
|
||||
startActivityForResult(AnswerDraftActivity.getIntent(this, mViewModel.answerId), ANSWER_DRAFT_REQUEST_CODE)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -495,6 +514,7 @@ class AnswerEditActivity : BaseRichEditorActivity() {
|
||||
const val SAVE_DRAFTS_TOAST_COUNT = 3
|
||||
const val MIN_ANSWER_TEXT_LENGTH = 6
|
||||
const val MAX_ANSWER_TEXT_LENGTH = 10000
|
||||
const val ANSWER_DRAFT_REQUEST_CODE = 112
|
||||
|
||||
const val FILE_HOST = "file:///"
|
||||
const val ANSWER_DRAFT_CHANGE_TAG = "ANSWER_DRAFT_CHANGE_TAG"
|
||||
|
||||
@ -13,6 +13,7 @@ import com.gh.common.syncpage.SyncFieldConstants
|
||||
import com.gh.common.syncpage.SyncPageRepository
|
||||
import com.gh.common.util.ImageUtils
|
||||
import com.gh.common.util.UploadImageUtils
|
||||
import com.gh.common.util.UrlFilterUtils
|
||||
import com.gh.gamecenter.R
|
||||
import com.gh.gamecenter.eventbus.EBReuse
|
||||
import com.gh.gamecenter.manager.UserManager
|
||||
@ -199,7 +200,9 @@ class AnswerEditViewModel(application: Application,
|
||||
|
||||
fun getUserAnswerDrafts() {
|
||||
mApi
|
||||
.getUserAnswerDrafts(question.id, Utils.getTime(getApplication()))
|
||||
.getUserAnswerDrafts(question.id,
|
||||
UrlFilterUtils.getFilterQuery("answer_id", answerId),
|
||||
Utils.getTime(getApplication()))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<AnswerDraftEntity>() {
|
||||
@ -223,6 +226,9 @@ class AnswerEditViewModel(application: Application,
|
||||
try {
|
||||
content.put("content", editContent)
|
||||
content.put("question_id", question.id)
|
||||
if (!answerId.isNullOrEmpty()) {
|
||||
content.put("answer_id", answerId)
|
||||
}
|
||||
} catch (e: JSONException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
@ -2,13 +2,17 @@ package com.gh.gamecenter.qa.article.draft
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import com.gh.common.util.EntranceUtils
|
||||
import com.gh.gamecenter.NormalActivity
|
||||
|
||||
class ArticleDraftActivity : NormalActivity() {
|
||||
|
||||
companion object {
|
||||
fun getIntent(context: Context): Intent {
|
||||
return getTargetIntent(context, ArticleDraftActivity::class.java, ArticleDraftFragment::class.java)
|
||||
fun getIntent(context: Context, articleId: String? = null): Intent {
|
||||
val bundle = Bundle()
|
||||
bundle.putString(EntranceUtils.KEY_COMMUNITY_ARTICLE_ID, articleId)
|
||||
return getTargetIntent(context, ArticleDraftActivity::class.java, ArticleDraftFragment::class.java, bundle)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,8 @@ import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.lifecycle.ViewModelProviders
|
||||
import com.gh.common.util.EntranceUtils
|
||||
import com.gh.common.util.UrlFilterUtils
|
||||
import com.gh.common.util.checkReadPhoneStateAndStoragePermissionBeforeAction
|
||||
import com.gh.gamecenter.R
|
||||
import com.gh.gamecenter.baselist.ListFragment
|
||||
@ -28,6 +30,7 @@ import retrofit2.HttpException
|
||||
class ArticleDraftFragment : ListFragment<ArticleDraftEntity, NormalListViewModel<ArticleDraftEntity>>() {
|
||||
private val mApi = RetrofitManager.getInstance(context).api
|
||||
private var mAdapter: ArticleDraftAdapter? = null
|
||||
private var mArticleId: String? = null
|
||||
|
||||
override fun provideListAdapter(): ArticleDraftAdapter {
|
||||
if (mAdapter == null) {
|
||||
@ -52,7 +55,10 @@ class ArticleDraftFragment : ListFragment<ArticleDraftEntity, NormalListViewMode
|
||||
}
|
||||
|
||||
override fun provideDataObservable(page: Int): Observable<MutableList<ArticleDraftEntity>> {
|
||||
return mApi.getMyArticleDrafts(UserManager.getInstance().userId, page)
|
||||
return mApi.getArticleDrafts(
|
||||
UserManager.getInstance().userId,
|
||||
UrlFilterUtils.getFilterQuery("article_id", mArticleId),
|
||||
page)
|
||||
}
|
||||
|
||||
override fun provideListViewModel(): NormalListViewModel<ArticleDraftEntity> {
|
||||
@ -61,6 +67,8 @@ class ArticleDraftFragment : ListFragment<ArticleDraftEntity, NormalListViewMode
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
mArticleId = arguments?.getString(EntranceUtils.KEY_COMMUNITY_ARTICLE_ID)
|
||||
|
||||
super.onCreate(savedInstanceState)
|
||||
if (activity is ArticleDraftActivity) {
|
||||
setNavigationTitle("文章草稿")
|
||||
@ -69,7 +77,13 @@ class ArticleDraftFragment : ListFragment<ArticleDraftEntity, NormalListViewMode
|
||||
|
||||
|
||||
private fun deleteDraft(entity: ArticleDraftEntity) {
|
||||
mApi.deleteArticleDrafts(entity.community.id, entity.id)
|
||||
val deleteArticleDraftsObservable =
|
||||
if (mArticleId.isNullOrEmpty()) {
|
||||
mApi.deleteArticleDrafts(entity.community.id, entity.id)
|
||||
} else {
|
||||
mApi.deleteArticleDrafts(entity.community.id, entity.id, mArticleId)
|
||||
}
|
||||
deleteArticleDraftsObservable
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<ResponseBody>() {
|
||||
|
||||
@ -124,7 +124,7 @@ class ArticleEditActivity : BaseRichEditorActivity() {
|
||||
})
|
||||
|
||||
//setEditTextInputSpace()
|
||||
mEditTitle.filters= arrayOf(TextHelper.getFilter(50, "最多输入50个字"))
|
||||
mEditTitle.filters = arrayOf(TextHelper.getFilter(50, "最多输入50个字"))
|
||||
|
||||
// 上传图片完成后的回调(本地图片)
|
||||
mViewModel.postImageLiveData.observe(this, Observer {
|
||||
@ -259,7 +259,8 @@ class ArticleEditActivity : BaseRichEditorActivity() {
|
||||
R.id.draft_btn -> {
|
||||
MtaHelper.onEvent("发表文章", "文章草稿", UserManager.getInstance().community.name)
|
||||
if (checkDraft(SaveDraftType.SKIP)) {
|
||||
startActivityForResult(ArticleDraftActivity.getIntent(this), ARTICLE_DRAFT_REQUEST_CODE)
|
||||
val intent = ArticleDraftActivity.getIntent(this, mViewModel.detailEntity?.id)
|
||||
startActivityForResult(intent, ARTICLE_DRAFT_REQUEST_CODE)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -312,7 +313,7 @@ class ArticleEditActivity : BaseRichEditorActivity() {
|
||||
mViewModel.mSelectCommunityData = mViewModel.detailEntity?.community
|
||||
mEditTitle.setText(mViewModel.detailEntity?.title)
|
||||
setEditHtml(mViewModel.detailEntity?.content)
|
||||
mDraftBtn.visibility = View.GONE
|
||||
mDraftBtn.visibility = View.VISIBLE
|
||||
mGameName.isEnabled = false
|
||||
setGameName()
|
||||
mGameName.setTextColor(resources.getColor(R.color.hint))
|
||||
@ -342,14 +343,25 @@ class ArticleEditActivity : BaseRichEditorActivity() {
|
||||
override fun handleBackPressed(): Boolean {
|
||||
if (TextUtils.isEmpty(UserManager.getInstance().token)) {
|
||||
return false
|
||||
} else if (mViewModel.detailEntity != null) {
|
||||
showPatchBackDialog()
|
||||
return true
|
||||
}
|
||||
|
||||
if (mViewModel.detailEntity != null) {
|
||||
return if (!TextUtils.isEmpty(mEditTitle.text)
|
||||
|| mRichEditor.html.contains("<img src")
|
||||
|| !TextUtils.isEmpty(mRichEditor.text)) {
|
||||
showPatchBackDialog()
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
return !checkDraft(SaveDraftType.EXIT)
|
||||
}
|
||||
|
||||
private fun checkDraft(saveType: SaveDraftType): Boolean {
|
||||
if (mViewModel.detailEntity != null) return true
|
||||
|
||||
val draftEntity = mViewModel.draftEntity
|
||||
|
||||
// 内容为空直接弹窗
|
||||
@ -401,8 +413,16 @@ class ArticleEditActivity : BaseRichEditorActivity() {
|
||||
}
|
||||
|
||||
private fun showPatchBackDialog() {
|
||||
DialogUtils.showCancelAlertDialog(this, "提示", "确定退出修改?已修改的内容将丢失"
|
||||
, "继续写", " 退出", null, DialogUtils.CancelListener { finish() })
|
||||
DialogUtils.showCancelAlertDialog(this, "提示",
|
||||
"即将退出修改,是否需要将此次编辑保存到草稿箱?",
|
||||
"保存草稿",
|
||||
" 继续退出",
|
||||
{
|
||||
mViewModel.title = mEditTitle.text.toString()
|
||||
mViewModel.content = getReplaceRealContent()
|
||||
mViewModel.postArticleDrafts(SaveDraftType.EXIT)
|
||||
},
|
||||
{ finish() })
|
||||
}
|
||||
|
||||
private fun showSelectGameDialog() {
|
||||
|
||||
@ -241,7 +241,7 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat
|
||||
}
|
||||
|
||||
fun postArticle() {
|
||||
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("上传中...", true))
|
||||
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("提交中...", true))
|
||||
val articleBody = getArticleBody()
|
||||
if (draftEntity?.id != null) {
|
||||
articleBody.put("draft_id", draftEntity?.id)
|
||||
@ -323,12 +323,20 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat
|
||||
jsonObject.put("title", title)
|
||||
jsonObject.put("content", content)
|
||||
jsonObject.put("tags", tags)
|
||||
if (detailEntity != null) {
|
||||
jsonObject.put("article_id", detailEntity?.id)
|
||||
}
|
||||
return jsonObject
|
||||
}
|
||||
|
||||
fun getArticleDraftsContent(draftId: String) {
|
||||
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("加载中...", true))
|
||||
mApi.getArticleDraftsContent(mSelectCommunityData?.id, draftId)
|
||||
val articleDraftsObservable = if (detailEntity != null) {
|
||||
mApi.getArticleDraftsContent(mSelectCommunityData?.id, detailEntity?.id, draftId)
|
||||
} else {
|
||||
mApi.getArticleDraftsContent(mSelectCommunityData?.id, draftId)
|
||||
}
|
||||
articleDraftsObservable
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<ResponseBody>() {
|
||||
|
||||
@ -6,7 +6,7 @@ import android.os.Bundle
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.gh.base.BaseActivity_TabLayout
|
||||
import com.gh.gamecenter.qa.article.draft.ArticleDraftFragment
|
||||
import com.gh.gamecenter.qa.myqa.MyDraftFragment
|
||||
import com.gh.gamecenter.qa.answer.draft.AnswerDraftFragment
|
||||
|
||||
class CommunityDraftWrapperActivity : BaseActivity_TabLayout() {
|
||||
|
||||
@ -16,7 +16,7 @@ class CommunityDraftWrapperActivity : BaseActivity_TabLayout() {
|
||||
}
|
||||
|
||||
override fun initFragmentList(fragments: MutableList<Fragment>) {
|
||||
fragments.add(MyDraftFragment())
|
||||
fragments.add(AnswerDraftFragment())
|
||||
fragments.add(ArticleDraftFragment())
|
||||
}
|
||||
|
||||
|
||||
@ -556,7 +556,7 @@ class QuestionsDetailFragment :
|
||||
|
||||
private fun getUserAnswerDrafts() {
|
||||
RetrofitManager.getInstance(context).api
|
||||
.getUserAnswerDrafts(mQuestionsId, Utils.getTime(context))
|
||||
.getUserAnswerDrafts(mQuestionsId, "",Utils.getTime(context))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Response<AnswerDraftEntity>() {
|
||||
|
||||
@ -908,7 +908,7 @@ public interface ApiService {
|
||||
* 获取用户的草稿列表
|
||||
*/
|
||||
@GET("users/{user_id}/answer_drafts")
|
||||
Observable<List<AnswerEntity>> getMyAnswerDrafts(@Path("user_id") String userId, @Query("page") int page);
|
||||
Observable<List<AnswerEntity>> getAnswerDrafts(@Path("user_id") String userId, @Query("filter") String filter, @Query("page") int page);
|
||||
|
||||
/**
|
||||
* 获取用户的关注问题列表
|
||||
@ -943,9 +943,10 @@ public interface ApiService {
|
||||
|
||||
/**
|
||||
* 获取用户在相应问题的回答草稿
|
||||
* filter:编辑文章时的草稿使用
|
||||
*/
|
||||
@GET("questions/{question_id}/answer_drafts")
|
||||
Observable<AnswerDraftEntity> getUserAnswerDrafts(@Path("question_id") String questionId, @Query("timestamp") long timestamp);
|
||||
Observable<AnswerDraftEntity> getUserAnswerDrafts(@Path("question_id") String questionId, @Query("filter") String filter, @Query("timestamp") long timestamp);
|
||||
|
||||
/**
|
||||
* 保存用户回答的草稿
|
||||
@ -1372,14 +1373,22 @@ public interface ApiService {
|
||||
* 获取用户的文章草稿列表
|
||||
*/
|
||||
@GET("users/{user_id}/communities/article_drafts")
|
||||
Observable<List<ArticleDraftEntity>> getMyArticleDrafts(@Path("user_id") String userId, @Query("page") int page);
|
||||
Observable<List<ArticleDraftEntity>> getArticleDrafts(@Path("user_id") String userId, @Query("filter") String filter, @Query("page") int page);
|
||||
|
||||
/**
|
||||
* 删除社区文章的草稿
|
||||
* 删除社区文章的草稿(撰写)
|
||||
*/
|
||||
@DELETE("communities/{community_id}/article_drafts/{draft_id}")
|
||||
Observable<ResponseBody> deleteArticleDrafts(@Path("community_id") String communityId, @Path("draft_id") String draftId);
|
||||
|
||||
/**
|
||||
* 删除社区文章的草稿(编辑)
|
||||
*/
|
||||
@DELETE("communities/{community_id}/articles/{article_id}/article_drafts/{draft_id}")
|
||||
Observable<ResponseBody> deleteArticleDrafts(@Path("community_id") String communityId,
|
||||
@Path("article_id") String articleId,
|
||||
@Path("draft_id") String draftId);
|
||||
|
||||
/**
|
||||
* 获取社区文章详情
|
||||
*/
|
||||
@ -1411,11 +1420,17 @@ public interface ApiService {
|
||||
Observable<ResponseBody> postCommunityArticleUnoppose(@Path("community_id") String communityId, @Path("article_id") String articleId);
|
||||
|
||||
/**
|
||||
* 获取社区文章草稿内容
|
||||
* 获取社区文章草稿内容(撰写)
|
||||
*/
|
||||
@GET("communities/{community_id}/article_drafts/{draft_id}")
|
||||
Observable<ResponseBody> getArticleDraftsContent(@Path("community_id") String communityId, @Path("draft_id") String draftId);
|
||||
|
||||
/**
|
||||
* 获取社区文章草稿内容(编辑)
|
||||
*/
|
||||
@GET("communities/{community_id}/articles/{article_id}/article_drafts/{draft_id}")
|
||||
Observable<ResponseBody> getArticleDraftsContent(@Path("community_id") String communityId, @Path("article_id") String articleId, @Path("draft_id") String draftId);
|
||||
|
||||
/**
|
||||
* 获取收藏的社区文章列表
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user