supported fav/unfav, reblog/unreblog, delete status for mastodon
improved mastodon visibility in timeline
This commit is contained in:
parent
f97c820ec8
commit
2987651e23
|
@ -25,6 +25,8 @@ import org.mariotaku.microblog.library.mastodon.model.Context;
|
|||
import org.mariotaku.microblog.library.mastodon.model.LinkHeaderList;
|
||||
import org.mariotaku.microblog.library.mastodon.model.Status;
|
||||
import org.mariotaku.microblog.library.mastodon.model.StatusUpdate;
|
||||
import org.mariotaku.microblog.library.twitter.model.ResponseCode;
|
||||
import org.mariotaku.restfu.annotation.method.DELETE;
|
||||
import org.mariotaku.restfu.annotation.method.GET;
|
||||
import org.mariotaku.restfu.annotation.method.POST;
|
||||
import org.mariotaku.restfu.annotation.param.Param;
|
||||
|
@ -52,4 +54,19 @@ public interface StatusesResources {
|
|||
|
||||
@POST("/v1/statuses")
|
||||
Status postStatus(@Param StatusUpdate update) throws MicroBlogException;
|
||||
|
||||
@DELETE("/v1/statuses/{id}")
|
||||
ResponseCode deleteStatus(@Path("id") String id) throws MicroBlogException;
|
||||
|
||||
@POST("/v1/statuses/{id}/reblog")
|
||||
Status reblogStatus(@Path("id") String id) throws MicroBlogException;
|
||||
|
||||
@POST("/v1/statuses/{id}/unreblog")
|
||||
Status unreblogStatus(@Path("id") String id) throws MicroBlogException;
|
||||
|
||||
@POST("/v1/statuses/{id}/favourite")
|
||||
Status favouriteStatus(@Path("id") String id) throws MicroBlogException;
|
||||
|
||||
@POST("/v1/statuses/{id}/unfavourite")
|
||||
Status unfavouriteStatus(@Path("id") String id) throws MicroBlogException;
|
||||
}
|
||||
|
|
|
@ -890,9 +890,10 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
}
|
||||
|
||||
private fun resetButtonsStates() {
|
||||
// Should be called first
|
||||
updateAccountSelectionState()
|
||||
updateLocationState()
|
||||
updateVisibilityState()
|
||||
updateAccountSelectionState()
|
||||
updateUpdateStatusIcon()
|
||||
updateMediaState()
|
||||
setMenu()
|
||||
|
@ -1007,6 +1008,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
val selectionEnd = editText.length()
|
||||
editText.setSelection(selectionStart, selectionEnd)
|
||||
}
|
||||
statusVisibility = intent.getStringExtra(EXTRA_VISIBILITY) ?: status.extras?.visibility
|
||||
accountsAdapter.selectedAccountKeys = arrayOf(status.account_key)
|
||||
showReplyLabelAndHint(status)
|
||||
return true
|
||||
|
@ -1578,6 +1580,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
}
|
||||
|
||||
private fun updateVisibilityState() {
|
||||
visibilityLabel.visibility = if (hasStatusVisibility) View.VISIBLE else View.GONE
|
||||
when (statusVisibility) {
|
||||
StatusVisibility.UNLISTED -> {
|
||||
visibilityLabel.setText(R.string.label_status_visibility_unlisted)
|
||||
|
@ -1600,6 +1603,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
R.drawable.ic_action_web, 0, 0, 0)
|
||||
}
|
||||
}
|
||||
visibilityLabel.refreshDrawableState()
|
||||
}
|
||||
|
||||
private fun getTwitterReplyTextAndMentions(text: String = editText.text?.toString().orEmpty(),
|
||||
|
@ -1952,6 +1956,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
val account = accounts!![position]
|
||||
selection.put(account.key, true != selection[account.key])
|
||||
activity.updateAccountSelectionState()
|
||||
activity.updateVisibilityState()
|
||||
activity.setMenu()
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
@ -1962,6 +1967,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
|||
selection.clear()
|
||||
selection.put(account.key, true != selection[account.key])
|
||||
activity.updateAccountSelectionState()
|
||||
activity.updateVisibilityState()
|
||||
activity.setMenu()
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
|
|
@ -6,9 +6,11 @@ import android.widget.Toast
|
|||
import org.apache.commons.collections.primitives.ArrayIntList
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.mastodon.Mastodon
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.extension.getErrorMessage
|
||||
import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.api.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
|
@ -18,8 +20,7 @@ import org.mariotaku.twidere.model.UserKey
|
|||
import org.mariotaku.twidere.model.draft.StatusObjectActionExtras
|
||||
import org.mariotaku.twidere.model.event.FavoriteTaskEvent
|
||||
import org.mariotaku.twidere.model.event.StatusListChangedEvent
|
||||
import org.mariotaku.twidere.model.util.ParcelableStatusUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper.Companion.calculateHashCode
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
|
@ -48,6 +49,10 @@ class CreateFavoriteTask(context: Context, accountKey: UserKey, private val stat
|
|||
val microBlog = account.newMicroBlogInstance(context, cls = MicroBlog::class.java)
|
||||
microBlog.createFanfouFavorite(statusId).toParcelable(account)
|
||||
}
|
||||
AccountType.MASTODON -> {
|
||||
val mastodon = account.newMicroBlogInstance(context, cls = Mastodon::class.java)
|
||||
mastodon.favouriteStatus(statusId).toParcelable(account)
|
||||
}
|
||||
else -> {
|
||||
val microBlog = account.newMicroBlogInstance(context, cls = MicroBlog::class.java)
|
||||
microBlog.createFavorite(statusId).toParcelable(account)
|
||||
|
@ -55,15 +60,15 @@ class CreateFavoriteTask(context: Context, accountKey: UserKey, private val stat
|
|||
}
|
||||
Utils.setLastSeen(context, result.mentions, System.currentTimeMillis())
|
||||
val values = ContentValues()
|
||||
values.put(TwidereDataStore.Statuses.IS_FAVORITE, true)
|
||||
values.put(TwidereDataStore.Statuses.REPLY_COUNT, result.reply_count)
|
||||
values.put(TwidereDataStore.Statuses.RETWEET_COUNT, result.retweet_count)
|
||||
values.put(TwidereDataStore.Statuses.FAVORITE_COUNT, result.favorite_count)
|
||||
values.put(Statuses.IS_FAVORITE, true)
|
||||
values.put(Statuses.REPLY_COUNT, result.reply_count)
|
||||
values.put(Statuses.RETWEET_COUNT, result.retweet_count)
|
||||
values.put(Statuses.FAVORITE_COUNT, result.favorite_count)
|
||||
val statusWhere = Expression.and(
|
||||
Expression.equalsArgs(TwidereDataStore.Statuses.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(Statuses.ACCOUNT_KEY),
|
||||
Expression.or(
|
||||
Expression.equalsArgs(TwidereDataStore.Statuses.STATUS_ID),
|
||||
Expression.equalsArgs(TwidereDataStore.Statuses.RETWEET_ID)
|
||||
Expression.equalsArgs(Statuses.STATUS_ID),
|
||||
Expression.equalsArgs(Statuses.RETWEET_ID)
|
||||
)
|
||||
).sql
|
||||
val statusWhereArgs = arrayOf(account.key.toString(), statusId, statusId)
|
||||
|
|
|
@ -6,10 +6,12 @@ import android.widget.Toast
|
|||
import org.apache.commons.collections.primitives.ArrayIntList
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.mastodon.Mastodon
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.extension.getErrorMessage
|
||||
import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.api.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
|
@ -17,7 +19,7 @@ import org.mariotaku.twidere.model.ParcelableStatus
|
|||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.event.FavoriteTaskEvent
|
||||
import org.mariotaku.twidere.model.event.StatusListChangedEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper.Companion.calculateHashCode
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
|
@ -33,43 +35,48 @@ class DestroyFavoriteTask(
|
|||
) : AbsAccountRequestTask<Any?, ParcelableStatus, Any?>(context, accountKey) {
|
||||
override fun onExecute(account: AccountDetails, params: Any?): ParcelableStatus {
|
||||
val resolver = context.contentResolver
|
||||
val microBlog = account.newMicroBlogInstance(context, cls = MicroBlog::class.java)
|
||||
val result: ParcelableStatus
|
||||
when (account.type) {
|
||||
AccountType.FANFOU -> {
|
||||
result = microBlog.destroyFanfouFavorite(statusId).toParcelable(account)
|
||||
}
|
||||
else -> {
|
||||
result = microBlog.destroyFavorite(statusId).toParcelable(account)
|
||||
}
|
||||
val result = when (account.type) {
|
||||
AccountType.FANFOU -> {
|
||||
val microBlog = account.newMicroBlogInstance(context, cls = MicroBlog::class.java)
|
||||
microBlog.destroyFanfouFavorite(statusId).toParcelable(account)
|
||||
}
|
||||
val values = ContentValues()
|
||||
values.put(TwidereDataStore.Statuses.IS_FAVORITE, false)
|
||||
values.put(TwidereDataStore.Statuses.FAVORITE_COUNT, result.favorite_count - 1)
|
||||
values.put(TwidereDataStore.Statuses.RETWEET_COUNT, result.retweet_count)
|
||||
values.put(TwidereDataStore.Statuses.REPLY_COUNT, result.reply_count)
|
||||
AccountType.MASTODON -> {
|
||||
val mastodon = account.newMicroBlogInstance(context, cls = Mastodon::class.java)
|
||||
mastodon.unfavouriteStatus(statusId).toParcelable(account)
|
||||
}
|
||||
else -> {
|
||||
val microBlog = account.newMicroBlogInstance(context, cls = MicroBlog::class.java)
|
||||
microBlog.destroyFavorite(statusId).toParcelable(account)
|
||||
}
|
||||
}
|
||||
|
||||
val where = Expression.and(Expression.equalsArgs(TwidereDataStore.Statuses.ACCOUNT_KEY),
|
||||
Expression.or(Expression.equalsArgs(TwidereDataStore.Statuses.STATUS_ID),
|
||||
Expression.equalsArgs(TwidereDataStore.Statuses.RETWEET_ID)))
|
||||
val whereArgs = arrayOf(accountKey.toString(), statusId, statusId)
|
||||
for (uri in DataStoreUtils.STATUSES_URIS) {
|
||||
resolver.update(uri, values, where.sql, whereArgs)
|
||||
}
|
||||
val values = ContentValues()
|
||||
values.put(Statuses.IS_FAVORITE, false)
|
||||
values.put(Statuses.FAVORITE_COUNT, result.favorite_count - 1)
|
||||
values.put(Statuses.RETWEET_COUNT, result.retweet_count)
|
||||
values.put(Statuses.REPLY_COUNT, result.reply_count)
|
||||
|
||||
val where = Expression.and(Expression.equalsArgs(Statuses.ACCOUNT_KEY),
|
||||
Expression.or(Expression.equalsArgs(Statuses.STATUS_ID),
|
||||
Expression.equalsArgs(Statuses.RETWEET_ID)))
|
||||
val whereArgs = arrayOf(accountKey.toString(), statusId, statusId)
|
||||
for (uri in DataStoreUtils.STATUSES_URIS) {
|
||||
resolver.update(uri, values, where.sql, whereArgs)
|
||||
}
|
||||
|
||||
resolver.updateActivityStatus(account.key, statusId) { activity ->
|
||||
val statusesMatrix = arrayOf(activity.target_statuses, activity.target_object_statuses)
|
||||
for (statusesArray in statusesMatrix) {
|
||||
if (statusesArray == null) continue
|
||||
for (status in statusesArray) {
|
||||
if (result.id != status.id) continue
|
||||
status.is_favorite = false
|
||||
status.reply_count = result.reply_count
|
||||
status.retweet_count = result.retweet_count
|
||||
status.favorite_count = result.favorite_count - 1
|
||||
}
|
||||
val statusesMatrix = arrayOf(activity.target_statuses, activity.target_object_statuses)
|
||||
for (statusesArray in statusesMatrix) {
|
||||
if (statusesArray == null) continue
|
||||
for (status in statusesArray) {
|
||||
if (result.id != status.id) continue
|
||||
status.is_favorite = false
|
||||
status.reply_count = result.reply_count
|
||||
status.retweet_count = result.retweet_count
|
||||
status.favorite_count = result.favorite_count - 1
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
|
||||
}
|
||||
|
|
|
@ -4,9 +4,12 @@ import android.content.Context
|
|||
import android.widget.Toast
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.mastodon.Mastodon
|
||||
import org.mariotaku.microblog.library.twitter.model.ErrorInfo
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.extension.getErrorMessage
|
||||
import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.api.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
|
@ -28,8 +31,18 @@ class DestroyStatusTask(
|
|||
) : AbsAccountRequestTask<Any?, ParcelableStatus, Any?>(context, accountKey) {
|
||||
|
||||
override fun onExecute(account: AccountDetails, params: Any?): ParcelableStatus {
|
||||
val microBlog = account.newMicroBlogInstance(context, cls = MicroBlog::class.java)
|
||||
return microBlog.destroyStatus(statusId).toParcelable(account)
|
||||
when (account.type) {
|
||||
AccountType.MASTODON -> {
|
||||
val mastodon = account.newMicroBlogInstance(context, cls = Mastodon::class.java)
|
||||
val result = mastodon.favouriteStatus(statusId)
|
||||
mastodon.deleteStatus(statusId)
|
||||
return result.toParcelable(account)
|
||||
}
|
||||
else -> {
|
||||
val microBlog = account.newMicroBlogInstance(context, cls = MicroBlog::class.java)
|
||||
return microBlog.destroyStatus(statusId).toParcelable(account)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCleanup(account: AccountDetails, params: Any?, result: ParcelableStatus?, exception: MicroBlogException?) {
|
||||
|
|
|
@ -6,8 +6,11 @@ import android.widget.Toast
|
|||
import org.apache.commons.collections.primitives.ArrayIntList
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.mastodon.Mastodon
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.extension.getErrorMessage
|
||||
import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.api.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
|
@ -18,7 +21,7 @@ import org.mariotaku.twidere.model.draft.StatusObjectActionExtras
|
|||
import org.mariotaku.twidere.model.event.StatusListChangedEvent
|
||||
import org.mariotaku.twidere.model.event.StatusRetweetedEvent
|
||||
import org.mariotaku.twidere.model.util.ParcelableStatusUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
|
@ -47,19 +50,27 @@ class RetweetStatusTask(
|
|||
}
|
||||
microBlogWrapper.addSendingDraftId(draftId)
|
||||
val resolver = context.contentResolver
|
||||
val microBlog = account.newMicroBlogInstance(context, MicroBlog::class.java)
|
||||
try {
|
||||
val result = microBlog.retweetStatus(statusId).toParcelable(account)
|
||||
val result = when (account.type) {
|
||||
AccountType.MASTODON -> {
|
||||
val mastodon = account.newMicroBlogInstance(context, cls = Mastodon::class.java)
|
||||
mastodon.reblogStatus(statusId).toParcelable(account)
|
||||
}
|
||||
else -> {
|
||||
val microBlog = account.newMicroBlogInstance(context, cls = MicroBlog::class.java)
|
||||
microBlog.retweetStatus(statusId).toParcelable(account)
|
||||
}
|
||||
}
|
||||
ParcelableStatusUtils.updateExtraInformation(result, account)
|
||||
Utils.setLastSeen(context, result.mentions, System.currentTimeMillis())
|
||||
val values = ContentValues()
|
||||
values.put(TwidereDataStore.Statuses.MY_RETWEET_ID, result.id)
|
||||
values.put(TwidereDataStore.Statuses.REPLY_COUNT, result.reply_count)
|
||||
values.put(TwidereDataStore.Statuses.RETWEET_COUNT, result.retweet_count)
|
||||
values.put(TwidereDataStore.Statuses.FAVORITE_COUNT, result.favorite_count)
|
||||
values.put(Statuses.MY_RETWEET_ID, result.id)
|
||||
values.put(Statuses.REPLY_COUNT, result.reply_count)
|
||||
values.put(Statuses.RETWEET_COUNT, result.retweet_count)
|
||||
values.put(Statuses.FAVORITE_COUNT, result.favorite_count)
|
||||
val where = Expression.or(
|
||||
Expression.equalsArgs(TwidereDataStore.Statuses.STATUS_ID),
|
||||
Expression.equalsArgs(TwidereDataStore.Statuses.RETWEET_ID)
|
||||
Expression.equalsArgs(Statuses.STATUS_ID),
|
||||
Expression.equalsArgs(Statuses.RETWEET_ID)
|
||||
)
|
||||
val whereArgs = arrayOf(statusId, statusId)
|
||||
for (uri in DataStoreUtils.STATUSES_URIS) {
|
||||
|
|
|
@ -7,6 +7,7 @@ import android.support.annotation.ColorInt
|
|||
import android.support.v4.view.ViewCompat
|
||||
import android.support.v7.widget.AppCompatImageButton
|
||||
import android.util.AttributeSet
|
||||
import android.widget.ImageView
|
||||
import org.mariotaku.chameleon.Chameleon
|
||||
import org.mariotaku.chameleon.ChameleonView
|
||||
import org.mariotaku.twidere.R
|
||||
|
@ -41,7 +42,7 @@ class IconActionButton(
|
|||
@ColorInt
|
||||
get() {
|
||||
if (field != 0) return field
|
||||
return defaultColor
|
||||
return defaultColorStateList?.getColorForState(activatedState, defaultColor) ?: defaultColor
|
||||
}
|
||||
set(@ColorInt activatedColor) {
|
||||
field = activatedColor
|
||||
|
@ -52,17 +53,20 @@ class IconActionButton(
|
|||
@ColorInt
|
||||
get() {
|
||||
if (field != 0) return field
|
||||
return defaultColor
|
||||
return defaultColorStateList?.getColorForState(disabledState, defaultColor) ?: defaultColor
|
||||
}
|
||||
set(@ColorInt disabledColor) {
|
||||
field = disabledColor
|
||||
updateColorFilter()
|
||||
}
|
||||
|
||||
private val defaultColorStateList: ColorStateList?
|
||||
|
||||
init {
|
||||
val a = context.obtainStyledAttributes(attrs, R.styleable.IconActionButton,
|
||||
R.attr.cardActionButtonStyle, R.style.Widget_CardActionButton)
|
||||
defaultColor = a.getColor(R.styleable.IconActionButton_iabColor, 0)
|
||||
defaultColorStateList = a.getColorStateList(R.styleable.IconActionButton_iabColor)
|
||||
defaultColor = defaultColorStateList?.defaultColor ?: 0
|
||||
activatedColor = a.getColor(R.styleable.IconActionButton_iabActivatedColor, 0)
|
||||
disabledColor = a.getColor(R.styleable.IconActionButton_iabDisabledColor, 0)
|
||||
a.recycle()
|
||||
|
@ -79,16 +83,6 @@ class IconActionButton(
|
|||
updateColorFilter()
|
||||
}
|
||||
|
||||
private fun updateColorFilter() {
|
||||
if (isActivated) {
|
||||
setColorFilter(activatedColor)
|
||||
} else if (isEnabled) {
|
||||
setColorFilter(defaultColor)
|
||||
} else {
|
||||
setColorFilter(disabledColor)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setBackgroundTintList(tint: ColorStateList?) {
|
||||
super.setBackgroundTintList(tint)
|
||||
updateColorFilter()
|
||||
|
@ -110,4 +104,20 @@ class IconActionButton(
|
|||
override fun applyAppearance(appearance: ChameleonView.Appearance) {
|
||||
IIconActionButton.Appearance.apply(this, appearance as IIconActionButton.Appearance)
|
||||
}
|
||||
|
||||
internal companion object {
|
||||
val activatedState = intArrayOf(android.R.attr.state_activated)
|
||||
val disabledState = intArrayOf(-android.R.attr.state_enabled)
|
||||
|
||||
fun IIconActionButton.updateColorFilter() {
|
||||
this as ImageView
|
||||
if (isActivated) {
|
||||
setColorFilter(activatedColor)
|
||||
} else if (isEnabled) {
|
||||
setColorFilter(defaultColor)
|
||||
} else {
|
||||
setColorFilter(disabledColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.mariotaku.twidere.view
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.support.annotation.ColorInt
|
||||
import android.support.v4.view.ViewCompat
|
||||
|
@ -10,6 +11,9 @@ import org.mariotaku.chameleon.Chameleon
|
|||
import org.mariotaku.chameleon.ChameleonView
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.util.ThemeUtils
|
||||
import org.mariotaku.twidere.view.IconActionButton.Companion.activatedState
|
||||
import org.mariotaku.twidere.view.IconActionButton.Companion.disabledState
|
||||
import org.mariotaku.twidere.view.IconActionButton.Companion.updateColorFilter
|
||||
import org.mariotaku.twidere.view.iface.IIconActionButton
|
||||
|
||||
/**
|
||||
|
@ -19,14 +23,15 @@ open class IconActionView(
|
|||
context: Context, attrs: AttributeSet? = null
|
||||
) : AppCompatImageView(context, attrs), IIconActionButton {
|
||||
|
||||
override final var defaultColor: Int = 0
|
||||
override var defaultColor: Int = 0
|
||||
@ColorInt
|
||||
get() {
|
||||
if (field != 0) return field
|
||||
val color = ViewCompat.getBackgroundTintList(this)
|
||||
if (color != null) {
|
||||
val currentColor = color.getColorForState(drawableState, 0)
|
||||
return ThemeUtils.getContrastColor(currentColor, Color.BLACK, Color.WHITE)
|
||||
if (field == 0) {
|
||||
val color = ViewCompat.getBackgroundTintList(this)
|
||||
if (color != null) {
|
||||
val currentColor = color.getColorForState(drawableState, 0)
|
||||
return ThemeUtils.getContrastColor(currentColor, Color.BLACK, Color.WHITE)
|
||||
}
|
||||
}
|
||||
return field
|
||||
}
|
||||
|
@ -35,37 +40,38 @@ open class IconActionView(
|
|||
updateColorFilter()
|
||||
}
|
||||
|
||||
override final var activatedColor: Int = 0
|
||||
override var activatedColor: Int = 0
|
||||
@ColorInt
|
||||
get() {
|
||||
if (field != 0) return field
|
||||
return defaultColor
|
||||
return defaultColorStateList?.getColorForState(activatedState, defaultColor) ?: defaultColor
|
||||
}
|
||||
set(@ColorInt value) {
|
||||
field = value
|
||||
set(@ColorInt activatedColor) {
|
||||
field = activatedColor
|
||||
updateColorFilter()
|
||||
}
|
||||
|
||||
override final var disabledColor: Int = 0
|
||||
override var disabledColor: Int = 0
|
||||
@ColorInt
|
||||
get() {
|
||||
if (field != 0) return field
|
||||
return defaultColor
|
||||
return defaultColorStateList?.getColorForState(disabledState, defaultColor) ?: defaultColor
|
||||
}
|
||||
set(@ColorInt value) {
|
||||
field = value
|
||||
set(@ColorInt disabledColor) {
|
||||
field = disabledColor
|
||||
updateColorFilter()
|
||||
}
|
||||
|
||||
private val defaultColorStateList: ColorStateList?
|
||||
|
||||
init {
|
||||
if (!isInEditMode) {
|
||||
val a = context.obtainStyledAttributes(attrs, R.styleable.IconActionButton,
|
||||
R.attr.cardActionButtonStyle, R.style.Widget_CardActionButton)
|
||||
defaultColor = a.getColor(R.styleable.IconActionButton_iabColor, 0)
|
||||
activatedColor = a.getColor(R.styleable.IconActionButton_iabActivatedColor, 0)
|
||||
disabledColor = a.getColor(R.styleable.IconActionButton_iabDisabledColor, 0)
|
||||
a.recycle()
|
||||
}
|
||||
val a = context.obtainStyledAttributes(attrs, R.styleable.IconActionButton,
|
||||
R.attr.cardActionButtonStyle, R.style.Widget_CardActionButton)
|
||||
defaultColorStateList = a.getColorStateList(R.styleable.IconActionButton_iabColor)
|
||||
defaultColor = a.getColor(R.styleable.IconActionButton_iabColor, 0)
|
||||
activatedColor = a.getColor(R.styleable.IconActionButton_iabActivatedColor, 0)
|
||||
disabledColor = a.getColor(R.styleable.IconActionButton_iabDisabledColor, 0)
|
||||
a.recycle()
|
||||
updateColorFilter()
|
||||
}
|
||||
|
||||
|
@ -79,16 +85,6 @@ open class IconActionView(
|
|||
updateColorFilter()
|
||||
}
|
||||
|
||||
private fun updateColorFilter() {
|
||||
if (isActivated) {
|
||||
setColorFilter(activatedColor)
|
||||
} else if (isEnabled) {
|
||||
setColorFilter(defaultColor)
|
||||
} else {
|
||||
setColorFilter(disabledColor)
|
||||
}
|
||||
}
|
||||
|
||||
override fun isPostApplyTheme(): Boolean {
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import org.mariotaku.ktextension.applyFontFamily
|
|||
import org.mariotaku.ktextension.empty
|
||||
import org.mariotaku.ktextension.hideIfEmpty
|
||||
import org.mariotaku.ktextension.isNotNullOrEmpty
|
||||
import org.mariotaku.microblog.library.mastodon.annotation.StatusVisibility
|
||||
import org.mariotaku.twidere.Constants.*
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.USER_TYPE_FANFOU_COM
|
||||
|
@ -395,6 +396,24 @@ class StatusViewHolder(private val adapter: IStatusesAdapter<*>, itemView: View)
|
|||
replyCountView.visibility = View.GONE
|
||||
}
|
||||
|
||||
when (status.extras?.visibility) {
|
||||
StatusVisibility.PRIVATE -> {
|
||||
retweetButton.isEnabled = false
|
||||
retweetIcon.setImageResource(R.drawable.ic_action_lock)
|
||||
retweetIcon.isEnabled = false
|
||||
}
|
||||
StatusVisibility.DIRECT -> {
|
||||
retweetButton.isEnabled = false
|
||||
retweetIcon.setImageResource(R.drawable.ic_action_message)
|
||||
retweetIcon.isEnabled = false
|
||||
}
|
||||
else -> {
|
||||
retweetButton.isEnabled = true
|
||||
retweetIcon.setImageResource(R.drawable.ic_action_retweet)
|
||||
retweetIcon.isEnabled = true
|
||||
}
|
||||
}
|
||||
|
||||
if (twitter.isDestroyingStatus(status.account_key, status.my_retweet_id)) {
|
||||
retweetIcon.isActivated = false
|
||||
retweetCount = Math.max(0, status.retweet_count - 1)
|
||||
|
|
|
@ -348,7 +348,7 @@
|
|||
android:scaleType="centerInside"
|
||||
android:src="@drawable/ic_action_reply"
|
||||
app:iabActivatedColor="@color/highlight_reply"
|
||||
app:iabColor="?android:textColorTertiary"
|
||||
app:iabColor="?android:textColorSecondary"
|
||||
tools:tint="?android:textColorSecondary"/>
|
||||
|
||||
<org.mariotaku.twidere.view.ActionIconThemedTextView
|
||||
|
@ -387,7 +387,7 @@
|
|||
android:scaleType="centerInside"
|
||||
android:src="@drawable/ic_action_retweet"
|
||||
app:iabActivatedColor="@color/highlight_retweet"
|
||||
app:iabColor="?android:textColorTertiary"
|
||||
app:iabColor="?android:textColorSecondary"
|
||||
tools:tint="?android:textColorSecondary"/>
|
||||
|
||||
<org.mariotaku.twidere.view.ActionIconThemedTextView
|
||||
|
@ -427,7 +427,7 @@
|
|||
android:scaleType="centerInside"
|
||||
android:src="@drawable/ic_action_heart"
|
||||
app:iabActivatedColor="@color/highlight_like"
|
||||
app:iabColor="?android:textColorTertiary"
|
||||
app:iabColor="?android:textColorSecondary"
|
||||
tools:tint="?android:textColorSecondary"/>
|
||||
|
||||
<org.mariotaku.twidere.view.ActionIconThemedTextView
|
||||
|
|
Loading…
Reference in New Issue