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

Cleaned up some code, implemented sender colors

parent 0f35fc76
No related branches found
No related tags found
No related merge requests found
Showing
with 149 additions and 27 deletions
......@@ -23,7 +23,7 @@ import de.kuschku.libquassel.syncables.types.BufferSyncer;
import de.kuschku.libquassel.syncables.types.BufferViewManager;
import de.kuschku.libquassel.syncables.types.Network;
import de.kuschku.libquassel.syncables.types.SyncableObject;
import de.kuschku.util.Stream;
import de.kuschku.util.backports.Stream;
public class Client {
......
......@@ -7,12 +7,18 @@ import android.content.res.Configuration;
import android.os.Bundle;
import android.os.IBinder;
import android.support.design.widget.Snackbar;
import android.support.v4.text.TextUtilsCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatImageButton;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
......@@ -33,6 +39,9 @@ import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IProfile;
import com.mikepenz.materialdrawer.util.KeyboardUtil;
import org.joda.time.format.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
......@@ -52,8 +61,9 @@ import de.kuschku.libquassel.primitives.types.Message;
import de.kuschku.libquassel.syncables.types.BufferViewConfig;
import de.kuschku.libquassel.syncables.types.Network;
import de.kuschku.quasseldroid_ng.utils.ServerAddress;
import de.kuschku.util.IrcUserUtils;
import de.kuschku.util.ObservableList;
import de.kuschku.util.Stream;
import de.kuschku.util.backports.Stream;
public class MainActivity extends AppCompatActivity {
......@@ -319,7 +329,40 @@ public class MainActivity extends AppCompatActivity {
@Override
public void onBindViewHolder(MessageViewHolder holder, int position) {
holder.text1.setText(messageList.list.get(position).toString());
int[] colors = {
R.color.md_pink_500,
R.color.md_purple_500,
R.color.md_red_500,
R.color.md_green_500,
R.color.md_cyan_500,
R.color.md_deep_purple_500,
R.color.md_amber_500,
R.color.md_blue_500,
R.color.md_pink_700,
R.color.md_purple_700,
R.color.md_red_700,
R.color.md_green_700,
R.color.md_cyan_700,
R.color.md_deep_purple_700,
R.color.md_amber_700,
R.color.md_blue_700
};
Message msg = messageList.list.get(position);
SpannableString timeSpan = new SpannableString(DateTimeFormat.forPattern("[hh:mm]").print(msg.time));
timeSpan.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.md_light_secondary)), 0, timeSpan.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
String nick = IrcUserUtils.getNick(msg.sender);
SpannableString nickSpan = new SpannableString(nick);
nickSpan.setSpan(new ForegroundColorSpan(getResources().getColor(colors[IrcUserUtils.getSenderColor(nick)])), 0, nickSpan.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
holder.text1.setText(TextUtils.concat(
timeSpan,
" ",
nickSpan,
" ",
msg.content
));
}
@Override
......
......@@ -9,7 +9,7 @@ import java.util.Set;
import de.kuschku.libquassel.localtypes.Buffer;
import de.kuschku.libquassel.syncables.types.Network;
import de.kuschku.util.Stream;
import de.kuschku.util.backports.Stream;
public class NetworkDrawerItem extends PrimaryDrawerItem {
final Network network;
......
package de.kuschku.util;
import java.nio.charset.Charset;
import java.util.Locale;
public class IrcUserUtils {
private IrcUserUtils() {
}
public static int getSenderColor(String nick) {
nick = trimEnd(nick, '_').toLowerCase(Locale.US);
byte[] data = nick.getBytes(Charset.forName("ISO-8859-1"));
return (0xf & CRCUtils.qChecksum(data));
}
public static String trimEnd(String str, char character) {
char[] val = str.toCharArray();
int len = val.length;
while ((0 < len) && (val[len - 1] == character)) {
len--;
}
return ((len < val.length)) ? str.substring(0, len) : str;
}
public static class CRCUtils {
private CRCUtils() {
}
public static int qChecksum(byte[] data) {
int crc = 0xffff;
int crcHighBitMask = 0x8000;
for (byte b : data) {
int c = reflect(b, 8);
for (int j = 0x80; j > 0; j >>= 1) {
int highBit = crc & crcHighBitMask;
crc <<= 1;
if ((c & j) > 0) {
highBit ^= crcHighBitMask;
}
if (highBit > 0) {
crc ^= 0x1021;
}
}
}
crc = reflect(crc, 16);
crc ^= 0xffff;
crc &= 0xffff;
return crc;
}
private static int reflect(int crc, int n) {
int j = 1, crcout = 0;
for (int i = (1 << (n - 1)); i > 0; i >>= 1) {
if ((crc & i) > 0) {
crcout |= j;
}
j <<= 1;
}
return crcout;
}
}
public static String getNick(String hostmask) {
return hostmask.split("!")[0];
}
public static String getUser(String hostmask) {
return hostmask.split("!")[1].split("@")[0];
}
public static String getHost(String hostmask) {
return hostmask.split("@")[1];
}
}
\ No newline at end of file
......@@ -23,16 +23,14 @@ public class ReflectionUtils {
classes[i] = argv[i].getClass();
}
Method m = getMethodFromSignature(name, o.getClass(), classes);
try {
if (m == null)
throw new SyncInvocationException(String.format("Error invoking %s::%s with arguments %s", o.getClass().getSimpleName(), name, Arrays.toString(argv)));
if (m != null) {
try {
m.invoke(o, argv);
}
} catch (Exception e) {
throw new SyncInvocationException(e, String.format("Error invoking %s::%s with arguments %s", o.getClass().getSimpleName(), name, Arrays.toString(argv)));
}
throw new SyncInvocationException(String.format("Error invoking %s::%s with arguments %s", o.getClass().getSimpleName(), name, Arrays.toString(argv)));
}
@NonNull
......
......@@ -8,6 +8,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import de.kuschku.util.backports.Stream;
public class SortedListWrapper<T> implements List<T> {
final SortedList<T> list;
......
package de.kuschku.util;
package de.kuschku.util.backports;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
......
package de.kuschku.util;
package de.kuschku.util.backports;
public interface BinaryFunction<A, B, C> {
C apply(A arg0, B arg1);
......
package de.kuschku.util;
package de.kuschku.util.backports;
public interface Consumer<T> {
void apply(T elem);
......
package de.kuschku.util;
package de.kuschku.util.backports;
public interface ICollector<T, R> {
R collect(Stream<T> stream);
......
package de.kuschku.util;
package de.kuschku.util.backports;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
......
package de.kuschku.util;
package de.kuschku.util.backports;
public class Optionals {
private Optionals() {
......
package de.kuschku.util;
package de.kuschku.util.backports;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
......
package de.kuschku.util;
package de.kuschku.util.backports;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
......@@ -10,7 +10,7 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import de.kuschku.util.collectors.Collectors;
import de.kuschku.util.backports.collectors.Collectors;
public class Stream<T> {
List<T> list;
......
package de.kuschku.util.collectors;
package de.kuschku.util.backports.collectors;
import java.util.List;
import java.util.Map;
import de.kuschku.util.Stream;
import de.kuschku.util.backports.Stream;
public class Collectors {
private Collectors() {
......
package de.kuschku.util.collectors;
package de.kuschku.util.backports.collectors;
import java.util.List;
import de.kuschku.util.ICollector;
import de.kuschku.util.Stream;
import de.kuschku.util.backports.ICollector;
import de.kuschku.util.backports.Stream;
public class ListCollector<T> implements ICollector<T, List<T>> {
@Override
......
package de.kuschku.util.collectors;
package de.kuschku.util.backports.collectors;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.kuschku.util.ICollector;
import de.kuschku.util.Stream;
import de.kuschku.util.backports.ICollector;
import de.kuschku.util.backports.Stream;
public class MapCollector<T> implements ICollector<T, Map<T, T>> {
@Override
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment