diff options
Diffstat (limited to 'app')
8 files changed, 107 insertions, 48 deletions
diff --git a/app/app.iml b/app/app.iml index 9b125e09..54fb7da4 100644 --- a/app/app.iml +++ b/app/app.iml @@ -36,7 +36,6 @@ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/build/generated/source/kapt/debugUnitTest" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/kapt/debugAndroidTest" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" /> @@ -45,6 +44,7 @@ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/kapt/debugUnitTest" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> @@ -70,14 +70,6 @@ <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> @@ -86,6 +78,14 @@ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" /> 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); } } diff --git a/app/src/main/res/layout/list_item_status.xml b/app/src/main/res/layout/list_item_status.xml index e6d7fecd..de12cf49 100644 --- a/app/src/main/res/layout/list_item_status.xml +++ b/app/src/main/res/layout/list_item_status.xml @@ -24,16 +24,21 @@ ~ SOFTWARE. --> -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:padding="5dp"> +<net.lacolaco.smileessence.view.ColoredRelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="5dp" + app:accent_color="?attr/color_status_text_mine" + app:highlight_none="?attr/color_status_bg_normal" + app:highlight_type1="?attr/color_status_bg_mention" + app:highlight_type2="?attr/color_status_bg_retweet"> <com.android.volley.toolbox.NetworkImageView android:id="@+id/imageview_status_icon" android:layout_width="36dp" android:layout_height="36dp" - android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> <TextView @@ -43,7 +48,8 @@ android:layout_alignParentTop="true" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/imageview_status_icon" - android:gravity="top" /> + android:gravity="top" + android:textColor="?attr/color_status_text_header" /> <TextView android:id="@+id/textview_status_text" @@ -62,7 +68,8 @@ android:layout_height="wrap_content" android:layout_alignLeft="@+id/textview_status_text" android:layout_below="@+id/textview_status_text" - android:layout_marginRight="2dp" /> + android:layout_marginRight="2dp" + android:textColor="?attr/color_status_text_footer" /> <ImageView android:id="@+id/imageview_status_favorited" @@ -82,6 +89,6 @@ android:layout_alignLeft="@+id/textview_status_text" android:layout_below="@+id/textview_status_footer" android:layout_marginRight="1dp" - android:layout_marginTop="3dp" - android:textColor="?attr/color_status_text_footer" /> -</RelativeLayout>
\ No newline at end of file + android:layout_marginTop="3dp" /> + +</net.lacolaco.smileessence.view.ColoredRelativeLayout>
\ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 31733695..bec13795 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -53,4 +53,12 @@ <attr name="icon_search" format="reference" /> <attr name="icon_labels" format="reference" /> <attr name="icon_save" format="reference" /> + + <declare-styleable name="ColoredRelativeLayout"> + <attr name="accent_color" format="reference" /> + <attr name="highlight_none" format="reference" /> + <attr name="highlight_type1" format="reference" /> + <attr name="highlight_type2" format="reference" /> + <attr name="highlight_type3" format="reference" /> + </declare-styleable> </resources>
\ No newline at end of file |