diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cbf465f13c..208d0f44b5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -360,10 +360,14 @@ android:screenOrientation = "portrait" /> + android:name = "com.gh.gamecenter.qa.draft.CommunityDraftWrapperActivity" + android:screenOrientation = "portrait" /> + + + android:name = "android.support.v4.content.FileProvider" + android:authorities = "${applicationId}" + android:exported = "false" + android:grantUriPermissions = "true" > - + android:name = "android.support.FILE_PROVIDER_PATHS" + android:resource = "@xml/provider_paths" /> + @@ -442,30 +446,30 @@ - - + + - + - + - + - - + + - - - + + + - - - - - + android:name = "com.gh.common.im.ImReceiver" + android:enabled = "true" > + + + + + diff --git a/app/src/main/java/com/gh/base/BaseActivity_TabLayout.java b/app/src/main/java/com/gh/base/BaseActivity_TabLayout.java index 94e7d18679..9815410f87 100644 --- a/app/src/main/java/com/gh/base/BaseActivity_TabLayout.java +++ b/app/src/main/java/com/gh/base/BaseActivity_TabLayout.java @@ -53,7 +53,7 @@ public abstract class BaseActivity_TabLayout extends BaseActivity implements Vie @Override protected int getLayoutId() { - return R.layout.fragment_tablayout_viewpager; + return R.layout.activity_tablayout_viewpager; } @Override diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index 3efb8c0dfc..9f9d80042b 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -50,6 +50,7 @@ import com.gh.gamecenter.eventbus.EBSkip; import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.message.MessageUnreadViewModel; import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity; +import com.gh.gamecenter.qa.draft.CommunityDraftWrapperActivity; import com.gh.gamecenter.qa.myqa.MyAskActivity; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -265,7 +266,7 @@ public class PersonalFragment extends BaseFragment implements Observer { - // todo 跳转至我的草稿(文章/答案) + startActivity(CommunityDraftWrapperActivity.getIntent(getContext())); }); break; } diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleActivity.kt index 6ba57ce4ef..39bb9379a0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleActivity.kt @@ -1,79 +1,21 @@ package com.gh.gamecenter.qa.article -import android.app.Activity -import android.arch.lifecycle.ViewModelProviders import android.content.Context import android.content.Intent import android.os.Bundle -import android.view.MenuItem import com.gh.common.util.EntranceUtils -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.ListActivity -import com.gh.gamecenter.baselist.LoadType -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.article.edit.ArticleEditActivity -import com.gh.gamecenter.qa.entity.ArticleEntity -import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp -import io.reactivex.Observable +import com.gh.gamecenter.NormalActivity -class MyArticleActivity : ListActivity>() { - - private var mAdapter: MyArticleAdapter? = null - - private var mTargetUserId = "" - - override fun provideListAdapter(): MyArticleAdapter { - if (mAdapter == null) { - mAdapter = MyArticleAdapter(this) - } - return mAdapter!! - } - - override fun provideDataObservable(page: Int): Observable> { - return RetrofitManager.getInstance(this).api.getMyArticle(mTargetUserId, page) - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == PUBLISH_ARTICLE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { - mListViewModel.load(LoadType.REFRESH) - } - } - - override fun provideListViewModel(): NormalListViewModel { - val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) - return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel - } - - override fun onCreate(savedInstanceState: Bundle?) { - mTargetUserId = intent.getStringExtra(EntranceUtils.KEY_USER_ID) - super.onCreate(savedInstanceState) - setToolbarMenu(R.menu.menu_article_publich) - - if (mTargetUserId == UserManager.getInstance().userId) { - setNavigationTitle("我的文章") - } else { - setNavigationTitle("Ta的文章") - } - } - - override fun onMenuItemClick(item: MenuItem?): Boolean { - if (item?.itemId == R.id.menu_article_publish) { - startActivityForResult(ArticleEditActivity.getIntent(this), PUBLISH_ARTICLE_REQUEST_CODE) - } - return super.onMenuItemClick(item) - } +class MyArticleActivity : NormalActivity() { companion object { const val PUBLISH_ARTICLE_REQUEST_CODE = 102 @JvmStatic fun getIntent(context: Context, userId: String): Intent { - val intent = Intent(context, MyArticleActivity::class.java) - intent.putExtra(EntranceUtils.KEY_USER_ID, userId) - return intent + val bundle = Bundle() + bundle.putString(EntranceUtils.KEY_USER_ID, userId) + return getTargetIntent(context, MyArticleActivity::class.java, MyArticleFragment::class.java, bundle) } } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleAdapter.kt index f246180c85..57c0dffe06 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleAdapter.kt @@ -48,6 +48,7 @@ class MyArticleAdapter(context: Context) : ListAdapter(context) { } } else if (holder is FooterViewHolder) { holder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver, R.string.ask_loadover_hint) + holder.initItemPadding() } } 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 new file mode 100644 index 0000000000..1c87c9b990 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/qa/article/MyArticleFragment.kt @@ -0,0 +1,80 @@ +package com.gh.gamecenter.qa.article + +import android.app.Activity +import android.arch.lifecycle.ViewModelProviders +import android.content.Intent +import android.os.Bundle +import android.view.MenuItem +import com.gh.common.util.EntranceUtils +import com.gh.gamecenter.R +import com.gh.gamecenter.baselist.ListFragment +import com.gh.gamecenter.baselist.LoadType +import com.gh.gamecenter.baselist.NormalListViewModel +import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.qa.article.edit.ArticleEditActivity +import com.gh.gamecenter.qa.entity.ArticleEntity +import com.gh.gamecenter.retrofit.RetrofitManager +import com.halo.assistant.HaloApp +import io.reactivex.Observable + +class MyArticleFragment : ListFragment>() { + private var mAdapter: MyArticleAdapter? = null + + private var mTargetUserId = "" + + override fun provideListAdapter(): MyArticleAdapter { + if (mAdapter == null) { + mAdapter = MyArticleAdapter(context!!) + } + return mAdapter!! + } + + override fun provideDataObservable(page: Int): Observable> { + return RetrofitManager.getInstance(context!!).api.getMyArticle(mTargetUserId, page) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == MyArticleActivity.PUBLISH_ARTICLE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { + mListViewModel.load(LoadType.REFRESH) + } + } + + override fun provideListViewModel(): NormalListViewModel { + val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) + return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel + } + + override fun onCreate(savedInstanceState: Bundle?) { + mTargetUserId = arguments?.getString(EntranceUtils.KEY_USER_ID)!! + super.onCreate(savedInstanceState) + + if (activity is MyArticleActivity) { + initMenu(R.menu.menu_article_publich) + } + + if (mTargetUserId == UserManager.getInstance().userId) { + setNavigationTitle("我的文章") + } else { + setNavigationTitle("Ta的文章") + } + } + + override fun onMenuItemClick(item: MenuItem?) { + if (item?.itemId == R.id.menu_article_publish) { + startActivityForResult(ArticleEditActivity.getIntent(context!!), MyArticleActivity.PUBLISH_ARTICLE_REQUEST_CODE) + } + } + + companion object { + @JvmStatic + fun getInstance(entrance: String?, userId: String): MyArticleFragment { + val fragment = MyArticleFragment() + val args = Bundle() + args.putString(EntranceUtils.KEY_ENTRANCE, entrance) + args.putString(EntranceUtils.KEY_USER_ID, userId) + fragment.arguments = args + return fragment + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftActivity.kt index 3575bd829a..9fafe3cc7f 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftActivity.kt @@ -1,77 +1,14 @@ package com.gh.gamecenter.qa.article.draft -import android.app.Activity -import android.arch.lifecycle.ViewModelProviders import android.content.Context import android.content.Intent -import android.os.Bundle -import com.gh.gamecenter.R -import com.gh.gamecenter.baselist.ListActivity -import com.gh.gamecenter.baselist.LoadType -import com.gh.gamecenter.baselist.NormalListViewModel -import com.gh.gamecenter.manager.UserManager -import com.gh.gamecenter.qa.entity.ArticleDraftEntity -import com.gh.gamecenter.retrofit.Response -import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp -import io.reactivex.Observable -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers -import okhttp3.ResponseBody -import retrofit2.HttpException +import com.gh.gamecenter.NormalActivity -class ArticleDraftActivity : ListActivity>() { - - private val mApi = RetrofitManager.getInstance(this).api - private var mAdapter: ArticleDraftAdapter? = null - - override fun provideListAdapter(): ArticleDraftAdapter { - if (mAdapter == null) { - mAdapter = ArticleDraftAdapter(this - , deleteCallback = { deleteDraft(it) } - , selectCallback = { - val intent = Intent() - intent.putExtra(ArticleDraftEntity::class.java.simpleName, it) - setResult(Activity.RESULT_OK, intent) - finish() - }) - } - return mAdapter!! - } - - override fun provideDataObservable(page: Int): Observable> { - return mApi.getMyArticleDrafts(UserManager.getInstance().userId, page) - } - - override fun provideListViewModel(): NormalListViewModel { - val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) - return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setNavigationTitle("文章草稿") - } - - - private fun deleteDraft(entity: ArticleDraftEntity) { - mApi.deleteArticleDrafts(entity.community.id, entity.id) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { - mListViewModel.load(LoadType.REFRESH) - } - - override fun onFailure(e: HttpException?) { - toast(R.string.post_failure_hint) - } - }) - } +class ArticleDraftActivity : NormalActivity() { companion object { fun getIntent(context: Context): Intent { - return Intent(context, ArticleDraftActivity::class.java) + return NormalActivity.getTargetIntent(context, ArticleDraftActivity::class.java, ArticleDraftFragment::class.java) } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftAdapter.kt index d5fbfd1971..064b699ffe 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftAdapter.kt @@ -46,6 +46,7 @@ class ArticleDraftAdapter(context: Context selectCallback.invoke(entity) } } else if (holder is FooterViewHolder) { + holder.initItemPadding() holder.initFooterViewHolder(mIsLoading, isNetworkError, mIsOver, R.string.ask_loadover_hint) } } 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 new file mode 100644 index 0000000000..e695522e6c --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/qa/article/draft/ArticleDraftFragment.kt @@ -0,0 +1,86 @@ +package com.gh.gamecenter.qa.article.draft + +import android.app.Activity +import android.arch.lifecycle.ViewModelProviders +import android.content.Intent +import android.os.Bundle +import com.gh.gamecenter.R +import com.gh.gamecenter.baselist.ListFragment +import com.gh.gamecenter.baselist.LoadType +import com.gh.gamecenter.baselist.NormalListViewModel +import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.qa.article.edit.ArticleEditActivity +import com.gh.gamecenter.qa.draft.CommunityDraftWrapperActivity +import com.gh.gamecenter.qa.entity.ArticleDraftEntity +import com.gh.gamecenter.retrofit.Response +import com.gh.gamecenter.retrofit.RetrofitManager +import com.halo.assistant.HaloApp +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers +import okhttp3.ResponseBody +import retrofit2.HttpException + +class ArticleDraftFragment : ListFragment>() { + private val mApi = RetrofitManager.getInstance(context).api + private var mAdapter: ArticleDraftAdapter? = null + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == ARTICLE_DRAFT_REQUEST && resultCode == Activity.RESULT_OK) { + mListViewModel?.load(LoadType.REFRESH) + } + } + + override fun provideListAdapter(): ArticleDraftAdapter { + if (mAdapter == null) { + mAdapter = ArticleDraftAdapter(context!! + , deleteCallback = { deleteDraft(it) } + , selectCallback = { + if (activity is CommunityDraftWrapperActivity) { + startActivityForResult(ArticleEditActivity.getDraftIntent(context!!, it), ARTICLE_DRAFT_REQUEST) + } else if (activity != null) { + val intent = Intent() + intent.putExtra(ArticleDraftEntity::class.java.simpleName, it) + activity?.setResult(Activity.RESULT_OK, intent) + activity?.finish() + } + }) + } + return mAdapter!! + } + + override fun provideDataObservable(page: Int): Observable> { + return mApi.getMyArticleDrafts(UserManager.getInstance().userId, page) + } + + override fun provideListViewModel(): NormalListViewModel { + val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) + return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setNavigationTitle("文章草稿") + } + + + private fun deleteDraft(entity: ArticleDraftEntity) { + mApi.deleteArticleDrafts(entity.community.id, entity.id) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response() { + override fun onResponse(response: ResponseBody?) { + mListViewModel.load(LoadType.REFRESH) + } + + override fun onFailure(e: HttpException?) { + toast(R.string.post_failure_hint) + } + }) + } + + companion object { + const val ARTICLE_DRAFT_REQUEST: Int = 133 + } +} 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 6f1cad1611..826f4f3c0b 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 @@ -78,16 +78,11 @@ class ArticleEditActivity : BaseActivity() { if (data != null && requestCode == SuggestionActivity.MEDIA_STORE_REQUEST) { mViewModel?.uploadPic(data) } else if (requestCode == ArticleEditActivity.ARTICLE_DRAFT_REQUEST_CODE && resultCode == Activity.RESULT_OK) { - // 补充 草稿 - setNavigationTitle("编辑文章") val draftEntity = data?.getParcelableExtra(ArticleDraftEntity::class.java.simpleName) - mViewModel?.draftId = draftEntity?.id - mViewModel?.mSelectCommunityData = draftEntity?.community - mEditTitle.setText(draftEntity?.title) - mDraftBtn.visibility = View.GONE - mGameName.isEnabled = false - setGameName() - mViewModel?.getArticleDraftsContent(draftEntity?.id!!) + if (draftEntity != null) { + mViewModel?.draftEntity = draftEntity + setArticleDraft() + } } } @@ -97,6 +92,7 @@ class ArticleEditActivity : BaseActivity() { mViewModel = ViewModelProviders.of(this).get(ArticleEditViewModel::class.java) mViewModel?.detailEntity = intent.getParcelableExtra(ArticleDetailEntity::class.java.simpleName) + mViewModel?.draftEntity = intent.getParcelableExtra(ArticleDraftEntity::class.java.simpleName) mGameNameTitle.text = Html.fromHtml(getString(R.string.suggestion_game_name)) mEditContent.setPadding(20, 15, 20, 15) @@ -161,6 +157,8 @@ class ArticleEditActivity : BaseActivity() { if (mViewModel?.detailEntity != null) { // 修改文章 内容填充 setNavigationTitle("编辑文章") setPatchContent() + } else if (mViewModel?.draftEntity != null) { + setArticleDraft() } else {// 启动自动保存草稿 setNavigationTitle("撰写文章") mBaseHandler.sendEmptyMessageDelayed(1, SAVE_DRAFTS_INTERVAL_TIME.toLong()) @@ -205,6 +203,16 @@ class ArticleEditActivity : BaseActivity() { } } + private fun setArticleDraft() { + setNavigationTitle("编辑文章") + mViewModel?.mSelectCommunityData = mViewModel?.draftEntity?.community + mEditTitle.setText(mViewModel?.draftEntity?.title) + mDraftBtn.visibility = View.GONE + mGameName.isEnabled = false + setGameName() + mViewModel?.getArticleDraftsContent(mViewModel?.draftEntity?.id!!) + } + private fun setPatchContent() { mViewModel?.mSelectCommunityData = mViewModel?.detailEntity?.community mEditTitle.setText(mViewModel?.detailEntity?.title) @@ -292,5 +300,12 @@ class ArticleEditActivity : BaseActivity() { intent.putExtra(ArticleDetailEntity::class.java.simpleName, detailEntity) return intent } + + @JvmStatic + fun getDraftIntent(context: Context, draftEntity: ArticleDraftEntity): Intent { + val intent = Intent(context, ArticleEditActivity::class.java) + intent.putExtra(ArticleDraftEntity::class.java.simpleName, draftEntity) + return intent + } } } \ No newline at end of file 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 75c4f7f6f1..a4e0e02466 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 @@ -13,6 +13,7 @@ import com.gh.common.util.UrlFilterUtils import com.gh.gamecenter.R import com.gh.gamecenter.entity.CommunityEntity import com.gh.gamecenter.qa.entity.ArticleDetailEntity +import com.gh.gamecenter.qa.entity.ArticleDraftEntity import com.gh.gamecenter.qa.questions.edit.QuestionEditViewModel import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager @@ -54,8 +55,8 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat val selectedTags: MutableList = ArrayList() var detailEntity: ArticleDetailEntity? = null + var draftEntity: ArticleDraftEntity? = null - var draftId: String? = null var title: String? = null var content: String? = null @@ -209,8 +210,8 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat fun postArticle() { processDialog.postValue(WaitingDialogFragment.WaitingDialogData("上传中...", true)) val articleBody = getArticleBody() - if (!draftId.isNullOrEmpty()) { - articleBody.put("draft_id", draftId) + if (draftEntity?.id != null) { + articleBody.put("draft_id", draftEntity?.id) } val body = RequestBody.create(MediaType.parse("application/json"), articleBody.toString()) val observable = if (detailEntity == null) { @@ -241,8 +242,8 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat fun postArticleDrafts(isExit: Boolean) { val body = RequestBody.create(MediaType.parse("application/json"), getArticleBody().toString()) - val observable = if (!draftId.isNullOrEmpty()) { - mApi.patchCommunityArticleDrafts(mSelectCommunityData?.id, draftId, body) + val observable = if (draftEntity?.id != null) { + mApi.patchCommunityArticleDrafts(mSelectCommunityData?.id, draftEntity?.id, body) } else { mApi.postCommunityArticleDrafts(mSelectCommunityData?.id, body) } @@ -255,8 +256,9 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat Utils.toast(getApplication(), "回答已保存到草稿箱") val string = response?.string() - if (!string.isNullOrEmpty() && draftId.isNullOrEmpty()) { - draftId = JSONObject(string).getString("_id") + if (!string.isNullOrEmpty() && draftEntity?.id == null) { + if (draftEntity == null) draftEntity = ArticleDraftEntity() + draftEntity?.id = JSONObject(string).getString("_id") } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/draft/CommunityDraftWrapperActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/draft/CommunityDraftWrapperActivity.kt index 8e8cfc816a..f7c0bef0a9 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/draft/CommunityDraftWrapperActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/draft/CommunityDraftWrapperActivity.kt @@ -1,16 +1,35 @@ package com.gh.gamecenter.qa.draft +import android.content.Context +import android.content.Intent +import android.os.Bundle import android.support.v4.app.Fragment import com.gh.base.BaseActivity_TabLayout -import com.gh.gamecenter.qa.myqa.MyAnswerFragment +import com.gh.gamecenter.qa.article.draft.ArticleDraftFragment +import com.gh.gamecenter.qa.myqa.MyDraftFragment class CommunityDraftWrapperActivity : BaseActivity_TabLayout() { - override fun initFragmentList(fragments: MutableList) { - fragments.add(MyAnswerFragment()) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setNavigationTitle("我的草稿") } - override fun initTabTitleList(tabTitleList: List) { + override fun initFragmentList(fragments: MutableList) { + fragments.add(MyDraftFragment()) + fragments.add(ArticleDraftFragment()) + } + + override fun initTabTitleList(tabTitleList: MutableList) { + tabTitleList.add("回答草稿") + tabTitleList.add("文章草稿") + } + + companion object { + @JvmStatic + fun getIntent(context: Context): Intent { + return Intent(context, CommunityDraftWrapperActivity::class.java) + } } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleDraftEntity.kt b/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleDraftEntity.kt index 0f5f3c5e99..daf88b95c9 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleDraftEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/entity/ArticleDraftEntity.kt @@ -7,7 +7,7 @@ import kotlinx.android.parcel.Parcelize @Parcelize data class ArticleDraftEntity(@SerializedName("_id") - val id: String = "", + var id: String = "", val title: String = "", val content: String = "", val count: Count = Count(), diff --git a/app/src/main/java/com/gh/gamecenter/qa/myqa/AnswerDraftViewHolder.kt b/app/src/main/java/com/gh/gamecenter/qa/myqa/AnswerDraftViewHolder.kt new file mode 100644 index 0000000000..72893f3464 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/qa/myqa/AnswerDraftViewHolder.kt @@ -0,0 +1,6 @@ +package com.gh.gamecenter.qa.myqa + +import com.gh.base.BaseRecyclerViewHolder +import com.gh.gamecenter.databinding.AnswerDraftItemBinding + +class AnswerDraftViewHolder(val binding: AnswerDraftItemBinding): BaseRecyclerViewHolder(binding.root) diff --git a/app/src/main/java/com/gh/gamecenter/qa/myqa/MyAskWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/qa/myqa/MyAskWrapperFragment.java index 459a0e101c..24f30864fc 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/myqa/MyAskWrapperFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/myqa/MyAskWrapperFragment.java @@ -7,6 +7,8 @@ import android.support.v4.app.Fragment; import com.gh.base.fragment.BaseFragment_TabLayout; import com.gh.common.util.EntranceUtils; import com.gh.gamecenter.R; +import com.gh.gamecenter.manager.UserManager; +import com.gh.gamecenter.qa.article.MyArticleFragment; import java.util.List; @@ -15,7 +17,7 @@ import java.util.List; */ public class MyAskWrapperFragment extends BaseFragment_TabLayout { - + @Override protected void initFragmentList(List fragments) { String entrance = null; @@ -24,7 +26,7 @@ public class MyAskWrapperFragment extends BaseFragment_TabLayout { fragments.add(ConcernQuestionsFragment.getInstance(entrance)); fragments.add(MyQuestionsFragment.getInstance(entrance)); fragments.add(MyAnswerFragment.getInstance(entrance)); - fragments.add(MyDraftFragment.getInstance(entrance)); + fragments.add(MyArticleFragment.getInstance(entrance, UserManager.getInstance().getUserId())); } @Override @@ -32,7 +34,7 @@ public class MyAskWrapperFragment extends BaseFragment_TabLayout { tabTitleList.add("关注问题"); tabTitleList.add("我的问题"); tabTitleList.add("我的回答"); - tabTitleList.add("草稿箱"); + tabTitleList.add("我的文章"); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/qa/myqa/MyDraftAdapter.java b/app/src/main/java/com/gh/gamecenter/qa/myqa/MyDraftAdapter.java index 3864927a37..4041bcff2b 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/myqa/MyDraftAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/qa/myqa/MyDraftAdapter.java @@ -1,18 +1,39 @@ package com.gh.gamecenter.qa.myqa; +import android.app.Activity; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; +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.ImageUtils; +import com.gh.common.util.LogUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.qa.entity.AnswerEntity; -import com.gh.gamecenter.qa.questions.detail.AnswerViewHolder; import com.gh.gamecenter.baselist.ListAdapter; +import com.gh.gamecenter.baselist.ListViewModel; +import com.gh.gamecenter.baselist.LoadType; +import com.gh.gamecenter.databinding.AnswerDraftItemBinding; +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.questions.detail.QuestionsDetailActivity; +import com.gh.gamecenter.retrofit.Response; +import com.gh.gamecenter.retrofit.RetrofitManager; +import com.lightgame.utils.Utils; + +import java.util.List; + +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; +import okhttp3.ResponseBody; +import retrofit2.HttpException; /** * Created by khy on 20/12/17. @@ -21,12 +42,17 @@ import com.gh.gamecenter.baselist.ListAdapter; class MyDraftAdapter extends ListAdapter { private OnListClickListener mListClickListener; - private OnItemLongClickListener mLongClickListener; - MyDraftAdapter(Context context, OnListClickListener listClickListener, OnItemLongClickListener longClickListener) { + private ListViewModel mListViewModel; + + private String mEntrance; + + + MyDraftAdapter(Context context, String entrance, OnListClickListener listClickListener, ListViewModel longClickListener) { super(context); mListClickListener = listClickListener; - mLongClickListener = longClickListener; + mListViewModel = longClickListener; + mEntrance = entrance; } @Override @@ -48,8 +74,8 @@ class MyDraftAdapter extends ListAdapter { view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); return new FooterViewHolder(view, mListClickListener); case ItemViewType.ITEM_BODY: - view = mLayoutInflater.inflate(R.layout.ask_answer_item, parent, false); - return new AnswerViewHolder(view, mListClickListener); + view = mLayoutInflater.inflate(R.layout.answer_draft_item, parent, false); + return new AnswerDraftViewHolder(AnswerDraftItemBinding.bind(view)); default: return null; } @@ -59,17 +85,48 @@ class MyDraftAdapter extends ListAdapter { public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { case ItemViewType.ITEM_BODY: + AnswerDraftViewHolder draftViewHolder = (AnswerDraftViewHolder) holder; AnswerEntity answerEntity = mEntityList.get(position); - ((AnswerViewHolder) holder).initMyDraftViewHolder(answerEntity); - holder.itemView.setOnLongClickListener(v -> { - mLongClickListener.onLongClick(answerEntity); - return false; + AnswerDraftItemBinding binding = draftViewHolder.getBinding(); + SimpleDraweeView img = binding.answerDraftItemImg; + binding.setData(answerEntity); + List images = answerEntity.getImages(); + if (images.size() > 0) { + for (int i = 0; i < images.size(); i++) { + if (!images.get(i).contains(".gif")) { + img.setVisibility(View.VISIBLE); + ImageUtils.display(img, images.get(i)); + break; + } + if (i == images.size() - 1) { + img.setVisibility(View.GONE); + } + } + } else { + img.setVisibility(View.GONE); + } + binding.answerDraftItemTitle.setOnClickListener(v -> { + String tracers = mEntrance + "+(我的草稿)"; + Questions questions = answerEntity.getQuestions(); + mContext.startActivity(QuestionsDetailActivity.getIntent(mContext, questions.getId(), tracers, "我的问答-我的草稿")); + + LogUtils.uploadQuestions(mContext, tracers, questions); + }); + binding.answerDraftItemDelete.setOnClickListener(v -> { + DialogUtils.showAlertDialog(mContext, "删除草稿", "答案尚未发布,确定删除?" + , "确定", "取消" + , () -> deleteAnswerDraft(answerEntity), null); + }); + draftViewHolder.itemView.setOnClickListener(v -> { + ((Activity) mContext).startActivityForResult(AnswerEditActivity.getIntent(mContext, + answerEntity.getQuestions().getId(), answerEntity.getQuestions().getTitle(), + answerEntity.getId(), true), MyDraftFragment.ANSWER_DRAFT_REQUEST); }); break; case ItemViewType.ITEM_FOOTER: FooterViewHolder footerViewHolder = (FooterViewHolder) holder; footerViewHolder.initItemPadding(); - footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver, R.string.ask_loadover_hint); + footerViewHolder.initFooterViewHolder(mListViewModel, mIsLoading, mIsNetworkError, mIsOver); break; } } @@ -79,12 +136,22 @@ class MyDraftAdapter extends ListAdapter { return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT; } - void removePosition(int draftPosition) { - mEntityList.remove(draftPosition); - notifyDataSetChanged(); - } - interface OnItemLongClickListener { - void onLongClick(AnswerEntity entity); + 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); + } + }); } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/myqa/MyDraftFragment.java b/app/src/main/java/com/gh/gamecenter/qa/myqa/MyDraftFragment.java index 97fbd2c292..bee65d97a2 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/myqa/MyDraftFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/myqa/MyDraftFragment.java @@ -3,45 +3,31 @@ package com.gh.gamecenter.qa.myqa; import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.view.View; -import com.gh.common.util.LogUtils; -import com.gh.common.util.DialogUtils; import com.gh.common.util.EntranceUtils; -import com.gh.gamecenter.R; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.baselist.ListFragment; import com.gh.gamecenter.baselist.LoadType; import com.gh.gamecenter.baselist.NormalListViewModel; import com.gh.gamecenter.manager.UserManager; -import com.gh.gamecenter.qa.answer.edit.AnswerEditActivity; import com.gh.gamecenter.qa.answer.edit.AnswerEditFragment; import com.gh.gamecenter.qa.entity.AnswerEntity; -import com.gh.gamecenter.qa.entity.Questions; -import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity; -import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import java.util.List; import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; -import okhttp3.ResponseBody; -import retrofit2.HttpException; /** * Created by khy on 20/12/17. */ -public class MyDraftFragment extends ListFragment implements MyDraftAdapter.OnItemLongClickListener { +public class MyDraftFragment extends ListFragment { - private static final int ANSWER_DRAFT_REQUEST = 101; + public static final int ANSWER_DRAFT_REQUEST = 101; private MyDraftAdapter mAdapter; - private int mDraftPosition = -1; // 存储草稿位置 提交成功后页面删除响应的草稿 - public static MyDraftFragment getInstance(String entrance) { MyDraftFragment fragment = new MyDraftFragment(); Bundle args = new Bundle(); @@ -53,75 +39,19 @@ public class MyDraftFragment extends ListFragment> provideDataObservable(int page) { return RetrofitManager.getInstance(getContext()).getApi().getMyAnswerDrafts(UserManager.getInstance().getUserId(), page); } - - @Override - public void onListClick(View view, int position, Object data) { - AnswerEntity entity; - switch (view.getId()) { - case R.id.footerview_item: - if (mAdapter.isNetworkError()) { - mListViewModel.load(LoadType.RETRY); - } - break; - case R.id.ask_answer_item_constraintlayout: - mDraftPosition = position; - entity = (AnswerEntity) data; - startActivityForResult(AnswerEditActivity.getIntent(getContext(), entity.getQuestions().getId() - , entity.getQuestions().getTitle(), entity.getId(), true), ANSWER_DRAFT_REQUEST); - break; - case R.id.ask_answer_item_title: - String tracers = mEntrance + "+(我的草稿)"; - entity = (AnswerEntity) data; - Questions questions = entity.getQuestions(); - startActivity(QuestionsDetailActivity.getIntent(getContext(), questions.getId(), tracers, "我的问答-我的草稿")); - - LogUtils.uploadQuestions(getContext(), tracers, questions); - break; - } - } - - @Override - public void onLongClick(AnswerEntity entity) { - DialogUtils.showAlertDialog(getContext(), "删除草稿", "答案尚未发布,确定删除?" - , "确定", "取消" - , () -> deleteAnswerDraft(entity), null); - } - - void deleteAnswerDraft(AnswerEntity entity) { - RetrofitManager.getInstance(getContext()).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) { - toast(R.string.loading_network_error); - } - }); - } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/AnswerViewHolder.java b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/AnswerViewHolder.java index 78196d46c9..a009551c87 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/detail/AnswerViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/detail/AnswerViewHolder.java @@ -158,34 +158,6 @@ public class AnswerViewHolder extends BaseRecyclerViewHolder { } } - public void initMyDraftViewHolder(AnswerEntity entity) { - setClickData(entity); - mUsername.setVisibility(View.GONE); - mUserIconContainer.setVisibility(View.GONE); - mQuestionTitle.setVisibility(View.VISIBLE); - mQuestionTitle.setText(entity.getQuestions().getTitle()); - mContent.setText(entity.getBrief()); - mVotecount.setText(R.string.resume_deit); - mCommunityName.setVisibility(View.VISIBLE); - mCommunityName.setText(entity.getCommunityName()); - mVotecount.setTextColor(ContextCompat.getColor(itemView.getContext(), (R.color.theme))); - List images = entity.getImages(); - if (images.size() > 0) { - for (int i = 0; i < images.size(); i++) { - if (!images.get(i).contains(".gif")) { - mImg.setVisibility(View.VISIBLE); - ImageUtils.display(mImg, images.get(i)); - break; - } - if (i == images.size() - 1) { - mImg.setVisibility(View.GONE); - } - } - } else { - mImg.setVisibility(View.GONE); - } - } - private void skipPersonalHome(AnswerEntity entity) { mUsericon.setOnClickListener(v -> PersonalHomeActivity.startTargetActivity(itemView.getContext(), entity.getUser().getId(), "问题详情")); mUsername.setOnClickListener(v -> PersonalHomeActivity.startTargetActivity(itemView.getContext(), entity.getUser().getId(), "问题详情")); diff --git a/app/src/main/res/layout/answer_draft_item.xml b/app/src/main/res/layout/answer_draft_item.xml new file mode 100644 index 0000000000..1ca556d0f7 --- /dev/null +++ b/app/src/main/res/layout/answer_draft_item.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file