diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence')
5 files changed, 73 insertions, 29 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/util/Themes.java b/app/src/main/java/net/lacolaco/smileessence/util/Themes.java index d1eeb782..13f49835 100644 --- a/app/src/main/java/net/lacolaco/smileessence/util/Themes.java +++ b/app/src/main/java/net/lacolaco/smileessence/util/Themes.java @@ -53,17 +53,6 @@ public class Themes { } } - public static int getStyledColor(Context context, int attribute) { - TypedArray array = context.obtainStyledAttributes(Application.getInstance().getThemeResId(), new int[]{attribute}); - int color = array.getColor(0, 0); - array.recycle(); - if (color == 0) { - throw new RuntimeException("[BUG] can't get styled color from attr ID: " + attribute); - } else { - return color; - } - } - public static Drawable getStyledDrawable(Context context, int attribute) { TypedArray array = context.obtainStyledAttributes(Application.getInstance().getThemeResId(), new int[]{attribute}); Drawable drawable = array.getDrawable(0); diff --git a/app/src/main/java/net/lacolaco/smileessence/view/ColoredRelativeLayout.java b/app/src/main/java/net/lacolaco/smileessence/view/ColoredRelativeLayout.java new file mode 100644 index 00000000..8b623361 --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/view/ColoredRelativeLayout.java @@ -0,0 +1,63 @@ +package net.lacolaco.smileessence.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.support.v4.content.ContextCompat; +import android.util.AttributeSet; +import android.widget.RelativeLayout; +import net.lacolaco.smileessence.R; + + +public class ColoredRelativeLayout extends RelativeLayout { + private int highlightColors[] = new int[4]; + private final Paint paint = new Paint(); + private boolean showAccent = false; + + public static final int HIGHLIGHT_NONE = 0; + + public ColoredRelativeLayout(Context context) { + this(context, null); + } + + public ColoredRelativeLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ColoredRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public ColoredRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + + setWillNotDraw(false); + + TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ColoredRelativeLayout); + highlightColors[0] = ta.getColor(R.styleable.ColoredRelativeLayout_highlight_none, R.color.black); + highlightColors[1] = ta.getColor(R.styleable.ColoredRelativeLayout_highlight_type1, R.color.orange); + highlightColors[2] = ta.getColor(R.styleable.ColoredRelativeLayout_highlight_type2, R.color.green); + highlightColors[3] = ta.getColor(R.styleable.ColoredRelativeLayout_highlight_type3, R.color.metro_blue); + setHighlight(HIGHLIGHT_NONE); + paint.setColor(ta.getColor(R.styleable.ColoredRelativeLayout_accent_color, R.color.red)); + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeWidth(3); + ta.recycle(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (showAccent) + canvas.drawLine(1, 0, 1, getMeasuredHeight(), paint); + } + + public void setAccentVisibility(boolean yes) { + showAccent = yes; + } + + public void setHighlight(int type) { + setBackgroundColor(highlightColors[type]); + } +} 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 6aa800a8..d9c84595 100644 --- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java +++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java @@ -117,8 +117,6 @@ public class EventViewModel implements IViewModel { TextView header = (TextView) convertedView.findViewById(R.id.textview_status_header); header.setTextSize(textSize); - int colorHeader = Themes.getStyledColor(activity, R.attr.color_status_text_mine); - header.setTextColor(colorHeader); updateViewUser(convertedView); @@ -130,8 +128,6 @@ public class EventViewModel implements IViewModel { footer.setText(StringUtils.dateToString(getCreatedAt())); ImageView favorited = (ImageView) convertedView.findViewById(R.id.imageview_status_favorited); favorited.setVisibility(View.GONE); - int colorBgNormal = Themes.getStyledColor(activity, R.attr.color_status_bg_normal); - convertedView.setBackgroundColor(colorBgNormal); convertedView.setOnClickListener(new ListItemClickListener(activity, () -> { UserDetailDialogFragment fragment = new UserDetailDialogFragment(); fragment.setUserID(source.getId()); 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 5f3f083d..0b0705cc 100644 --- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java +++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java @@ -42,6 +42,7 @@ 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; import net.lacolaco.smileessence.view.dialog.MessageDetailDialogFragment; import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment; @@ -99,8 +100,6 @@ public class MessageViewModel implements IViewModel, IdObject { convertedView.setTag(bundle); } - int colorBgMessage = Themes.getStyledColor(activity, R.attr.color_message_bg_normal); - convertedView.setBackgroundColor(colorBgMessage); convertedView.setOnClickListener(new ListItemClickListener(activity, () -> { MessageDetailDialogFragment dialogFragment = new MessageDetailDialogFragment(); dialogFragment.setMessageID(directMessage.getId()); @@ -139,9 +138,9 @@ public class MessageViewModel implements IViewModel, IdObject { TextView header = (TextView) convertedView.findViewById(R.id.textview_status_header); header.setTextSize(textSize); - int colorHeader = Themes.getStyledColor(activity, R.attr.color_message_text_header); - header.setTextColor(colorHeader); header.setText(directMessage.getSender().getFormattedName()); + + ((ColoredRelativeLayout) convertedView).setAccentVisibility(directMessage.getSender() == Application.getInstance().getCurrentAccount().getUser()); } private void updateViewBody(Activity activity, View convertedView) { 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 a3cb8ec6..5a8aa6f1 100644 --- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java +++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java @@ -43,6 +43,7 @@ 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; import net.lacolaco.smileessence.view.adapter.StatusListAdapter; import net.lacolaco.smileessence.view.dialog.StatusDetailDialogFragment; @@ -144,10 +145,9 @@ public class StatusViewModel implements IViewModel, IdObject { TextView header = (TextView) convertedView.findViewById(R.id.textview_status_header); header.setTextSize(textSize); - int colorHeader = Themes.getStyledColor(activity, R.attr.color_status_text_header); - int colorMineHeader = Themes.getStyledColor(activity, R.attr.color_status_text_mine); - header.setTextColor(tweet.getUser() == Application.getInstance().getCurrentAccount().getUser() ? colorMineHeader : colorHeader); header.setText(tweet.getOriginalTweet().getUser().getFormattedName()); + + ((ColoredRelativeLayout) convertedView).setAccentVisibility(tweet.getUser() == Application.getInstance().getCurrentAccount().getUser()); } private void updateViewBody(Activity activity, View convertedView) { @@ -161,16 +161,13 @@ public class StatusViewModel implements IViewModel, IdObject { footer.setTextSize(textSize - 2); footer.setText(getFooterText()); - + ColoredRelativeLayout typedView = (ColoredRelativeLayout) convertedView; if (tweet.isRetweet()) { - int colorBgRetweet = Themes.getStyledColor(activity, R.attr.color_status_bg_retweet); - convertedView.setBackgroundColor(colorBgRetweet); + typedView.setHighlight(2); } else if (tweet.getOriginalTweet().getMentions().contains(Application.getInstance().getCurrentAccount().getUser().getScreenName())) { - int colorBgMention = Themes.getStyledColor(activity, R.attr.color_status_bg_mention); - convertedView.setBackgroundColor(colorBgMention); + typedView.setHighlight(1); } else { - int colorBgNormal = Themes.getStyledColor(activity, R.attr.color_status_bg_normal); - convertedView.setBackgroundColor(colorBgNormal); + typedView.setHighlight(0); } } |