aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2017-01-29 21:14:57 +0900
committerKazuki Yamaguchi <k@rhe.jp>2017-01-29 21:14:57 +0900
commit2cf839b649d99cc1c31b330fcabdb2c356fb84fd (patch)
tree72f6ba545c45e6a45670c5de2f5e31cd6b8d5474
parentaa3cad7f082b1d3c80d2c4b0a3e4c06fd40ce49a (diff)
downloadSmileEssence-2cf839b649d99cc1c31b330fcabdb2c356fb84fd.tar.gz
Kill Themes
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/Application.java3
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.java3
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/util/Themes.java62
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/ThreeStateButton.java56
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/ToggleableImageButton.java37
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java25
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java29
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java1
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java1
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java1
-rw-r--r--app/src/main/res/layout/dialog_status_detail.xml15
-rw-r--r--app/src/main/res/layout/dialog_user_detail.xml16
-rw-r--r--app/src/main/res/values/attrs.xml14
13 files changed, 141 insertions, 122 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/Application.java b/app/src/main/java/net/lacolaco/smileessence/Application.java
index 674bc499..e5563706 100644
--- a/app/src/main/java/net/lacolaco/smileessence/Application.java
+++ b/app/src/main/java/net/lacolaco/smileessence/Application.java
@@ -33,7 +33,6 @@ import net.lacolaco.smileessence.data.Account;
import net.lacolaco.smileessence.data.OrmaHolder;
import net.lacolaco.smileessence.logging.Logger;
import net.lacolaco.smileessence.preference.UserPreferenceHelper;
-import net.lacolaco.smileessence.util.Themes;
import net.lacolaco.smileessence.util.UIHandler;
import java.util.Collections;
@@ -84,7 +83,7 @@ public class Application extends android.app.Application {
public int getThemeResId() {
if (resId == -1) {
Logger.debug("setting theme index: " + UserPreferenceHelper.getInstance().getThemeIndex());
- resId = Themes.getThemeResId(UserPreferenceHelper.getInstance().getThemeIndex());
+ resId = UserPreferenceHelper.getInstance().getThemeIndex() == 0 ? R.style.theme_dark : R.style.theme_light;
}
return resId;
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.java b/app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.java
index de580b88..584a3474 100644
--- a/app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.java
+++ b/app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.java
@@ -28,7 +28,6 @@ import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import net.lacolaco.smileessence.Application;
import net.lacolaco.smileessence.R;
-import net.lacolaco.smileessence.util.Themes;
public class UserPreferenceHelper extends SharedPreferenceHelper {
// --------------------------- CONSTRUCTORS ---------------------------
@@ -50,7 +49,7 @@ public class UserPreferenceHelper extends SharedPreferenceHelper {
// --------------------- HELPER METHODS ---------------------
public int getThemeIndex() {
- return get(R.string.key_setting_theme, Themes.THEME_DARK);
+ return get(R.string.key_setting_theme, 0);
}
public int getTextSize() {
diff --git a/app/src/main/java/net/lacolaco/smileessence/util/Themes.java b/app/src/main/java/net/lacolaco/smileessence/util/Themes.java
deleted file mode 100644
index 13f49835..00000000
--- a/app/src/main/java/net/lacolaco/smileessence/util/Themes.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * The MIT License (MIT)
- *
- * Copyright (c) 2012-2014 lacolaco.net
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package net.lacolaco.smileessence.util;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
-import net.lacolaco.smileessence.Application;
-import net.lacolaco.smileessence.R;
-
-public class Themes {
-
- // ------------------------------ FIELDS ------------------------------
-
- public static final int THEME_DARK = 0;
- public static final int THEME_LIGHT = 1;
-
- // -------------------------- STATIC METHODS --------------------------
-
- public static int getThemeResId(int index) {
- switch (index) {
- case THEME_DARK: {
- return R.style.theme_dark;
- }
- case THEME_LIGHT: {
- return R.style.theme_light;
- }
- default: {
- return R.style.theme_dark;
- }
- }
- }
-
- public static Drawable getStyledDrawable(Context context, int attribute) {
- TypedArray array = context.obtainStyledAttributes(Application.getInstance().getThemeResId(), new int[]{attribute});
- Drawable drawable = array.getDrawable(0);
- array.recycle();
- return drawable;
- }
-}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/ThreeStateButton.java b/app/src/main/java/net/lacolaco/smileessence/view/ThreeStateButton.java
new file mode 100644
index 00000000..7554e2fb
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/view/ThreeStateButton.java
@@ -0,0 +1,56 @@
+package net.lacolaco.smileessence.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.widget.Button;
+import net.lacolaco.smileessence.R;
+
+public class ThreeStateButton extends Button {
+ public static final int STATE_OFF = 0;
+ public static final int STATE_ON = 1;
+ public static final int STATE_LOCKED = 2;
+
+ private int state = STATE_OFF;
+ private String texts[] = new String[3];
+ private Drawable backgrounds[] = new Drawable[3];
+
+ public ThreeStateButton(Context context) {
+ this(context, null);
+ }
+
+ public ThreeStateButton(Context context, AttributeSet attrs) {
+ this(context, attrs, android.R.attr.buttonStyle);
+ }
+
+ public ThreeStateButton(Context context, AttributeSet attrs, int defStyleAttr) {
+ this(context, attrs, defStyleAttr, 0);
+ }
+
+ public ThreeStateButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+
+ TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ThreeStateButton);
+ texts[STATE_OFF] = ta.getString(R.styleable.ThreeStateButton_off_text);
+ texts[STATE_ON] = ta.getString(R.styleable.ThreeStateButton_on_text);
+ texts[STATE_LOCKED] = ta.getString(R.styleable.ThreeStateButton_locked_text);
+ backgrounds[STATE_OFF] = ta.getDrawable(R.styleable.ThreeStateButton_off_background);
+ backgrounds[STATE_ON] = ta.getDrawable(R.styleable.ThreeStateButton_on_background);
+ backgrounds[STATE_LOCKED] = ta.getDrawable(R.styleable.ThreeStateButton_locked_background);
+ ta.recycle();
+
+ setState(STATE_OFF);
+ }
+
+ public void setState(int s) {
+ state = s;
+ setText(texts[state]);
+ setBackground(backgrounds[state]);
+ setEnabled(state != STATE_LOCKED);
+ }
+
+ public int getState() {
+ return state;
+ }
+}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/ToggleableImageButton.java b/app/src/main/java/net/lacolaco/smileessence/view/ToggleableImageButton.java
new file mode 100644
index 00000000..b7b2d174
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/view/ToggleableImageButton.java
@@ -0,0 +1,37 @@
+package net.lacolaco.smileessence.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.widget.ImageButton;
+import net.lacolaco.smileessence.R;
+
+public class ToggleableImageButton extends ImageButton {
+ private Drawable onSrc, offSrc;
+
+ public ToggleableImageButton(Context context) {
+ this(context, null);
+ }
+
+ public ToggleableImageButton(Context context, AttributeSet attrs) {
+ this(context, attrs, android.R.attr.imageButtonStyle);
+ }
+
+ public ToggleableImageButton(Context context, AttributeSet attrs, int defStyleAttr) {
+ this(context, attrs, defStyleAttr, 0);
+ }
+
+ public ToggleableImageButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+
+ TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ToggleableImageButton);
+ offSrc = ta.getDrawable(R.styleable.ToggleableImageButton_offSrc);
+ onSrc = ta.getDrawable(R.styleable.ToggleableImageButton_onSrc);
+ ta.recycle();
+ }
+
+ public void setState(boolean isOn) {
+ setImageDrawable(isOn ? onSrc : offSrc);
+ }
+}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java
index 8f5c7225..7d2e5dbd 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java
@@ -29,7 +29,6 @@ import android.app.AlertDialog;
import android.app.Dialog;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
-import android.support.v4.content.ContextCompat;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
@@ -49,9 +48,9 @@ import net.lacolaco.smileessence.entity.Tweet;
import net.lacolaco.smileessence.notification.Notificator;
import net.lacolaco.smileessence.twitter.task.TweetReactions;
import net.lacolaco.smileessence.twitter.task.Tweets;
-import net.lacolaco.smileessence.util.Themes;
import net.lacolaco.smileessence.util.UIObserverBundle;
import net.lacolaco.smileessence.view.DialogHelper;
+import net.lacolaco.smileessence.view.ToggleableImageButton;
import net.lacolaco.smileessence.view.adapter.StatusListAdapter;
import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import net.lacolaco.smileessence.viewmodel.StatusViewModel;
@@ -217,27 +216,13 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen
ImageButton reply = (ImageButton) view.findViewById(R.id.button_status_detail_reply);
reply.setOnClickListener(this);
- ImageButton retweet = (ImageButton) view.findViewById(R.id.button_status_detail_retweet);
+ ToggleableImageButton retweet = (ToggleableImageButton) view.findViewById(R.id.button_status_detail_retweet);
retweet.setOnClickListener(this);
- if (tweet.getOriginalTweet().getUser().isProtected() ||
- tweet.getOriginalTweet().getUser().getId() == account.getUserId()) {
- retweet.setVisibility(View.GONE);
- } else {
- retweet.setVisibility(View.VISIBLE);
- if (tweet.isRetweetedBy(account.getUserId())) {
- retweet.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.icon_retweet_on));
- } else {
- retweet.setImageDrawable(Themes.getStyledDrawable(getActivity(), R.attr.icon_retweet_off));
- }
- }
+ retweet.setState(tweet.isRetweetedBy(account.getUserId()));
- ImageButton favorite = (ImageButton) view.findViewById(R.id.button_status_detail_favorite);
+ ToggleableImageButton favorite = (ToggleableImageButton) view.findViewById(R.id.button_status_detail_favorite);
favorite.setOnClickListener(this);
- if (tweet.isFavoritedBy(account.getUserId())) {
- favorite.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.icon_favorite_on));
- } else {
- favorite.setImageDrawable(Themes.getStyledDrawable(getActivity(), R.attr.icon_favorite_off));
- }
+ favorite.setState(tweet.isFavoritedBy(account.getUserId()));
ImageButton delete = (ImageButton) view.findViewById(R.id.button_status_detail_delete);
delete.setOnClickListener(this);
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java
index e1867519..f7f69947 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java
@@ -26,9 +26,7 @@ package net.lacolaco.smileessence.view.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.graphics.drawable.Drawable;
import android.os.Bundle;
-import android.support.v4.content.ContextCompat;
import android.text.Html;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
@@ -50,10 +48,10 @@ import net.lacolaco.smileessence.notification.Notificator;
import net.lacolaco.smileessence.twitter.task.Timelines;
import net.lacolaco.smileessence.twitter.task.Users;
import net.lacolaco.smileessence.util.IntentUtils;
-import net.lacolaco.smileessence.util.Themes;
import net.lacolaco.smileessence.util.UIHandler;
import net.lacolaco.smileessence.util.UIObserverBundle;
import net.lacolaco.smileessence.view.DialogHelper;
+import net.lacolaco.smileessence.view.ThreeStateButton;
import net.lacolaco.smileessence.view.adapter.OrderedCustomListAdapter;
import net.lacolaco.smileessence.view.adapter.StatusListAdapter;
import net.lacolaco.smileessence.viewmodel.StatusViewModel;
@@ -78,7 +76,7 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
private TextView textViewFavoriteCount;
private NetworkImageView imageViewIcon;
private NetworkImageView imageViewHeader;
- private Button buttonFollow;
+ private ThreeStateButton buttonFollow;
private PullToRefreshListView listViewTimeline;
private TabHost tabHost;
private UIObserverBundle observerBundle;
@@ -218,7 +216,7 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
imageViewIcon = (NetworkImageView) v.findViewById(R.id.imageview_user_detail_icon);
imageViewIcon.setOnClickListener(this);
imageViewHeader = (NetworkImageView) v.findViewById(R.id.imageview_user_detail_header);
- buttonFollow = (Button) v.findViewById(R.id.button_user_detail_follow);
+ buttonFollow = (ThreeStateButton) v.findViewById(R.id.button_user_detail_follow);
buttonFollow.setOnClickListener(this);
listViewTimeline = (PullToRefreshListView) v.findViewById(R.id.listview_user_detail_timeline);
listViewTimeline.setOnRefreshListener(this);
@@ -317,12 +315,6 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
});
}
- private void lockFollowButton() {
- buttonFollow.setText(R.string.user_detail_loading);
- buttonFollow.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.button_round_gray));
- buttonFollow.setEnabled(false);
- }
-
private void openUserMenu() {
UserMenuDialogFragment menuFragment = new UserMenuDialogFragment() {
@Override
@@ -342,25 +334,19 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
private void setFollowButtonState(boolean isFollowing) {
MainActivity mainActivity = (MainActivity) getActivity();
if (mainActivity != null) {
- final Drawable unfollowColor = Themes.getStyledDrawable(mainActivity, R.attr.button_round_red);
- final Drawable followColor = Themes.getStyledDrawable(mainActivity, R.attr.button_round_blue);
- buttonFollow.setText(isFollowing ? R.string.user_detail_unfollow : R.string.user_detail_follow);
- buttonFollow.setBackground(isFollowing ? unfollowColor : followColor);
- buttonFollow.setTag(isFollowing);
- buttonFollow.setEnabled(true);
+ buttonFollow.setState(isFollowing ? ThreeStateButton.STATE_ON : ThreeStateButton.STATE_OFF);
}
}
private void toggleFollowing() {
Account account = Application.getInstance().getCurrentAccount();
- lockFollowButton();
- Boolean isFollowing = buttonFollow.getTag() != null ? (Boolean) buttonFollow.getTag() : false;
+ Boolean isFollowing = buttonFollow.getState() == ThreeStateButton.STATE_ON;
+ buttonFollow.setState(ThreeStateButton.STATE_LOCKED);
if (isFollowing) {
new Users.UnfollowTask(account, user.getId())
.onDoneUI(result -> {
Notificator.getInstance().publish(R.string.notice_unfollow_succeeded);
updateRelationship();
- buttonFollow.setEnabled(true);
})
.onFail(x ->
Notificator.getInstance().alert(R.string.notice_unfollow_failed))
@@ -370,7 +356,6 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
.onDoneUI(result -> {
Notificator.getInstance().publish(R.string.notice_follow_succeeded);
updateRelationship();
- buttonFollow.setEnabled(true);
})
.onFail(x -> Notificator.getInstance().alert(R.string.notice_follow_failed))
.execute();
@@ -399,7 +384,7 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
textViewFollowed.setText(R.string.user_detail_followed_is_me);
buttonFollow.setVisibility(View.GONE);
} else {
- lockFollowButton();
+ buttonFollow.setState(ThreeStateButton.STATE_LOCKED);
textViewFollowed.setText(R.string.user_detail_loading);
new Users.ShowFriendshipTask(account, user.getId()).onDoneUI(relationship -> {
boolean isFollowing = relationship.isSourceFollowingTarget();
diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java
index d9c84595..ae53d0fb 100644
--- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java
+++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java
@@ -38,7 +38,6 @@ import net.lacolaco.smileessence.entity.Tweet;
import net.lacolaco.smileessence.entity.User;
import net.lacolaco.smileessence.preference.UserPreferenceHelper;
import net.lacolaco.smileessence.util.StringUtils;
-import net.lacolaco.smileessence.util.Themes;
import net.lacolaco.smileessence.util.UIObserverBundle;
import net.lacolaco.smileessence.view.DialogHelper;
import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment;
diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java
index 0b0705cc..ae8f667b 100644
--- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java
+++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java
@@ -40,7 +40,6 @@ import net.lacolaco.smileessence.entity.IdObject;
import net.lacolaco.smileessence.entity.RBinding;
import net.lacolaco.smileessence.preference.UserPreferenceHelper;
import net.lacolaco.smileessence.util.StringUtils;
-import net.lacolaco.smileessence.util.Themes;
import net.lacolaco.smileessence.util.UIObserverBundle;
import net.lacolaco.smileessence.view.ColoredRelativeLayout;
import net.lacolaco.smileessence.view.DialogHelper;
diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java
index 5a8aa6f1..cd0f8c07 100644
--- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java
+++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java
@@ -41,7 +41,6 @@ import net.lacolaco.smileessence.entity.RBinding;
import net.lacolaco.smileessence.entity.Tweet;
import net.lacolaco.smileessence.preference.UserPreferenceHelper;
import net.lacolaco.smileessence.util.StringUtils;
-import net.lacolaco.smileessence.util.Themes;
import net.lacolaco.smileessence.util.UIObserverBundle;
import net.lacolaco.smileessence.view.ColoredRelativeLayout;
import net.lacolaco.smileessence.view.DialogHelper;
diff --git a/app/src/main/res/layout/dialog_status_detail.xml b/app/src/main/res/layout/dialog_status_detail.xml
index 42270c36..95da1045 100644
--- a/app/src/main/res/layout/dialog_status_detail.xml
+++ b/app/src/main/res/layout/dialog_status_detail.xml
@@ -24,12 +24,13 @@
~ SOFTWARE.
-->
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<ScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
-
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
@@ -116,7 +117,7 @@
android:scaleType="fitCenter"
android:src="?attr/icon_message" />
- <ImageButton
+ <net.lacolaco.smileessence.view.ToggleableImageButton
android:id="@+id/button_status_detail_retweet"
style="?attr/custom_button_transparent"
android:layout_width="45dp"
@@ -125,9 +126,10 @@
android:contentDescription=""
android:padding="0dp"
android:scaleType="fitCenter"
- android:src="?attr/icon_retweet_off" />
+ app:offSrc="?attr/icon_retweet_off"
+ app:onSrc="@drawable/icon_retweet_on" />
- <ImageButton
+ <net.lacolaco.smileessence.view.ToggleableImageButton
android:id="@+id/button_status_detail_favorite"
style="?attr/custom_button_transparent"
android:layout_width="45dp"
@@ -136,7 +138,8 @@
android:contentDescription=""
android:padding="0dp"
android:scaleType="fitCenter"
- android:src="?attr/icon_favorite_off" />
+ app:offSrc="?attr/icon_favorite_off"
+ app:onSrc="@drawable/icon_favorite_on" />
<ImageButton
android:id="@+id/button_status_detail_delete"
diff --git a/app/src/main/res/layout/dialog_user_detail.xml b/app/src/main/res/layout/dialog_user_detail.xml
index 7454d3df..0fb8c7b0 100644
--- a/app/src/main/res/layout/dialog_user_detail.xml
+++ b/app/src/main/res/layout/dialog_user_detail.xml
@@ -24,7 +24,9 @@
~ SOFTWARE.
-->
-<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
+<TabHost
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
@@ -276,7 +278,7 @@
android:text="@string/user_detail_protected" />
</LinearLayout>
- <Button
+ <net.lacolaco.smileessence.view.ThreeStateButton
android:id="@+id/button_user_detail_follow"
style="?attr/custom_button_transparent"
android:layout_width="wrap_content"
@@ -284,12 +286,16 @@
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginTop="15dp"
- android:background="?attr/button_round_blue"
android:paddingLeft="15dp"
android:paddingRight="15dp"
- android:text="@string/user_detail_follow"
android:textColor="@color/white"
- android:textSize="15sp" />
+ android:textSize="15sp"
+ app:off_text="@string/user_detail_follow"
+ app:off_background="?attr/button_round_blue"
+ app:on_text="@string/user_detail_unfollow"
+ app:on_background="?attr/button_round_red"
+ app:locked_text="@string/user_detail_loading"
+ app:locked_background="@drawable/button_round_gray" />
</RelativeLayout>
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index bec13795..dd690cda 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -61,4 +61,18 @@
<attr name="highlight_type2" format="reference" />
<attr name="highlight_type3" format="reference" />
</declare-styleable>
+
+ <declare-styleable name="ThreeStateButton">
+ <attr name="off_text" format="reference" />
+ <attr name="off_background" format="reference" />
+ <attr name="on_text" format="reference" />
+ <attr name="on_background" format="reference" />
+ <attr name="locked_text" format="reference" />
+ <attr name="locked_background" format="reference" />
+ </declare-styleable>
+
+ <declare-styleable name="ToggleableImageButton">
+ <attr name="offSrc" format="reference" />
+ <attr name="onSrc" format="reference" />
+ </declare-styleable>
</resources> \ No newline at end of file