diff --git a/app/build.gradle b/app/build.gradle index 159cfb307..d09fbb609 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,5 +32,6 @@ dependencies { compile 'com.android.support:design:25.1.0' compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.pkmmte.view:circularimageview:1.1' + compile 'com.github.peter9870:sparkbutton:master' testCompile 'junit:junit:4.12' } diff --git a/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java index 3f30299b1..12eee0ab8 100644 --- a/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/StatusViewHolder.java @@ -34,6 +34,9 @@ import android.widget.ToggleButton; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.NetworkImageView; import com.squareup.picasso.Picasso; +import com.varunest.sparkbutton.SparkButton; +import com.varunest.sparkbutton.SparkButtonBuilder; +import com.varunest.sparkbutton.SparkEventListener; import java.util.Date; @@ -47,8 +50,8 @@ class StatusViewHolder extends RecyclerView.ViewHolder { private View rebloggedBar; private TextView rebloggedByDisplayName; private ImageButton replyButton; - private ImageButton reblogButton; - private ImageButton favouriteButton; + private SparkButton reblogButton; + private SparkButton favouriteButton; private ImageButton moreButton; private boolean favourited; private boolean reblogged; @@ -72,8 +75,8 @@ class StatusViewHolder extends RecyclerView.ViewHolder { rebloggedBar = itemView.findViewById(R.id.status_reblogged_bar); rebloggedByDisplayName = (TextView) itemView.findViewById(R.id.status_reblogged); replyButton = (ImageButton) itemView.findViewById(R.id.status_reply); - reblogButton = (ImageButton) itemView.findViewById(R.id.status_reblog); - favouriteButton = (ImageButton) itemView.findViewById(R.id.status_favourite); + reblogButton = (SparkButton) itemView.findViewById(R.id.status_reblog); + favouriteButton = (SparkButton) itemView.findViewById(R.id.status_favourite); moreButton = (ImageButton) itemView.findViewById(R.id.status_more); reblogged = false; favourited = false; @@ -187,35 +190,25 @@ class StatusViewHolder extends RecyclerView.ViewHolder { private void setReblogged(boolean reblogged) { this.reblogged = reblogged; - int attribute; - if (reblogged) { - attribute = R.attr.status_reblog_button_marked_tint; - } else { - attribute = R.attr.status_reblog_button_tint; - } - ThemeUtils.setImageViewTint(reblogButton, attribute); + reblogButton.setChecked(reblogged); } /** This should only be called after setReblogged, in order to override the tint correctly. */ private void setRebloggingEnabled(boolean enabled) { reblogButton.setEnabled(enabled); + if (enabled) { - reblogButton.setImageResource(R.drawable.ic_repeat_24dp); + reblogButton.setInactiveImage(R.drawable.reblog_inactive); + reblogButton.setActiveImage(R.drawable.reblog_active); } else { - ThemeUtils.setImageViewTint(reblogButton, R.attr.status_reblog_button_disabled_tint); - reblogButton.setImageResource(R.drawable.ic_lock_24dp); + reblogButton.setInactiveImage(R.drawable.reblog_disabled); + reblogButton.setActiveImage(R.drawable.reblog_disabled); } } private void setFavourited(boolean favourited) { this.favourited = favourited; - int attribute; - if (favourited) { - attribute = R.attr.status_favourite_button_marked_tint; - } else { - attribute = R.attr.status_favourite_button_tint; - } - ThemeUtils.setImageViewTint(favouriteButton, attribute); + favouriteButton.setChecked(favourited); } private void setMediaPreviews(final Status.MediaAttachment[] attachments, @@ -313,15 +306,15 @@ class StatusViewHolder extends RecyclerView.ViewHolder { listener.onReply(getAdapterPosition()); } }); - reblogButton.setOnClickListener(new View.OnClickListener() { + reblogButton.setEventListener(new SparkEventListener() { @Override - public void onClick(View v) { + public void onEvent(ImageView button, boolean buttonState) { listener.onReblog(!reblogged, getAdapterPosition()); } }); - favouriteButton.setOnClickListener(new View.OnClickListener() { + favouriteButton.setEventListener(new SparkEventListener() { @Override - public void onClick(View v) { + public void onEvent(ImageView button, boolean buttonState) { listener.onFavourite(!favourited, getAdapterPosition()); } }); diff --git a/app/src/main/res/drawable/favourite_active.xml b/app/src/main/res/drawable/favourite_active.xml new file mode 100644 index 000000000..2d53859ff --- /dev/null +++ b/app/src/main/res/drawable/favourite_active.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/favourite_inactive.xml b/app/src/main/res/drawable/favourite_inactive.xml new file mode 100644 index 000000000..24b69ac3c --- /dev/null +++ b/app/src/main/res/drawable/favourite_inactive.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/reblog_active.xml b/app/src/main/res/drawable/reblog_active.xml new file mode 100644 index 000000000..c23ed9a95 --- /dev/null +++ b/app/src/main/res/drawable/reblog_active.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/reblog_disabled.xml b/app/src/main/res/drawable/reblog_disabled.xml new file mode 100644 index 000000000..59db1759a --- /dev/null +++ b/app/src/main/res/drawable/reblog_disabled.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/reblog_inactive.xml b/app/src/main/res/drawable/reblog_inactive.xml new file mode 100644 index 000000000..74d6b8fe5 --- /dev/null +++ b/app/src/main/res/drawable/reblog_inactive.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/item_status.xml b/app/src/main/res/layout/item_status.xml index be6115818..53b6b93f0 100644 --- a/app/src/main/res/layout/item_status.xml +++ b/app/src/main/res/layout/item_status.xml @@ -227,6 +227,8 @@ android:layout_height="wrap_content" android:layout_below="@id/status_media_preview_container" android:layout_toRightOf="@+id/status_avatar" + android:clipChildren="false" + android:clipToPadding="false" android:paddingBottom="8dp" android:paddingTop="6dp"> @@ -242,10 +244,14 @@ android:layout_height="match_parent" android:layout_weight="1" /> - @@ -254,11 +260,15 @@ android:layout_height="match_parent" android:layout_weight="1" /> - #000000 #2F2F2F #4F4F4F - #009F6F + #56a7e1 #BFBFBF #4F4F4F - #ffec21 + #fab207 #B0B0B0 #CFCFCF #34444C diff --git a/build.gradle b/build.gradle index 1ea4bd055..83a6ca5a7 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,7 @@ buildscript { allprojects { repositories { jcenter() + maven { url "https://jitpack.io" } } }