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 474ba962c7b59117e322d92bfb74d23e53c9af7a..f6512fed1379403b170e0c6909c0dd624e2b4fe1 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 51072a4efd5f0bb26de4682eb578824ebdc6e2e8..ebc3a279070111659c4cdf2c00766fcb661f95a3 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 7b70ddd74acdfd5ba3462503b6f22a1523561023..d8a929f9ca527d77e4532360e7d69afc48221823 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 61e434651d7300c04ea12d88b22e52a86871e057..92ded6f6ac572bd7b018a74cf19bfcf7d9ba1b6b 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 320a41bb26f41edca28d12d53091d07feae22174..9ac11f0269e78ef959a9130b59c8a09ad8313d4b 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 7c03161fb2728833a03c5c7d5fcb9b98165a585d..0ed01812c23ee3eb5ff0d4444cb3dfdb3486ba13 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 2851cbb086be63df13b7e17cbacc26a03bd3673e..06bf9f86d524bd015cb21a963d321cb4085f7e55 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 6753fd6220dd3de7a8aaf34243ef4d9c3abd9c11..19f7f523145d144888da0be57600977a08cdcfff 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 8e4732d42000d57085953e1701da9c136ce3a3e8..a4295233e5a19151342544b1a5b443ba23c96ac1 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 04826ca7d393b5d1825a36255fd3d555fa7ba0ec..d9d05980f6cffa6a58bce67d5e13c0c39f1ca920 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 0000000000000000000000000000000000000000..61b43cb627b0f0710df692ca0f2d7a07bbec17f6 --- /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 11aa24459745b29046e1629de3487747de22e12c..077562e98146afd81ede4640ef6b61314d5a0ea9 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 75a7e02cd152373af4580678be6d00e5aa154225..cd301f37a87c107209e314b15c83222a6467fdc9 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 a0a00ed3b3fbb23b57e6d7057cecd595505d0466..3553dfe0b3b48aa9022fd70b6188c6dbcf45f1a4 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 4c7f5c4f76fe7098e780549e71000c79bbeb87c1..ffc9fa6c1f9a935950f0a1bd9863b5b4fb48efc1 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 6e98e96b5942fb6c04953f9f45806c8ea3b239c4..e5604dde79d2266944b8f3f4a8f095b8fd800adb 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 d52c48ef3ce6f314e5b454e79dc779c87ecfcf54..5719794dce7d524883a9d04ff763674f652d6de1 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 ef43644007a894a82a628aeb6b15011f346183ce..ad7c3921054f3d52c66246d77e90d32d8d7d1c1a 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" />