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

Updated some stuff

parent 2e0623a1
No related branches found
No related tags found
No related merge requests found
Showing
with 332 additions and 80 deletions
...@@ -11,3 +11,4 @@ gradle* ...@@ -11,3 +11,4 @@ gradle*
gradle.properties gradle.properties
*/version.properties */version.properties
*.sh *.sh
signing.gradle
\ No newline at end of file
...@@ -2,16 +2,54 @@ apply plugin: 'com.android.application' ...@@ -2,16 +2,54 @@ apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt' apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'me.tatarka.retrolambda' apply plugin: 'me.tatarka.retrolambda'
if (project.hasProperty("storeFile")) {
android { android {
compileSdkVersion 'Google Inc.:Google APIs:23' signingConfigs {
release {
storeFile file(project.property("storeFile"))
storePassword project.property("storePassword")
keyAlias project.property("keyAlias")
keyPassword project.property("keyPassword")
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
}
def versionPropsFile = file('version.properties')
def versionBuild = 0
if (versionPropsFile.canRead()) {
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def runTasks = gradle.startParameter.taskNames
versionBuild = Integer.valueOf(versionProps['VERSION_BUILD'])
if ('assemble' in runTasks || 'assembleRelease' in runTasks || 'aR' in runTasks) {
versionBuild = versionBuild + 1
}
versionProps['VERSION_BUILD'] = versionBuild.toString()
versionProps.store(versionPropsFile.newWriter(), null)
} else {
throw new GradleException("Could not read version.properties!"+versionPropsFile.toString())
}
def rawVersionName = "0.2.0"
android {
compileSdkVersion 23
buildToolsVersion "23.0.2" buildToolsVersion "23.0.2"
defaultConfig { defaultConfig {
applicationId "de.kuschku.quasseldroid_ng" applicationId "de.kuschku.quasseldroid_ng"
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 23 targetSdkVersion 23
versionCode 1 versionCode versionBuild
versionName "0.1.0" versionName rawVersionName + " Build #" + versionBuild
} }
buildTypes { buildTypes {
release { release {
...@@ -21,7 +59,9 @@ android { ...@@ -21,7 +59,9 @@ android {
applicationVariants.all { variant -> applicationVariants.all { variant ->
variant.outputs.each { output -> variant.outputs.each { output ->
def fileName = output.outputFile.name.replace(".apk", String.format("-%s-build%d.apk", defaultConfig.versionName, versionCode)) def fileName = output.outputFile.name
.replace(".apk", String.format("-%s-build%d.apk", rawVersionName, versionCode))
.replace("app-", "QuasselDroidNG-")
output.outputFile = new File(output.outputFile.parent, fileName) output.outputFile = new File(output.outputFile.parent, fileName)
} }
} }
......
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:supportsRtl="true" android:supportsRtl="true">
android:theme="@style/AppTheme.Light">
<service android:name=".service.QuasselService" /> <service android:name=".service.QuasselService" />
...@@ -17,7 +16,7 @@ ...@@ -17,7 +16,7 @@
android:name=".ui.chat.ChatActivity" android:name=".ui.chat.ChatActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleTask" android:launchMode="singleTask"
android:theme="@style/Quassel"> android:theme="@style/AppTheme.Light">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
......
package de.kuschku.libquassel.localtypes.backlogmanagers; package de.kuschku.libquassel.localtypes.backlogmanagers;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log;
import com.android.internal.util.Predicate; import org.joda.time.DateTime;
import java.util.HashSet;
import java.util.Set;
import de.kuschku.libquassel.Client; import de.kuschku.libquassel.Client;
import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.message.Message;
import de.kuschku.quasseldroid_ng.ui.AppContext; import de.kuschku.libquassel.primitives.types.BufferInfo;
import de.kuschku.util.observables.callbacks.UICallback; import de.kuschku.util.observables.callbacks.UICallback;
import de.kuschku.util.observables.lists.ObservableSortedList; import de.kuschku.util.observables.lists.ObservableSortedList;
public class BacklogFilter implements UICallback { public class BacklogFilter implements UICallback {
@NonNull @NonNull
private final Client client; private final Client client;
private final int bufferId;
@NonNull @NonNull
private final ObservableSortedList<Message> unfiltered; private final ObservableSortedList<Message> unfiltered;
@NonNull @NonNull
private final ObservableSortedList<Message> filtered; private final ObservableSortedList<Message> filtered;
public BacklogFilter(@NonNull Client client, @NonNull ObservableSortedList<Message> unfiltered, @NonNull ObservableSortedList<Message> filtered) { private final Set<Message.Type> filteredTypes = new HashSet<>();
private DateTime earliestMessage;
public BacklogFilter(@NonNull Client client, int bufferId, @NonNull ObservableSortedList<Message> unfiltered, @NonNull ObservableSortedList<Message> filtered) {
this.client = client; this.client = client;
this.bufferId = bufferId;
this.unfiltered = unfiltered; this.unfiltered = unfiltered;
this.filtered = filtered; this.filtered = filtered;
} }
...@@ -27,11 +37,66 @@ public class BacklogFilter implements UICallback { ...@@ -27,11 +37,66 @@ public class BacklogFilter implements UICallback {
@Override @Override
public void notifyItemInserted(int position) { public void notifyItemInserted(int position) {
Message message = unfiltered.get(position); Message message = unfiltered.get(position);
if (filterItem(message)) filtered.add(message); if (!filterItem(message)) filtered.add(message);
if (message.time.isBefore(earliestMessage)) earliestMessage = message.time;
updateDayChangeMessages();
}
private void updateDayChangeMessages() {
DateTime now = DateTime.now().withMillisOfDay(0);
int id = -1;
while (now.isAfter(earliestMessage)) {
filtered.add(new Message(
id,
now,
Message.Type.DayChange,
new Message.Flags(false, false, false, false, false),
new BufferInfo(
bufferId,
-1,
BufferInfo.Type.INVALID,
-1,
null
),
"",
""
));
now = now.minusDays(1);
}
} }
private boolean filterItem(Message message) { private boolean filterItem(Message message) {
return !client.getIgnoreListManager().matches(message); return client.getIgnoreListManager().matches(message) || filteredTypes.contains(message.type);
}
public void addFilter(Message.Type type) {
filteredTypes.add(type);
updateRemove();
}
public void removeFilter(Message.Type type) {
filteredTypes.remove(type);
updateAdd();
}
private void updateRemove() {
for (Message message : unfiltered) {
if (filterItem(message)) {
String simpleName = getClass().getSimpleName();
Log.e(simpleName, "Filtered: "+message);
filtered.remove(message);
}
}
}
private void updateAdd() {
for (Message message : unfiltered) {
if (!filterItem(message)) {
String simpleName = getClass().getSimpleName();
Log.e(simpleName, "Unfiltered: "+message);
filtered.add(message);
}
}
} }
@Override @Override
......
...@@ -19,11 +19,13 @@ import de.kuschku.libquassel.functions.types.InitDataFunction; ...@@ -19,11 +19,13 @@ import de.kuschku.libquassel.functions.types.InitDataFunction;
import de.kuschku.libquassel.functions.types.SyncFunction; import de.kuschku.libquassel.functions.types.SyncFunction;
import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.message.Message;
import de.kuschku.libquassel.primitives.types.QVariant; import de.kuschku.libquassel.primitives.types.QVariant;
import de.kuschku.util.AndroidAssert;
import de.kuschku.util.observables.AutoScroller; import de.kuschku.util.observables.AutoScroller;
import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper;
import de.kuschku.util.observables.lists.ObservableComparableSortedList; import de.kuschku.util.observables.lists.ObservableComparableSortedList;
import de.kuschku.util.observables.lists.ObservableSortedList; import de.kuschku.util.observables.lists.ObservableSortedList;
import static de.kuschku.util.AndroidAssert.*;
import static de.kuschku.util.AndroidAssert.assertNotNull; import static de.kuschku.util.AndroidAssert.assertNotNull;
public class SimpleBacklogManager extends BacklogManager<SimpleBacklogManager> { public class SimpleBacklogManager extends BacklogManager<SimpleBacklogManager> {
...@@ -107,10 +109,11 @@ public class SimpleBacklogManager extends BacklogManager<SimpleBacklogManager> { ...@@ -107,10 +109,11 @@ public class SimpleBacklogManager extends BacklogManager<SimpleBacklogManager> {
} }
private void ensureExisting(@IntRange(from = -1) int bufferId) { private void ensureExisting(@IntRange(from = -1) int bufferId) {
assertNotNull(client);
if (backlogs.get(bufferId) == null) { if (backlogs.get(bufferId) == null) {
ObservableComparableSortedList<Message> messages = new ObservableComparableSortedList<>(Message.class, true); ObservableComparableSortedList<Message> messages = new ObservableComparableSortedList<>(Message.class, true);
ObservableComparableSortedList<Message> filteredMessages = new ObservableComparableSortedList<>(Message.class, true); ObservableComparableSortedList<Message> filteredMessages = new ObservableComparableSortedList<>(Message.class, true);
BacklogFilter backlogFilter = new BacklogFilter(client, messages, filteredMessages); BacklogFilter backlogFilter = new BacklogFilter(client, bufferId, messages, filteredMessages);
messages.addCallback(backlogFilter); messages.addCallback(backlogFilter);
backlogs.put(bufferId, messages); backlogs.put(bufferId, messages);
filteredBacklogs.put(bufferId, filteredMessages); filteredBacklogs.put(bufferId, filteredMessages);
......
...@@ -75,7 +75,7 @@ public class Message implements ContentComparable<Message> { ...@@ -75,7 +75,7 @@ public class Message implements ContentComparable<Message> {
@Override @Override
public int compareTo(@NonNull Message another) { public int compareTo(@NonNull Message another) {
return this.messageId - another.messageId; return this.time.compareTo(another.time);
} }
public enum Type { public enum Type {
......
...@@ -119,6 +119,8 @@ public class DatastreamPeer implements RemotePeer { ...@@ -119,6 +119,8 @@ public class DatastreamPeer implements RemotePeer {
} }
public void onEventBackgroundThread(@NonNull SyncFunction func) { public void onEventBackgroundThread(@NonNull SyncFunction func) {
assertNotNull(func);
assertNotNull(connection.getOutputExecutor()); assertNotNull(connection.getOutputExecutor());
connection.getOutputExecutor().submit(new OutputRunnable<>( connection.getOutputExecutor().submit(new OutputRunnable<>(
VariantVariantListSerializer.<SyncFunction>get(), VariantVariantListSerializer.<SyncFunction>get(),
...@@ -127,6 +129,9 @@ public class DatastreamPeer implements RemotePeer { ...@@ -127,6 +129,9 @@ public class DatastreamPeer implements RemotePeer {
} }
public void onEventBackgroundThread(@NonNull RpcCallFunction func) { public void onEventBackgroundThread(@NonNull RpcCallFunction func) {
assertNotNull(func);
Log.e("TEST", String.valueOf(func));
assertNotNull(connection.getOutputExecutor()); assertNotNull(connection.getOutputExecutor());
connection.getOutputExecutor().submit(new OutputRunnable<>( connection.getOutputExecutor().submit(new OutputRunnable<>(
VariantVariantListSerializer.<RpcCallFunction>get(), VariantVariantListSerializer.<RpcCallFunction>get(),
...@@ -135,6 +140,8 @@ public class DatastreamPeer implements RemotePeer { ...@@ -135,6 +140,8 @@ public class DatastreamPeer implements RemotePeer {
} }
public void onEventBackgroundThread(@NonNull InitRequestFunction func) { public void onEventBackgroundThread(@NonNull InitRequestFunction func) {
assertNotNull(func);
assertNotNull(connection.getOutputExecutor()); assertNotNull(connection.getOutputExecutor());
connection.getOutputExecutor().submit(new OutputRunnable<>( connection.getOutputExecutor().submit(new OutputRunnable<>(
VariantVariantListSerializer.<InitRequestFunction>get(), VariantVariantListSerializer.<InitRequestFunction>get(),
...@@ -143,6 +150,8 @@ public class DatastreamPeer implements RemotePeer { ...@@ -143,6 +150,8 @@ public class DatastreamPeer implements RemotePeer {
} }
public void onEventBackgroundThread(@NonNull InitDataFunction func) { public void onEventBackgroundThread(@NonNull InitDataFunction func) {
assertNotNull(func);
assertNotNull(connection.getOutputExecutor()); assertNotNull(connection.getOutputExecutor());
connection.getOutputExecutor().submit(new OutputRunnable<>( connection.getOutputExecutor().submit(new OutputRunnable<>(
VariantVariantListSerializer.<InitDataFunction>get(), VariantVariantListSerializer.<InitDataFunction>get(),
...@@ -151,6 +160,8 @@ public class DatastreamPeer implements RemotePeer { ...@@ -151,6 +160,8 @@ public class DatastreamPeer implements RemotePeer {
} }
public void onEventBackgroundThread(@NonNull Heartbeat func) { public void onEventBackgroundThread(@NonNull Heartbeat func) {
assertNotNull(func);
assertNotNull(connection.getOutputExecutor()); assertNotNull(connection.getOutputExecutor());
connection.getOutputExecutor().submit(new OutputRunnable<>( connection.getOutputExecutor().submit(new OutputRunnable<>(
VariantVariantListSerializer.<InitDataFunction>get(), VariantVariantListSerializer.<InitDataFunction>get(),
...@@ -159,6 +170,8 @@ public class DatastreamPeer implements RemotePeer { ...@@ -159,6 +170,8 @@ public class DatastreamPeer implements RemotePeer {
} }
public void onEventBackgroundThread(@NonNull HeartbeatReply func) { public void onEventBackgroundThread(@NonNull HeartbeatReply func) {
assertNotNull(func);
assertNotNull(connection.getOutputExecutor()); assertNotNull(connection.getOutputExecutor());
connection.getOutputExecutor().submit(new OutputRunnable<>( connection.getOutputExecutor().submit(new OutputRunnable<>(
VariantVariantListSerializer.<InitDataFunction>get(), VariantVariantListSerializer.<InitDataFunction>get(),
...@@ -167,6 +180,8 @@ public class DatastreamPeer implements RemotePeer { ...@@ -167,6 +180,8 @@ public class DatastreamPeer implements RemotePeer {
} }
public void onEventBackgroundThread(@NonNull HandshakeFunction func) { public void onEventBackgroundThread(@NonNull HandshakeFunction func) {
assertNotNull(func);
assertNotNull(connection.getOutputExecutor()); assertNotNull(connection.getOutputExecutor());
Map<String, QVariant> variantMap = MessageTypeRegistry.toVariantMap(func.data).data; Map<String, QVariant> variantMap = MessageTypeRegistry.toVariantMap(func.data).data;
assertNotNull(variantMap); assertNotNull(variantMap);
......
...@@ -6,6 +6,8 @@ import java.io.IOException; ...@@ -6,6 +6,8 @@ import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import de.kuschku.libquassel.functions.types.HandshakeFunction; import de.kuschku.libquassel.functions.types.HandshakeFunction;
import de.kuschku.libquassel.functions.types.Heartbeat;
import de.kuschku.libquassel.functions.types.HeartbeatReply;
import de.kuschku.libquassel.functions.types.InitDataFunction; import de.kuschku.libquassel.functions.types.InitDataFunction;
import de.kuschku.libquassel.functions.types.InitRequestFunction; import de.kuschku.libquassel.functions.types.InitRequestFunction;
import de.kuschku.libquassel.functions.types.RpcCallFunction; import de.kuschku.libquassel.functions.types.RpcCallFunction;
...@@ -26,6 +28,10 @@ public interface RemotePeer { ...@@ -26,6 +28,10 @@ public interface RemotePeer {
void onEventBackgroundThread(@NonNull HandshakeFunction func); void onEventBackgroundThread(@NonNull HandshakeFunction func);
void onEventBackgroundThread(@NonNull Heartbeat func);
void onEventBackgroundThread(@NonNull HeartbeatReply func);
void processMessage() throws IOException; void processMessage() throws IOException;
@NonNull @NonNull
......
...@@ -5,7 +5,8 @@ import android.support.annotation.StyleRes; ...@@ -5,7 +5,8 @@ import android.support.annotation.StyleRes;
import de.kuschku.quasseldroid_ng.R; import de.kuschku.quasseldroid_ng.R;
public enum AppTheme { public enum AppTheme {
QUASSEL(R.style.Quassel), QUASSEL_LIGHT(R.style.Quassel_Light),
QUASSEL_DARK(R.style.Quassel_Dark),
MATERIAL_DARK(R.style.Material_Dark), MATERIAL_DARK(R.style.Material_Dark),
MATERIAL_LIGHT(R.style.Material_Light); MATERIAL_LIGHT(R.style.Material_Light);
...@@ -24,9 +25,10 @@ public enum AppTheme { ...@@ -24,9 +25,10 @@ public enum AppTheme {
switch (s) { switch (s) {
case "MATERIAL_DARK": return MATERIAL_DARK; case "MATERIAL_DARK": return MATERIAL_DARK;
case "MATERIAL_LIGHT": return MATERIAL_LIGHT; case "MATERIAL_LIGHT": return MATERIAL_LIGHT;
case "QUASSEL_DARK": return QUASSEL_DARK;
default: default:
case "QUASSEL": return QUASSEL; case "QUASSEL_LIGHT": return QUASSEL_LIGHT;
} }
} }
......
package de.kuschku.quasseldroid_ng.ui.chat.chatview; package de.kuschku.quasseldroid_ng.ui.chat.chatview;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.support.annotation.ColorInt; import android.support.annotation.ColorInt;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
...@@ -11,18 +10,15 @@ import android.util.Log; ...@@ -11,18 +10,15 @@ import android.util.Log;
import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.DateTimeFormatter;
import de.kuschku.libquassel.Client;
import de.kuschku.libquassel.localtypes.Buffer; import de.kuschku.libquassel.localtypes.Buffer;
import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.message.Message;
import de.kuschku.quasseldroid_ng.BuildConfig;
import de.kuschku.quasseldroid_ng.R; import de.kuschku.quasseldroid_ng.R;
import de.kuschku.quasseldroid_ng.ui.AppContext; import de.kuschku.quasseldroid_ng.ui.AppContext;
import de.kuschku.quasseldroid_ng.ui.AppTheme;
import de.kuschku.util.annotationbind.AutoBinder; import de.kuschku.util.annotationbind.AutoBinder;
import de.kuschku.util.annotationbind.AutoString; import de.kuschku.util.annotationbind.AutoString;
import de.kuschku.util.irc.IrcFormatHelper; import de.kuschku.util.irc.IrcFormatHelper;
import de.kuschku.util.irc.IrcUserUtils; import de.kuschku.util.irc.IrcUserUtils;
import de.kuschku.util.ui.DateFormatHelper; import de.kuschku.util.ui.DateTimeFormatHelper;
import de.kuschku.util.ui.SpanFormatter; import de.kuschku.util.ui.SpanFormatter;
import de.kuschku.util.ui.ThemeUtil; import de.kuschku.util.ui.ThemeUtil;
...@@ -30,8 +26,6 @@ import static de.kuschku.util.AndroidAssert.assertNotNull; ...@@ -30,8 +26,6 @@ import static de.kuschku.util.AndroidAssert.assertNotNull;
@UiThread @UiThread
public class ChatMessageRenderer { public class ChatMessageRenderer {
@NonNull
private final DateTimeFormatter format;
@NonNull @NonNull
private final FormatStrings strings; private final FormatStrings strings;
...@@ -45,7 +39,6 @@ public class ChatMessageRenderer { ...@@ -45,7 +39,6 @@ public class ChatMessageRenderer {
private AppContext context; private AppContext context;
public ChatMessageRenderer(@NonNull Context ctx, @NonNull AppContext context) { public ChatMessageRenderer(@NonNull Context ctx, @NonNull AppContext context) {
this.format = DateFormatHelper.getTimeFormatter(ctx);
this.strings = new FormatStrings(ctx); this.strings = new FormatStrings(ctx);
this.context = context; this.context = context;
setTheme(context.getThemeUtil()); setTheme(context.getThemeUtil());
...@@ -211,7 +204,9 @@ public class ChatMessageRenderer { ...@@ -211,7 +204,9 @@ public class ChatMessageRenderer {
private void onBindDayChange(@NonNull MessageViewHolder holder, @NonNull Message message) { private void onBindDayChange(@NonNull MessageViewHolder holder, @NonNull Message message) {
applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight); applyStyle(holder, serverStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(message.toString()); holder.content.setText(strings.formatDayChange(
context.getThemeUtil().formatter.getLongDateFormatter().print(message.time)
));
} }
private void onBindTopic(@NonNull MessageViewHolder holder, @NonNull Message message) { private void onBindTopic(@NonNull MessageViewHolder holder, @NonNull Message message) {
...@@ -235,7 +230,7 @@ public class ChatMessageRenderer { ...@@ -235,7 +230,7 @@ public class ChatMessageRenderer {
} }
public void onBind(@NonNull MessageViewHolder holder, @NonNull Message message) { public void onBind(@NonNull MessageViewHolder holder, @NonNull Message message) {
holder.time.setText(format.print(message.time)); holder.time.setText(context.getThemeUtil().formatter.getTimeFormatter().print(message.time));
switch (message.type) { switch (message.type) {
case Plain: case Plain:
onBindPlain(holder, message); onBindPlain(holder, message);
......
package de.kuschku.util.ui;
import android.content.Context;
import android.support.annotation.NonNull;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.text.SimpleDateFormat;
public class DateFormatHelper {
private DateFormatHelper() {
}
@NonNull
public static DateTimeFormatter getTimeFormatter(Context ctx) {
return DateTimeFormat.forPattern(((SimpleDateFormat) android.text.format.DateFormat.getTimeFormat(ctx)).toLocalizedPattern());
}
}
package de.kuschku.util.ui;
import android.content.Context;
import android.support.annotation.NonNull;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.text.SimpleDateFormat;
public class DateTimeFormatHelper {
@NonNull
private final Context context;
public DateTimeFormatHelper(@NonNull Context context) {
this.context = context;
}
@NonNull
public DateTimeFormatter getTimeFormatter() {
return getTimeFormatter(context);
}
@NonNull
public DateTimeFormatter getDateFormatter() {
return getDateFormatter(context);
}
@NonNull
public DateTimeFormatter getLongDateFormatter() {
return getLongDateFormatter(context);
}
@NonNull
public DateTimeFormatter getMediumDateFormatter() {
return getMediumDateFormatter(context);
}
@NonNull
public static DateTimeFormatter getTimeFormatter(Context ctx) {
return DateTimeFormat.forPattern(((SimpleDateFormat) android.text.format.DateFormat.getTimeFormat(ctx)).toLocalizedPattern());
}
@NonNull
public static DateTimeFormatter getDateFormatter(Context ctx) {
return DateTimeFormat.forPattern(((SimpleDateFormat) android.text.format.DateFormat.getDateFormat(ctx)).toLocalizedPattern());
}
@NonNull
public static DateTimeFormatter getLongDateFormatter(Context ctx) {
return DateTimeFormat.forPattern(((SimpleDateFormat) android.text.format.DateFormat.getLongDateFormat(ctx)).toLocalizedPattern());
}
@NonNull
public static DateTimeFormatter getMediumDateFormatter(Context ctx) {
return DateTimeFormat.forPattern(((SimpleDateFormat) android.text.format.DateFormat.getMediumDateFormat(ctx)).toLocalizedPattern());
}
}
...@@ -14,13 +14,16 @@ import de.kuschku.util.annotationbind.AutoColor; ...@@ -14,13 +14,16 @@ import de.kuschku.util.annotationbind.AutoColor;
public class ThemeUtil { public class ThemeUtil {
@NonNull @NonNull
public final Colors colors = new Colors(); public final Colors colors = new Colors();
public DateTimeFormatHelper formatter;
public ThemeUtil(@NonNull Context ctx) { public ThemeUtil(@NonNull Context ctx) {
initColors(new ContextThemeWrapper(ctx, ctx.getTheme())); initColors(new ContextThemeWrapper(ctx, ctx.getTheme()));
formatter = new DateTimeFormatHelper(ctx);
} }
public ThemeUtil(@NonNull Context ctx, @NonNull AppTheme theme) { public ThemeUtil(@NonNull Context ctx, @NonNull AppTheme theme) {
initColors(new ContextThemeWrapper(ctx, theme.themeId)); initColors(new ContextThemeWrapper(ctx, theme.themeId));
formatter = new DateTimeFormatHelper(ctx);
} }
@UiThread @UiThread
...@@ -37,6 +40,18 @@ public class ThemeUtil { ...@@ -37,6 +40,18 @@ public class ThemeUtil {
@ColorInt @ColorInt
public int transparent; public int transparent;
@AutoColor(R.attr.colorPrimary)
@ColorInt
public int colorPrimary;
@AutoColor(R.attr.colorPrimaryDark)
@ColorInt
public int colorPrimaryDark;
@AutoColor(R.attr.colorAccent)
@ColorInt
public int colorAccent;
@AutoColor({R.attr.senderColor0, R.attr.senderColor1, R.attr.senderColor2, R.attr.senderColor3, @AutoColor({R.attr.senderColor0, R.attr.senderColor1, R.attr.senderColor2, R.attr.senderColor3,
R.attr.senderColor4, R.attr.senderColor5, R.attr.senderColor6, R.attr.senderColor7, R.attr.senderColor4, R.attr.senderColor5, R.attr.senderColor6, R.attr.senderColor7,
R.attr.senderColor8, R.attr.senderColor9, R.attr.senderColorA, R.attr.senderColorB, R.attr.senderColor8, R.attr.senderColor9, R.attr.senderColorA, R.attr.senderColorB,
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
android:background="?attr/chatlineBackground" android:background="?attr/colorBackgroundCard"
android:orientation="horizontal"> android:orientation="horizontal">
<android.support.v7.widget.AppCompatEditText <android.support.v7.widget.AppCompatEditText
...@@ -40,5 +40,5 @@ ...@@ -40,5 +40,5 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dip" android:layout_height="0dip"
android:layout_weight="1" android:layout_weight="1"
android:background="?attr/chatlineBackground" /> android:background="?attr/colorBackgroundSecondary" />
</LinearLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<attr name="messagesBackground" format="reference" />
<attr name="chatlineBackground" format="reference" />
<attr name="dividerColor" format="reference" />
<!-- sender colors --> <!-- sender colors -->
<attr name="senderColor0" format="color" /> <attr name="senderColor0" format="color" />
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<!--
<color name="colorPrimary">#3F51B5</color> <color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color> <color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color> <color name="colorAccent">#FF4081</color>
-->
<color name="messagesBackgroundLight">#f5f5f5</color> <color name="colorPrimary">#0271B3</color>
<color name="messagesBackgroundDark">@android:color/transparent</color> <color name="colorPrimaryDark">#02588c</color>
<color name="colorAccent">#ffeb3b</color>
</resources> </resources>
...@@ -6,10 +6,6 @@ ...@@ -6,10 +6,6 @@
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item> <item name="colorAccent">@color/colorAccent</item>
<item name="dividerColor">@color/material_drawer_dark_divider</item>
<item name="messagesBackground">@color/messagesBackgroundDark</item>
<item name="chatlineBackground">@color/md_dark_cards</item>
</style> </style>
<style name="AppTheme.Light" parent="MaterialDrawerTheme.Light.DarkToolbar.TranslucentStatus"> <style name="AppTheme.Light" parent="MaterialDrawerTheme.Light.DarkToolbar.TranslucentStatus">
...@@ -17,10 +13,6 @@ ...@@ -17,10 +13,6 @@
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item> <item name="colorAccent">@color/colorAccent</item>
<item name="dividerColor">@color/material_drawer_divider</item>
<item name="messagesBackground">@color/messagesBackgroundLight</item>
<item name="chatlineBackground">@color/md_light_cards</item>
</style> </style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<style name="Material_Light" parent="AppTheme.Light">
<style name="Material_Dark" parent="AppTheme">
<item name="senderColor0">@color/md_pink_500</item> <item name="senderColor0">@color/md_pink_500</item>
<item name="senderColor1">@color/md_purple_500</item> <item name="senderColor1">@color/md_purple_500</item>
<item name="senderColor2">@color/md_red_500</item> <item name="senderColor2">@color/md_red_500</item>
...@@ -19,22 +18,39 @@ ...@@ -19,22 +18,39 @@
<item name="senderColorE">@color/md_amber_500</item> <item name="senderColorE">@color/md_amber_500</item>
<item name="senderColorF">@color/md_blue_500</item> <item name="senderColorF">@color/md_blue_500</item>
<item name="colorForeground">@color/md_dark_primary_text</item> <item name="mircColor0">#f2f2f2</item>
<item name="colorForegroundHighlight">@color/md_dark_primary_text</item> <item name="mircColor1">#2c2c2c</item>
<item name="colorForegroundSecondary">@color/md_dark_secondary</item> <item name="mircColor2">#2467be</item>
<item name="colorForegroundAction">#7986cb</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="colorBackground">@color/md_dark_background</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="colorBackgroundHighlight">#ff8811</item>
<item name="colorBackgroundSecondary">@android:color/transparent</item> <item name="colorBackgroundSecondary">@android:color/transparent</item>
<item name="colorBackgroundCard">@color/md_dark_cards</item> <item name="colorBackgroundCard">@color/md_light_cards</item>
<item name="colorTintActivity">#88cc33</item> <item name="colorTintActivity">#88cc33</item>
<item name="colorTintMessage">#2277dd</item> <item name="colorTintMessage">#2277dd</item>
<item name="colorTintHighlight">#ff8811</item> <item name="colorTintHighlight">#ff8811</item>
</style> </style>
<style name="Material_Light" parent="AppTheme"> <style name="Material_Dark" parent="AppTheme">
<item name="senderColor0">@color/md_pink_500</item> <item name="senderColor0">@color/md_pink_500</item>
<item name="senderColor1">@color/md_purple_500</item> <item name="senderColor1">@color/md_purple_500</item>
<item name="senderColor2">@color/md_red_500</item> <item name="senderColor2">@color/md_red_500</item>
...@@ -52,22 +68,39 @@ ...@@ -52,22 +68,39 @@
<item name="senderColorE">@color/md_amber_500</item> <item name="senderColorE">@color/md_amber_500</item>
<item name="senderColorF">@color/md_blue_500</item> <item name="senderColorF">@color/md_blue_500</item>
<item name="colorForeground">@color/md_light_primary_text</item> <item name="mircColor0">#f2f2f2</item>
<item name="colorForegroundHighlight">@color/md_light_primary_text</item> <item name="mircColor1">#2c2c2c</item>
<item name="colorForegroundSecondary">@color/md_light_secondary</item> <item name="mircColor2">#2467be</item>
<item name="colorForegroundAction">#1a237e</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="colorBackground">@color/md_light_background</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="colorBackgroundHighlight">#ff8811</item>
<item name="colorBackgroundSecondary">@android:color/transparent</item> <item name="colorBackgroundSecondary">@android:color/transparent</item>
<item name="colorBackgroundCard">@color/md_light_cards</item> <item name="colorBackgroundCard">@color/md_dark_cards</item>
<item name="colorTintActivity">#88cc33</item> <item name="colorTintActivity">#88cc33</item>
<item name="colorTintMessage">#2277dd</item> <item name="colorTintMessage">#2277dd</item>
<item name="colorTintHighlight">#ff8811</item> <item name="colorTintHighlight">#ff8811</item>
</style> </style>
<style name="Quassel" parent="AppTheme.Light"> <style name="Quassel_Light" parent="AppTheme.Light">
<item name="senderColor0">#e90d7f</item> <item name="senderColor0">#e90d7f</item>
<item name="senderColor1">#8e55e9</item> <item name="senderColor1">#8e55e9</item>
<item name="senderColor2">#b30e0e</item> <item name="senderColor2">#b30e0e</item>
...@@ -116,4 +149,54 @@ ...@@ -116,4 +149,54 @@
<item name="colorTintMessage">#2277dd</item> <item name="colorTintMessage">#2277dd</item>
<item name="colorTintHighlight">#ff8811</item> <item name="colorTintHighlight">#ff8811</item>
</style> </style>
<style name="Quassel_Dark" parent="AppTheme">
<item name="senderColor0">#e90d7f</item>
<item name="senderColor1">#8e55e9</item>
<item name="senderColor2">#b30e0e</item>
<item name="senderColor3">#17b339</item>
<item name="senderColor4">#58afb3</item>
<item name="senderColor5">#9d54b3</item>
<item name="senderColor6">#b39775</item>
<item name="senderColor7">#3176b3</item>
<item name="senderColor8">#e90d7f</item>
<item name="senderColor9">#8e55e9</item>
<item name="senderColorA">#b30e0e</item>
<item name="senderColorB">#17b339</item>
<item name="senderColorC">#58afb3</item>
<item name="senderColorD">#9d54b3</item>
<item name="senderColorE">#b39775</item>
<item name="senderColorF">#3176b3</item>
<item name="mircColor0">#ffffff</item>
<item name="mircColor1">#000000</item>
<item name="mircColor2">#000080</item>
<item name="mircColor3">#008000</item>
<item name="mircColor4">#ff0000</item>
<item name="mircColor5">#800000</item>
<item name="mircColor6">#800080</item>
<item name="mircColor7">#ffa500</item>
<item name="mircColor8">#ffff00</item>
<item name="mircColor9">#00ff00</item>
<item name="mircColorA">#008080</item>
<item name="mircColorB">#00ffff</item>
<item name="mircColorC">#4169e1</item>
<item name="mircColorD">#ff00ff</item>
<item name="mircColorE">#808080</item>
<item name="mircColorF">#c0c0c0</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>
</resources> </resources>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment