From 68f3f1c955294e9e0cfc884ba65891422d090182 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Thu, 1 Dec 2016 13:49:06 +0800 Subject: [PATCH] version misaka.10032.2 --- app/build.gradle | 5 +- .../tlaster/openween/activity/UserActivity.kt | 52 ++++++++++++++- .../openween/activity/WeiboListActivity.kt | 10 ++- .../common/helpers/WeiboCardHelper.kt | 38 ++++++++++- .../openween/core/api/favorites/Favorites.kt | 2 +- .../openween/fragment/user/Favorite.kt | 58 +++++++++++++++++ .../main/res/drawable/ic_star_gray_24dp.xml | 9 +++ .../main/res/drawable/ic_star_yellow_24dp.xml | 9 +++ .../res/drawable/ic_thumb_up_gray_24dp.xml | 9 +++ .../res/drawable/ic_thumb_up_red_24dp.xml | 9 +++ app/src/main/res/layout/activity_user.xml | 3 + app/src/main/res/layout/user_favor_card.xml | 64 +++++++++++++++++++ app/src/main/res/layout/user_like_card.xml | 43 +++++++++++++ app/src/main/res/layout/user_stats_card.xml | 3 +- app/src/main/res/layout/weibo_action.xml | 20 ++++-- app/src/main/res/values/strings.xml | 3 + 16 files changed, 319 insertions(+), 18 deletions(-) create mode 100644 app/src/main/kotlin/moe/tlaster/openween/fragment/user/Favorite.kt create mode 100644 app/src/main/res/drawable/ic_star_gray_24dp.xml create mode 100644 app/src/main/res/drawable/ic_star_yellow_24dp.xml create mode 100644 app/src/main/res/drawable/ic_thumb_up_gray_24dp.xml create mode 100644 app/src/main/res/drawable/ic_thumb_up_red_24dp.xml create mode 100644 app/src/main/res/layout/user_favor_card.xml create mode 100644 app/src/main/res/layout/user_like_card.xml diff --git a/app/build.gradle b/app/build.gradle index db045d9..926c4c5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "moe.tlaster.openween" minSdkVersion 21 targetSdkVersion 25 - versionCode 3 - versionName "misaka.10032.1" + versionCode 4 + versionName "misaka.10032.2" resValue "string", "tray__authority", "${applicationId}.tray" manifestPlaceholders = [HOCKEYAPP_APP_ID: properties.getProperty("HOCKEYAPP_APP_ID")] @@ -64,6 +64,7 @@ dependencies { compile 'me.himanshusoni.chatmessageview:chat-message-view:1.0.3' compile 'com.github.piasy:BigImageViewer:1.2.2' compile 'com.github.piasy:GlideImageLoader:1.2.2' + compile 'com.github.varunest:sparkbutton:1.0.2' testCompile 'junit:junit:4.12' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" diff --git a/app/src/main/kotlin/moe/tlaster/openween/activity/UserActivity.kt b/app/src/main/kotlin/moe/tlaster/openween/activity/UserActivity.kt index 1e4f460..50589fb 100644 --- a/app/src/main/kotlin/moe/tlaster/openween/activity/UserActivity.kt +++ b/app/src/main/kotlin/moe/tlaster/openween/activity/UserActivity.kt @@ -45,9 +45,11 @@ import moe.tlaster.openween.common.bindView import moe.tlaster.openween.common.helpers.JsonCallback import moe.tlaster.openween.common.helpers.WeiboCardHelper import moe.tlaster.openween.core.api.blocks.Blocks +import moe.tlaster.openween.core.api.favorites.Favorites import moe.tlaster.openween.core.api.friendships.Friends import moe.tlaster.openween.core.api.statuses.UserTimeline import moe.tlaster.openween.core.api.user.User +import moe.tlaster.openween.core.model.favor.FavorListModel import moe.tlaster.openween.core.model.status.MessageListModel import moe.tlaster.openween.core.model.status.MessageModel import moe.tlaster.openween.core.model.user.UserListModel @@ -63,6 +65,8 @@ class UserActivity : SlidingActivity() { private var mCircleImageView: CircleImageView? = null val mStatsCard: View by bindView(R.id.user_stats_card) val mWeiboCard: View by bindView(R.id.user_weibo_card) + val mLikeCard: View by bindView(R.id.user_like_card) + val mFavorCard: View by bindView(R.id.user_favor_card) val mProgressBar: ProgressBar by bindView(R.id.user_progressbar) val mLinearLayout: LinearLayout by bindView(R.id.user_information) private var mMenu: Menu? = null @@ -79,8 +83,10 @@ class UserActivity : SlidingActivity() { .sizeDp(24)) setHeaderContent(headerView) val userName = intent.extras.getString(getString(R.string.user_page_username_name)) - mWeiboCard.findViewById(R.id.user_weibo_all).setOnClickListener { this.goAllWeiboList(it) } - mWeiboCard.findViewById(R.id.user_weibo_all_bottom).setOnClickListener{ this.goAllWeiboList(it) } + mWeiboCard.findViewById(R.id.user_weibo_all).setOnClickListener { this.goAllWeiboList(getString(R.string.weibo_list_type_status_name)) } + mWeiboCard.findViewById(R.id.user_weibo_all_bottom).setOnClickListener{ this.goAllWeiboList(getString(R.string.weibo_list_type_status_name)) } + mFavorCard.findViewById(R.id.user_favor_weibo_all).setOnClickListener { goAllWeiboList(getString(R.string.weibo_list_type_favor_name)) } + mFavorCard.findViewById(R.id.user_favor_weibo_all_bottom).setOnClickListener { goAllWeiboList(getString(R.string.weibo_list_type_favor_name)) } User.getUser(userName, object : JsonCallback() { override fun onError(call: Call, e: Exception, id: Int) { Toast.makeText(this@UserActivity, "载入失败", Toast.LENGTH_SHORT).show() @@ -96,11 +102,41 @@ class UserActivity : SlidingActivity() { initMenu() initUser() initWeibo() + if (mUser?.id!! == StaticResource.uid) { + initFavor() + } mProgressBar.visibility = View.GONE } }) } + private fun initFavor() { + Favorites.getFavorList(count = 3, callback = object : JsonCallback() { + override fun onResponse(response: FavorListModel, id: Int) { + if (isDestroyed) return + if (response.favorites!!.isNotEmpty()){ + WeiboCardHelper.setData(mFavorCard.findViewById(R.id.user_favor_weibo_1), response.favorites!![0].status!!, this@UserActivity, true) + TransitionManager.beginDelayedTransition(mLinearLayout, Slide(Gravity.BOTTOM)) + mFavorCard.visibility = View.VISIBLE + } else + mFavorCard.visibility = View.GONE + if (response.favorites!!.size > 1) + WeiboCardHelper.setData(mFavorCard.findViewById(R.id.user_favor_weibo_2), response.favorites!![1].status!!, this@UserActivity, true) + else + mFavorCard.findViewById(R.id.user_favor_weibo_2).visibility = View.GONE + if (response.favorites!!.size > 2) + WeiboCardHelper.setData(mFavorCard.findViewById(R.id.user_favor_weibo_3), response.favorites!![2].status!!, this@UserActivity, true) + else + mFavorCard.findViewById(R.id.user_favor_weibo_3).visibility = View.GONE + } + + override fun onError(call: Call?, e: Exception?, id: Int) { + + } + + }) + } + private fun initMenu() { if (mUser!!.id === StaticResource.uid) { mMenu!!.clear() @@ -115,9 +151,10 @@ class UserActivity : SlidingActivity() { } } - private fun goAllWeiboList(view: View) { + private fun goAllWeiboList(type: String) { val intent = Intent(this, WeiboListActivity::class.java) intent.putExtra(getString(R.string.weibo_list_user_id_name), mUser!!.id) + intent.putExtra(getString(R.string.weibo_list_type_name), type) startActivity(intent) } @@ -130,6 +167,15 @@ class UserActivity : SlidingActivity() { override fun onResponse(response: MessageListModel, id: Int) { if (isDestroyed) return if (response.statuses!!.isNotEmpty()) { + val like = response.statuses?.filter { it.user?.id!! != mUser?.id!! }?.firstOrNull() + if (like != null) { + TransitionManager.beginDelayedTransition(mLinearLayout, Slide(Gravity.BOTTOM)) + WeiboCardHelper.setData(mLikeCard.findViewById(R.id.user_like_weibo_1), like, this@UserActivity) + mLikeCard.visibility = View.VISIBLE + response.statuses = response.statuses!! - like + } + } + if (response.statuses!!.isNotEmpty()){ WeiboCardHelper.setData(mWeiboCard.findViewById(R.id.user_weibo_1), response.statuses!![0], this@UserActivity, true) TransitionManager.beginDelayedTransition(mLinearLayout, Slide(Gravity.BOTTOM)) mWeiboCard.visibility = View.VISIBLE diff --git a/app/src/main/kotlin/moe/tlaster/openween/activity/WeiboListActivity.kt b/app/src/main/kotlin/moe/tlaster/openween/activity/WeiboListActivity.kt index b385a67..5371466 100644 --- a/app/src/main/kotlin/moe/tlaster/openween/activity/WeiboListActivity.kt +++ b/app/src/main/kotlin/moe/tlaster/openween/activity/WeiboListActivity.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.widget.FrameLayout import moe.tlaster.openween.R +import moe.tlaster.openween.fragment.user.Favorite import moe.tlaster.openween.fragment.user.Timeline class WeiboListActivity : AppCompatActivity() { @@ -13,8 +14,13 @@ class WeiboListActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_weibo_list) val fragmentTransaction = supportFragmentManager.beginTransaction() - val timeline = Timeline.create(intent.extras.getLong(getString(R.string.weibo_list_user_id_name))) - fragmentTransaction.add(R.id.weibo_list_fragment_container, timeline) + if (intent.extras.getString(getString(R.string.weibo_list_type_name)) == getString(R.string.weibo_list_type_status_name)) { + val timeline = Timeline.create(intent.extras.getLong(getString(R.string.weibo_list_user_id_name))) + fragmentTransaction.add(R.id.weibo_list_fragment_container, timeline) + } else if (intent.extras.getString(getString(R.string.weibo_list_type_name)) == getString(R.string.weibo_list_type_favor_name)) { + val favorite = Favorite.create(intent.extras.getLong(getString(R.string.weibo_list_user_id_name))) + fragmentTransaction.add(R.id.weibo_list_fragment_container, favorite) + } fragmentTransaction.commit() } } diff --git a/app/src/main/kotlin/moe/tlaster/openween/common/helpers/WeiboCardHelper.kt b/app/src/main/kotlin/moe/tlaster/openween/common/helpers/WeiboCardHelper.kt index 3f71373..72d68bb 100644 --- a/app/src/main/kotlin/moe/tlaster/openween/common/helpers/WeiboCardHelper.kt +++ b/app/src/main/kotlin/moe/tlaster/openween/common/helpers/WeiboCardHelper.kt @@ -12,6 +12,7 @@ import android.widget.TextView import com.bumptech.glide.Glide import com.jaeger.ninegridimageview.NineGridImageView +import com.varunest.sparkbutton.SparkButton import java.util.Arrays import java.util.HashSet @@ -22,10 +23,14 @@ import moe.tlaster.openween.activity.UserActivity import moe.tlaster.openween.adapter.WeiboImageAdapter import moe.tlaster.openween.common.controls.WeiboTextBlock import moe.tlaster.openween.common.entities.PostWeiboType +import moe.tlaster.openween.core.api.attitudes.Attitudes +import moe.tlaster.openween.core.api.favorites.Favorites import moe.tlaster.openween.core.model.BaseModel import moe.tlaster.openween.core.model.attitude.AttitudeModel import moe.tlaster.openween.core.model.comment.CommentModel +import moe.tlaster.openween.core.model.favor.FavorModel import moe.tlaster.openween.core.model.status.MessageModel +import okhttp3.Call /** * Created by Asahi on 2016/10/27. @@ -68,12 +73,40 @@ internal object WeiboCardHelper { i.putExtra(context.getString(R.string.post_weibo_id_name), baseModel.id) context.startActivity(i) } + (weiboAction.findViewById(R.id.favor_spark_button) as SparkButton).setChecked(baseModel.isFavorited) + (weiboAction.findViewById(R.id.like_spark_button) as SparkButton).setEventListener { imageView, b -> + if (b) { + Attitudes.like(id = baseModel.id, callback = object : JsonCallback() { + override fun onResponse(response: String?, id: Int) { } + override fun onError(call: Call?, e: Exception?, id: Int) { } + }) + } else { + Attitudes.unLike(id = baseModel.id, callback = object : JsonCallback() { + override fun onResponse(response: String?, id: Int) { } + override fun onError(call: Call?, e: Exception?, id: Int) { } + }) + } + } + (weiboAction.findViewById(R.id.favor_spark_button) as SparkButton).setEventListener { imageView, b -> + if (b) { + Favorites.addFavor(baseModel.id, callback = object : JsonCallback() { + override fun onResponse(response: FavorModel?, id: Int) { } + override fun onError(call: Call?, e: Exception?, id: Int) { } + }) + } else { + Favorites.removeFavor(baseModel.id, callback = object : JsonCallback() { + override fun onResponse(response: FavorModel?, id: Int) { } + override fun onError(call: Call?, e: Exception?, id: Int) { } + }) + } + } } else if (baseModel is CommentModel) { baseView.findViewById(R.id.comment).visibility = View.VISIBLE baseView.findViewById(R.id.weibo_action).visibility = View.GONE if (isEnableRepost) { weiboRepostLinear.visibility = View.VISIBLE - setWeiboContent(baseView.findViewById(R.id.weibo_repost_container), baseModel.status as MessageModel, false, context) + if (baseModel.status != null) + setWeiboContent(baseView.findViewById(R.id.weibo_repost_container), baseModel.status!!, false, context) } else { weiboRepostLinear.visibility = View.GONE } @@ -83,7 +116,8 @@ internal object WeiboCardHelper { baseView.findViewById(R.id.weibo_action).visibility = View.GONE if (isEnableRepost) { weiboRepostLinear.visibility = View.VISIBLE - setWeiboContent(baseView.findViewById(R.id.weibo_repost_container), baseModel.status as MessageModel, enableImage = false, context = context) + if (baseModel.status != null) + setWeiboContent(baseView.findViewById(R.id.weibo_repost_container), baseModel.status!!, enableImage = false, context = context) } else { weiboRepostLinear.visibility = View.GONE } diff --git a/app/src/main/kotlin/moe/tlaster/openween/core/api/favorites/Favorites.kt b/app/src/main/kotlin/moe/tlaster/openween/core/api/favorites/Favorites.kt index 9bd5deb..f907354 100644 --- a/app/src/main/kotlin/moe/tlaster/openween/core/api/favorites/Favorites.kt +++ b/app/src/main/kotlin/moe/tlaster/openween/core/api/favorites/Favorites.kt @@ -14,7 +14,7 @@ import moe.tlaster.openween.common.helpers.JsonCallback * Created by Tlaster on 2016/9/6. */ object Favorites { - fun getFavorList(count: Int, page: Int, callback: JsonCallback) { + fun getFavorList(count: Int = 20, page: Int = 1, callback: JsonCallback) { val param = HashMap() param.put("count", count.toString()) param.put("page", page.toString()) diff --git a/app/src/main/kotlin/moe/tlaster/openween/fragment/user/Favorite.kt b/app/src/main/kotlin/moe/tlaster/openween/fragment/user/Favorite.kt new file mode 100644 index 0000000..de18f25 --- /dev/null +++ b/app/src/main/kotlin/moe/tlaster/openween/fragment/user/Favorite.kt @@ -0,0 +1,58 @@ +package moe.tlaster.openween.fragment.user + +import android.os.Bundle +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.mikepenz.google_material_typeface_library.GoogleMaterial +import com.mikepenz.iconics.typeface.IIcon +import moe.tlaster.openween.adapter.BaseModelAdapter +import moe.tlaster.openween.core.api.favorites.Favorites +import moe.tlaster.openween.core.model.favor.FavorListModel +import moe.tlaster.openween.core.model.favor.FavorModel +import moe.tlaster.openween.core.model.status.MessageModel +import moe.tlaster.openween.fragment.WeiboListBase + +/** + * Created by Asahi on 16/12/01. + */ +class Favorite(override val icon: IIcon = GoogleMaterial.Icon.gmd_star) : WeiboListBase() { + + private var mID: Long = 0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + mID = arguments.getLong("id") + } + + + override fun initAdapter(): BaseQuickAdapter { + return BaseModelAdapter() + } + + override fun loadMoreOverride(callback: Callback>) { + Favorites.getFavorList(mLoadCount, mPage++, object : WeiboListCallback() { + override fun onResponse(response: FavorListModel, id: Int) { + callback.onResponse(response.favorites?.map { it.status!! }!!, response.totalNumber) + } + }) + } + + override fun refreshOverride(callback: Callback>) { + Favorites.getFavorList(mLoadCount, mPage++, object : WeiboListCallback() { + override fun onResponse(response: FavorListModel, id: Int) { + callback.onResponse(response.favorites?.map { it.status!! }!!, response.totalNumber) + } + }) + } + + companion object { + + fun create(id: Long): Favorite { + val favorite = Favorite() + val bundle = Bundle() + bundle.putLong("id", id) + favorite.arguments = bundle + return favorite + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_star_gray_24dp.xml b/app/src/main/res/drawable/ic_star_gray_24dp.xml new file mode 100644 index 0000000..bfedb49 --- /dev/null +++ b/app/src/main/res/drawable/ic_star_gray_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_star_yellow_24dp.xml b/app/src/main/res/drawable/ic_star_yellow_24dp.xml new file mode 100644 index 0000000..1a94c26 --- /dev/null +++ b/app/src/main/res/drawable/ic_star_yellow_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_thumb_up_gray_24dp.xml b/app/src/main/res/drawable/ic_thumb_up_gray_24dp.xml new file mode 100644 index 0000000..8632299 --- /dev/null +++ b/app/src/main/res/drawable/ic_thumb_up_gray_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_thumb_up_red_24dp.xml b/app/src/main/res/drawable/ic_thumb_up_red_24dp.xml new file mode 100644 index 0000000..bddfc97 --- /dev/null +++ b/app/src/main/res/drawable/ic_thumb_up_red_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 9766a10..2af304a 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -14,12 +14,15 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + \ No newline at end of file diff --git a/app/src/main/res/layout/user_favor_card.xml b/app/src/main/res/layout/user_favor_card.xml new file mode 100644 index 0000000..c2dd48f --- /dev/null +++ b/app/src/main/res/layout/user_favor_card.xml @@ -0,0 +1,64 @@ + + + + + + +