Skip to content
Snippets Groups Projects
Commit 30f15971 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Updated chat UI

parent c5e4f075
No related branches found
No related tags found
No related merge requests found
......@@ -42,6 +42,7 @@ public class ChatMessageRenderer {
private IrcFormatHelper helper;
private MessageStyleContainer highlightStyle;
private MessageStyleContainer serverStyle;
private MessageStyleContainer errorStyle;
private MessageStyleContainer actionStyle;
private MessageStyleContainer plainStyle;
......@@ -65,6 +66,12 @@ public class ChatMessageRenderer {
context.themeUtil().res.colorForegroundSecondary,
context.themeUtil().res.colorBackgroundSecondary
);
this.errorStyle = new MessageStyleContainer(
context.themeUtil().res.colorForegroundError,
Typeface.ITALIC,
context.themeUtil().res.colorForegroundSecondary,
context.themeUtil().res.colorBackgroundSecondary
);
this.plainStyle = new MessageStyleContainer(
context.themeUtil().res.colorForeground,
Typeface.NORMAL,
......@@ -123,7 +130,7 @@ public class ChatMessageRenderer {
}
private void onBindNotice(@NonNull MessageViewHolder holder, @NonNull Message message) {
applyStyle(holder, plainStyle, highlightStyle, message.flags.Highlight);
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(context.themeUtil().translations.formatAction(
formatNick(message.sender, false),
helper.formatIrcMessage(context.client(), message)
......@@ -153,9 +160,13 @@ public class ChatMessageRenderer {
));
}
// TODO: Replace this with better display of mode changes
private void onBindMode(@NonNull MessageViewHolder holder, @NonNull Message message) {
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(message.toString());
holder.content.setText(context.themeUtil().translations.formatMode(
message.content,
formatNick(message.sender, false)
));
}
private void onBindJoin(@NonNull MessageViewHolder holder, @NonNull Message message) {
......@@ -177,6 +188,11 @@ public class ChatMessageRenderer {
private void onBindQuit(@NonNull MessageViewHolder holder, @NonNull Message message) {
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
if (message.content.isEmpty())
holder.content.setText(context.themeUtil().translations.formatQuit(
formatNick(message.sender)
));
else
holder.content.setText(context.themeUtil().translations.formatQuit(
formatNick(message.sender),
message.content
......@@ -185,27 +201,47 @@ public class ChatMessageRenderer {
private void onBindKick(@NonNull MessageViewHolder holder, @NonNull Message message) {
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(message.toString());
if (message.content.contains(" "))
holder.content.setText(context.themeUtil().translations.formatKick(
formatNick(message.sender),
message.content.substring(0, message.content.indexOf(" ")),
message.content.substring(message.content.indexOf(" ") + 1)
));
else
holder.content.setText(context.themeUtil().translations.formatKick(
formatNick(message.sender),
message.content
));
}
private void onBindKill(@NonNull MessageViewHolder holder, @NonNull Message message) {
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(message.toString());
if (message.content.contains(" "))
holder.content.setText(context.themeUtil().translations.formatKill(
formatNick(message.sender),
message.content.substring(0, message.content.indexOf(" ")),
message.content.substring(message.content.indexOf(" ") + 1)
));
else
holder.content.setText(context.themeUtil().translations.formatKill(
formatNick(message.sender),
message.content
));
}
private void onBindServer(@NonNull MessageViewHolder holder, @NonNull Message message) {
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(message.toString());
holder.content.setText(message.content);
}
private void onBindInfo(@NonNull MessageViewHolder holder, @NonNull Message message) {
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(message.toString());
holder.content.setText(message.content);
}
private void onBindError(@NonNull MessageViewHolder holder, @NonNull Message message) {
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(message.toString());
applyStyle(holder, errorStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(message.content);
}
private void onBindDayChange(@NonNull MessageViewHolder holder, @NonNull Message message) {
......@@ -216,8 +252,9 @@ public class ChatMessageRenderer {
}
private void onBindTopic(@NonNull MessageViewHolder holder, @NonNull Message message) {
System.out.println(message);
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(message.toString());
holder.content.setText(message.content);
}
private void onBindNetsplitJoin(@NonNull MessageViewHolder holder, @NonNull Message message) {
......
......@@ -23,6 +23,7 @@ package de.kuschku.quasseldroid_ng.ui.chat.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
......@@ -61,6 +62,9 @@ public class ChatFragment extends BoundFragment {
@Bind(R.id.sliding_layout)
SlidingUpPanelLayout sliderMain;
@Bind(R.id.scroll_down)
FloatingActionButton scrollDown;
private MessageAdapter messageAdapter;
private LinearLayoutManager layoutManager;
private boolean loading = false;
......@@ -91,6 +95,14 @@ public class ChatFragment extends BoundFragment {
backlogManager.requestMoreBacklog(client.backlogManager().open(), 20);
loading = true;
}
scrollDown.setVisibility(recyclerView.canScrollVertically(1) ? View.VISIBLE : View.GONE);
}
});
scrollDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
messages.smoothScrollToPosition(0);
}
});
......
......@@ -30,8 +30,6 @@ import de.kuschku.quasseldroid_ng.R;
public enum AppTheme {
QUASSEL_LIGHT(R.style.Quassel_Light),
QUASSEL_DARK(R.style.Quassel_Dark),
MATERIAL_DARK(R.style.Material_Dark),
MATERIAL_LIGHT(R.style.Material_Light),
SOLARIZED_LIGHT(R.style.Solarized_Light),
SOLARIZED_DARK(R.style.Solarized_Dark);
......@@ -49,10 +47,6 @@ public enum AppTheme {
public static AppTheme themeFromString(@Nullable String s) {
if (s == null) s = "";
switch (s) {
case "MATERIAL_DARK":
return MATERIAL_DARK;
case "MATERIAL_LIGHT":
return MATERIAL_LIGHT;
case "QUASSEL_DARK":
return QUASSEL_DARK;
case "SOLARIZED_LIGHT":
......
......@@ -564,6 +564,9 @@ public class ThemeUtil {
@AutoString(R.string.messageKill)
public String messageKill;
@AutoString(R.string.messageKillExtra)
public String messageKillExtra;
@AutoString(R.string.messageKick)
public String messageKick;
......@@ -585,6 +588,9 @@ public class ThemeUtil {
@AutoString(R.string.messageAction)
public String messageAction;
@AutoString(R.string.messageTopic)
public String messageTopic;
@AutoString(R.string.labelStatusBuffer)
public String titleStatusBuffer;
......@@ -647,8 +653,13 @@ public class ThemeUtil {
}
@NonNull
public CharSequence formatKill(@NonNull CharSequence user, @NonNull CharSequence channel) {
return SpanFormatter.format(messageKill, user, channel);
public CharSequence formatKill(@NonNull CharSequence user, @NonNull CharSequence subject) {
return SpanFormatter.format(messageKill, user, subject);
}
@NonNull
public CharSequence formatKill(@NonNull CharSequence user, @NonNull CharSequence subject, @Nullable CharSequence reason) {
return SpanFormatter.format(messageKillExtra, user, subject, reason);
}
@NonNull
......@@ -694,6 +705,11 @@ public class ThemeUtil {
public CharSequence formatPlain(@NonNull CharSequence nick, @NonNull CharSequence message) {
return SpanFormatter.format(messagePlain, nick, message);
}
@NonNull
public CharSequence formatTopic(@NonNull CharSequence nick, @NonNull CharSequence channel, @NonNull CharSequence message) {
return SpanFormatter.format(messageTopic, nick, channel, message);
}
}
public static class Colors {
......@@ -747,6 +763,10 @@ public class ThemeUtil {
@ColorInt
public int colorForegroundAction;
@AutoColor(R.attr.colorForegroundError)
@ColorInt
public int colorForegroundError;
@AutoColor(R.attr.colorBackground)
@ColorInt
public int colorBackground;
......
......@@ -34,12 +34,33 @@
app:umanoShadowHeight="4dp"
tools:showIn="@layout/activity_chat">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/messages"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/scroll_down"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_scroll_down_dark"
app:fabSize="mini"
android:layout_marginRight="12dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="12dp"
app:backgroundTint="#8A808080"
app:elevation="0dip"
app:pressedTranslationZ="0dip"
android:layout_gravity="end|bottom" />
</FrameLayout>
<include layout="@layout/widget_slider" />
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
......@@ -64,7 +64,8 @@
<attr name="colorForeground" format="color" />
<attr name="colorForegroundHighlight" format="color" />
<attr name="colorForegroundSecondary" format="color" />
<attr name="colorForegroundAction" />
<attr name="colorForegroundAction" format="color" />
<attr name="colorForegroundError" format="color" />
<attr name="colorAccentFocus" format="color" />
<attr name="colorDivider" format="color" />
......
......@@ -34,7 +34,8 @@
<string name="messageQuit">%1$s has quit</string>
<string name="messageQuitExtra">%1$s has quit (%2$s)</string>
<string name="messageKill">%1$s was killed: %2$s</string>
<string name="messageKill">%1$s has killed %2$s</string>
<string name="messageKillExtra">%1$s has killed %2$s: %3$s</string>
<string name="messageKick">%1$s has kicked %2$s from %3$s</string>
<string name="messageKickExtra">%1$s has kicked %2$s from %3$s: %4$s</string>
......@@ -47,4 +48,6 @@
<string name="messageDayChange">{ Day changed to %1$s }</string>
<string name="messageAction">* %1$s %2$s</string>
<string name="messageTopic">%1$s has changed topic for %2$s to: "%3$s"</string>
</resources>
......@@ -21,106 +21,6 @@
-->
<resources>
<style name="Material_Light" parent="AppTheme.Light">
<item name="senderColor0">@color/md_pink_500</item>
<item name="senderColor1">@color/md_purple_500</item>
<item name="senderColor2">@color/md_red_500</item>
<item name="senderColor3">@color/md_green_500</item>
<item name="senderColor4">@color/md_cyan_500</item>
<item name="senderColor5">@color/md_deep_purple_500</item>
<item name="senderColor6">@color/md_amber_500</item>
<item name="senderColor7">@color/md_blue_500</item>
<item name="senderColor8">@color/md_pink_500</item>
<item name="senderColor9">@color/md_purple_500</item>
<item name="senderColorA">@color/md_red_500</item>
<item name="senderColorB">@color/md_green_500</item>
<item name="senderColorC">@color/md_cyan_500</item>
<item name="senderColorD">@color/md_deep_purple_500</item>
<item name="senderColorE">@color/md_amber_500</item>
<item name="senderColorF">@color/md_blue_500</item>
<item name="mircColor0">#f2f2f2</item>
<item name="mircColor1">#2c2c2c</item>
<item name="mircColor2">#2467be</item>
<item name="mircColor3">#568a34</item>
<item name="mircColor4">#ec5354</item>
<item name="mircColor5">#c3282d</item>
<item name="mircColor6">#6a2398</item>
<item name="mircColor7">#fc8e23</item>
<item name="mircColor8">#fc9f25</item>
<item name="mircColor9">#8cc251</item>
<item name="mircColorA">#17838e</item>
<item name="mircColorB">#39c6d9</item>
<item name="mircColorC">#6bb6f4</item>
<item name="mircColorD">#b96ac6</item>
<item name="mircColorE">#545454</item>
<item name="mircColorF">#e0e0e0</item>
<item name="colorForeground">@color/md_light_primary_text</item>
<item name="colorForegroundHighlight">@color/md_light_primary_text</item>
<item name="colorForegroundSecondary">@color/md_light_secondary</item>
<item name="colorForegroundAction">#1a237e</item>
<item name="colorBackground">@color/md_light_background</item>
<item name="colorBackgroundHighlight">#ff8811</item>
<item name="colorBackgroundSecondary">@android:color/transparent</item>
<item name="colorBackgroundCard">@color/md_light_cards</item>
<item name="colorTintActivity">#88cc33</item>
<item name="colorTintMessage">#2277dd</item>
<item name="colorTintHighlight">#ff8811</item>
</style>
<style name="Material_Dark" parent="AppTheme">
<item name="senderColor0">@color/md_pink_500</item>
<item name="senderColor1">@color/md_purple_500</item>
<item name="senderColor2">@color/md_red_500</item>
<item name="senderColor3">@color/md_green_500</item>
<item name="senderColor4">@color/md_cyan_500</item>
<item name="senderColor5">@color/md_deep_purple_500</item>
<item name="senderColor6">@color/md_amber_500</item>
<item name="senderColor7">@color/md_blue_500</item>
<item name="senderColor8">@color/md_pink_500</item>
<item name="senderColor9">@color/md_purple_500</item>
<item name="senderColorA">@color/md_red_500</item>
<item name="senderColorB">@color/md_green_500</item>
<item name="senderColorC">@color/md_cyan_500</item>
<item name="senderColorD">@color/md_deep_purple_500</item>
<item name="senderColorE">@color/md_amber_500</item>
<item name="senderColorF">@color/md_blue_500</item>
<item name="mircColor0">#f2f2f2</item>
<item name="mircColor1">#2c2c2c</item>
<item name="mircColor2">#2467be</item>
<item name="mircColor3">#568a34</item>
<item name="mircColor4">#ec5354</item>
<item name="mircColor5">#c3282d</item>
<item name="mircColor6">#6a2398</item>
<item name="mircColor7">#fc8e23</item>
<item name="mircColor8">#fc9f25</item>
<item name="mircColor9">#8cc251</item>
<item name="mircColorA">#17838e</item>
<item name="mircColorB">#39c6d9</item>
<item name="mircColorC">#6bb6f4</item>
<item name="mircColorD">#b96ac6</item>
<item name="mircColorE">#545454</item>
<item name="mircColorF">#e0e0e0</item>
<item name="colorForeground">@color/md_dark_primary_text</item>
<item name="colorForegroundHighlight">@color/md_dark_primary_text</item>
<item name="colorForegroundSecondary">@color/md_dark_secondary</item>
<item name="colorForegroundAction">#7986cb</item>
<item name="colorBackground">@color/md_dark_background</item>
<item name="colorBackgroundHighlight">#ff8811</item>
<item name="colorBackgroundSecondary">@android:color/transparent</item>
<item name="colorBackgroundCard">@color/md_dark_cards</item>
<item name="colorTintActivity">#88cc33</item>
<item name="colorTintMessage">#2277dd</item>
<item name="colorTintHighlight">#ff8811</item>
</style>
<style name="Quassel_Light" parent="AppTheme.Light">
<item name="senderColor0">#e90d7f</item>
<item name="senderColor1">#8e55e9</item>
......@@ -160,6 +60,7 @@
<item name="colorForegroundHighlight">@color/md_light_primary_text</item>
<item name="colorForegroundSecondary">@color/md_light_secondary</item>
<item name="colorForegroundAction">#1a237e</item>
<item name="colorForegroundError">#800000</item>
<item name="colorBackground">@color/md_light_background</item>
<item name="colorBackgroundHighlight">#ff8811</item>
......@@ -210,6 +111,7 @@
<item name="colorForegroundHighlight">@color/md_dark_primary_text</item>
<item name="colorForegroundSecondary">@color/md_dark_secondary</item>
<item name="colorForegroundAction">#7986cb</item>
<item name="colorForegroundError">#800000</item>
<item name="colorBackground">@color/md_dark_background</item>
<item name="colorBackgroundHighlight">#ff8811</item>
......@@ -266,6 +168,7 @@
<item name="colorForegroundHighlight">#839495</item>
<item name="colorForegroundSecondary">#576A66</item>
<item name="colorForegroundAction">#268BD2</item>
<item name="colorForegroundError">#B00000</item>
<item name="colorBackground">#FDF6E3</item>
<item name="colorBackgroundHighlight">#268bd2</item>
......@@ -321,6 +224,7 @@
<item name="colorForegroundHighlight">#839495</item>
<item name="colorForegroundSecondary">#576A66</item>
<item name="colorForegroundAction">#268BD2</item>
<item name="colorForegroundError">#B00000</item>
<item name="colorBackground">#002B36</item>
<item name="colorBackgroundHighlight">#268bd2</item>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment