From ecb80ca70d43ecacbdb0d926e6e86a2fff0fc4f4 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Thu, 16 May 2019 18:37:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=89=E7=8E=AF=E5=8A=A9=E6=89=8BV3.6.4=20DE?= =?UTF-8?q?V=EF=BC=8820190513-1900=EF=BC=89=E7=BC=96=E8=BE=91=E5=99=A8?= =?UTF-8?q?=E7=9B=B8=E5=85=B3(1.3.4.6.7.8.9.11.17)=20https://gitlab.ghzs.c?= =?UTF-8?q?om/pm/halo-app-issues/issues/519#note=5F21413?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/common/util/UploadImageUtils.kt | 6 ++-- .../com/gh/gamecenter/SuggestionActivity.java | 3 +- .../gh/gamecenter/baselist/ListViewModel.java | 6 ++++ .../qa/answer/edit/AnswerEditViewModel.kt | 4 +-- .../qa/article/edit/ArticleEditViewModel.kt | 11 ++---- .../gh/gamecenter/qa/editor/AnswerAdapter.kt | 10 ++++++ .../gh/gamecenter/qa/editor/AnswerFragment.kt | 9 +---- .../gamecenter/qa/editor/AnswerViewModel.kt | 31 ++++++++++++++++ .../gamecenter/qa/editor/ArticleFragment.kt | 10 +----- .../gamecenter/qa/editor/ArticleViewModel.kt | 33 ++++++++++++++++++ .../gh/gamecenter/qa/editor/LinkFragment.kt | 2 +- .../drawable-xhdpi/editor_link_unselect.png | Bin 2078 -> 2071 bytes 12 files changed, 93 insertions(+), 32 deletions(-) create mode 100644 app/src/main/java/com/gh/gamecenter/qa/editor/AnswerViewModel.kt create mode 100644 app/src/main/java/com/gh/gamecenter/qa/editor/ArticleViewModel.kt diff --git a/app/src/main/java/com/gh/common/util/UploadImageUtils.kt b/app/src/main/java/com/gh/common/util/UploadImageUtils.kt index da81eaf3b2..fad87628a3 100644 --- a/app/src/main/java/com/gh/common/util/UploadImageUtils.kt +++ b/app/src/main/java/com/gh/common/util/UploadImageUtils.kt @@ -104,7 +104,7 @@ object UploadImageUtils { @SuppressLint("CheckResult") fun compressAndUploadImageList(type: UploadType, imgs: List, compressGif: Boolean, listener: OnUploadImageListListener): Disposable? { var subscription: Disposable? = null - val postImageList = HashMap() + val postImageList = LinkedHashMap() Observable.create(ObservableOnSubscribe> { val compressList = compressImageList(imgs, compressGif) @@ -132,7 +132,7 @@ object UploadImageUtils { if (!string.isNullOrEmpty()) { val url = JSONObject(string).getString("url") if (!url.isNullOrEmpty()) { - val map = HashMap() + val map = LinkedHashMap() map[img.path] = url it.onNext(map) return @@ -209,7 +209,7 @@ object UploadImageUtils { } interface OnUploadImageListListener { - fun onSuccess(imageUrl: Map) // key:sourceImage value:compressImage + fun onSuccess(imageUrl: LinkedHashMap) // key:sourceImage value:compressImage fun onError() // 全部上传失败时回调 fun onProgress(total: Long, progress: Long) } diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index 21002b6bd3..ad56f30bd9 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -76,6 +76,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -612,7 +613,7 @@ public class SuggestionActivity extends BaseActivity implements OnRequestCallBac } @Override - public void onSuccess(@NotNull Map imageUrl) { + public void onSuccess(@NotNull LinkedHashMap imageUrl) { Utils.log("意见反馈:图片上传完成"); final JSONArray picArray = new JSONArray(); for (String s : imageUrl.keySet()) { diff --git a/app/src/main/java/com/gh/gamecenter/baselist/ListViewModel.java b/app/src/main/java/com/gh/gamecenter/baselist/ListViewModel.java index fbe8eca86d..bd4ae30545 100644 --- a/app/src/main/java/com/gh/gamecenter/baselist/ListViewModel.java +++ b/app/src/main/java/com/gh/gamecenter/baselist/ListViewModel.java @@ -71,6 +71,7 @@ public abstract class ListViewModel extends Ba listObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) + .map(this::filterData) .subscribe(new Response>() { @Override public void onResponse(List response) { @@ -108,6 +109,7 @@ public abstract class ListViewModel extends Ba } else if (listSingle != null) { listSingle.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) + .map(this::filterData) .subscribe(new BiResponse>() { @Override public void onFailure(@NotNull Exception exception) { @@ -205,4 +207,8 @@ public abstract class ListViewModel extends Ba public MutableLiveData getLoadExceptionLiveData() { return mLoadExceptionLiveData; } + + protected List filterData(@NonNull List list) { + return list; + } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditViewModel.kt index 4bef6f2050..bc6e666b94 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditViewModel.kt @@ -47,7 +47,7 @@ class AnswerEditViewModel(application: Application, val processDialog = MediatorLiveData() val postLiveData = MediatorLiveData>() - val postImageLiveData = MediatorLiveData>>() + val postImageLiveData = MediatorLiveData>>() val deleteDraftLiveDate = MediatorLiveData() val draftsLiveData = MediatorLiveData() val saveDraftsLiveData = MediatorLiveData() // 自动保存不会回调 @@ -138,7 +138,7 @@ class AnswerEditViewModel(application: Application, processDialog.postValue(WaitingDialogFragment.WaitingDialogData("图片上传中 $percent%", true)) } - override fun onSuccess(imageUrl: Map) { + override fun onSuccess(imageUrl: LinkedHashMap) { processDialog.postValue(WaitingDialogFragment.WaitingDialogData("上传中...", false)) postImageLiveData.postValue(Resource.success(imageUrl)) } 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 9fbd6095c7..8951d167e7 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 @@ -42,7 +42,7 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat val MIN_ARTICLE_TEXT_LENGTH = 6 val processDialog = MediatorLiveData() - val postImageLiveData = MediatorLiveData>>() + val postImageLiveData = MediatorLiveData>>() val postArticle = MediatorLiveData() val postArticleDrafts = MediatorLiveData() val articleDraftsContent = MediatorLiveData() @@ -169,20 +169,15 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat processDialog.postValue(WaitingDialogFragment.WaitingDialogData("图片上传中 $percent%", true)) } - override fun onSuccess(imageUrl: Map) { + override fun onSuccess(imageUrl: LinkedHashMap) { processDialog.postValue(WaitingDialogFragment.WaitingDialogData("上传中...", false)) postImageLiveData.postValue(Resource.success(imageUrl)) } - override fun onError() { // todo 失败提示?????? + override fun onError() { processDialog.postValue(WaitingDialogFragment.WaitingDialogData("上传中...", false)) Utils.toast(getApplication(), "图片上传失败,请检查网络") postImageLiveData.postValue(Resource.error(null)) -// if (e != null && e instanceof HttpException && ((HttpException) e).code() == 403) { -// toast("图片违规"); -// } else { -// toast("图片上传失败,请检查网络"); -// } } }) } diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt index 34c79df183..72bb344d72 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerAdapter.kt @@ -15,6 +15,16 @@ import com.gh.gamecenter.qa.questions.detail.AnswerViewHolder class AnswerAdapter(context: Context, private val mEntrance: String?) : ListAdapter(context) { + + override fun setListData(updateData: MutableList?) { + if (updateData != null) { + for (data in updateData) { + if (!data.active) updateData.remove(data) + } + } + super.setListData(updateData) + } + override fun getItemViewType(position: Int): Int { return if (position == itemCount - 1) ItemViewType.ITEM_FOOTER else ItemViewType.ITEM_BODY } diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerFragment.kt index 50a2cea288..53c9c4c491 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerFragment.kt @@ -1,15 +1,12 @@ package com.gh.gamecenter.qa.editor -import android.arch.lifecycle.ViewModelProviders import com.gh.gamecenter.baselist.ListFragment -import com.gh.gamecenter.baselist.NormalListViewModel import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.qa.entity.AnswerEntity import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp import io.reactivex.Observable -class AnswerFragment : ListFragment>() { +class AnswerFragment : ListFragment() { private var mAdapter: AnswerAdapter? = null @@ -22,8 +19,4 @@ class AnswerFragment : ListFragment { - val factory = NormalListViewModel.Factory(HaloApp.getInstance().application, this) - return ViewModelProviders.of(this, factory).get(NormalListViewModel::class.java) as NormalListViewModel - } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerViewModel.kt new file mode 100644 index 0000000000..62522cf4bf --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/AnswerViewModel.kt @@ -0,0 +1,31 @@ +package com.gh.gamecenter.qa.editor + +import android.app.Application +import com.gh.gamecenter.baselist.ListViewModel +import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.qa.entity.AnswerEntity +import com.gh.gamecenter.retrofit.RetrofitManager +import io.reactivex.Observable + +class AnswerViewModel(application: Application) : ListViewModel(application) { + override fun provideDataObservable(page: Int): Observable<*> { + return RetrofitManager.getInstance(getApplication()).api.getCollectionAnswer(UserManager.getInstance().userId, page) + } + + override fun mergeResultLiveData() { + mResultLiveData.addSource(mListLiveData) { mResultLiveData.postValue(it) } + } + + override fun filterData(list: MutableList): MutableList { + var i = 0 + while (i < list.size) { + val data = list[i] + if (!data.active) { + list.remove(data) + i-- + } + i++ + } + return list + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleFragment.kt index 4cab4cb788..c1c27f8973 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleFragment.kt @@ -1,15 +1,12 @@ package com.gh.gamecenter.qa.editor -import android.arch.lifecycle.ViewModelProviders import com.gh.gamecenter.baselist.ListFragment -import com.gh.gamecenter.baselist.NormalListViewModel import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.qa.entity.ArticleEntity import com.gh.gamecenter.retrofit.RetrofitManager -import com.halo.assistant.HaloApp import io.reactivex.Observable -class ArticleFragment : ListFragment>() { +class ArticleFragment : ListFragment() { private var mAdapter: ArticleAdapter? = null @@ -21,9 +18,4 @@ class ArticleFragment : ListFragment>? { return RetrofitManager.getInstance(context).api.getCollectionCommunityArticle(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 - } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleViewModel.kt new file mode 100644 index 0000000000..4777532da9 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/ArticleViewModel.kt @@ -0,0 +1,33 @@ +package com.gh.gamecenter.qa.editor + +import android.app.Application +import com.gh.gamecenter.baselist.ListViewModel +import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.qa.entity.ArticleEntity +import com.gh.gamecenter.retrofit.RetrofitManager +import io.reactivex.Observable + +class ArticleViewModel(application: Application) : ListViewModel(application) { + + override fun provideDataObservable(page: Int): Observable<*> { + return RetrofitManager.getInstance(getApplication()).api.getCollectionCommunityArticle(UserManager.getInstance().userId, page) + } + + override fun mergeResultLiveData() { + mResultLiveData.addSource(mListLiveData) { mResultLiveData.postValue(it) } + } + + override fun filterData(list: MutableList): MutableList { + var i = 0 + while (i < list.size) { + val data = list[i] + if (!data.active) { + list.remove(data) + i-- + } + i++ + } + return list + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/LinkFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/LinkFragment.kt index 991de9619c..324aad7260 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/LinkFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/LinkFragment.kt @@ -60,7 +60,7 @@ class LinkFragment : BaseFragment() { searchTv.text = "确定" if (activity is InsertAnswerWrapperActivity) { searchEt.hint = "请输入回答链接" - hint.text = "获取回答链接的方式:\n1.在回答详情页面,点击右上角【…】按钮 \n2.然后点击【分享】,再点击【复制链接】" + hint.text = "获取回答连接的方式:\n1.在回答详情页面,点击下方的\"分享\"按钮 \n2.在分享窗口内,再点击【复制链接】即可" } else { searchEt.hint = "请输入文章链接" hint.text = "获取文章链接的方式:\n1.在文章详情页面,点击右上角【…】按钮 \n2.然后点击【分享】,再点击【复制链接】" diff --git a/app/src/main/res/drawable-xhdpi/editor_link_unselect.png b/app/src/main/res/drawable-xhdpi/editor_link_unselect.png index 88fd489de6b607a37e0ec394d06c167787d66de1..a62773d40e113a09000893c80cdda6a0e616a9e6 100644 GIT binary patch delta 1350 zcmbOyFkN7S50iqWle43#tBa$Vn~Q~^p{u2(k+ZR-g^QDmv6G35rG@$A93~llFzskrrKZgxgksm$^J zms3xlXtWaMji1rD>r<RhyF-$c>FdSb5I#Z@Dm%=0CU z9bG>JF1xl`Dabsvg4s1BC2rZd_x+!(-yDBf`Rubz#kS&e`{aKd`u~3px83hI_2>SZ z>15>Rm)EP*eRu0*LByFO_$XP%xtr1vsw4_?Xw@3PsrJ<`W+neeWOfd z`m5*(nkVd@s9jo>nwj}|f|>Gr;jY(mVoLI}e!V|Y^Te<1bG^eVpTDtNb_I34j=JZx z&*0Kgh#tNBu}V)zT5XAefy?8|Gb0i8XxUyTUmd?|JGUYe~xi( z>z)_%A9HYTedLtJv?-YVs?%h?E&9(Z=7$CAE!a^Y+4APXyS)Wsm4cS@kMGUV-tATR zFsR*ThFt!e&vZ|PPOHpKGk9 zdTrf!wAFp1=JM+GH{(**@=3-lc>Y7$=wi(_rb}h6KfTo*W1`tQ?WE^yznAuUTHp!q zW&i9x1zy=-a_5L`^07?2v&(EW&zf$Z=ylz&IH;|MXUnDkTmMLIGUK!F*wHcB?`YZ+ zi~3LImyXNaPCm7H!otjT_OccKLuY*AP3egX7oL9qfknsU@(bc8te;&pyCL(R`)BxR zBZm7T0saa}lYFlnJ-O+W zR`B$BaiOz5|8v+^=b)b2q8Z=4dxu8<<0l)pU%Zm)TmRO#cFoe{&N3smloz7s44%4m zarggRmwfyx>)VPgWkvsDpIqiSe$Q>5>DpX-`Kb>LFHd>R{C-8ugr{=5Eq?W$&aLfx zRJ7#GlqVdErWS~Z>-jc*57{;)!&^Ep&25Q$;iE1+PiA zs<&U_<8Zp`8{>3?MLO@QgQwX}%(r<^6B#^N^mSp>{^xuCPUY2WbcvkfqxL`N)uzbO zytd+}?-^2}@1=ac$@COh&OMEJF7rSB@9y`O-{(!XwtsJV{`bD;YFDmZi#k%T5+HL_ zuuECQy}q#J5y#O$nS~ZkK$b>d0FVU|2eBY3zzPJr79%V8eAIr+iWM*V`~3a=rx%wv z7jsT(D{-4N@wkU(5ySkQzJ+qa>|x5UCoZwF3vSS9IZz(=zgp#=diXS(lw#XUEhjxB z|4lAgxTC)ROZ}#tt+k?(ohHsvGs+fL?bj~i{1jFB(_57_CQ5IUU#`5fQK9Cab>Ctq zI)t>{c|PHo+daP&x$2ldku5pFx1S&KxP0`q;GQ$#yPr9w<#%=KZ=O(_wVP$8nCC3# zd9kdj3dI_Fbv_P!E8mv|e{(!_U8Dd0>RXF7^z3>Z`ey&063|!Q<7#LAKqj@%sr6Az z8b{GJo>i?}#uw`DANU;dx=`=vPVeX^J(}-Z#ZP2B3FUcyY4021qdQN#Et#9S-}KVF zqZR8`3hK=k`99rq>ZRD}A5Sz#__ci6&m1>xb!@B1bGah_DPgh|~d ztDK{{BwsI`5j*vS=eapMjwjR~SGavrO6B;LxwfaKUAxnB|JUlfkrGZd$^FIsB3Jp! z<1dG%@~QL|cuYR^(Znd^Z5(5!Yuvv}jso9xn_OnE4a?Z;o1a~!n0)1%n#b*TU-jRb z7v8;UarW8DEPn1{pI*^fI@{9y*cMFxTJq&m`?9^#m#+PK$p4VLaM=or9vi23O7*^1 zZch)X=DK8fMsuF^yZX#B=0*D+ES)dYUbZd%AG`W5hgo-;zbQz*x^ykB_6c9n{Vk~s zbte?BJ*#SQ+;(EMW8ANommasvscT>FzWOaNcvW`Ts%<_z>8+OM-LLv>sPS8Lyn43I z>NS^kuepEyOwKvw->)@;cC9R%djF_uWyGwQZ}p$9=tTz4PVDL}&@pvwq+OBr~YV+UTy^s&!pE*&?oMBDaV1X5G`aj|pM%_K>2=?99sD90kG?LR8o8`R{7K}= Ta