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