From 42421cd5204c23bc79896d4af757d71ebe21d260 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Fri, 29 Jan 2016 12:55:57 +0100 Subject: [PATCH] =?UTF-8?q?Updated=20UI:=20=20-=20Sliding=20Panel=20isn?= =?UTF-8?q?=E2=80=99t=20above=20ActionBar=20anymore=20=20-=20Sliding=20Pan?= =?UTF-8?q?el=E2=80=99s=20chatline=20automatically=20expands=20in=20expand?= =?UTF-8?q?ed=20view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/chat/BufferViewConfigWrapper.java | 5 +- .../quasseldroid_ng/ui/chat/ChatActivity.java | 106 ++++++++++++------ .../ui/chat/chatview/ChatMessageRenderer.java | 33 +++--- .../ui/chat/chatview/MessageAdapter.java | 3 +- .../ui/chat/drawer/BufferItem.java | 2 +- .../ui/chat/drawer/NetworkItem.java | 11 +- .../ui/{ => theme}/AppContext.java | 3 +- .../ui/{ => theme}/AppTheme.java | 2 +- .../ui/theme}/ThemeUtil.java | 17 ++- .../util/annotationbind/AutoBinder.java | 19 ++++ .../util/annotationbind/AutoDimen.java | 12 ++ .../de/kuschku/util/irc/IrcFormatHelper.java | 2 +- .../java/de/kuschku/util/ui/MessageUtil.java | 10 +- app/src/main/res/layout/activity_chat.xml | 27 +++-- app/src/main/res/layout/slider_main.xml | 18 +-- app/src/main/res/values/attrs.xml | 3 + app/src/main/res/values/colors.xml | 3 +- app/src/main/res/values/styles.xml | 8 ++ 18 files changed, 178 insertions(+), 106 deletions(-) rename app/src/main/java/de/kuschku/quasseldroid_ng/ui/{ => theme}/AppContext.java (94%) rename app/src/main/java/de/kuschku/quasseldroid_ng/ui/{ => theme}/AppTheme.java (95%) rename app/src/main/java/de/kuschku/{util/ui => quasseldroid_ng/ui/theme}/ThemeUtil.java (89%) create mode 100644 app/src/main/java/de/kuschku/util/annotationbind/AutoDimen.java diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigWrapper.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigWrapper.java index 474ba962c..f6512fed1 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigWrapper.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigWrapper.java @@ -3,16 +3,13 @@ package de.kuschku.quasseldroid_ng.ui.chat; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import java.lang.reflect.Array; import java.util.ArrayList; -import de.kuschku.libquassel.Client; import de.kuschku.libquassel.syncables.types.BufferViewConfig; import de.kuschku.libquassel.syncables.types.Network; -import de.kuschku.quasseldroid_ng.ui.AppContext; +import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.quasseldroid_ng.ui.chat.drawer.NetworkItem; import de.kuschku.util.observables.callbacks.ElementCallback; -import de.kuschku.util.observables.lists.ObservableComparableSortedList; import de.kuschku.util.observables.lists.ObservableSortedList; import static de.kuschku.util.AndroidAssert.assertNotNull; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java index 51072a4ef..ebc3a2790 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java @@ -20,17 +20,13 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; -import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import com.google.common.base.Splitter; import com.mikepenz.fastadapter.FastAdapter; import com.mikepenz.fastadapter.IExpandable; -import com.mikepenz.fastadapter.IItem; import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.AccountHeaderBuilder; import com.mikepenz.materialdrawer.Drawer; @@ -38,43 +34,40 @@ import com.mikepenz.materialdrawer.DrawerBuilder; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.ProfileDrawerItem; import com.mikepenz.materialdrawer.model.SecondaryDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; -import com.mikepenz.materialdrawer.model.interfaces.IProfile; import com.sothree.slidinguppanel.SlidingUpPanelLayout; import java.util.Map; +import aspm.annotations.BooleanPreference; +import aspm.annotations.IntPreference; import aspm.annotations.PreferenceWrapper; +import aspm.annotations.StringPreference; import butterknife.Bind; import butterknife.ButterKnife; import de.kuschku.libquassel.BusProvider; -import de.kuschku.libquassel.Client; import de.kuschku.libquassel.events.BacklogReceivedEvent; import de.kuschku.libquassel.events.ConnectionChangeEvent; import de.kuschku.libquassel.events.GeneralErrorEvent; import de.kuschku.libquassel.events.LagChangedEvent; -import de.kuschku.libquassel.exceptions.UnknownTypeException; import de.kuschku.libquassel.localtypes.Buffer; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.syncables.types.BufferViewConfig; import de.kuschku.libquassel.syncables.types.BufferViewManager; -import de.kuschku.libquassel.syncables.types.Network; import de.kuschku.quasseldroid_ng.BuildConfig; import de.kuschku.quasseldroid_ng.R; import de.kuschku.quasseldroid_ng.service.ClientBackgroundThread; import de.kuschku.quasseldroid_ng.service.QuasselService; -import de.kuschku.quasseldroid_ng.ui.AppContext; -import de.kuschku.quasseldroid_ng.ui.AppTheme; import de.kuschku.quasseldroid_ng.ui.chat.chatview.MessageAdapter; -import de.kuschku.quasseldroid_ng.ui.chat.drawer.NetworkItem; -import de.kuschku.util.keyboardutils.DialogKeyboardUtil; +import de.kuschku.quasseldroid_ng.ui.theme.AppContext; +import de.kuschku.quasseldroid_ng.ui.theme.AppTheme; +import de.kuschku.quasseldroid_ng.ui.theme.ThemeUtil; import de.kuschku.util.ServerAddress; import de.kuschku.util.instancestateutil.Storable; import de.kuschku.util.instancestateutil.Store; +import de.kuschku.util.keyboardutils.DialogKeyboardUtil; import de.kuschku.util.observables.AutoScroller; import de.kuschku.util.observables.lists.ObservableSortedList; import de.kuschku.util.ui.SpanFormatter; -import de.kuschku.util.ui.ThemeUtil; import static de.kuschku.util.AndroidAssert.assertNotNull; @@ -97,20 +90,19 @@ public class ChatActivity extends AppCompatActivity { SwipeRefreshLayout swipeView; @Bind(R.id.messages) RecyclerView messages; - private boolean tr = true; - @PreferenceWrapper(BuildConfig.APPLICATION_ID) public static abstract class Settings { + @StringPreference("QUASSEL_LIGHT") String theme; - boolean fullHostmask; - int textSize; - boolean mircColors; - - String lastHost; - int lastPort; - String lastUsername; - String lastPassword; + @BooleanPreference(false) boolean fullHostmask; + @IntPreference(2) int textSize; + @BooleanPreference(true) boolean mircColors; + + @StringPreference("") String lastHost; + @IntPreference(4242) int lastPort; + @StringPreference("") String lastUsername; + @StringPreference("") String lastPassword; } private AppContext context = new AppContext(); @@ -207,9 +199,6 @@ public class ChatActivity extends AppCompatActivity { drawerLeft.addStickyFooterItem(new SecondaryDrawerItem().withName("Settings").withIdentifier(-2)); drawerLeft.setOnDrawerItemClickListener((view, position, drawerItem) -> { long identifier = drawerItem.getIdentifier(); - Log.e("DEBUG", "IDENT: "+identifier); - Log.e("DEBUG", "IDENT: "+(identifier==-1)); - Log.e("DEBUG", "IDENT: "+(identifier==-2)); if (identifier == -1) { showConnectDialog(); return false; @@ -236,13 +225,52 @@ public class ChatActivity extends AppCompatActivity { msgHistory.setLayoutManager(new LinearLayoutManager(this)); msgHistory.setItemAnimator(new DefaultItemAnimator()); - swipeView.setColorSchemeColors(context.getThemeUtil().colors.colorPrimary); + swipeView.setColorSchemeColors(context.getThemeUtil().res.colorPrimary); swipeView.setOnRefreshListener(() -> { assertNotNull(context.getClient()); context.getClient().getBacklogManager().requestMoreBacklog(status.bufferId, 20); }); send.setOnClickListener(view -> sendInput()); + + slidingLayout.setPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() { + @Override + public void onPanelSlide(View panel, float slideOffset) { + + } + + @Override + public void onPanelCollapsed(View panel) { + int selectionStart = chatline.getSelectionStart(); + int selectionEnd = chatline.getSelectionEnd(); + + chatline.getLayoutParams().height =context.getThemeUtil().res.actionBarSize; + chatline.setSingleLine(true); + + chatline.setSelection(selectionStart, selectionEnd); + } + + @Override + public void onPanelExpanded(View panel) { + int selectionStart = chatline.getSelectionStart(); + int selectionEnd = chatline.getSelectionEnd(); + + chatline.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT; + chatline.setSingleLine(false); + + chatline.setSelection(selectionStart, selectionEnd); + } + + @Override + public void onPanelAnchored(View panel) { + + } + + @Override + public void onPanelHidden(View panel) { + + } + }); } public void showThemeDialog() { @@ -257,13 +285,14 @@ public class ChatActivity extends AppCompatActivity { new MaterialDialog.Builder(this) .items(strings) .positiveText("Select Theme") - .neutralText("Cancel") + .negativeText("Cancel") .itemsCallbackSingleChoice(startIndex, (dialog, itemView, which, text) -> { context.getSettings().theme.set(strings[dialog.getSelectedIndex()]); recreate(); return true; }) - .buttonRippleColor(context.getThemeUtil().colors.colorAccent) + .negativeColor(context.getThemeUtil().res.colorForeground) + .buttonRippleColor(context.getThemeUtil().res.colorAccentFocus) .build() .show(); } @@ -408,12 +437,14 @@ public class ChatActivity extends AppCompatActivity { Log.e("TIME", String.valueOf(System.currentTimeMillis())); }) + .negativeColor(context.getThemeUtil().res.colorForeground) + .buttonRippleColor(context.getThemeUtil().res.colorAccentFocus) .positiveText("Login") - .neutralText("Cancel") + .negativeText("Cancel") .build(); dialog.setOnKeyListener(new DialogKeyboardUtil(dialog)); - ((AppCompatEditText) dialog.getView().findViewById(R.id.username)).setText(context.getSettings().lastUsername.or("")); - ((AppCompatEditText) dialog.getView().findViewById(R.id.password)).setText(context.getSettings().lastPassword.or("")); + ((AppCompatEditText) dialog.getView().findViewById(R.id.username)).setText(context.getSettings().lastUsername.get()); + ((AppCompatEditText) dialog.getView().findViewById(R.id.password)).setText(context.getSettings().lastPassword.get()); dialog.show(); } @@ -431,15 +462,16 @@ public class ChatActivity extends AppCompatActivity { context.getSettings().lastPort.set(port); serviceInterface.connect(new ServerAddress(host, port)); }) + .negativeColor(context.getThemeUtil().res.colorForeground) .positiveText("Connect") - .neutralText("Cancel") + .negativeText("Cancel") .build(); AppCompatEditText hostField = (AppCompatEditText) dialog.getView().findViewById(R.id.host); AppCompatEditText portField = (AppCompatEditText) dialog.getView().findViewById(R.id.port); dialog.setOnKeyListener(new DialogKeyboardUtil(dialog)); - hostField.setText(context.getSettings().lastHost.or("")); - portField.setText(String.valueOf(context.getSettings().lastPort.or(4242))); + hostField.setText(context.getSettings().lastHost.get()); + portField.setText(String.valueOf(context.getSettings().lastPort.get())); dialog.show(); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java index 7b70ddd74..d8a929f9c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java @@ -8,19 +8,16 @@ import android.support.annotation.Nullable; import android.support.annotation.UiThread; import android.util.Log; -import org.joda.time.format.DateTimeFormatter; - import de.kuschku.libquassel.localtypes.Buffer; import de.kuschku.libquassel.message.Message; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.quasseldroid_ng.ui.AppContext; +import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.util.annotationbind.AutoBinder; import de.kuschku.util.annotationbind.AutoString; import de.kuschku.util.irc.IrcFormatHelper; import de.kuschku.util.irc.IrcUserUtils; -import de.kuschku.util.ui.DateTimeFormatHelper; import de.kuschku.util.ui.SpanFormatter; -import de.kuschku.util.ui.ThemeUtil; +import de.kuschku.quasseldroid_ng.ui.theme.ThemeUtil; import static de.kuschku.util.AndroidAssert.assertNotNull; @@ -45,31 +42,31 @@ public class ChatMessageRenderer { } public void setTheme(ThemeUtil themeUtil) { - this.helper = new IrcFormatHelper(themeUtil.colors); + this.helper = new IrcFormatHelper(themeUtil.res); this.highlightStyle = new MessageStyleContainer( - themeUtil.colors.colorForegroundHighlight, + themeUtil.res.colorForegroundHighlight, Typeface.NORMAL, - themeUtil.colors.colorForegroundHighlight, - themeUtil.colors.colorBackgroundHighlight + themeUtil.res.colorForegroundHighlight, + themeUtil.res.colorBackgroundHighlight ); this.serverStyle = new MessageStyleContainer( - themeUtil.colors.colorForegroundSecondary, + themeUtil.res.colorForegroundSecondary, Typeface.ITALIC, - themeUtil.colors.colorForegroundSecondary, - themeUtil.colors.colorBackgroundSecondary + themeUtil.res.colorForegroundSecondary, + themeUtil.res.colorBackgroundSecondary ); this.plainStyle = new MessageStyleContainer( - themeUtil.colors.colorForeground, + themeUtil.res.colorForeground, Typeface.NORMAL, - themeUtil.colors.colorForegroundSecondary, - themeUtil.colors.transparent + themeUtil.res.colorForegroundSecondary, + themeUtil.res.transparent ); this.actionStyle = new MessageStyleContainer( - themeUtil.colors.colorForegroundAction, + themeUtil.res.colorForegroundAction, Typeface.ITALIC, - themeUtil.colors.colorForegroundSecondary, - themeUtil.colors.transparent + themeUtil.res.colorForegroundSecondary, + themeUtil.res.transparent ); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java index 61e434651..92ded6f6a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java @@ -8,10 +8,9 @@ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.ViewGroup; -import de.kuschku.libquassel.Client; import de.kuschku.libquassel.message.Message; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.quasseldroid_ng.ui.AppContext; +import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.util.observables.AutoScroller; import de.kuschku.util.observables.callbacks.UICallback; import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferItem.java index 320a41bb2..9ac11f026 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferItem.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferItem.java @@ -17,7 +17,7 @@ import de.kuschku.libquassel.localtypes.QueryBuffer; import de.kuschku.libquassel.localtypes.StatusBuffer; import de.kuschku.libquassel.message.Message; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.quasseldroid_ng.ui.AppContext; +import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.util.observables.IObservable; import de.kuschku.util.observables.callbacks.GeneralCallback; import de.kuschku.util.observables.callbacks.wrappers.GeneralCallbackWrapper; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java index 7c03161fb..0ed01812c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java @@ -1,35 +1,26 @@ package de.kuschku.quasseldroid_ng.ui.chat.drawer; -import android.content.Context; import android.util.Log; import android.util.SparseArray; -import android.view.View; -import android.widget.TextView; -import com.mikepenz.fastadapter.utils.ViewHolderFactory; import com.mikepenz.materialdrawer.holder.ColorHolder; import com.mikepenz.materialdrawer.holder.StringHolder; -import com.mikepenz.materialdrawer.model.BaseViewHolder; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; import java.util.ArrayList; import java.util.List; -import de.kuschku.libquassel.Client; import de.kuschku.libquassel.localtypes.Buffer; import de.kuschku.libquassel.syncables.types.BufferViewConfig; import de.kuschku.libquassel.syncables.types.Network; -import de.kuschku.quasseldroid_ng.ui.AppContext; -import de.kuschku.util.AndroidAssert; +import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.util.observables.IObservable; import de.kuschku.util.observables.callbacks.ElementCallback; import de.kuschku.util.observables.callbacks.GeneralCallback; import de.kuschku.util.observables.callbacks.wrappers.GeneralCallbackWrapper; import de.kuschku.util.observables.lists.ObservableSortedList; -import static de.kuschku.util.AndroidAssert.*; - public class NetworkItem extends PrimaryDrawerItem implements IObservable<GeneralCallback>, GeneralCallback { private final AppContext context; private final Network network; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/AppContext.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java similarity index 94% rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/AppContext.java rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java index 2851cbb08..06bf9f86d 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/AppContext.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java @@ -1,9 +1,8 @@ -package de.kuschku.quasseldroid_ng.ui; +package de.kuschku.quasseldroid_ng.ui.theme; import de.kuschku.libquassel.BusProvider; import de.kuschku.libquassel.Client; import de.kuschku.quasseldroid_ng.ui.chat.WrappedSettings; -import de.kuschku.util.ui.ThemeUtil; public class AppContext { private ThemeUtil themeUtil; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/AppTheme.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppTheme.java similarity index 95% rename from app/src/main/java/de/kuschku/quasseldroid_ng/ui/AppTheme.java rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppTheme.java index 6753fd622..19f7f5231 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/AppTheme.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppTheme.java @@ -1,4 +1,4 @@ -package de.kuschku.quasseldroid_ng.ui; +package de.kuschku.quasseldroid_ng.ui.theme; import android.support.annotation.StyleRes; diff --git a/app/src/main/java/de/kuschku/util/ui/ThemeUtil.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/ThemeUtil.java similarity index 89% rename from app/src/main/java/de/kuschku/util/ui/ThemeUtil.java rename to app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/ThemeUtil.java index 8e4732d42..a4295233e 100644 --- a/app/src/main/java/de/kuschku/util/ui/ThemeUtil.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/ThemeUtil.java @@ -1,4 +1,4 @@ -package de.kuschku.util.ui; +package de.kuschku.quasseldroid_ng.ui.theme; import android.content.Context; import android.support.annotation.ColorInt; @@ -7,13 +7,14 @@ import android.support.annotation.UiThread; import android.support.v7.view.ContextThemeWrapper; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.quasseldroid_ng.ui.AppTheme; import de.kuschku.util.annotationbind.AutoBinder; import de.kuschku.util.annotationbind.AutoColor; +import de.kuschku.util.annotationbind.AutoDimen; +import de.kuschku.util.ui.DateTimeFormatHelper; public class ThemeUtil { @NonNull - public final Colors colors = new Colors(); + public final Colors res = new Colors(); public DateTimeFormatHelper formatter; public ThemeUtil(@NonNull Context ctx) { @@ -29,7 +30,7 @@ public class ThemeUtil { @UiThread public void initColors(@NonNull ContextThemeWrapper wrapper) { try { - AutoBinder.bind(colors, wrapper); + AutoBinder.bind(res, wrapper); } catch (IllegalAccessException e) { e.printStackTrace(); } @@ -52,6 +53,10 @@ public class ThemeUtil { @ColorInt public int colorAccent; + @AutoColor(R.attr.colorAccentFocus) + @ColorInt + public int colorAccentFocus; + @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.senderColor8, R.attr.senderColor9, R.attr.senderColorA, R.attr.senderColorB, @@ -109,5 +114,9 @@ public class ThemeUtil { @AutoColor(R.attr.colorTintHighlight) @ColorInt public int colorTintHighlight; + + @AutoDimen(R.attr.actionBarSize) + @ColorInt + public int actionBarSize; } } diff --git a/app/src/main/java/de/kuschku/util/annotationbind/AutoBinder.java b/app/src/main/java/de/kuschku/util/annotationbind/AutoBinder.java index 04826ca7d..d9d05980f 100644 --- a/app/src/main/java/de/kuschku/util/annotationbind/AutoBinder.java +++ b/app/src/main/java/de/kuschku/util/annotationbind/AutoBinder.java @@ -46,6 +46,14 @@ public class AutoBinder { f.set(o, strings[0]); else throw new IllegalAccessException("Field length does not correspond to argument length"); + } else if (f.isAnnotationPresent(AutoDimen.class)) { + int[] dimens = obtainDimen(f.getAnnotation(AutoDimen.class).value(), theme); + if (f.getType().isArray()) + f.set(o, dimens); + else if (dimens.length == 1) + f.set(o, dimens[0]); + else + throw new IllegalAccessException("Field length does not correspond to argument length"); } } } @@ -70,4 +78,15 @@ public class AutoBinder { } return result; } + + @NonNull + private static int[] obtainDimen(@NonNull int[] res, @NonNull Resources.Theme theme) { + int[] result = new int[res.length]; + TypedArray t = theme.obtainStyledAttributes(res); + for (int i = 0; i < res.length; i++) { + result[i] = (int) t.getDimension(i, 0x00000000); + } + t.recycle(); + return result; + } } diff --git a/app/src/main/java/de/kuschku/util/annotationbind/AutoDimen.java b/app/src/main/java/de/kuschku/util/annotationbind/AutoDimen.java new file mode 100644 index 000000000..61b43cb62 --- /dev/null +++ b/app/src/main/java/de/kuschku/util/annotationbind/AutoDimen.java @@ -0,0 +1,12 @@ +package de.kuschku.util.annotationbind; + +import android.support.annotation.AnyRes; +import android.support.annotation.NonNull; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface AutoDimen { + @NonNull @AnyRes int[] value() default {}; +} diff --git a/app/src/main/java/de/kuschku/util/irc/IrcFormatHelper.java b/app/src/main/java/de/kuschku/util/irc/IrcFormatHelper.java index 11aa24459..077562e98 100644 --- a/app/src/main/java/de/kuschku/util/irc/IrcFormatHelper.java +++ b/app/src/main/java/de/kuschku/util/irc/IrcFormatHelper.java @@ -24,7 +24,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.util.ui.ThemeUtil; +import de.kuschku.quasseldroid_ng.ui.theme.ThemeUtil; public class IrcFormatHelper { @NonNull diff --git a/app/src/main/java/de/kuschku/util/ui/MessageUtil.java b/app/src/main/java/de/kuschku/util/ui/MessageUtil.java index 75a7e02cd..cd301f37a 100644 --- a/app/src/main/java/de/kuschku/util/ui/MessageUtil.java +++ b/app/src/main/java/de/kuschku/util/ui/MessageUtil.java @@ -9,6 +9,8 @@ import android.text.style.ForegroundColorSpan; import android.text.style.StyleSpan; import android.text.style.UnderlineSpan; +import de.kuschku.quasseldroid_ng.ui.theme.ThemeUtil; + public class MessageUtil { // Transparent in ARGB private static final int COLOR_TRANSPARENT = 0x00000000; @@ -128,12 +130,12 @@ public class MessageUtil { newString.setSpan(new StyleSpan(style), start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } - if (fg != -1 && themeUtil.colors.mircColors[fg] != COLOR_TRANSPARENT) { - newString.setSpan(new ForegroundColorSpan(themeUtil.colors.mircColors[fg]), start, end, + if (fg != -1 && themeUtil.res.mircColors[fg] != COLOR_TRANSPARENT) { + newString.setSpan(new ForegroundColorSpan(themeUtil.res.mircColors[fg]), start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } - if (bg != -1 && themeUtil.colors.mircColors[fg] != COLOR_TRANSPARENT) { - newString.setSpan(new BackgroundColorSpan(themeUtil.colors.mircColors[fg]), start, end, + if (bg != -1 && themeUtil.res.mircColors[fg] != COLOR_TRANSPARENT) { + newString.setSpan(new BackgroundColorSpan(themeUtil.res.mircColors[fg]), start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } } diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml index a0a00ed3b..3553dfe0b 100644 --- a/app/src/main/res/layout/activity_chat.xml +++ b/app/src/main/res/layout/activity_chat.xml @@ -1,26 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> -<com.sothree.slidinguppanel.SlidingUpPanelLayout - xmlns:android="http://schemas.android.com/apk/res/android" +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - android:id="@+id/sliding_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:gravity="bottom" - android:orientation="vertical" - app:umanoPanelHeight="?attr/actionBarSize" - app:umanoShadowHeight="4dp"> + android:orientation="vertical"> - <LinearLayout + <include layout="@layout/toolbar" /> + + <com.sothree.slidinguppanel.SlidingUpPanelLayout + android:id="@+id/sliding_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> - - <include layout="@layout/toolbar" /> + android:gravity="bottom" + android:orientation="vertical" + app:umanoPanelHeight="?attr/actionBarSize" + app:umanoShadowHeight="4dp"> <include layout="@layout/content_main" /> - </LinearLayout> + <include layout="@layout/slider_main" /> - <include layout="@layout/slider_main" /> + </com.sothree.slidinguppanel.SlidingUpPanelLayout> -</com.sothree.slidinguppanel.SlidingUpPanelLayout> +</LinearLayout> diff --git a/app/src/main/res/layout/slider_main.xml b/app/src/main/res/layout/slider_main.xml index 4c7f5c4f7..ffc9fa6c1 100644 --- a/app/src/main/res/layout/slider_main.xml +++ b/app/src/main/res/layout/slider_main.xml @@ -6,29 +6,33 @@ <LinearLayout android:layout_width="match_parent" - android:layout_height="?attr/actionBarSize" + android:layout_height="wrap_content" + android:animateLayoutChanges="true" android:background="?attr/colorBackgroundCard" android:orientation="horizontal"> <android.support.v7.widget.AppCompatEditText android:id="@+id/chatline" android:layout_width="0dip" - android:layout_height="match_parent" + android:layout_height="?attr/actionBarSize" android:layout_weight="1" android:background="@android:color/transparent" android:hint="@string/message_placeholder" android:imeOptions="actionSend" - android:inputType="textShortMessage|textCapSentences|textAutoCorrect" + android:inputType="textCapSentences|textShortMessage|textAutoCorrect" android:paddingLeft="20dp" android:paddingRight="20dp" - android:textSize="16sp" /> + android:paddingTop="19dp" + android:textSize="16sp" + android:gravity="top" + android:paddingBottom="19dp" /> <android.support.v7.widget.AppCompatImageButton android:id="@+id/send" style="?attr/buttonStyleSmall" android:layout_width="56dp" - android:layout_height="match_parent" - android:layout_gravity="center_vertical" + android:layout_height="?attr/actionBarSize" + android:layout_gravity="top" android:background="?attr/selectableItemBackgroundBorderless" android:padding="12dp" android:src="@drawable/ic_send" @@ -40,5 +44,5 @@ android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" - android:background="?attr/colorBackgroundSecondary" /> + android:background="?attr/colorBackgroundCard" /> </LinearLayout> diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 6e98e96b5..e5604dde7 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <resources> + <attr name="colorAccentFocus" /> + <!-- sender colors --> <attr name="senderColor0" format="color" /> @@ -55,4 +57,5 @@ <attr name="colorTintActivity" format="color" /> <attr name="colorTintMessage" format="color" /> <attr name="colorTintHighlight" format="color" /> + <attr name="chatlineExpandedSize" /> </resources> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d52c48ef3..5719794dc 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,5 +7,6 @@ --> <color name="colorPrimary">#0271B3</color> <color name="colorPrimaryDark">#02588c</color> - <color name="colorAccent">#ffeb3b</color> + <color name="colorAccent">#afb42b</color> + <color name="colorAccentFocus">#40afb42b</color> </resources> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ef4364400..ad7c39210 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -6,6 +6,10 @@ <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> + <item name="colorAccentFocus">@color/colorAccentFocus</item> + + <item name="colorControlHighlight">@color/colorAccentFocus</item> + <item name="windowActionModeOverlay">true</item> </style> <style name="AppTheme.Light" parent="MaterialDrawerTheme.Light.DarkToolbar.TranslucentStatus"> @@ -13,6 +17,10 @@ <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> + <item name="colorAccentFocus">@color/colorAccentFocus</item> + + <item name="colorControlHighlight">@color/colorAccentFocus</item> + <item name="windowActionModeOverlay">true</item> </style> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> -- GitLab