From a211edfe0c03a9fedf2b15accdba1cbb8541aada Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Thu, 8 Sep 2016 19:02:23 +0200 Subject: [PATCH] Improved performance and UI again (just closed some memory leaks, reduced memory usage, etc) --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 34 +++--- .../de/kuschku/libquassel/BusProvider.java | 16 +-- .../de/kuschku/libquassel/CoreConnection.java | 3 +- .../de/kuschku/libquassel/QuasselClient.java | 12 ++ .../de/kuschku/libquassel/client/Client.java | 20 ++-- .../libquassel/client/IdentityManager.java | 5 - .../libquassel/client/NetworkManager.java | 10 ++ .../libquassel/localtypes/BacklogFilter.java | 101 ++++++++-------- .../localtypes/NotificationManager.java | 92 --------------- .../backlogstorage/BacklogStorage.java | 2 + .../backlogstorage/HybridBacklogStorage.java | 109 +++++++++--------- .../localtypes/buffers/ChannelBuffer.java | 3 +- .../localtypes/buffers/QueryBuffer.java | 3 +- .../localtypes/buffers/StatusBuffer.java | 2 +- .../kuschku/libquassel/message/Message.java | 17 ++- .../primitives/QMetaTypeRegistry.java | 8 +- .../serializers/UserTypeSerializer.java | 2 - .../libquassel/primitives/types/QVariant.java | 3 +- .../syncables/types/SyncableObject.java | 1 + .../types/abstracts/ABacklogManager.java | 6 +- .../syncables/types/impl/BacklogManager.java | 6 +- .../syncables/types/impl/BufferSyncer.java | 52 +++++++-- .../types/impl/BufferViewConfig.java | 2 +- .../types/impl/BufferViewManager.java | 10 +- .../syncables/types/impl/IrcChannel.java | 24 ++-- .../syncables/types/impl/IrcUser.java | 31 ++--- .../syncables/types/impl/Network.java | 2 +- .../types/interfaces/QBufferSyncer.java | 7 ++ .../quasseldroid_ng/QuasselDroidNG.java | 8 +- .../service/QuasselService.java | 4 +- .../quasseldroid_ng/ui/LoginActivity.java | 2 +- .../quasseldroid_ng/ui/ViewIntBinder.java | 2 +- .../chat/BufferViewConfigSpinnerAdapter.java | 12 +- .../quasseldroid_ng/ui/chat/MainActivity.java | 35 +++--- .../ui/chat/chatview/ChatMessageRenderer.java | 45 ++++---- .../ui/chat/chatview/MessageAdapter.java | 31 +++-- .../ui/chat/drawer/ActionModeHandler.java | 4 +- .../chat/drawer/BufferViewConfigAdapter.java | 14 +-- .../ui/chat/drawer/BufferViewHolder.java | 8 +- .../ui/chat/drawer/NetworkItem.java | 8 +- .../ui/chat/fragment/ChatFragment.java | 25 ++-- .../ui/chat/util/SlidingPanelHandler.java | 13 ++- .../chatlist/ChatListCreateActivity.java | 4 +- .../chatlist/ChatListEditActivity.java | 12 +- .../chatlist/ChatListListActivity.java | 26 ++--- .../chatlist/MinimumActivityAdapter.java | 4 +- .../identity/IdentityCreateActivity.java | 14 +-- .../identity/IdentityEditActivity.java | 12 +- .../identity/IdentityListActivity.java | 26 ++--- .../identity/IdentitySpinnerAdapter.java | 3 +- .../nick/IdentityNickListActivity.java | 4 +- .../network/FakeNetworksWrapper.java | 8 +- .../network/NetworkCreateActivity.java | 17 +-- .../network/NetworkEditActivity.java | 28 ++--- .../network/NetworkListActivity.java | 26 ++--- .../network/NetworkSpinnerAdapter.java | 2 +- .../server/NetworkServerEditActivity.java | 2 +- .../server/NetworkServerListActivity.java | 7 +- .../quasseldroid_ng/ui/settings/Settings.java | 2 + .../ui/settings/SettingsActivity.java | 4 +- .../quasseldroid_ng/ui/setup/AccountItem.java | 12 +- .../ui/setup/AccountSelectActivity.java | 2 +- .../ui/setup/AccountSetupActivity.java | 2 +- .../ui/setup/CoreSetupActivity.java | 2 +- .../ui/setup/CreateAccountItem.java | 4 +- .../ui/setup/StorageBackendItem.java | 10 +- .../setup/slides/AccountSetupCoreSlide.java | 10 +- .../setup/slides/AccountSetupNameSlide.java | 6 +- .../setup/slides/AccountSetupUserSlide.java | 10 +- .../setup/slides/CoreBackendSetupSlide.java | 15 +-- .../ui/setup/slides/SlideFragment.java | 2 +- .../quasseldroid_ng/ui/theme/AppContext.java | 2 +- .../MeaningfulConnectionErrorProvider.java | 42 ------- .../kuschku/util/accounts/AccountManager.java | 2 +- .../SQLiteBufferMetaDataManager.java | 2 +- .../de/kuschku/util/irc/IrcCaseMapper.java | 4 +- .../irc/chanmodes/IrcModeProviderFactory.java | 2 +- .../chanmodes/impl/BewareIrcModeProvider.java | 2 +- .../impl/CharybdisIrcModeProvider.java | 2 +- .../chanmodes/impl/DalIrcModeProvider.java | 2 +- .../chanmodes/impl/DancerIrcModeProvider.java | 2 +- .../irc/chanmodes/impl/FqIrcModeProvider.java | 2 +- .../chanmodes/impl/HybridIrcModeProvider.java | 2 +- .../impl/HyperionIrcModeProvider.java | 2 +- .../impl/InspireIrcModeProvider.java | 2 +- .../chanmodes/impl/NeoIrcModeProvider.java | 2 +- .../impl/NightstarIrcModeProvider.java | 2 +- .../chanmodes/impl/RfcIrcModeProvider.java | 2 +- .../chanmodes/impl/ShadowIrcModeProvider.java | 2 +- .../chanmodes/impl/SolidIrcModeProvider.java | 2 +- .../impl/UndernetIrcModeProvider.java | 2 +- .../chanmodes/impl/UnrealIrcModeProvider.java | 2 +- .../wrappers/MultiGeneralCallback.java | 1 + .../AbstractPreferenceElement.java | 6 +- .../util/servicebound/BoundActivity.java | 13 ++- .../util/servicebound/BoundFragment.java | 26 +++-- .../util/ui/DividerItemDecoration.java | 72 ++++++++++++ .../java/de/kuschku/util/ui/MenuTint.java | 68 +++++------ .../kuschku/util/ui/ObservableTextBinder.java | 2 +- .../StorageBackendParcelable.java | 2 +- .../preferences/MaterialListPreference.java | 2 +- .../ui/preferences/SeekBarPreference.java | 18 +-- app/src/main/res/anim/slide_in_right.xml | 28 ----- app/src/main/res/anim/slide_out_left.xml | 29 ----- .../color/selectable_button_background.xml | 31 ----- .../layout-sw600dp-land/activity_setup.xml | 7 +- .../res/layout-sw600dp/activity_setup.xml | 7 +- app/src/main/res/layout-sw600dp/slide.xml | 75 ++++++------ .../res/layout/activity_accountchooser.xml | 27 ----- .../res/layout/activity_channel_detail.xml | 6 +- app/src/main/res/layout/activity_chat.xml | 47 -------- .../res/layout/activity_chatlist_edit.xml | 18 +-- .../res/layout/activity_identity_edit.xml | 24 ++-- .../main/res/layout/activity_network_edit.xml | 36 +++--- .../layout/activity_networkserver_edit.xml | 20 ++-- .../main/res/layout/activity_nick_list.xml | 64 ---------- app/src/main/res/layout/activity_setup.xml | 7 +- app/src/main/res/layout/dialog_address.xml | 53 --------- app/src/main/res/layout/fragment_chat.xml | 2 +- app/src/main/res/layout/fragment_loading.xml | 57 +++++---- .../main/res/layout/slide_account_name.xml | 7 +- .../main/res/layout/slide_account_user.xml | 6 +- ....xml => widget_chatmessage_markerline.xml} | 5 +- .../res/layout/widget_core_account_add.xml | 4 +- .../main/res/layout/widget_drawer_network.xml | 54 ++++----- app/src/main/res/layout/widget_slider.xml | 30 ++--- app/src/main/res/menu/chat.xml | 4 +- app/src/main/res/menu/confirm.xml | 2 +- app/src/main/res/menu/confirm_delete.xml | 4 +- app/src/main/res/values-w720dp/bools.xml | 25 ---- app/src/main/res/values/bools.xml | 25 ---- app/src/main/res/values/dimens.xml | 2 - app/src/main/res/values/preferences.xml | 16 +-- app/src/main/res/values/strings.xml | 86 +++++++++++++- app/src/main/res/values/styles.xml | 2 + 136 files changed, 926 insertions(+), 1250 deletions(-) delete mode 100644 app/src/main/java/de/kuschku/libquassel/localtypes/NotificationManager.java delete mode 100644 app/src/main/java/de/kuschku/util/MeaningfulConnectionErrorProvider.java create mode 100644 app/src/main/java/de/kuschku/util/ui/DividerItemDecoration.java delete mode 100644 app/src/main/res/anim/slide_in_right.xml delete mode 100644 app/src/main/res/anim/slide_out_left.xml delete mode 100644 app/src/main/res/color/selectable_button_background.xml delete mode 100644 app/src/main/res/layout/activity_accountchooser.xml delete mode 100644 app/src/main/res/layout/activity_chat.xml delete mode 100644 app/src/main/res/layout/activity_nick_list.xml delete mode 100644 app/src/main/res/layout/dialog_address.xml rename app/src/main/res/layout/{slide_core_select_backend.xml => widget_chatmessage_markerline.xml} (92%) delete mode 100644 app/src/main/res/values-w720dp/bools.xml delete mode 100644 app/src/main/res/values/bools.xml diff --git a/app/build.gradle b/app/build.gradle index c8f0f071a..38fd8549e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -148,7 +148,7 @@ dependencies { compile 'com.google.guava:guava:19.0' compile 'org.greenrobot:eventbus:3.0.0' - compile 'joda-time:joda-time:2.9.1' + compile 'net.danlew:android.joda:2.9.4.1' compile 'org.joda:joda-convert:1.8' // UI Libs diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 30f732755..ea203c828 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -55,119 +55,119 @@ <activity android:name=".ui.chat.ChannelDetailActivity" - android:label="Channel Details" + android:label="@string/channeldetails" android:launchMode="singleTask" android:parentActivityName=".ui.chat.MainActivity" android:theme="@style/AppTheme.Light" /> <activity android:name=".ui.coresettings.chatlist.ChatListListActivity" - android:label="Edit Chat Lists" + android:label="@string/editchatlists" android:launchMode="singleTask" android:parentActivityName=".ui.chat.MainActivity" android:theme="@style/AppTheme.Light" /> <activity android:name=".ui.coresettings.chatlist.ChatListEditActivity" - android:label="Edit Chat List" + android:label="@string/editchatlist" android:launchMode="singleTask" android:parentActivityName=".ui.coresettings.chatlist.ChatListListActivity" android:theme="@style/AppTheme.Light" /> <activity android:name=".ui.coresettings.chatlist.ChatListCreateActivity" - android:label="Create Chat List" + android:label="@string/createchatlist" android:launchMode="singleTask" android:parentActivityName=".ui.coresettings.chatlist.ChatListListActivity" android:theme="@style/AppTheme.Light" /> <activity android:name=".ui.coresettings.network.NetworkListActivity" - android:label="Edit Networks" + android:label="@string/editnetworks" android:launchMode="singleTask" android:parentActivityName=".ui.chat.MainActivity" android:theme="@style/AppTheme.Light" /> <activity android:name=".ui.coresettings.network.NetworkEditActivity" - android:label="Edit Network" + android:label="@string/editnetwork" android:launchMode="singleTask" android:parentActivityName=".ui.coresettings.network.NetworkListActivity" android:theme="@style/AppTheme.Light" /> <activity android:name=".ui.coresettings.network.NetworkCreateActivity" - android:label="Create Network" + android:label="@string/createnetwork" android:launchMode="singleTask" android:parentActivityName=".ui.coresettings.network.NetworkListActivity" android:theme="@style/AppTheme.Light" /> <activity android:name=".ui.coresettings.network.server.NetworkServerListActivity" - android:label="Edit NetworkServers" + android:label="@string/editnetworkservers" android:launchMode="singleTask" android:parentActivityName=".ui.coresettings.network.NetworkEditActivity" android:theme="@style/AppTheme.Light"/> <activity android:name=".ui.coresettings.identity.IdentityListActivity" - android:label="Edit Identities" + android:label="@string/editidentities" android:launchMode="singleTask" android:parentActivityName=".ui.chat.MainActivity" android:theme="@style/AppTheme.Light"/> <activity android:name=".ui.coresettings.identity.IdentityEditActivity" - android:label="Edit Identity" + android:label="@string/editidentity" android:launchMode="singleTask" android:parentActivityName=".ui.coresettings.identity.IdentityListActivity" android:theme="@style/AppTheme.Light"/> <activity android:name=".ui.coresettings.identity.IdentityCreateActivity" - android:label="Create Identity" + android:label="@string/createidentity" android:launchMode="singleTask" android:parentActivityName=".ui.coresettings.identity.IdentityListActivity" android:theme="@style/AppTheme.Light"/> <activity android:name=".ui.coresettings.identity.nick.IdentityNickListActivity" - android:label="Edit Nicks" + android:label="@string/editnicks" android:launchMode="singleTask" android:parentActivityName=".ui.coresettings.identity.IdentityEditActivity" android:theme="@style/AppTheme.Light"/> <activity android:name=".ui.coresettings.network.server.NetworkServerEditActivity" - android:label="Edit NetworkServer" + android:label="@string/editnetworkserver" android:launchMode="singleTask" android:parentActivityName=".ui.coresettings.network.server.NetworkServerListActivity" android:theme="@style/AppTheme.Light"/> <activity android:name=".ui.setup.AccountSetupActivity" - android:label="Account Setup" + android:label="@string/accountsetup" android:launchMode="singleTask" android:parentActivityName=".ui.setup.AccountSelectActivity" android:theme="@style/SetupTheme" /> <activity android:name=".ui.setup.AccountSelectActivity" - android:label="Account Selection" + android:label="@string/accountselection" android:launchMode="singleTask" android:parentActivityName=".ui.LoginActivity" android:theme="@style/SetupTheme" /> <activity android:name=".ui.setup.CoreSetupActivity" - android:label="Core Setup" + android:label="@string/coresetup" android:launchMode="singleTask" android:parentActivityName=".ui.chat.MainActivity" android:theme="@style/SetupTheme" /> <activity android:name=".ui.settings.SettingsActivity" - android:label="Settings" + android:label="@string/settings" android:launchMode="singleTask" android:parentActivityName=".ui.chat.MainActivity" android:theme="@style/AppTheme.Light" /> diff --git a/app/src/main/java/de/kuschku/libquassel/BusProvider.java b/app/src/main/java/de/kuschku/libquassel/BusProvider.java index 7f3eeb4a0..944cd7ccc 100644 --- a/app/src/main/java/de/kuschku/libquassel/BusProvider.java +++ b/app/src/main/java/de/kuschku/libquassel/BusProvider.java @@ -35,29 +35,25 @@ import de.kuschku.libquassel.events.BacklogReceivedEvent; import de.kuschku.libquassel.events.LagChangedEvent; public class BusProvider { - @NonNull - public final EventBus handle; - @NonNull - public final EventBus dispatch; - @NonNull - public final EventBus event; @NonNull private final String id; - @NonNull - private final BusHandler handleHandler = new BusHandler("QHANDLE"); + public EventBus handle; @NonNull - private final BusHandler dispatchHandler = new BusHandler("QDISPATCH"); + public EventBus dispatch; @NonNull - private final BusHandler eventHandler = new BusHandler("QEVENT"); + public EventBus event; public BusProvider() { this.id = UUID.randomUUID().toString(); this.handle = new EventBus(); + BusHandler handleHandler = new BusHandler("QHANDLE"); this.handle.register(handleHandler); this.dispatch = new EventBus(); + BusHandler dispatchHandler = new BusHandler("QDISPATCH"); this.dispatch.register(dispatchHandler); this.event = new EventBus(); + BusHandler eventHandler = new BusHandler("QEVENT"); this.event.register(eventHandler); } diff --git a/app/src/main/java/de/kuschku/libquassel/CoreConnection.java b/app/src/main/java/de/kuschku/libquassel/CoreConnection.java index 081b643b9..eead77323 100644 --- a/app/src/main/java/de/kuschku/libquassel/CoreConnection.java +++ b/app/src/main/java/de/kuschku/libquassel/CoreConnection.java @@ -339,13 +339,14 @@ public class CoreConnection { Thread.sleep(30 * 1000); } - } catch (InterruptedException e) { + } catch (InterruptedException ignored) { } } @Override public void end() { running = false; + this.interrupt(); } } diff --git a/app/src/main/java/de/kuschku/libquassel/QuasselClient.java b/app/src/main/java/de/kuschku/libquassel/QuasselClient.java index 318c46da0..7a40061d6 100644 --- a/app/src/main/java/de/kuschku/libquassel/QuasselClient.java +++ b/app/src/main/java/de/kuschku/libquassel/QuasselClient.java @@ -27,6 +27,7 @@ import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.client.ClientData; import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage; import de.kuschku.libquassel.ssl.CertificateManager; +import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; import de.kuschku.util.accounts.ServerAddress; import de.kuschku.util.buffermetadata.BufferMetaDataManager; @@ -65,5 +66,16 @@ public class QuasselClient { public void disconnect() { this.connection.close(); + this.client.networkManager().networks().clear(); + for (int bufferId : this.client.bufferManager().bufferIds()) { + this.client.backlogStorage().markBufferUnused(bufferId); + } + this.client.bufferManager().bufferIds().clear(); + this.client.bufferManager().buffers().clear(); + for (QBufferViewConfig config : client.bufferViewManager().bufferViewConfigs()) { + config.networkList().clear(); + } + client.bufferViewManager().bufferViewConfigs().clear(); + client.bufferViewManager().bufferViewConfigMap().clear(); } } diff --git a/app/src/main/java/de/kuschku/libquassel/client/Client.java b/app/src/main/java/de/kuschku/libquassel/client/Client.java index 1bc37157d..1da25b58c 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/Client.java +++ b/app/src/main/java/de/kuschku/libquassel/client/Client.java @@ -40,7 +40,6 @@ import de.kuschku.libquassel.events.PasswordChangeEvent; import de.kuschku.libquassel.events.StatusMessageEvent; import de.kuschku.libquassel.functions.types.InitRequestFunction; import de.kuschku.libquassel.functions.types.SyncFunction; -import de.kuschku.libquassel.localtypes.NotificationManager; import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.objects.types.CoreStatus; @@ -72,13 +71,13 @@ public class Client extends AClient { private final IdentityManager identityManager; @NonNull private final BacklogStorage backlogStorage; - @NonNull - private final NotificationManager notificationManager; private final List<String> initRequests = new LinkedList<>(); @NonNull private final QBacklogManager backlogManager; private final Map<String, List<SyncFunction>> bufferedSyncs = new HashMap<>(); private final Map<Integer, Pair<QBufferViewConfig, Integer>> bufferedBuffers = new HashMap<>(); + private final BufferMetaDataManager metaDataManager; + private final String coreId; private int initRequestMax = 0; private QBufferViewManager bufferViewManager; // local @@ -90,8 +89,6 @@ public class Client extends AClient { private CoreInfo coreInfo; private long latency; private ConnectionChangeEvent.Status connectionStatus; - private BufferMetaDataManager metaDataManager; - private String coreId; private int r = 1; public Client(@NonNull BusProvider provider, @NonNull BacklogStorage backlogStorage, @NonNull BufferMetaDataManager metaDataManager, String coreId) { @@ -99,12 +96,11 @@ public class Client extends AClient { this.provider = provider; this.networkManager = new NetworkManager(this); this.bufferManager = new BufferManager(this); - this.identityManager = new IdentityManager(this); + this.identityManager = new IdentityManager(); this.backlogStorage = backlogStorage; backlogStorage.setClient(this); this.backlogManager = new BacklogManager(this, backlogStorage); this.backlogManager.init("", provider, this); - this.notificationManager = new NotificationManager(this); this.initialized = true; this.metaDataManager = metaDataManager; } @@ -199,7 +195,10 @@ public class Client extends AClient { if (connectionStatus == ConnectionChangeEvent.Status.LOADING_BACKLOG) { bufferManager().doBacklogInit(20); } else if (connectionStatus == ConnectionChangeEvent.Status.CONNECTED) { - // FIXME: Init buffer activity state and highlightss + for (int bufferId : bufferManager().bufferIds()) { + metaDataManager().hiddendata(coreId(), bufferId); + } + // FIXME: Init buffer activity state and highlights } } @@ -409,11 +408,6 @@ public class Client extends AClient { return latency; } - @NonNull - public NotificationManager notificationManager() { - return notificationManager; - } - public void setBufferSyncer(QBufferSyncer bufferSyncer) { this.bufferSyncer = bufferSyncer; } diff --git a/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java b/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java index d64ddf136..8d7ab9483 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java +++ b/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java @@ -57,11 +57,6 @@ public class IdentityManager { return item1.id() == item2.id(); } }); - private final Client client; - - public IdentityManager(Client client) { - this.client = client; - } public void createIdentity(@NonNull QIdentity identity) { identities.put(identity.id(), identity); diff --git a/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java b/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java index fe93036a7..4a2343884 100644 --- a/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java +++ b/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java @@ -29,7 +29,9 @@ import java.util.List; import java.util.Map; import java.util.Observable; +import de.kuschku.libquassel.events.ConnectionChangeEvent; import de.kuschku.libquassel.syncables.types.impl.Network; +import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import de.kuschku.util.observables.lists.ObservableSortedList; @@ -101,6 +103,11 @@ public class NetworkManager extends Observable { list.remove(qNetwork); networks.put(network.networkId(), network); list.add(network); + + if (client.connectionStatus() == ConnectionChangeEvent.Status.CONNECTED) + for (QBufferViewConfig config : client.bufferViewManager().bufferViewConfigs()) { + config.updateNetworks(); + } } public QNetwork network(@IntRange(from = 0) int networkId) { @@ -112,6 +119,9 @@ public class NetworkManager extends Observable { if (qNetwork != null) list.remove(qNetwork); networks.remove(network); + for (QBufferViewConfig config : client.bufferViewManager().bufferViewConfigs()) { + config.updateNetworks(); + } } diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java b/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java index 9779d45b0..a2f3b8c10 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java @@ -28,12 +28,11 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; -import java.util.HashSet; -import java.util.Set; - import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.message.Message; +import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; +import de.kuschku.util.observables.callbacks.ElementCallback; import de.kuschku.util.observables.callbacks.UICallback; import de.kuschku.util.observables.lists.ObservableComparableSortedList; @@ -48,22 +47,64 @@ public class BacklogFilter implements UICallback { @NonNull private final ObservableComparableSortedList<Message> filtered; - @NonNull - private final Set<Message.Type> filteredTypes = new HashSet<>(); private final EventBus bus = new EventBus(); @Nullable private CharSequence searchQuery; + private Message markerlineMessage; + public BacklogFilter(@NonNull Client client, int bufferId, @NonNull ObservableComparableSortedList<Message> unfiltered, @NonNull ObservableComparableSortedList<Message> filtered) { this.client = client; this.bufferId = bufferId; this.unfiltered = unfiltered; this.filtered = filtered; this.bus.register(this); - setFiltersInternal(client.metaDataManager().hiddendata(client.coreId(), bufferId)); + client.bufferSyncer().getFilteredTypes(bufferId).addCallback(new ElementCallback<Message.Type>() { + @Override + public void notifyItemInserted(Message.Type element) { + bus.post(new UpdateRemoveEvent()); + } + + @Override + public void notifyItemRemoved(Message.Type element) { + bus.post(new UpdateAddEvent()); + } + + @Override + public void notifyItemChanged(Message.Type element) { + + } + }); updateDayChangeMessages(); } + private Message createMarkerlineMessage(int id) { + return Message.create( + id, + null, + Message.Type.Markerline, + new Message.Flags((byte) 0x00), + BufferInfo.create( + bufferId, + -1, + BufferInfo.Type.INVALID, + -1, + null + ), + null, + null + ); + } + + public void setMarkerlineMessage(int id) { + /* + Message markerlineMessage = this.markerlineMessage; + bus.post(new MessageRemoveEvent(markerlineMessage)); + this.markerlineMessage = createMarkerlineMessage(id); + bus.post(new MessageInsertEvent(this.markerlineMessage)); + */ + } + @Override public void notifyItemInserted(int position) { Message message = unfiltered.get(position); @@ -131,21 +172,11 @@ public class BacklogFilter implements UICallback { QNetwork network = client.networkManager().network(client.bufferManager().buffer(message.bufferInfo.id).getInfo().networkId); assertNotNull(network); boolean ignored = client.ignoreListManager() != null && client.ignoreListManager().matches(message, network); - boolean filtered = filteredTypes.contains(message.type); + boolean filtered = client.bufferSyncer().getFilteredTypes(bufferId).contains(message.type); boolean isSearching = searchQuery != null && searchQuery.length() != 0; return ignored || filtered || (isSearching && !message.content.contains(searchQuery)); } - public void addFilter(Message.Type type) { - filteredTypes.add(type); - bus.post(new UpdateRemoveEvent()); - } - - public void removeFilter(Message.Type type) { - filteredTypes.remove(type); - bus.post(new UpdateAddEvent()); - } - public void update() { bus.post(new UpdateAddEvent()); bus.post(new UpdateRemoveEvent()); @@ -182,16 +213,11 @@ public class BacklogFilter implements UICallback { @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(@NonNull MessageInsertEvent event) { filtered.add(event.msg); - client.bufferSyncer().addActivity(event.msg); - if (event.msg.type != Message.Type.DayChange) - updateDayChangeMessages(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(@NonNull MessageRemoveEvent event) { filtered.remove(event.msg); - if (event.msg.type != Message.Type.DayChange) - updateDayChangeMessages(); } @Override @@ -230,37 +256,6 @@ public class BacklogFilter implements UICallback { } } - public int getFilters() { - int filters = 0x00000000; - for (Message.Type type : filteredTypes) { - filters |= type.value; - } - return filters; - } - - public void setFilters(int filters) { - setFiltersInternal(filters); - client.metaDataManager().setHiddendata(client.coreId(), bufferId, filters); - int after = client.metaDataManager().hiddendata(client.coreId(), bufferId); - } - - private void setFiltersInternal(int filters) { - Set<Message.Type> removed = new HashSet<>(); - for (Message.Type type : filteredTypes) { - if ((filters & type.value) == 0) - removed.add(type); - } - for (Message.Type type : removed) { - removeFilter(type); - } - - for (Message.Type type : Message.Type.values()) { - if ((filters & type.value) != 0) { - addFilter(type); - } - } - } - private class MessageInsertEvent { public final Message msg; diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/NotificationManager.java b/app/src/main/java/de/kuschku/libquassel/localtypes/NotificationManager.java deleted file mode 100644 index ff0e7e0d4..000000000 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/NotificationManager.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * QuasselDroid - Quassel client for Android - * Copyright (C) 2016 Janne Koschinski - * Copyright (C) 2016 Ken Børge Viktil - * Copyright (C) 2016 Magnus Fjell - * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.libquassel.localtypes; - -import android.support.annotation.NonNull; -import android.util.SparseArray; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -import de.kuschku.libquassel.client.Client; -import de.kuschku.libquassel.message.Message; -import de.kuschku.util.observables.lists.ObservableComparableSortedList; - -public class NotificationManager { - @NonNull - private final SparseArray<ObservableComparableSortedList<Message>> notifications = new SparseArray<>(); - @NonNull - private final List<HighlightRule> highlights = new ArrayList<>(); - @NonNull - private final Client client; - - public NotificationManager(@NonNull Client client) { - this.client = client; - } - - @NonNull - public ObservableComparableSortedList<Message> getNotifications(int bufferid) { - if (notifications.get(bufferid) == null) - notifications.put(bufferid, new ObservableComparableSortedList<>(Message.class)); - - return notifications.get(bufferid); - } - - public void init(int id) { - notifications.put(id, new ObservableComparableSortedList<>(Message.class)); - } - - public void receiveMessage(@NonNull Message message) { - if (checkMessage(message)) { - getNotifications(message.bufferInfo.id).add(message); - } - } - - public boolean checkMessage(@NonNull Message message) { - return false; - } - - public void receiveMessages(@NonNull List<Message> messages) { - for (Message message : messages) { - receiveMessage(message); - } - } - - private class HighlightRule { - public final Pattern rule; - public final Pattern channelRule; - public final boolean invertChannelRule; - public final boolean caseSensitive; - - public HighlightRule(@NonNull String rule, @NonNull String channelRule, boolean invertChannelRule, boolean caseSensitive) { - this.rule = rule.isEmpty() ? Pattern.compile(".*") : Pattern.compile(rule); - this.channelRule = channelRule.isEmpty() ? Pattern.compile(".*") : Pattern.compile(channelRule); - this.invertChannelRule = invertChannelRule; - this.caseSensitive = caseSensitive; - } - - public boolean matches(@NonNull String message, @NonNull String channelName) { - return (invertChannelRule ^ channelRule.matcher(channelName).matches() && rule.matcher(message).matches()); - } - } -} diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java index 32418578b..d215a841f 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java @@ -59,4 +59,6 @@ public interface BacklogStorage { void clear(@IntRange(from = 0) int bufferid); Set<BacklogFilter> getFilters(); + + void setMarkerLine(@IntRange(from = 0) int buffer, int msgId); } diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/HybridBacklogStorage.java b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/HybridBacklogStorage.java index c85e01f8c..61612c57e 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/HybridBacklogStorage.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/HybridBacklogStorage.java @@ -28,8 +28,6 @@ import android.util.SparseArray; import com.raizlabs.android.dbflow.config.FlowManager; import com.raizlabs.android.dbflow.sql.language.SQLite; -import com.raizlabs.android.dbflow.structure.database.DatabaseWrapper; -import com.raizlabs.android.dbflow.structure.database.transaction.ITransaction; import java.util.HashSet; import java.util.List; @@ -86,40 +84,34 @@ public class HybridBacklogStorage implements BacklogStorage { @Override public void insertMessages(@IntRange(from = 0) int bufferId, @NonNull Message... messages) { - ensureExisting(bufferId); - FlowManager.getDatabase(ConnectedDatabase.class).executeTransaction(new ITransaction() { - @Override - public void execute(DatabaseWrapper databaseWrapper) { - for (Message message : messages) { - client.unbufferBuffer(message.bufferInfo); - synchronized (backlogs) { - if (backlogs.get(bufferId) != null) - backlogs.get(bufferId).add(message); - message.save(); - message.bufferInfo.save(); - } - updateLatest(message); + FlowManager.getDatabase(ConnectedDatabase.class).executeTransaction(databaseWrapper -> { + for (Message message : messages) { + client.unbufferBuffer(message.bufferInfo); + synchronized (backlogs) { + if (backlogs.get(bufferId) != null) + backlogs.get(bufferId).add(message); + client.bufferSyncer().addActivity(message); + message.save(); + message.bufferInfo.save(); } + updateLatest(message); } }); } @Override public void insertMessages(@IntRange(from = 0) int bufferId, List<Message> messages) { - ensureExisting(bufferId); - FlowManager.getDatabase(ConnectedDatabase.class).executeTransaction(new ITransaction() { - @Override - public void execute(DatabaseWrapper databaseWrapper) { - for (Message message : messages) { - client.unbufferBuffer(message.bufferInfo); - synchronized (backlogs) { - if (backlogs.get(bufferId) != null) - backlogs.get(bufferId).add(message); - message.save(); - message.bufferInfo.save(); - } - updateLatest(message); + FlowManager.getDatabase(ConnectedDatabase.class).executeTransaction(databaseWrapper -> { + for (Message message : messages) { + client.unbufferBuffer(message.bufferInfo); + synchronized (backlogs) { + if (backlogs.get(bufferId) != null) + backlogs.get(bufferId).add(message); + client.bufferSyncer().addActivity(message); + message.save(); + message.bufferInfo.save(); } + updateLatest(message); } }); } @@ -132,38 +124,34 @@ public class HybridBacklogStorage implements BacklogStorage { @Override public void insertMessages(@NonNull Message... messages) { - FlowManager.getDatabase(ConnectedDatabase.class).executeTransaction(new ITransaction() { - @Override - public void execute(DatabaseWrapper databaseWrapper) { - for (Message message : messages) { - client.unbufferBuffer(message.bufferInfo); - synchronized (backlogs) { - if (backlogs.get(message.bufferInfo.id) != null) - backlogs.get(message.bufferInfo.id).add(message); - message.save(); - message.bufferInfo.save(); - } - updateLatest(message); + FlowManager.getDatabase(ConnectedDatabase.class).executeTransaction(databaseWrapper -> { + for (Message message : messages) { + client.unbufferBuffer(message.bufferInfo); + synchronized (backlogs) { + if (backlogs.get(message.bufferInfo.id) != null) + backlogs.get(message.bufferInfo.id).add(message); + client.bufferSyncer().addActivity(message); + message.save(); + message.bufferInfo.save(); } + updateLatest(message); } }); } @Override public void insertMessages(List<Message> messages) { - FlowManager.getDatabase(ConnectedDatabase.class).executeTransaction(new ITransaction() { - @Override - public void execute(DatabaseWrapper databaseWrapper) { - for (Message message : messages) { - client.unbufferBuffer(message.bufferInfo); - synchronized (backlogs) { - if (backlogs.get(message.bufferInfo.id) != null) - backlogs.get(message.bufferInfo.id).add(message); - message.save(); - message.bufferInfo.save(); - } - updateLatest(message); + FlowManager.getDatabase(ConnectedDatabase.class).executeTransaction(databaseWrapper -> { + for (Message message : messages) { + client.unbufferBuffer(message.bufferInfo); + synchronized (backlogs) { + if (backlogs.get(message.bufferInfo.id) != null) + backlogs.get(message.bufferInfo.id).add(message); + client.bufferSyncer().addActivity(message); + message.save(); + message.bufferInfo.save(); } + updateLatest(message); } }); } @@ -200,12 +188,29 @@ public class HybridBacklogStorage implements BacklogStorage { return filterSet; } + @Override + public void setMarkerLine(@IntRange(from = 0) int buffer, int msgId) { + BacklogFilter filter = filters.get(buffer); + if (filter != null) { + Log.w("DEBUG", "Setting markerline for open buffer"); + filter.setMarkerlineMessage(msgId); + } else { + Log.w("DEBUG", "Buffer not open"); + } + } + private void ensureExisting(@IntRange(from = -1) int bufferId) { assertNotNull(client); if (backlogs.get(bufferId) == null) { ObservableComparableSortedList<Message> messages = new ObservableComparableSortedList<>(Message.class, true); ObservableComparableSortedList<Message> filteredMessages = new ObservableComparableSortedList<>(Message.class, true); BacklogFilter backlogFilter = new BacklogFilter(client, bufferId, messages, filteredMessages); + if (client.bufferSyncer() != null) { + backlogFilter.setMarkerlineMessage(client.bufferSyncer().markerLine(bufferId)); + Log.w("DEBUG", "Setting markerline for newly opened buffer"); + } else { + Log.w("DEBUG", "BufferSyncer is null!"); + } messages.addCallback(backlogFilter); synchronized (backlogs) { List<Message> messageList = SQLite.select().from(Message.class).where(Message_Table.bufferInfo_id.eq(bufferId)).queryList(); diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java index f90033596..162909106 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java @@ -32,11 +32,10 @@ import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel; public class ChannelBuffer implements Buffer { @NonNull private final Client client; + private final ObservableField<BufferInfo.BufferStatus> status = new ObservableField<>(); @NonNull private BufferInfo info; - private ObservableField<BufferInfo.BufferStatus> status = new ObservableField<>(); - public ChannelBuffer(@NonNull BufferInfo info, @NonNull Client client) { this.info = info; this.client = client; diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java index a87f00a1f..5b3fc8d9a 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java @@ -32,11 +32,10 @@ import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser; public class QueryBuffer implements Buffer { @NonNull private final Client client; + private final ObservableField<BufferInfo.BufferStatus> status = new ObservableField<>(); @NonNull private BufferInfo info; - private ObservableField<BufferInfo.BufferStatus> status = new ObservableField<>(); - public QueryBuffer(@NonNull BufferInfo info, @NonNull Client client) { this.info = info; this.client = client; diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java index bf87ac64d..fd3158ee5 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java @@ -32,9 +32,9 @@ import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; public class StatusBuffer implements Buffer { @NonNull private final Client client; + private final ObservableField<BufferInfo.BufferStatus> status = new ObservableField<>(); @NonNull private BufferInfo info; - private ObservableField<BufferInfo.BufferStatus> status = new ObservableField<>(); public StatusBuffer(@NonNull BufferInfo info, @NonNull Client client) { this.info = info; diff --git a/app/src/main/java/de/kuschku/libquassel/message/Message.java b/app/src/main/java/de/kuschku/libquassel/message/Message.java index 99bd029dc..eb795a5b9 100644 --- a/app/src/main/java/de/kuschku/libquassel/message/Message.java +++ b/app/src/main/java/de/kuschku/libquassel/message/Message.java @@ -122,10 +122,18 @@ public class Message extends BaseModel implements ContentComparable<Message> { @Override public int compareTo(@NonNull Message another) { - if (this.type != Type.DayChange && another.type != Type.DayChange) - return this.id - another.id; - else + if (this.type == Type.DayChange || another.type == Type.DayChange) { return this.time.compareTo(another.time); + } else if (this.id == another.id) { + if (this.type == Type.Markerline) + return 1; + else if (another.type == Type.Markerline) + return -1; + else + return 0; + } else { + return this.id - another.id; + } } public enum Type { @@ -146,7 +154,8 @@ public class Message extends BaseModel implements ContentComparable<Message> { Topic(0x04000), NetsplitJoin(0x08000), NetsplitQuit(0x10000), - Invite(0x20000); + Invite(0x20000), + Markerline(0x40000); public final int value; diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/QMetaTypeRegistry.java b/app/src/main/java/de/kuschku/libquassel/primitives/QMetaTypeRegistry.java index 953283f6f..b6fe16f83 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/QMetaTypeRegistry.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/QMetaTypeRegistry.java @@ -256,9 +256,11 @@ public class QMetaTypeRegistry { return result; } - @NonNull - public static <T> QMetaType<T> getTypeByObject(@NonNull T type) { - if (type instanceof Void) return getMetaTypeByType(QMetaType.Type.Void); + @Nullable + public static <T> QMetaType<T> getTypeByObject(@Nullable T type) { + if (type == null) + return null; + else if (type instanceof Void) return getMetaTypeByType(QMetaType.Type.Void); else if (type instanceof Boolean) return getMetaTypeByType(QMetaType.Type.Bool); else if (type instanceof Integer) diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java index 018faf12f..3a55c3c24 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java @@ -37,11 +37,9 @@ import static de.kuschku.util.AndroidAssert.assertNotNull; public class UserTypeSerializer<T> implements PrimitiveSerializer<T> { @NonNull private final ObjectSerializer<T> objectSerializer; - private final String type; public UserTypeSerializer(@NonNull ObjectSerializer<T> objectSerializer, String type) { this.objectSerializer = objectSerializer; - this.type = type; } @Override diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/types/QVariant.java b/app/src/main/java/de/kuschku/libquassel/primitives/types/QVariant.java index 3e3e1df20..b4de80848 100644 --- a/app/src/main/java/de/kuschku/libquassel/primitives/types/QVariant.java +++ b/app/src/main/java/de/kuschku/libquassel/primitives/types/QVariant.java @@ -35,9 +35,10 @@ import de.kuschku.libquassel.syncables.types.interfaces.QSyncableObject; public class QVariant<T> { @Nullable public final T data; - @NonNull + @Nullable public final QMetaType<T> type; + @SuppressWarnings("unchecked") public QVariant(@NonNull T data) { if (data instanceof Set) { this.data = (T) new ArrayList((Set) data); diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java index ca3142bd7..1f3b3f625 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java @@ -139,6 +139,7 @@ public abstract class SyncableObject<T> extends GeneralObservable<T> implements this.initialized = true; } + @SuppressWarnings("unchecked") public void _update() { notifyChanged((T) this); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABacklogManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABacklogManager.java index 6474e4b3d..5a7e91dc0 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABacklogManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABacklogManager.java @@ -21,6 +21,8 @@ package de.kuschku.libquassel.syncables.types.abstracts; +import android.support.annotation.NonNull; + import java.util.List; import de.kuschku.libquassel.message.Message; @@ -38,7 +40,7 @@ public abstract class ABacklogManager extends SyncableObject<QBacklogManager> im } @Override - public void receiveBacklog(int id, int first, int last, int limit, int additional, List<Message> messages) { + public void receiveBacklog(int id, int first, int last, int limit, int additional, @NonNull List<Message> messages) { _receiveBacklog(id, first, last, limit, additional, messages); sync("receiveBacklog", new String[]{"BufferId", "MsgId", "MsgId", intName, intName}, new Object[]{id, first, last, limit, additional, messages}); } @@ -50,7 +52,7 @@ public abstract class ABacklogManager extends SyncableObject<QBacklogManager> im } @Override - public void receiveBacklogAll(int first, int last, int limit, int additional, List<Message> messages) { + public void receiveBacklogAll(int first, int last, int limit, int additional, @NonNull List<Message> messages) { _receiveBacklogAll(first, last, limit, additional, messages); sync("receiveBacklogAll", new String[]{"MsgId", "MsgId", intName, intName}, new Object[]{first, last, limit, additional, messages}); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java index e96bcb9ea..fa128a1a7 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java @@ -41,7 +41,6 @@ import de.kuschku.libquassel.localtypes.BacklogFilter; import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.message.Message_Table; -import de.kuschku.libquassel.primitives.types.BufferInfo; import de.kuschku.libquassel.primitives.types.QVariant; import de.kuschku.libquassel.syncables.types.abstracts.ABacklogManager; import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager; @@ -136,10 +135,9 @@ public class BacklogManager extends ABacklogManager { assertNotNull(provider); Set<Integer> buffers = new HashSet<>(); + storage.insertMessages(messages); for (Message message : messages) { - BufferInfo bufferInfo = message.bufferInfo; - storage.insertMessages(bufferInfo.id, message); - buffers.add(bufferInfo.id); + buffers.add(message.bufferInfo.id); } for (int id : buffers) { provider.sendEvent(new BacklogReceivedEvent(id)); diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java index c3068527e..915c6df82 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java @@ -26,6 +26,7 @@ import android.support.annotation.NonNull; import android.util.SparseArray; import android.util.SparseIntArray; +import java.util.HashMap; import java.util.Map; import de.kuschku.libquassel.BusProvider; @@ -38,6 +39,7 @@ import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager; import de.kuschku.libquassel.syncables.types.interfaces.QBufferSyncer; import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; import de.kuschku.util.observables.lists.ObservableComparableSortedList; +import de.kuschku.util.observables.lists.ObservableSet; import de.kuschku.util.observables.lists.ObservableSortedList; import static de.kuschku.util.AndroidAssert.assertNotNull; @@ -50,6 +52,8 @@ public class BufferSyncer extends ABufferSyncer { private SparseIntArray lastSeenMsgs = new SparseIntArray(); @NonNull private SparseIntArray markerLines = new SparseIntArray(); + @NonNull + private Map<Integer, ObservableSet<Message.Type>> filters = new HashMap<>(); public BufferSyncer(@NonNull Map<Integer, Integer> lastSeenMsgs, @NonNull Map<Integer, Integer> markerLines) { assertNotNull(lastSeenMsgs); @@ -99,9 +103,10 @@ public class BufferSyncer extends ABufferSyncer { if (msgId < 0) return; - int oldLastSeenMsg = markerLine(buffer); - if (oldLastSeenMsg < msgId) { + int oldMarkerline = markerLine(buffer); + if (oldMarkerline < msgId) { markerLines.put(buffer, msgId); + client.backlogStorage().setMarkerLine(buffer, msgId); } _update(); } @@ -128,8 +133,9 @@ public class BufferSyncer extends ABufferSyncer { for (QBufferViewConfig config : client.bufferViewManager().bufferViewConfigs()) { config.deleteBuffer(buffer); } - markerLines.removeAt(markerLines.indexOfKey(buffer)); - lastSeenMsgs.removeAt(lastSeenMsgs.indexOfKey(buffer)); + this.filters.remove(buffer); + markerLines.delete(buffer); + lastSeenMsgs.delete(buffer); client.bufferManager().removeBuffer(buffer); _update(); } @@ -237,9 +243,11 @@ public class BufferSyncer extends ABufferSyncer { } public void addActivity(@NonNull Message message) { - int lastSeenMsg = lastSeenMsg(message.bufferInfo.id); - if (message.id > lastSeenMsg) { - addActivity(message.bufferInfo.id, message.type); + int bufferId = message.bufferInfo.id; + int lastSeenMsg = lastSeenMsg(bufferId); + boolean filtered = getFilteredTypes(bufferId).contains(message.type); + if (!filtered && message.id > lastSeenMsg) { + addActivity(bufferId, message.type); } } @@ -252,4 +260,34 @@ public class BufferSyncer extends ABufferSyncer { public SparseIntArray markerLines() { return markerLines; } + + @Override + public ObservableSet<Message.Type> getFilteredTypes(int bufferId) { + if (!this.filters.containsKey(bufferId)) { + this.filters.put(bufferId, new ObservableSet<>()); + setFilters(bufferId, client.metaDataManager().hiddendata(client.coreId(), bufferId)); + } + return this.filters.get(bufferId); + } + + @Override + public int getFilters(int bufferId) { + int filters = 0x00000000; + for (Message.Type type : getFilteredTypes(bufferId)) { + filters |= type.value; + } + return filters; + } + + @Override + public void setFilters(int bufferId, int filters) { + client.metaDataManager().setHiddendata(client.coreId(), bufferId, filters); + for (Message.Type type : Message.Type.values()) { + if ((filters & type.value) != 0) { + getFilteredTypes(bufferId).add(type); + } else { + getFilteredTypes(bufferId).remove(type); + } + } + } } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java index ad89470fb..260db1f7f 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java @@ -449,7 +449,7 @@ public class BufferViewConfig extends ABufferViewConfig { public void deleteBuffer(int bufferId) { visibleBufferIds.remove(bufferId); allBufferIds.remove(bufferId); - buffers.remove(buffers.indexOf(bufferId)); + buffers.remove((Integer) bufferId); temporarilyRemovedBuffers.remove(bufferId); removedBuffers.remove(bufferId); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java index aa7f95970..b210b665a 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java @@ -42,8 +42,7 @@ public class BufferViewManager extends ABufferViewManager { @NonNull final Set<Integer> cachedIds = new HashSet<>(); - Map<Integer, QBufferViewConfig> bufferViewConfigs = new HashMap<>(); - ObservableSortedList<QBufferViewConfig> list = new ObservableSortedList<>(QBufferViewConfig.class, new ObservableSortedList.ItemComparator<QBufferViewConfig>() { + final ObservableSortedList<QBufferViewConfig> list = new ObservableSortedList<>(QBufferViewConfig.class, new ObservableSortedList.ItemComparator<QBufferViewConfig>() { @Override public int compare(QBufferViewConfig o1, QBufferViewConfig o2) { return o1.bufferViewName().compareTo(o2.bufferViewName()); @@ -59,10 +58,8 @@ public class BufferViewManager extends ABufferViewManager { return item1.bufferViewId() == item2.bufferViewId(); } }); - - private GeneralCallback<QBufferViewConfig> observer = config -> { - list.notifyItemChanged(list.indexOf(config)); - }; + private final GeneralCallback<QBufferViewConfig> observer = config -> list.notifyItemChanged(list.indexOf(config)); + Map<Integer, QBufferViewConfig> bufferViewConfigs = new HashMap<>(); public BufferViewManager(@NonNull List<Integer> bufferViewIds) { cachedIds.addAll(bufferViewIds); @@ -86,6 +83,7 @@ public class BufferViewManager extends ABufferViewManager { list.remove(before); bufferViewConfigs.put(config.bufferViewId(), config); + config.init(String.valueOf(config.bufferViewId()), provider, client); list.add(config); config.addObserver(observer); _update(); diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java index 255e542ca..2c8398e0f 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java @@ -26,6 +26,7 @@ import android.support.annotation.Nullable; import com.google.common.base.Joiner; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -52,22 +53,22 @@ import de.kuschku.util.observables.lists.ObservableSet; import static de.kuschku.util.AndroidAssert.assertEquals; public class IrcChannel extends AIrcChannel { - private final String name; @NonNull - private final Map<String, Set<Character>> userModes = new HashMap<>(); - private final ObservableSet<String> users = new ObservableSet<>(); + public final Map<Character, List<String>> A_channelModes = new HashMap<>(); @NonNull - public Map<Character, List<String>> A_channelModes = new HashMap<>(); + public final Map<Character, String> B_channelModes = new HashMap<>(); @NonNull - public Map<Character, String> B_channelModes = new HashMap<>(); + public final Map<Character, String> C_channelModes = new HashMap<>(); + private final String name; @NonNull - public Map<Character, String> C_channelModes = new HashMap<>(); + private final Map<String, Set<Character>> userModes = new HashMap<>(); + private final ObservableSet<String> users = new ObservableSet<>(); @NonNull public Set<Character> D_channelModes = new HashSet<>(); private String topic; private String password; private boolean encrypted; - private QNetwork network; + private WeakReference<QNetwork> network = new WeakReference<>(null); private String codecForEncoding; private String codecForDecoding; // Because we don’t have networks at the beginning yet @@ -130,7 +131,7 @@ public class IrcChannel extends AIrcChannel { @Override public QNetwork network() { - return network; + return network.get(); } @NonNull @@ -431,7 +432,7 @@ public class IrcChannel extends AIrcChannel { @Override public void init(QNetwork network, Client client) { this.client = client; - this.network = network; + this.network = new WeakReference<>(network); /* TODO: Use just the nick in userModes and users instead – that should make sync things a lot easier */ @@ -468,7 +469,10 @@ public class IrcChannel extends AIrcChannel { cachedUserModes = null; cachedChanModes = null; - this.network._addIrcChannel(this); + + QNetwork qNetwork = this.network.get(); + if (qNetwork != null) + qNetwork._addIrcChannel(this); _update(); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java index 26e66fb45..9c3840c4d 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java @@ -27,6 +27,7 @@ import android.util.SparseArray; import org.joda.time.DateTime; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -53,7 +54,7 @@ public class IrcUser extends AIrcUser { @NonNull private final SparseArray<DateTime> lastSpokenTo = new SparseArray<>(); private final List<String> cachedChannels; - private final Set<QIrcChannel> channels = new HashSet<>(); + private final Set<String> channels = new HashSet<>(); private String user; private String host; private String nick; @@ -69,7 +70,7 @@ public class IrcUser extends AIrcUser { private String whoisServiceReply; private String suserHost; private boolean encrypted; - private QNetwork network; + private WeakReference<QNetwork> network = new WeakReference<>(null); private Set<Character> userModes; public IrcUser(String server, String ircOperator, boolean away, int lastAwayMessage, DateTime idleTime, String whoisServiceReply, String suserHost, String nick, String realName, String account, String awayMessage, DateTime loginTime, boolean encrypted, List<String> channels, String host, String userModes, String user) { @@ -212,7 +213,7 @@ public class IrcUser extends AIrcUser { @Override public QNetwork network() { - return network; + return network.get(); } @NonNull @@ -225,8 +226,8 @@ public class IrcUser extends AIrcUser { @Override public List<String> channels() { List<String> chanList = new ArrayList<>(channels.size()); - for (QIrcChannel channel : channels) { - chanList.add(channel.name()); + for (String channel : channels) { + chanList.add(channel); } return chanList; } @@ -379,8 +380,8 @@ public class IrcUser extends AIrcUser { @Override public void _joinChannel(@NonNull QIrcChannel channel, boolean skip_channel_join) { - if (!channels.contains(channel)) { - channels.add(channel); + if (!channels.contains(channel.name())) { + channels.add(channel.name()); if (!skip_channel_join) channel._joinIrcUser(this); } @@ -421,12 +422,15 @@ public class IrcUser extends AIrcUser { @Override public void _quit() { - List<QIrcChannel> channels = new ArrayList<>(this.channels); + List<String> channels = new ArrayList<>(this.channels); this.channels.clear(); - for (QIrcChannel channel : channels) { - channel._part(this); + QNetwork network = network(); + if (network != null) { + for (String channel : channels) { + network.ircChannel(channel)._part(this); + } + network._removeIrcUser(this); } - network()._removeIrcUser(this); _update(); } @@ -450,12 +454,13 @@ public class IrcUser extends AIrcUser { @Override public void init(QNetwork network, Client client) { - this.network = network; + this.network = new WeakReference<>(network); this.client = client; if (cachedChannels != null) for (String channelName : cachedChannels) { - channels.add(network().newIrcChannel(channelName)); + network().newIrcChannel(channelName); + channels.add(channelName); } _update(); } diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java index 65173f84d..2083fa977 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java @@ -80,7 +80,7 @@ public class Network extends ANetwork implements Observer { String myNick, NetworkInfo networkInfo) { this.channels = new HashMap<>(channels); this.nicks = new HashMap<>(nicks); - this.supports = supports; + this.supports = new HashMap<>(supports); this.connectionState = ConnectionState.of(connectionState); this.currentServer = currentServer; this.isConnected = isConnected; diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferSyncer.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferSyncer.java index 3868be202..2cba3c903 100644 --- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferSyncer.java +++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferSyncer.java @@ -26,6 +26,7 @@ import android.util.SparseIntArray; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.syncables.Synced; +import de.kuschku.util.observables.lists.ObservableSet; public interface QBufferSyncer extends QObservable<QBufferSyncer> { int lastSeenMsg(int buffer); @@ -111,4 +112,10 @@ public interface QBufferSyncer extends QObservable<QBufferSyncer> { SparseIntArray lastSeenMsgs(); SparseIntArray markerLines(); + + ObservableSet<Message.Type> getFilteredTypes(int bufferId); + + void setFilters(int bufferId, int filters); + + int getFilters(int bufferId); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java index 75e2e59f8..846928d1b 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java @@ -27,6 +27,8 @@ import android.content.Context; import com.raizlabs.android.dbflow.config.FlowConfig; import com.raizlabs.android.dbflow.config.FlowManager; +import net.danlew.android.joda.JodaTimeAndroid; + import org.acra.ACRA; import org.acra.ReportField; import org.acra.ReportingInteractionMode; @@ -63,9 +65,11 @@ public class QuasselDroidNG extends Application { ACRA.init(this); - applicationContext = getApplicationContext(); - FlowManager.init(new FlowConfig.Builder(this).build()); FlowManager.getDatabase(ConnectedDatabase.class).getWritableDatabase(); + + JodaTimeAndroid.init(this); + + applicationContext = getApplicationContext(); } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java b/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java index 54ebdc7f3..e86420ffe 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java @@ -38,12 +38,10 @@ import de.kuschku.util.backports.Consumer; public class QuasselService extends Service { @NonNull private final IBinder binder = new LocalBinder(); - + private final Set<Consumer<ClientBackgroundThread>> consumers = new HashSet<>(); @Nullable private ClientBackgroundThread bgThread; - private Set<Consumer<ClientBackgroundThread>> consumers = new HashSet<>(); - @Override public IBinder onBind(Intent intent) { return binder; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/LoginActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/LoginActivity.java index 3091ec2b6..18a00057c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/LoginActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/LoginActivity.java @@ -38,7 +38,7 @@ public class LoginActivity extends AppCompatActivity { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } - private AppContext context = new AppContext(); + private final AppContext context = new AppContext(); private boolean firstStart = true; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ViewIntBinder.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ViewIntBinder.java index 55771c399..34c679c3e 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ViewIntBinder.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ViewIntBinder.java @@ -33,7 +33,7 @@ import java.util.Set; public class ViewIntBinder { private final ObservableInt field; - private Set<Observable.OnPropertyChangedCallback> callbacks = new HashSet<>(); + private final Set<Observable.OnPropertyChangedCallback> callbacks = new HashSet<>(); public ViewIntBinder(ObservableInt field) { this.field = field; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java index dfe270e47..85fe0971c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java @@ -37,19 +37,15 @@ import java.util.Set; import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig; import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewManager; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.util.observables.callbacks.GeneralCallback; -public class BufferViewConfigSpinnerAdapter implements ThemedSpinnerAdapter, GeneralCallback { - private final AppContext context; +public class BufferViewConfigSpinnerAdapter implements ThemedSpinnerAdapter, GeneralCallback<QBufferViewManager> { private final QBufferViewManager bufferViewManager; + private final Set<DataSetObserver> observers = new HashSet<>(); @Nullable private Resources.Theme theme; - private Set<DataSetObserver> observers = new HashSet<>(); - - public BufferViewConfigSpinnerAdapter(AppContext context, QBufferViewManager bufferViewManager) { - this.context = context; + public BufferViewConfigSpinnerAdapter(QBufferViewManager bufferViewManager) { this.bufferViewManager = bufferViewManager; this.bufferViewManager.addObserver(this); } @@ -136,7 +132,7 @@ public class BufferViewConfigSpinnerAdapter implements ThemedSpinnerAdapter, Gen } @Override - public void notifyChanged(Object o) { + public void notifyChanged(QBufferViewManager o) { for (DataSetObserver observer : observers) { observer.onChanged(); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java index bb18a24a7..376f7b640 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java @@ -68,7 +68,6 @@ import de.kuschku.libquassel.events.GeneralErrorEvent; import de.kuschku.libquassel.events.LoginRequireEvent; import de.kuschku.libquassel.events.UnknownCertificateEvent; import de.kuschku.libquassel.functions.types.HandshakeFunction; -import de.kuschku.libquassel.localtypes.BacklogFilter; import de.kuschku.libquassel.localtypes.buffers.Buffer; import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer; import de.kuschku.libquassel.localtypes.buffers.QueryBuffer; @@ -104,33 +103,27 @@ import static de.kuschku.util.AndroidAssert.assertNotNull; public class MainActivity extends BoundActivity { public static final int REQUEST_CODE_CORESETUP = 1; + /** + * This object encapsulates the current status of the activity – opened bufferview, for example + */ + private final Status status = new Status(); /** * Host layout for content fragment, for example showing a loader or the chat */ @Bind(R.id.chatList) RecyclerView chatList; - @Bind(R.id.chatListSpinner) AppCompatSpinner chatListSpinner; - @Bind(R.id.chatListToolbar) Toolbar chatListToolbar; - @Nullable @Bind(R.id.drawer_layout) DrawerLayout drawerLayout; - /** * Main ActionBar */ @Bind(R.id.toolbar) Toolbar toolbar; - - /** - * This object encapsulates the current status of the activity – opened bufferview, for example - */ - private Status status = new Status(); - private AccountManager manager; private ToolbarWrapper toolbarWrapper; @@ -255,12 +248,22 @@ public class MainActivity extends BoundActivity { .debounce(400, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(charSequence -> { - if (context.client() != null) + if (context.client() != null && context.client().connectionStatus() == ConnectionChangeEvent.Status.CONNECTED) context.client().backlogStorage().getFilter(context.client().backlogManager().open()).setQuery(charSequence); }); return super.onCreateOptionsMenu(menu); } + @Override + protected void onDestroy() { + chatListAdapter.selectConfig(-1); + toolbarWrapper.setOnClickListener(null); + chatListAdapter.setBufferClickListener(null); + chatListSpinner.setOnItemSelectedListener(null); + chatListToolbar.setOnMenuItemClickListener(null); + super.onDestroy(); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -417,7 +420,7 @@ public class MainActivity extends BoundActivity { context.client().backlogManager().open(status.bufferId); if (context.client().bufferViewManager() != null) { - chatListSpinner.setAdapter(new BufferViewConfigSpinnerAdapter(context, context.client().bufferViewManager())); + chatListSpinner.setAdapter(new BufferViewConfigSpinnerAdapter(context.client().bufferViewManager())); chatListSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { @@ -451,8 +454,8 @@ public class MainActivity extends BoundActivity { filterSettingsInts[i] = filterSettings.get(i); } - BacklogFilter backlogFilter = context.client().backlogManager().filter(context.client().backlogManager().open()); - int oldFilters = backlogFilter.getFilters(); + int bufferId = context.client().backlogManager().open(); + int oldFilters = context.client().bufferSyncer().getFilters(bufferId); List<Integer> oldFiltersList = new ArrayList<>(); for (int type : filterSettings) { if ((type & oldFilters) != 0) @@ -486,7 +489,7 @@ public class MainActivity extends BoundActivity { else if (settingsid == Message.Type.Join.value) filters |= Message.Type.NetsplitJoin.value; } - backlogFilter.setFilters(filters); + context.client().bufferSyncer().setFilters(bufferId, filters); }) .negativeColor(context.themeUtil().res.colorForeground) .backgroundColor(context.themeUtil().res.colorBackgroundCard) 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 8a58e12f5..028db19ee 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 @@ -21,7 +21,6 @@ package de.kuschku.quasseldroid_ng.ui.chat.chatview; -import android.support.annotation.ColorInt; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.annotation.UiThread; @@ -215,62 +214,82 @@ public class ChatMessageRenderer { } public void onBind(@NonNull MessageViewHolder holder, @NonNull Message message) { - holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); switch (message.type) { case Plain: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindPlain(holder, message); break; case Notice: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindNotice(holder, message); break; case Action: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindAction(holder, message); break; case Nick: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindNick(holder, message); break; case Mode: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindMode(holder, message); break; case Join: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindJoin(holder, message); break; case Part: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindPart(holder, message); break; case Quit: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindQuit(holder, message); break; case Kick: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindKick(holder, message); break; case Kill: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindKill(holder, message); break; case Server: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindServer(holder, message); break; case Info: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindInfo(holder, message); break; case Error: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindError(holder, message); break; case DayChange: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindDayChange(holder, message); break; case Topic: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindTopic(holder, message); break; case NetsplitJoin: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindNetsplitJoin(holder, message); break; case NetsplitQuit: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindNetsplitQuit(holder, message); break; case Invite: + holder.time.setText(context.themeUtil().formatter.getTimeFormatter().print(message.time)); onBindInvite(holder, message); break; + case Markerline: + holder.itemView.setBackgroundResource(R.color.md_red_700); + break; } } @@ -299,28 +318,10 @@ public class ChatMessageRenderer { case NetsplitQuit: case Invite: return R.layout.widget_chatmessage_server; + case Markerline: + return R.layout.widget_chatmessage_markerline; case Error: return R.layout.widget_chatmessage_error; } } - - private static class MessageStyleContainer { - public final - @ColorInt - int textColor; - public final int fontstyle; - public final - @ColorInt - int timeColor; - public final - @ColorInt - int bgColor; - - public MessageStyleContainer(int textColor, int fontstyle, int timeColor, int bgColor) { - this.textColor = textColor; - this.fontstyle = fontstyle; - this.timeColor = timeColor; - this.bgColor = bgColor; - } - } } 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 dd692cde0..af4909d0f 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 @@ -35,15 +35,12 @@ import de.kuschku.util.observables.AutoScroller; import de.kuschku.util.observables.callbacks.UICallback; import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; import de.kuschku.util.observables.lists.IObservableList; -import de.kuschku.util.observables.lists.ObservableComparableSortedList; import de.kuschku.util.observables.lists.ObservableSortedList; import static de.kuschku.util.AndroidAssert.assertNotNull; @UiThread public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { - @NonNull - private static final ObservableSortedList<Message> emptyList = new ObservableComparableSortedList<>(Message.class); @NonNull private final ChatMessageRenderer renderer; @NonNull @@ -51,9 +48,9 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { @NonNull private final UICallback callback; @NonNull - private IObservableList<UICallback, Message> messageList = emptyList(); - @NonNull - private AppContext context; + private final AppContext context; + @Nullable + private IObservableList<UICallback, Message> messageList = null; public MessageAdapter(@NonNull Context ctx, @NonNull AppContext context, @Nullable AutoScroller scroller) { this.context = context; @@ -62,15 +59,12 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { this.callback = new AdapterUICallbackWrapper(this, scroller); } - @NonNull - public static ObservableSortedList<Message> emptyList() { - return emptyList; - } - - public void setMessageList(@NonNull ObservableSortedList<Message> messageList) { - this.messageList.removeCallback(callback); + public void setMessageList(@Nullable ObservableSortedList<Message> messageList) { + if (this.messageList != null) + this.messageList.removeCallback(callback); this.messageList = messageList; - this.messageList.addCallback(callback); + if (this.messageList != null) + this.messageList.addCallback(callback); notifyDataSetChanged(); } @@ -100,10 +94,15 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> { @Override public int getItemCount() { - return messageList.size(); + return messageList != null ? messageList.size() : 0; } public Message getItem(int position) { - return messageList.get(position); + return messageList != null ? messageList.get(position) : null; + } + + @Override + public long getItemId(int position) { + return getItem(position).id; } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/ActionModeHandler.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/ActionModeHandler.java index 7a790a1b2..a6db50475 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/ActionModeHandler.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/ActionModeHandler.java @@ -37,8 +37,8 @@ import de.kuschku.quasseldroid_ng.R; public class ActionModeHandler implements MaterialCab.Callback { private final AppCompatActivity activity; private final MaterialCab cab; - private Set<Buffer> selectedChildren = new HashSet<>(); - private Set<NetworkItem> selectedParents = new HashSet<>(); + private final Set<Buffer> selectedChildren = new HashSet<>(); + private final Set<NetworkItem> selectedParents = new HashSet<>(); private Menu actionModeMenu; public ActionModeHandler(AppCompatActivity activity, @IdRes int stub) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java index 30e9041a1..444821be6 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java @@ -51,13 +51,9 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi private final ObservableSortedList<NetworkItem> items; private final Map<QNetwork, NetworkItem> itemMap = new WeakHashMap<>(); private final Map<Integer, BufferViewHolder> bufferViewHolderMap = new WeakHashMap<>(); + private final ObservableField<Boolean> showAll = new ObservableField<>(false); private QBufferViewConfig config; - private WeakReference<RecyclerView> recyclerView = new WeakReference<>(null); - private int open; - private OnBufferClickListener bufferClickListener; - private ObservableField<Boolean> showAll = new ObservableField<>(false); - - private ElementCallback<QNetwork> callback = new ElementCallback<QNetwork>() { + private final ElementCallback<QNetwork> callback = new ElementCallback<QNetwork>() { @Override public void notifyItemInserted(QNetwork network) { NetworkItem networkItem = new NetworkItem(context, config, network, BufferViewConfigAdapter.this); @@ -76,7 +72,9 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi items.notifyItemChanged(items.indexOf(itemMap.get(network))); } }; - + private WeakReference<RecyclerView> recyclerView = new WeakReference<>(null); + private int open; + private OnBufferClickListener bufferClickListener; private ActionModeHandler actionModeHandler; private BufferViewConfigAdapter(AppContext context, ObservableSortedList<NetworkItem> items) { @@ -247,8 +245,6 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi if (config != null) config.networkList().removeCallback(callback); config = newconfig; - if (config != null) - config.updateNetworks(); items.clear(); itemMap.clear(); if (config != null) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewHolder.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewHolder.java index 2a342af27..30c84c57a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewHolder.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewHolder.java @@ -54,6 +54,8 @@ import de.kuschku.quasseldroid_ng.ui.theme.AppContext; public class BufferViewHolder extends ChildViewHolder { + private final AppContext context; + private final StateListDrawable background; public int id; @Bind(R.id.material_drawer_icon) ImageView icon; @@ -67,11 +69,7 @@ public class BufferViewHolder extends ChildViewHolder { TextView description; private ObservableField<BufferInfo.BufferStatus> status; private Observable.OnPropertyChangedCallback callback; - private AppContext context; private ViewIntBinder viewIntBinder; - - private StateListDrawable background; - private boolean selected = false; private boolean checked = false; @@ -124,7 +122,7 @@ public class BufferViewHolder extends ChildViewHolder { @NonNull private Function<Integer, Integer> colorFromActivityStatus(Buffer buffer) { return activities -> { - int filters = context.client().backlogManager().filter(buffer.getInfo().id).getFilters(); + int filters = context.client().bufferSyncer().getFilters(buffer.getInfo().id); activities = activities & ~filters; if (0 != ((activities & Message.Type.Plain.value) | (activities & Message.Type.Notice.value) | (activities & Message.Type.Action.value))) return context.themeUtil().res.colorTintMessage; 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 451d91655..88e7a4db3 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 @@ -22,7 +22,6 @@ package de.kuschku.quasseldroid_ng.ui.chat.drawer; import android.databinding.Observable; -import android.util.Log; import com.bignerdranch.expandablerecyclerview.Model.ParentListItem; @@ -43,7 +42,6 @@ public class NetworkItem implements ParentListItem { private final AppContext context; private final QBufferViewConfig config; private final QNetwork network; - private final BufferViewConfigAdapter bufferViewConfigAdapter; private final ObservableSortedList<Buffer> buffers = new ObservableSortedList<>(Buffer.class, new ObservableSortedList.ItemComparator<Buffer>() { @Override public int compare(Buffer o1, Buffer o2) { @@ -77,7 +75,7 @@ public class NetworkItem implements ParentListItem { return item1.getInfo().id == item2.getInfo().id; } }); - private ElementCallback<Integer> callback = new ElementCallback<Integer>() { + private final ElementCallback<Integer> callback = new ElementCallback<Integer>() { @Override public void notifyItemInserted(Integer element) { Buffer buffer = context.client().bufferManager().buffer(element); @@ -108,7 +106,6 @@ public class NetworkItem implements ParentListItem { this.context = context; this.config = config; this.network = network; - this.bufferViewConfigAdapter = bufferViewConfigAdapter; bufferViewConfigAdapter.showAll().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { @Override public void onPropertyChanged(Observable sender, int propertyId) { @@ -119,9 +116,6 @@ public class NetworkItem implements ParentListItem { this.buffers.addCallback(new UICallback() { @Override public void notifyItemInserted(int position) { - Log.d("DEBUG", "Added item at " + position); - Log.d("DEBUG", String.valueOf(getChildItemList())); - bufferViewConfigAdapter.notifyChildItemInserted(NetworkItem.this, position); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java index 29d9e7401..2eac770c6 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java @@ -41,6 +41,7 @@ import butterknife.ButterKnife; import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.events.BacklogReceivedEvent; import de.kuschku.libquassel.events.BufferChangeEvent; +import de.kuschku.libquassel.events.ConnectionChangeEvent; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager; import de.kuschku.quasseldroid_ng.R; @@ -67,11 +68,11 @@ public class ChatFragment extends BoundFragment { FloatingActionButton scrollDown; private MessageAdapter messageAdapter; - private LinearLayoutManager layoutManager; private SlidingPanelHandler slidingPanelHandler; private boolean loading = false; private int recyclerViewMeasuredHeight = 0; + private RecyclerView.OnScrollListener listener; @Nullable @Override @@ -83,12 +84,11 @@ public class ChatFragment extends BoundFragment { assertNotNull(messages); messages.setItemAnimator(new DefaultItemAnimator()); - layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, true); - messages.setLayoutManager(layoutManager); + messages.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, true)); messageAdapter = new MessageAdapter(getActivity(), context, new AutoScroller(messages)); messages.setAdapter(messageAdapter); - messages.addOnScrollListener(new RecyclerView.OnScrollListener() { + listener = new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (!loading && !recyclerView.canScrollVertically(-1)) { @@ -108,7 +108,8 @@ public class ChatFragment extends BoundFragment { boolean smartVisibility = scrollDown.getVisibility() == View.VISIBLE || isMoreThanOneScreenFromBottom; scrollDown.setVisibility((canScrollDown && isScrollingDown && smartVisibility) ? View.VISIBLE : View.GONE); } - }); + }; + messages.addOnScrollListener(listener); scrollDown.setOnClickListener(view1 -> messages.smoothScrollToPosition(0)); @@ -120,12 +121,11 @@ public class ChatFragment extends BoundFragment { setMarkerline(); Client client = context.client(); - if (client != null) { + if (client != null && client.connectionStatus() == ConnectionChangeEvent.Status.CONNECTED) { QBacklogManager backlogManager = client.backlogManager(); int id = backlogManager.open(); ObservableComparableSortedList<Message> messageList = backlogManager.filtered(id); messageAdapter.setMessageList(messageList); - // Load markerline } } @@ -135,7 +135,18 @@ public class ChatFragment extends BoundFragment { super.onPause(); } + @Override + public void onDestroy() { + messageAdapter.setMessageList(null); + messages.removeOnScrollListener(listener); + scrollDown.setOnClickListener(null); + slidingPanelHandler.onDestroy(); + super.onDestroy(); + } + private void setMarkerline() { + //int lastVisibleMessageId; + //context.client().bufferSyncer().setMarkerLine(context.client().backlogManager().open(), lastVisibleMessageId); } @Override diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/SlidingPanelHandler.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/SlidingPanelHandler.java index fe9a0158e..167c308d6 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/SlidingPanelHandler.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/SlidingPanelHandler.java @@ -54,13 +54,11 @@ import de.kuschku.util.ui.MenuTint; import static de.kuschku.util.AndroidAssert.assertNotNull; public class SlidingPanelHandler { + // Main Sliding Layout + final SlidingUpPanelLayout slidingLayout; private final Activity activity; private final AppContext context; private final AdvancedEditor editor; - - // Main Sliding Layout - SlidingUpPanelLayout slidingLayout; - // Input History @Bind(R.id.sliding_layout_history) SlidingUpPanelLayout slidingLayoutHistory; @@ -276,4 +274,11 @@ public class SlidingPanelHandler { return false; } } + + public void onDestroy() { + chatline.setOnKeyListener(null); + send.setOnClickListener(null); + slidingLayout.setPanelSlideListener(null); + formattingMenu.setOnMenuItemClickListener(null); + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java index 5c4476bce..d3a1bd65f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java @@ -75,7 +75,6 @@ public class ChatListCreateActivity extends BoundActivity { Spinner minimumActivity; private QBufferViewManager bufferViewManager; - private NetworkSpinnerAdapter networkSpinnerAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -84,8 +83,7 @@ public class ChatListCreateActivity extends BoundActivity { setContentView(R.layout.activity_chatlist_edit); ButterKnife.bind(this); - networkSpinnerAdapter = new NetworkSpinnerAdapter(this); - network.setAdapter(networkSpinnerAdapter); + network.setAdapter(new NetworkSpinnerAdapter(this)); minimumActivity.setAdapter(new MinimumActivityAdapter(context)); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java index c959371bf..e7a98fa7e 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java @@ -115,9 +115,9 @@ public class ChatListEditActivity extends BoundActivity { public void onBackPressed() { if (hasChanged()) { new MaterialDialog.Builder(this) - .content("You have made changes, do you wish to save them?") - .positiveText("Yes") - .negativeText("No") + .content(R.string.youhavemadechangesdoyouwishtosavethem) + .positiveText(R.string.yes) + .negativeText(R.string.no) .positiveColor(context.themeUtil().res.colorAccent) .negativeColor(context.themeUtil().res.colorForeground) .onPositive((dialog, which) -> { @@ -136,9 +136,9 @@ public class ChatListEditActivity extends BoundActivity { switch (item.getItemId()) { case R.id.action_delete: { new MaterialDialog.Builder(this) - .content(String.format("Are you sure you want to delete \"%s\"?", config.bufferViewName())) - .positiveText("Yes") - .negativeText("No") + .content(getString(R.string.areyousureyouwanttodelete, config.bufferViewName())) + .positiveText(R.string.yes) + .negativeText(R.string.no) .positiveColor(context.themeUtil().res.colorAccent) .negativeColor(context.themeUtil().res.colorForeground) .onPositive((dialog, which) -> { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java index 73723f657..5551746d7 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java @@ -41,28 +41,25 @@ import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewManager; import de.kuschku.quasseldroid_ng.R; import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; import de.kuschku.util.servicebound.BoundActivity; +import de.kuschku.util.ui.DividerItemDecoration; public class ChatListListActivity extends BoundActivity { + final OnQBufferViewConfigClickListener clickListener = config -> { + if (config != null) { + Intent intent = new Intent(this, ChatListEditActivity.class); + intent.putExtra("id", config.bufferViewId()); + startActivity(intent); + } + }; QBufferViewManager manager; - @Bind(R.id.list) RecyclerView list; - @Bind(R.id.add) FloatingActionButton add; - @Bind(R.id.toolbar) Toolbar toolbar; - ChatListAdapter adapter; - OnQBufferViewConfigClickListener clickListener = config -> { - if (config != null) { - Intent intent = new Intent(this, ChatListEditActivity.class); - intent.putExtra("id", config.bufferViewId()); - startActivity(intent); - } - }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -74,10 +71,9 @@ public class ChatListListActivity extends BoundActivity { list.setItemAnimator(new DefaultItemAnimator()); adapter = new ChatListAdapter(); list.setAdapter(adapter); + list.addItemDecoration(new DividerItemDecoration(this)); - add.setOnClickListener(view -> { - startActivity(new Intent(this, ChatListCreateActivity.class)); - }); + add.setOnClickListener(view -> startActivity(new Intent(this, ChatListCreateActivity.class))); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -100,8 +96,8 @@ public class ChatListListActivity extends BoundActivity { } private class ChatListAdapter extends RecyclerView.Adapter<ChatListViewHolder> { + final AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this); QBufferViewManager manager; - AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this); public void setManager(QBufferViewManager manager) { if (this.manager != null) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/MinimumActivityAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/MinimumActivityAdapter.java index e0d86acf3..d24225b4a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/MinimumActivityAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/MinimumActivityAdapter.java @@ -36,13 +36,13 @@ import de.kuschku.quasseldroid_ng.R; import de.kuschku.quasseldroid_ng.ui.theme.AppContext; class MinimumActivityAdapter implements SpinnerAdapter { - List<QBufferViewConfig.MinimumActivity> list = Arrays.asList( + final List<QBufferViewConfig.MinimumActivity> list = Arrays.asList( QBufferViewConfig.MinimumActivity.NONE, QBufferViewConfig.MinimumActivity.OTHER, QBufferViewConfig.MinimumActivity.MESSAGE, QBufferViewConfig.MinimumActivity.HIGHLIGHT ); - private AppContext context; + private final AppContext context; public MinimumActivityAdapter(AppContext context) { this.context = context; diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityCreateActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityCreateActivity.java index 4c329fb24..aaeef76c6 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityCreateActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityCreateActivity.java @@ -47,44 +47,32 @@ import de.kuschku.util.ui.AnimationHelper; public class IdentityCreateActivity extends BoundActivity { + private final QIdentity identity = Identity.createDefault(); @Bind(R.id.toolbar) Toolbar toolbar; - @Bind(R.id.identityName) EditText identityName; - @Bind(R.id.realName) EditText realName; - @Bind(R.id.ident) EditText ident; - @Bind(R.id.nicks) Button nicks; - @Bind(R.id.kickReason) EditText kickReason; - @Bind(R.id.partReason) EditText partReason; - @Bind(R.id.quitReason) EditText quitReason; - @Bind(R.id.awayReason) EditText awayReason; - @Bind(R.id.useAwayOnDetach) SwitchCompat useAwayOnDetach; - @Bind(R.id.groupAwayOnDetach) ViewGroup groupAwayOnDetach; - @Bind(R.id.awayOnDetachReason) EditText awayOnDetachReason; - private ArrayList<String> nickList; - private QIdentity identity = Identity.createDefault(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityEditActivity.java index 467ca0827..4f7c39ccd 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityEditActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityEditActivity.java @@ -149,9 +149,9 @@ public class IdentityEditActivity extends BoundActivity { public void onBackPressed() { if (hasChanged(build())) { new MaterialDialog.Builder(this) - .content("You have made changes, do you wish to save them?") - .positiveText("Yes") - .negativeText("No") + .content(R.string.youhavemadechangesdoyouwishtosavethem) + .positiveText(R.string.yes) + .negativeText(R.string.no) .positiveColor(context.themeUtil().res.colorAccent) .negativeColor(context.themeUtil().res.colorForeground) .onPositive((dialog, which) -> { @@ -170,9 +170,9 @@ public class IdentityEditActivity extends BoundActivity { switch (item.getItemId()) { case R.id.action_delete: { new MaterialDialog.Builder(this) - .content(String.format("Are you sure you want to delete \"%s\"?", identity.identityName())) - .positiveText("Yes") - .negativeText("No") + .content(getString(R.string.areyousureyouwanttodelete, identity.identityName())) + .positiveText(R.string.yes) + .negativeText(R.string.no) .positiveColor(context.themeUtil().res.colorAccent) .negativeColor(context.themeUtil().res.colorForeground) .onPositive((dialog, which) -> { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityListActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityListActivity.java index 6cd15a9ac..6042a3e86 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityListActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentityListActivity.java @@ -41,28 +41,25 @@ import de.kuschku.libquassel.syncables.types.interfaces.QIdentity; import de.kuschku.quasseldroid_ng.R; import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; import de.kuschku.util.servicebound.BoundActivity; +import de.kuschku.util.ui.DividerItemDecoration; public class IdentityListActivity extends BoundActivity { + final OnQIdentityClickListener clickListener = identity -> { + if (identity != null) { + Intent intent = new Intent(this, IdentityEditActivity.class); + intent.putExtra("id", identity.id()); + startActivity(intent); + } + }; IdentityManager manager; - @Bind(R.id.list) RecyclerView list; - @Bind(R.id.add) FloatingActionButton add; - @Bind(R.id.toolbar) Toolbar toolbar; - IdentityAdapter adapter; - OnQIdentityClickListener clickListener = identity -> { - if (identity != null) { - Intent intent = new Intent(this, IdentityEditActivity.class); - intent.putExtra("id", identity.id()); - startActivity(intent); - } - }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -72,12 +69,11 @@ public class IdentityListActivity extends BoundActivity { list.setLayoutManager(new LinearLayoutManager(this)); list.setItemAnimator(new DefaultItemAnimator()); + list.addItemDecoration(new DividerItemDecoration(this)); adapter = new IdentityAdapter(); list.setAdapter(adapter); - add.setOnClickListener(view -> { - startActivity(new Intent(this, IdentityCreateActivity.class)); - }); + add.setOnClickListener(view -> startActivity(new Intent(this, IdentityCreateActivity.class))); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -100,8 +96,8 @@ public class IdentityListActivity extends BoundActivity { } private class IdentityAdapter extends RecyclerView.Adapter<IdentityViewHolder> { + final AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this); IdentityManager manager; - AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this); public void setManager(IdentityManager manager) { if (this.manager != null) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java index b55873b3f..fc1721c0f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java @@ -42,12 +42,11 @@ import de.kuschku.util.observables.callbacks.UICallback; import de.kuschku.util.observables.lists.ObservableSortedList; public class IdentitySpinnerAdapter implements ThemedSpinnerAdapter, GeneralCallback { + private final Set<DataSetObserver> observers = new HashSet<>(); private ObservableSortedList<QIdentity> identities; @Nullable private Resources.Theme theme; - private Set<DataSetObserver> observers = new HashSet<>(); - public void setIdentityManager(IdentityManager identityManager) { if (identityManager != null) { this.identities = identityManager.identities(); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/nick/IdentityNickListActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/nick/IdentityNickListActivity.java index 031130854..92df9f1bc 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/nick/IdentityNickListActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/nick/IdentityNickListActivity.java @@ -44,6 +44,7 @@ import de.kuschku.quasseldroid_ng.ui.coresettings.network.server.helper.SimpleIt import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; import de.kuschku.util.observables.lists.ObservableList; import de.kuschku.util.servicebound.BoundActivity; +import de.kuschku.util.ui.DividerItemDecoration; public class IdentityNickListActivity extends BoundActivity implements OnStartDragListener { @@ -59,7 +60,7 @@ public class IdentityNickListActivity extends BoundActivity implements OnStartDr IdentityNickAdapter adapter; ItemTouchHelper itemTouchHelper; ObservableList<String> nicks; - OnIdentityNickClickListener clickListener = nick -> { + final OnIdentityNickClickListener clickListener = nick -> { MaterialDialog dialog = new MaterialDialog.Builder(this) .input("", nick, false, (dialog1, input) -> { @@ -99,6 +100,7 @@ public class IdentityNickListActivity extends BoundActivity implements OnStartDr list.setAdapter(adapter); list.setHasFixedSize(true); list.setLayoutManager(new LinearLayoutManager(this)); + list.addItemDecoration(new DividerItemDecoration(this)); adapter.setOnItemClickListener(clickListener); ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java index 3001c4ebf..bf010533e 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java @@ -32,10 +32,9 @@ import de.kuschku.util.observables.callbacks.UICallback; import de.kuschku.util.observables.lists.ObservableSortedList; public class FakeNetworksWrapper { - private ObservableSortedList<QNetwork> base; - private QNetwork fakeNetwork; - private Set<DataSetObserver> observers = new HashSet<>(); - private UICallback callback = new UICallback() { + private final QNetwork fakeNetwork; + private final Set<DataSetObserver> observers = new HashSet<>(); + private final UICallback callback = new UICallback() { @Override public void notifyItemInserted(int position) { notifyChanged(); @@ -71,6 +70,7 @@ public class FakeNetworksWrapper { notifyChanged(); } }; + private ObservableSortedList<QNetwork> base; public FakeNetworksWrapper(Context context) { this.fakeNetwork = new AllNetworksItem(context); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java index cb56db012..db46e4114 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java @@ -27,7 +27,6 @@ import android.os.Parcelable; import android.support.annotation.Nullable; import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; @@ -37,7 +36,6 @@ import android.widget.CompoundButton; import android.widget.EditText; import android.widget.Spinner; -import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -58,23 +56,17 @@ public class NetworkCreateActivity extends BoundActivity { private static final int REQUEST_SERVER_LIST = 1; private static final int REQUEST_PERFORM = 2; - + final IdentitySpinnerAdapter spinnerAdapter = new IdentitySpinnerAdapter(); @Bind(R.id.toolbar) Toolbar toolbar; - - @Bind(R.id.networkName) EditText networkName; - @Bind(R.id.identity) Spinner identity; - @Bind(R.id.rejoinChannels) CheckBox rejoinChannels; - @Bind(R.id.servers) Button servers; - @Bind(R.id.useCustomCodecs) SwitchCompat useCustomCodecs; @Bind(R.id.groupCustomCodecs) @@ -85,7 +77,6 @@ public class NetworkCreateActivity extends BoundActivity { EditText codecForEncoding; @Bind(R.id.codecForDecoding) EditText codecForDecoding; - @Bind(R.id.useAutoIdentify) SwitchCompat useAutoIdentify; @Bind(R.id.groupAutoIdentify) @@ -94,7 +85,6 @@ public class NetworkCreateActivity extends BoundActivity { EditText autoIdentifyService; @Bind(R.id.autoIdentifyPassword) EditText autoIdentifyPassword; - @Bind(R.id.useSasl) SwitchCompat useSasl; @Bind(R.id.groupSasl) @@ -103,7 +93,6 @@ public class NetworkCreateActivity extends BoundActivity { EditText saslAccount; @Bind(R.id.saslPassword) EditText saslPassword; - @Bind(R.id.useAutoReconnect) SwitchCompat useAutoReconnect; @Bind(R.id.groupAutoReconnect) @@ -114,10 +103,7 @@ public class NetworkCreateActivity extends BoundActivity { EditText autoReconnectRetries; @Bind(R.id.unlimitedAutoReconnectRetries) CheckBox unlimitedAutoReconnectRetries; - int id; - IdentitySpinnerAdapter spinnerAdapter = new IdentitySpinnerAdapter(); - private List<NetworkServer> serverList = null; @Override @@ -181,7 +167,6 @@ public class NetworkCreateActivity extends BoundActivity { } break; case REQUEST_SERVER_LIST: { Parcelable[] servers = data.getParcelableArrayExtra("servers"); - Log.d("DEBUG", Arrays.toString(servers)); if (servers != null) { serverList = NetworkServerSerializeHelper.deserialize(servers); } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java index 563bb1ff3..3f81a5d27 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java @@ -27,7 +27,6 @@ import android.os.Parcelable; import android.support.annotation.Nullable; import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; @@ -39,7 +38,6 @@ import android.widget.Spinner; import com.afollestad.materialdialogs.MaterialDialog; -import java.util.Arrays; import java.util.List; import butterknife.Bind; @@ -61,23 +59,17 @@ public class NetworkEditActivity extends BoundActivity { private static final int REQUEST_SERVER_LIST = 1; private static final int REQUEST_PERFORM = 2; - + final IdentitySpinnerAdapter spinnerAdapter = new IdentitySpinnerAdapter(); @Bind(R.id.toolbar) Toolbar toolbar; - - @Bind(R.id.networkName) EditText networkName; - @Bind(R.id.identity) Spinner identity; - @Bind(R.id.rejoinChannels) CheckBox rejoinChannels; - @Bind(R.id.servers) Button servers; - @Bind(R.id.useCustomCodecs) SwitchCompat useCustomCodecs; @Bind(R.id.groupCustomCodecs) @@ -88,7 +80,6 @@ public class NetworkEditActivity extends BoundActivity { EditText codecForEncoding; @Bind(R.id.codecForDecoding) EditText codecForDecoding; - @Bind(R.id.useAutoIdentify) SwitchCompat useAutoIdentify; @Bind(R.id.groupAutoIdentify) @@ -97,7 +88,6 @@ public class NetworkEditActivity extends BoundActivity { EditText autoIdentifyService; @Bind(R.id.autoIdentifyPassword) EditText autoIdentifyPassword; - @Bind(R.id.useSasl) SwitchCompat useSasl; @Bind(R.id.groupSasl) @@ -106,7 +96,6 @@ public class NetworkEditActivity extends BoundActivity { EditText saslAccount; @Bind(R.id.saslPassword) EditText saslPassword; - @Bind(R.id.useAutoReconnect) SwitchCompat useAutoReconnect; @Bind(R.id.groupAutoReconnect) @@ -117,9 +106,7 @@ public class NetworkEditActivity extends BoundActivity { EditText autoReconnectRetries; @Bind(R.id.unlimitedAutoReconnectRetries) CheckBox unlimitedAutoReconnectRetries; - int id; - IdentitySpinnerAdapter spinnerAdapter = new IdentitySpinnerAdapter(); private QNetwork network; private List<NetworkServer> serverList = null; @@ -176,7 +163,6 @@ public class NetworkEditActivity extends BoundActivity { break; case REQUEST_SERVER_LIST: { Parcelable[] servers = data.getParcelableArrayExtra("servers"); - Log.d("DEBUG", Arrays.toString(servers)); if (servers != null) { serverList = NetworkServerSerializeHelper.deserialize(servers); } @@ -238,9 +224,9 @@ public class NetworkEditActivity extends BoundActivity { public void onBackPressed() { if (hasChanged(build())) { new MaterialDialog.Builder(this) - .content("You have made changes, do you wish to save them?") - .positiveText("Yes") - .negativeText("No") + .content(R.string.youhavemadechangesdoyouwishtosavethem) + .positiveText(R.string.yes) + .negativeText(R.string.no) .positiveColor(context.themeUtil().res.colorAccent) .negativeColor(context.themeUtil().res.colorForeground) .onPositive((dialog, which) -> { @@ -259,9 +245,9 @@ public class NetworkEditActivity extends BoundActivity { switch (item.getItemId()) { case R.id.action_delete: { new MaterialDialog.Builder(this) - .content(String.format("Are you sure you want to delete \"%s\"?", network.networkName())) - .positiveText("Yes") - .negativeText("No") + .content(getString(R.string.areyousureyouwanttodelete, network.networkName())) + .positiveText(R.string.yes) + .negativeText(R.string.no) .positiveColor(context.themeUtil().res.colorAccent) .negativeColor(context.themeUtil().res.colorForeground) .onPositive((dialog, which) -> { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java index de5251792..2fd7bda3c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java @@ -41,28 +41,25 @@ import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import de.kuschku.quasseldroid_ng.R; import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; import de.kuschku.util.servicebound.BoundActivity; +import de.kuschku.util.ui.DividerItemDecoration; public class NetworkListActivity extends BoundActivity { + final OnQNetworkClickListener clickListener = network -> { + if (network != null) { + Intent intent = new Intent(this, NetworkEditActivity.class); + intent.putExtra("id", network.networkId()); + startActivity(intent); + } + }; NetworkManager manager; - @Bind(R.id.list) RecyclerView list; - @Bind(R.id.add) FloatingActionButton add; - @Bind(R.id.toolbar) Toolbar toolbar; - NetworkAdapter adapter; - OnQNetworkClickListener clickListener = network -> { - if (network != null) { - Intent intent = new Intent(this, NetworkEditActivity.class); - intent.putExtra("id", network.networkId()); - startActivity(intent); - } - }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -74,10 +71,9 @@ public class NetworkListActivity extends BoundActivity { list.setItemAnimator(new DefaultItemAnimator()); adapter = new NetworkAdapter(); list.setAdapter(adapter); + list.addItemDecoration(new DividerItemDecoration(this)); - add.setOnClickListener(view -> { - startActivity(new Intent(this, NetworkCreateActivity.class)); - }); + add.setOnClickListener(view -> startActivity(new Intent(this, NetworkCreateActivity.class))); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -100,8 +96,8 @@ public class NetworkListActivity extends BoundActivity { } private class NetworkAdapter extends RecyclerView.Adapter<NetworkViewHolder> { + final AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this); NetworkManager manager; - AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this); public void setManager(NetworkManager manager) { if (this.manager != null) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java index 591fea390..5ad2ef240 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java @@ -37,9 +37,9 @@ import de.kuschku.libquassel.syncables.types.interfaces.QNetwork; import de.kuschku.quasseldroid_ng.R; public class NetworkSpinnerAdapter implements ThemedSpinnerAdapter { + private final FakeNetworksWrapper wrapper; @Nullable private Resources.Theme theme; - private FakeNetworksWrapper wrapper; public NetworkSpinnerAdapter(Context context) { wrapper = new FakeNetworksWrapper(context); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java index eb2e7846f..d3f7800a0 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java @@ -190,7 +190,7 @@ public class NetworkServerEditActivity extends BoundActivity { } private class ProxyTypeAdapter implements SpinnerAdapter { - List<NetworkServer.ProxyType> list = Arrays.asList( + final List<NetworkServer.ProxyType> list = Arrays.asList( NetworkServer.ProxyType.Socks5Proxy, NetworkServer.ProxyType.HttpProxy ); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerListActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerListActivity.java index 1de6ee000..79722cd81 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerListActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerListActivity.java @@ -30,7 +30,6 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.support.v7.widget.helper.ItemTouchHelper; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -44,6 +43,7 @@ import de.kuschku.quasseldroid_ng.ui.coresettings.network.server.helper.SimpleIt import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper; import de.kuschku.util.observables.lists.ObservableList; import de.kuschku.util.servicebound.BoundActivity; +import de.kuschku.util.ui.DividerItemDecoration; public class NetworkServerListActivity extends BoundActivity implements OnStartDragListener { @@ -59,7 +59,7 @@ public class NetworkServerListActivity extends BoundActivity implements OnStartD NetworkServerAdapter adapter; ItemTouchHelper itemTouchHelper; ObservableList<NetworkServer> servers; - OnNetworkServerClickListener clickListener = server -> { + final OnNetworkServerClickListener clickListener = server -> { if (server != null) { Intent intent1 = new Intent(this, NetworkServerEditActivity.class); intent1.putExtra("server", NetworkServerSerializeHelper.serialize(server)); @@ -87,6 +87,7 @@ public class NetworkServerListActivity extends BoundActivity implements OnStartD list.setAdapter(adapter); list.setHasFixedSize(true); list.setLayoutManager(new LinearLayoutManager(this)); + list.addItemDecoration(new DividerItemDecoration(this)); adapter.setOnItemClickListener(clickListener); ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter); @@ -127,9 +128,7 @@ public class NetworkServerListActivity extends BoundActivity implements OnStartD Bundle bundle; if (resultCode == RESULT_OK && data != null && (bundle = data.getBundleExtra("server")) != null) { NetworkServer server = NetworkServerSerializeHelper.deserialize(bundle); - Log.d("DEBUG", server.toString()); int id = data.getIntExtra("id", -1); - Log.d("DEBUG", String.valueOf(id)); if (id == -1) { servers.add(server); } else { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/Settings.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/Settings.java index d4257e0c4..d2dc408c0 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/Settings.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/Settings.java @@ -41,6 +41,8 @@ public class Settings { public final IntPreference preferenceFontSize; + @SuppressWarnings("FieldCanBeLocal") + // THIS FIELD CAN NOT BE LOCAL, OR IT WILL NOT WORK private final SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener; public Settings(PreferenceStrings prefs, SharedPreferences pref) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsActivity.java index 132908a90..597e228b8 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/SettingsActivity.java @@ -36,7 +36,7 @@ import de.kuschku.quasseldroid_ng.ui.theme.AppTheme; public class SettingsActivity extends AppCompatActivity { - AppContext context = new AppContext(); + final AppContext context = new AppContext(); @Bind(R.id.toolbar) Toolbar toolbar; @@ -83,7 +83,7 @@ public class SettingsActivity extends AppCompatActivity { } public static class AppearanceFragment extends PreferenceFragment { - AppContext context = new AppContext(); + final AppContext context = new AppContext(); @Override public void onCreate(Bundle savedInstanceState) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountItem.java index 9e26fdac6..14ab0fc12 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountItem.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountItem.java @@ -97,7 +97,7 @@ public class AccountItem extends AbstractDrawerItem<AccountItem, AccountItem.Vie } @Override - public ViewHolderFactory getFactory() { + public ViewHolderFactory<ViewHolder> getFactory() { return new ItemFactory(); } @@ -157,11 +157,11 @@ public class AccountItem extends AbstractDrawerItem<AccountItem, AccountItem.Vie } protected static class ViewHolder extends RecyclerView.ViewHolder { - private View view; - private AppCompatRadioButton select; - private TextView name; - private TextView description; - private AppCompatImageButton delete; + private final View view; + private final AppCompatRadioButton select; + private final TextView name; + private final TextView description; + private final AppCompatImageButton delete; private ViewHolder(View view) { super(view); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSelectActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSelectActivity.java index 3985ebbbf..850bf5a5d 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSelectActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSelectActivity.java @@ -77,7 +77,7 @@ public class AccountSelectActivity extends AppCompatActivity { } private class SlidePagerAdapter extends FragmentPagerAdapter { - private SlideFragment item = new AccountSelectSlide(); + private final SlideFragment item = new AccountSelectSlide(); public SlidePagerAdapter(FragmentManager fm) { super(fm); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSetupActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSetupActivity.java index 7834a184d..d5ee9b0e3 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSetupActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSetupActivity.java @@ -149,7 +149,7 @@ public class AccountSetupActivity extends AppCompatActivity implements ValidUpda } private class SlidePagerAdapter extends FragmentPagerAdapter { - List<SlideFragment> list = new ArrayList<>(); + final List<SlideFragment> list = new ArrayList<>(); public SlidePagerAdapter(FragmentManager fm) { super(fm); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java index 58675d57d..c459aa991 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java @@ -145,7 +145,7 @@ public class CoreSetupActivity extends AppCompatActivity implements ValidUpdateC } private class SlidePagerAdapter extends FragmentPagerAdapter { - List<SlideFragment> list = new ArrayList<>(); + final List<SlideFragment> list = new ArrayList<>(); public SlidePagerAdapter(FragmentManager fm) { super(fm); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CreateAccountItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CreateAccountItem.java index 9d1f05e82..25a8c58ec 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CreateAccountItem.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CreateAccountItem.java @@ -63,7 +63,7 @@ public class CreateAccountItem extends AbstractDrawerItem<CreateAccountItem, Cre } @Override - public ViewHolderFactory getFactory() { + public ViewHolderFactory<ViewHolder> getFactory() { return new ItemFactory(); } @@ -115,7 +115,7 @@ public class CreateAccountItem extends AbstractDrawerItem<CreateAccountItem, Cre } protected static class ViewHolder extends RecyclerView.ViewHolder { - private View view; + private final View view; private ViewHolder(View view) { super(view); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java index 0bbe03c3f..0d1928f28 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java @@ -94,7 +94,7 @@ public class StorageBackendItem extends AbstractDrawerItem<StorageBackendItem, S } @Override - public ViewHolderFactory getFactory() { + public ViewHolderFactory<ViewHolder> getFactory() { return new ItemFactory(); } @@ -150,10 +150,10 @@ public class StorageBackendItem extends AbstractDrawerItem<StorageBackendItem, S } protected static class ViewHolder extends RecyclerView.ViewHolder { - private View view; - private AppCompatRadioButton select; - private TextView name; - private TextView description; + private final View view; + private final AppCompatRadioButton select; + private final TextView name; + private final TextView description; private ViewHolder(View view) { super(view); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java index 2809fac09..4be29e2cf 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java @@ -36,11 +36,7 @@ import butterknife.ButterKnife; import de.kuschku.quasseldroid_ng.R; public class AccountSetupCoreSlide extends SlideFragment { - @Bind(R.id.host) - TextInputEditText hostField; - @Bind(R.id.port) - TextInputEditText portField; - TextWatcher watcher = new TextWatcher() { + final TextWatcher watcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -54,6 +50,10 @@ public class AccountSetupCoreSlide extends SlideFragment { public void afterTextChanged(Editable s) { } }; + @Bind(R.id.host) + TextInputEditText hostField; + @Bind(R.id.port) + TextInputEditText portField; @Override public void onCreate(@Nullable Bundle savedInstanceState) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java index 4cd770a66..617df7a87 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java @@ -36,9 +36,7 @@ import butterknife.ButterKnife; import de.kuschku.quasseldroid_ng.R; public class AccountSetupNameSlide extends SlideFragment { - @Bind(R.id.name) - TextInputEditText nameField; - TextWatcher watcher = new TextWatcher() { + final TextWatcher watcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -52,6 +50,8 @@ public class AccountSetupNameSlide extends SlideFragment { public void afterTextChanged(Editable s) { } }; + @Bind(R.id.name) + TextInputEditText nameField; @Override public void onCreate(@Nullable Bundle savedInstanceState) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java index 29305bc83..b84884bba 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java @@ -36,11 +36,7 @@ import butterknife.ButterKnife; import de.kuschku.quasseldroid_ng.R; public class AccountSetupUserSlide extends SlideFragment { - @Bind(R.id.user) - TextInputEditText userField; - @Bind(R.id.pass) - TextInputEditText passField; - TextWatcher watcher = new TextWatcher() { + final TextWatcher watcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -54,6 +50,10 @@ public class AccountSetupUserSlide extends SlideFragment { updateValidity(); } }; + @Bind(R.id.user) + TextInputEditText userField; + @Bind(R.id.pass) + TextInputEditText passField; @Override public void onCreate(@Nullable Bundle savedInstanceState) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java index 68ab29647..907f64207 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java @@ -45,10 +45,7 @@ import butterknife.ButterKnife; import de.kuschku.quasseldroid_ng.R; public class CoreBackendSetupSlide extends SlideFragment { - @Bind(R.id.container) - LinearLayout container; - Bundle storageBackend; - TextWatcher watcher = new TextWatcher() { + final TextWatcher watcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -62,8 +59,11 @@ public class CoreBackendSetupSlide extends SlideFragment { public void afterTextChanged(Editable s) { } }; - private Map<String, InputItemWrapper> items = new HashMap<>(); - private Map<String, Bundle> storageBackends = new HashMap<>(); + private final Map<String, InputItemWrapper> items = new HashMap<>(); + private final Map<String, Bundle> storageBackends = new HashMap<>(); + @Bind(R.id.container) + LinearLayout container; + Bundle storageBackend; @Override public void setArguments(Bundle args) { @@ -155,6 +155,7 @@ public class CoreBackendSetupSlide extends SlideFragment { return R.string.slideAccountcoreDescription; } + @SuppressWarnings("unchecked") private <T> InputItemWrapper<T> getInputItemWrapper(String key, String type, T defValue) { InputItemWrapper result; switch (type) { @@ -246,11 +247,11 @@ public class CoreBackendSetupSlide extends SlideFragment { class NumberInputItem implements InputItemWrapper<Number> { private final String key; private final Number defValue; + private final String type; @Bind(R.id.inputLayout) TextInputLayout inputLayout; @Bind(R.id.editText) TextInputEditText editText; - private String type; private View view; public NumberInputItem(String key, Number defValue, String type) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/SlideFragment.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/SlideFragment.java index 62d1bd3f2..1aee8a6fc 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/SlideFragment.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/SlideFragment.java @@ -37,7 +37,7 @@ import de.kuschku.quasseldroid_ng.R; import de.kuschku.quasseldroid_ng.ui.setup.ValidUpdateCallback; public abstract class SlideFragment extends Fragment { - private Set<ValidUpdateCallback> callbacks = new HashSet<>(); + private final Set<ValidUpdateCallback> callbacks = new HashSet<>(); public abstract Bundle getData(Bundle in); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java index caf05dff0..2e701bf8e 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java @@ -32,13 +32,13 @@ import de.kuschku.util.irc.format.IrcFormatSerializer; import de.kuschku.util.observables.lists.ObservableSet; public class AppContext { + private final ObservableSet<QBufferViewConfig.DisplayType> bufferDisplayTypes = new ObservableSet<>(); private ThemeUtil themeUtil; private Settings settings; private Client client; private BusProvider provider; private IrcFormatDeserializer deserializer; private IrcFormatSerializer serializer; - private ObservableSet<QBufferViewConfig.DisplayType> bufferDisplayTypes = new ObservableSet<>(); public ThemeUtil themeUtil() { return themeUtil; diff --git a/app/src/main/java/de/kuschku/util/MeaningfulConnectionErrorProvider.java b/app/src/main/java/de/kuschku/util/MeaningfulConnectionErrorProvider.java deleted file mode 100644 index 2d0cfdc03..000000000 --- a/app/src/main/java/de/kuschku/util/MeaningfulConnectionErrorProvider.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * QuasselDroid - Quassel client for Android - * Copyright (C) 2016 Janne Koschinski - * Copyright (C) 2016 Ken Børge Viktil - * Copyright (C) 2016 Magnus Fjell - * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package de.kuschku.util; - -import java.net.ConnectException; - -import de.kuschku.quasseldroid_ng.ui.theme.AppContext; - -public class MeaningfulConnectionErrorProvider { - private final AppContext context; - - public MeaningfulConnectionErrorProvider(AppContext context) { - this.context = context; - } - - public String provide(Exception exception) { - return null; - } - - public String provide(ConnectException exception) { - return null; - } -} diff --git a/app/src/main/java/de/kuschku/util/accounts/AccountManager.java b/app/src/main/java/de/kuschku/util/accounts/AccountManager.java index 99d0a9c6d..e6126f4eb 100644 --- a/app/src/main/java/de/kuschku/util/accounts/AccountManager.java +++ b/app/src/main/java/de/kuschku/util/accounts/AccountManager.java @@ -27,7 +27,7 @@ import java.util.Set; import java.util.UUID; public class AccountManager { - AccountManagerHelper helper; + final AccountManagerHelper helper; public AccountManager(Context context) { helper = new AccountManagerHelper(context); diff --git a/app/src/main/java/de/kuschku/util/buffermetadata/SQLiteBufferMetaDataManager.java b/app/src/main/java/de/kuschku/util/buffermetadata/SQLiteBufferMetaDataManager.java index 280d7aea2..ebd265295 100644 --- a/app/src/main/java/de/kuschku/util/buffermetadata/SQLiteBufferMetaDataManager.java +++ b/app/src/main/java/de/kuschku/util/buffermetadata/SQLiteBufferMetaDataManager.java @@ -24,7 +24,7 @@ package de.kuschku.util.buffermetadata; import android.content.Context; public class SQLiteBufferMetaDataManager implements BufferMetaDataManager { - private BufferMetaDataHelper helper; + private final BufferMetaDataHelper helper; public SQLiteBufferMetaDataManager(Context context) { helper = new BufferMetaDataHelper(context); diff --git a/app/src/main/java/de/kuschku/util/irc/IrcCaseMapper.java b/app/src/main/java/de/kuschku/util/irc/IrcCaseMapper.java index a692f8ccb..f487dd22f 100644 --- a/app/src/main/java/de/kuschku/util/irc/IrcCaseMapper.java +++ b/app/src/main/java/de/kuschku/util/irc/IrcCaseMapper.java @@ -26,6 +26,8 @@ import android.support.annotation.Nullable; import java.util.Locale; +import de.kuschku.util.backports.Objects; + public class IrcCaseMapper { private IrcCaseMapper() { @@ -47,7 +49,7 @@ public class IrcCaseMapper { public static boolean equalsIgnoreCase(@Nullable String a, @Nullable String b) { if (a == null || b == null) - return (a == b); + return (Objects.equals(a, b)); else return toLowerCase(a).equals(toLowerCase(b)) || toUpperCase(a).equals(toUpperCase(b)); } diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProviderFactory.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProviderFactory.java index 620d766b1..70a613206 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProviderFactory.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProviderFactory.java @@ -39,7 +39,7 @@ import de.kuschku.util.irc.chanmodes.impl.SolidIrcModeProvider; import de.kuschku.util.irc.chanmodes.impl.UnrealIrcModeProvider; public class IrcModeProviderFactory { - private static List<IrcModeProvider> servers = Arrays.asList( + private static final List<IrcModeProvider> servers = Arrays.asList( new CharybdisIrcModeProvider(), new DalIrcModeProvider(), new DancerIrcModeProvider(), diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/BewareIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/BewareIrcModeProvider.java index a4492474d..bcd9a8f1b 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/BewareIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/BewareIrcModeProvider.java @@ -45,7 +45,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class BewareIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'C', 'c', 'i', 'k', 'l', 'm', 'n', 'p', 's', 't' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/CharybdisIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/CharybdisIrcModeProvider.java index c53b03208..fee25f5c3 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/CharybdisIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/CharybdisIrcModeProvider.java @@ -58,7 +58,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class CharybdisIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'A', 'C', 'F', 'O', 'P', 'Q', 'S', 'T', 'c', 'f', 'g', 'i', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'z' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DalIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DalIrcModeProvider.java index 34a7798c1..20bcb0f0f 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DalIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DalIrcModeProvider.java @@ -51,7 +51,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class DalIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'A', 'M', 'O', 'R', 'S', 'c', 'i', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DancerIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DancerIrcModeProvider.java index 37c0014c1..d4ab60753 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DancerIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DancerIrcModeProvider.java @@ -49,7 +49,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class DancerIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'J', 'P', 'Q', 'R', 'c', 'g', 'i', 'k', 'l', 'm', 'n', 'r', 's', 'z' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/FqIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/FqIrcModeProvider.java index 26bd28773..8f67ed5c5 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/FqIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/FqIrcModeProvider.java @@ -50,7 +50,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class FqIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'M', 'O', 'R', 'S', 'c', 'i', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HybridIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HybridIrcModeProvider.java index b444f42f5..13354aa50 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HybridIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HybridIrcModeProvider.java @@ -49,7 +49,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class HybridIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'M', 'O', 'R', 'S', 'c', 'i', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HyperionIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HyperionIrcModeProvider.java index 630b8331b..e4dffc37c 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HyperionIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HyperionIrcModeProvider.java @@ -47,7 +47,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class HyperionIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'Q', 'R', 'c', 'g', 'i', 'k', 'l', 'm', 'n', 'r', 's', 'z' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/InspireIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/InspireIrcModeProvider.java index b1e81b465..15a33499e 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/InspireIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/InspireIrcModeProvider.java @@ -64,7 +64,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class InspireIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'A', 'B', 'C', 'D', 'G', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'c', 'f', 'i', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'u', 'z' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NeoIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NeoIrcModeProvider.java index 0ed1d4584..1048d3e99 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NeoIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NeoIrcModeProvider.java @@ -51,7 +51,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class NeoIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'M', 'N', 'O', 'P', 'Q', 'R', 'V', 'i', 'k', 'l', 'm', 'n', 'r', 's', 't', 'z' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NightstarIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NightstarIrcModeProvider.java index 648ecfdb7..0d97b55a9 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NightstarIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NightstarIrcModeProvider.java @@ -45,7 +45,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class NightstarIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'C', 'i', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/RfcIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/RfcIrcModeProvider.java index 01bf730b2..99cff9cda 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/RfcIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/RfcIrcModeProvider.java @@ -43,7 +43,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class RfcIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'p', 's', 'i', 't', 'n', 'm', 'l', 'k' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/ShadowIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/ShadowIrcModeProvider.java index a03b7b1bc..871708455 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/ShadowIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/ShadowIrcModeProvider.java @@ -62,7 +62,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class ShadowIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'A', 'C', 'D', 'E', 'F', 'G', 'J', 'K', 'O', 'P', 'Q', 'S', 'T', 'c', 'd', 'g', 'i', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'z' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/SolidIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/SolidIrcModeProvider.java index 92bc806c7..39b90fe6f 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/SolidIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/SolidIrcModeProvider.java @@ -59,7 +59,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class SolidIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'B', 'C', 'G', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'c', 'f', 'i', 'k', 'l', 'm', 'n', 'p', 's', 't', 'u', 'z' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UndernetIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UndernetIrcModeProvider.java index 3f378790a..d9d96d9a9 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UndernetIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UndernetIrcModeProvider.java @@ -43,7 +43,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class UndernetIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'i', 'k', 'l', 'm', 'n', 'p', 's', 't' )); diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UnrealIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UnrealIrcModeProvider.java index 184716b97..cf2007761 100644 --- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UnrealIrcModeProvider.java +++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UnrealIrcModeProvider.java @@ -61,7 +61,7 @@ import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED; public class UnrealIrcModeProvider extends AbstractIrcModeProvider { - protected Set<Character> supportedModes = new HashSet<>(Arrays.asList( + protected final Set<Character> supportedModes = new HashSet<>(Arrays.asList( 'C', 'F', 'G', 'K', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'V', 'Z', 'c', 'f', 'i', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'z' )); diff --git a/app/src/main/java/de/kuschku/util/observables/callbacks/wrappers/MultiGeneralCallback.java b/app/src/main/java/de/kuschku/util/observables/callbacks/wrappers/MultiGeneralCallback.java index 40a2b5ada..e8e420fcd 100644 --- a/app/src/main/java/de/kuschku/util/observables/callbacks/wrappers/MultiGeneralCallback.java +++ b/app/src/main/java/de/kuschku/util/observables/callbacks/wrappers/MultiGeneralCallback.java @@ -39,6 +39,7 @@ public class MultiGeneralCallback<T> implements IObservable<GeneralCallback<T>>, this.callbacks = new HashSet<>(multiGeneralCallbacks); } + @SafeVarargs @NonNull public static <U> MultiGeneralCallback<U> of(MultiGeneralCallback<U>... callbacks) { return new MultiGeneralCallback<>(Arrays.asList(callbacks)); diff --git a/app/src/main/java/de/kuschku/util/preferences/AbstractPreferenceElement.java b/app/src/main/java/de/kuschku/util/preferences/AbstractPreferenceElement.java index 8e4035bf6..3553577e8 100644 --- a/app/src/main/java/de/kuschku/util/preferences/AbstractPreferenceElement.java +++ b/app/src/main/java/de/kuschku/util/preferences/AbstractPreferenceElement.java @@ -27,11 +27,11 @@ import java.util.HashSet; import java.util.Set; public abstract class AbstractPreferenceElement<T> implements PreferenceElement<T>, OnChangeListener<T> { + protected final SharedPreferences pref; + protected final String key; + protected final T defValue; private final Set<OnChangeListener<T>> listeners = new HashSet<>(); - protected SharedPreferences pref; protected SharedPreferences.Editor edit; - protected String key; - protected T defValue; public AbstractPreferenceElement(SharedPreferences pref, String key, T defValue) { this.pref = pref; diff --git a/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java index 10180761b..e9ee18ee2 100644 --- a/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java +++ b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java @@ -44,6 +44,7 @@ import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.quasseldroid_ng.ui.theme.AppTheme; import de.kuschku.util.accounts.Account; import de.kuschku.util.annotationbind.AutoBinder; +import de.kuschku.util.backports.Consumer; import de.kuschku.util.ui.MenuTint; public abstract class BoundActivity extends AppCompatActivity { @@ -51,16 +52,15 @@ public abstract class BoundActivity extends AppCompatActivity { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } - protected AppContext context = new AppContext(); + protected final AppContext context = new AppContext(); protected QuasselService.LocalBinder binder; - @StyleRes - private int themeId; - private ServiceConnection connection = new ServiceConnection() { + private Consumer<ClientBackgroundThread> consumer = BoundActivity.this::onConnectToThread; + private final ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { if (service instanceof QuasselService.LocalBinder) { binder = (QuasselService.LocalBinder) service; - binder.addCallback(BoundActivity.this::onConnectToThread); + binder.addCallback(consumer); onConnectToThread(binder.getBackgroundThread()); } } @@ -71,6 +71,8 @@ public abstract class BoundActivity extends AppCompatActivity { onConnectToThread(null); } }; + @StyleRes + private int themeId; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -94,6 +96,7 @@ public abstract class BoundActivity extends AppCompatActivity { @Override protected void onStop() { super.onStop(); + binder.removeCallback(consumer); setProvider(null); ServiceHelper.disconnect(this, connection); } diff --git a/app/src/main/java/de/kuschku/util/servicebound/BoundFragment.java b/app/src/main/java/de/kuschku/util/servicebound/BoundFragment.java index 59b298f7e..27b072d94 100644 --- a/app/src/main/java/de/kuschku/util/servicebound/BoundFragment.java +++ b/app/src/main/java/de/kuschku/util/servicebound/BoundFragment.java @@ -34,16 +34,19 @@ import de.kuschku.quasseldroid_ng.service.QuasselService; import de.kuschku.quasseldroid_ng.ui.chat.util.ServiceHelper; import de.kuschku.quasseldroid_ng.ui.theme.AppContext; import de.kuschku.util.accounts.Account; +import de.kuschku.util.backports.Consumer; public abstract class BoundFragment extends Fragment { - protected AppContext context = new AppContext(); + protected final AppContext context = new AppContext(); private QuasselService.LocalBinder binder; - private ServiceConnection connection = new ServiceConnection() { + private Consumer<ClientBackgroundThread> consumer; + private final ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { if (service instanceof QuasselService.LocalBinder) { binder = (QuasselService.LocalBinder) service; - binder.addCallback(BoundFragment.this::onConnectToThread); + consumer = BoundFragment.this::onConnectToThread; + binder.addCallback(consumer); onConnectToThread(binder.getBackgroundThread()); } } @@ -63,22 +66,23 @@ public abstract class BoundFragment extends Fragment { } @Override - public void onResume() { - super.onResume(); + public void onStart() { + super.onStart(); ServiceHelper.connectToService(getContext(), connection); } - @Override - public void onPause() { - super.onPause(); - ServiceHelper.disconnect(getContext(), connection); - } - protected void connectToServer(Account account) { BusProvider provider = new BusProvider(); binder.startBackgroundThread(provider, account); } + @Override + public void onStop() { + super.onStop(); + binder.removeCallback(consumer); + ServiceHelper.disconnect(getContext(), connection); + } + protected void onConnectToThread(@Nullable ClientBackgroundThread thread) { if (thread == null) { context.withClient(null); diff --git a/app/src/main/java/de/kuschku/util/ui/DividerItemDecoration.java b/app/src/main/java/de/kuschku/util/ui/DividerItemDecoration.java new file mode 100644 index 000000000..d5843ab2b --- /dev/null +++ b/app/src/main/java/de/kuschku/util/ui/DividerItemDecoration.java @@ -0,0 +1,72 @@ +/* + * QuasselDroid - Quassel client for Android + * Copyright (C) 2016 Janne Koschinski + * Copyright (C) 2016 Ken Børge Viktil + * Copyright (C) 2016 Magnus Fjell + * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package de.kuschku.util.ui; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +public class DividerItemDecoration extends RecyclerView.ItemDecoration { + + private static final int[] ATTRS = new int[]{android.R.attr.listDivider}; + + private Drawable mDivider; + + /** + * Default divider will be used + */ + public DividerItemDecoration(Context context) { + final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS); + mDivider = styledAttributes.getDrawable(0); + styledAttributes.recycle(); + } + + /** + * Custom divider will be used + */ + public DividerItemDecoration(Context context, int resId) { + mDivider = ContextCompat.getDrawable(context, resId); + } + + @Override + public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { + int left = parent.getPaddingLeft(); + int right = parent.getWidth() - parent.getPaddingRight(); + + int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + View child = parent.getChildAt(i); + + RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); + + int top = child.getBottom() + params.bottomMargin; + int bottom = top + mDivider.getIntrinsicHeight(); + + mDivider.setBounds(left, top, right, bottom); + mDivider.draw(c); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/de/kuschku/util/ui/MenuTint.java b/app/src/main/java/de/kuschku/util/ui/MenuTint.java index dd524c779..b0251eb33 100644 --- a/app/src/main/java/de/kuschku/util/ui/MenuTint.java +++ b/app/src/main/java/de/kuschku/util/ui/MenuTint.java @@ -299,27 +299,23 @@ public class MenuTint { } // We must wait for the view to be created to set a color filter on the drawables. - actionBarView.post(new Runnable() { - - @Override - public void run() { - for (int i = 0, size = menu.size(); i < size; i++) { - MenuItem menuItem = menu.getItem(i); - if (isInOverflow(menuItem)) { - colorMenuItem(menuItem, subMenuIconColor, subMenuIconAlpha); - } - if (menuItem.hasSubMenu()) { - SubMenu subMenu = menuItem.getSubMenu(); - for (int j = 0; j < subMenu.size(); j++) { - colorMenuItem(subMenu.getItem(j), subMenuIconColor, subMenuIconAlpha); - } - } + actionBarView.post(() -> { + for (int i = 0, size = menu.size(); i < size; i++) { + MenuItem menuItem = menu.getItem(i); + if (isInOverflow(menuItem)) { + colorMenuItem(menuItem, subMenuIconColor, subMenuIconAlpha); } - if (menuItemIconColor != null || menuItemIconAlpha != null) { - overflowButton = findOverflowMenuButton(activity, actionBarView); - colorOverflowMenuItem(overflowButton); + if (menuItem.hasSubMenu()) { + SubMenu subMenu = menuItem.getSubMenu(); + for (int j = 0; j < subMenu.size(); j++) { + colorMenuItem(subMenu.getItem(j), subMenuIconColor, subMenuIconAlpha); + } } } + if (menuItemIconColor != null || menuItemIconAlpha != null) { + overflowButton = findOverflowMenuButton(activity, actionBarView); + colorOverflowMenuItem(overflowButton); + } }); } @@ -343,29 +339,24 @@ public class MenuTint { return; } - actionBarView.post(new Runnable() { - - @Override - public void run() { - for (int i = 0, size = menu.size(); i < size; i++) { - MenuItem menuItem = menu.getItem(i); - if (isInOverflow(menuItem)) { - colorMenuItem(menuItem, subMenuIconColor, subMenuIconAlpha); - } else { - colorMenuItem(menu.getItem(i), menuItemIconColor, menuItemIconAlpha); - } - if (menuItem.hasSubMenu()) { - SubMenu subMenu = menuItem.getSubMenu(); - for (int j = 0; j < subMenu.size(); j++) { - colorMenuItem(subMenu.getItem(j), subMenuIconColor, subMenuIconAlpha); - } - } + actionBarView.post(() -> { + for (int i = 0, size = menu.size(); i < size; i++) { + MenuItem menuItem = menu.getItem(i); + if (isInOverflow(menuItem)) { + colorMenuItem(menuItem, subMenuIconColor, subMenuIconAlpha); + } else { + colorMenuItem(menu.getItem(i), menuItemIconColor, menuItemIconAlpha); } - if (menuItemIconColor != null || menuItemIconAlpha != null) { - colorOverflowMenuItem(overflowButton); + if (menuItem.hasSubMenu()) { + SubMenu subMenu = menuItem.getSubMenu(); + for (int j = 0; j < subMenu.size(); j++) { + colorMenuItem(subMenu.getItem(j), subMenuIconColor, subMenuIconAlpha); + } } } - + if (menuItemIconColor != null || menuItemIconAlpha != null) { + colorOverflowMenuItem(overflowButton); + } }); } @@ -381,6 +372,7 @@ public class MenuTint { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { overflow.setImageAlpha(menuItemIconAlpha); } else { + //noinspection deprecation overflow.setAlpha(menuItemIconAlpha); } } diff --git a/app/src/main/java/de/kuschku/util/ui/ObservableTextBinder.java b/app/src/main/java/de/kuschku/util/ui/ObservableTextBinder.java index 688db48ab..f0900ba67 100644 --- a/app/src/main/java/de/kuschku/util/ui/ObservableTextBinder.java +++ b/app/src/main/java/de/kuschku/util/ui/ObservableTextBinder.java @@ -26,7 +26,7 @@ import android.databinding.ObservableField; import android.widget.TextView; public class ObservableTextBinder { - private ObservableField<CharSequence> text; + private final ObservableField<CharSequence> text; private TextView view; public ObservableTextBinder(ObservableField<CharSequence> text) { diff --git a/app/src/main/java/de/kuschku/util/ui/parcelableUtil/StorageBackendParcelable.java b/app/src/main/java/de/kuschku/util/ui/parcelableUtil/StorageBackendParcelable.java index 0dd959171..95fe1c1cd 100644 --- a/app/src/main/java/de/kuschku/util/ui/parcelableUtil/StorageBackendParcelable.java +++ b/app/src/main/java/de/kuschku/util/ui/parcelableUtil/StorageBackendParcelable.java @@ -67,7 +67,7 @@ public class StorageBackendParcelable extends StorageBackend implements Parcelab default: throw new IllegalArgumentException("Can’t serialize type " + type.name()); } - } catch (IOException e) { + } catch (IOException ignored) { } } diff --git a/app/src/main/java/de/kuschku/util/ui/preferences/MaterialListPreference.java b/app/src/main/java/de/kuschku/util/ui/preferences/MaterialListPreference.java index eda511cd0..1396c604e 100644 --- a/app/src/main/java/de/kuschku/util/ui/preferences/MaterialListPreference.java +++ b/app/src/main/java/de/kuschku/util/ui/preferences/MaterialListPreference.java @@ -215,7 +215,7 @@ public class MaterialListPreference extends ListPreference { public SavedState(Parcel source) { super(source); isDialogShowing = source.readInt() == 1; - dialogBundle = source.readBundle(); + dialogBundle = source.readBundle(getClass().getClassLoader()); } public SavedState(Parcelable superState) { diff --git a/app/src/main/java/de/kuschku/util/ui/preferences/SeekBarPreference.java b/app/src/main/java/de/kuschku/util/ui/preferences/SeekBarPreference.java index 90a6911a4..c2d2bc662 100644 --- a/app/src/main/java/de/kuschku/util/ui/preferences/SeekBarPreference.java +++ b/app/src/main/java/de/kuschku/util/ui/preferences/SeekBarPreference.java @@ -46,8 +46,6 @@ public class SeekBarPreference extends Preference implements OnSeekBarChangeList private int mMinValue = 0; private int mInterval = 1; private int mCurrentValue; - private String mUnitsLeft = ""; - private String mUnitsRight = ""; private AppCompatSeekBar mSeekBar; private TextView mStatusText; @@ -75,10 +73,6 @@ public class SeekBarPreference extends Preference implements OnSeekBarChangeList mMaxValue = attrs.getAttributeIntValue(ANDROIDNS, "max", 100); mMinValue = attrs.getAttributeIntValue(APPLICATIONNS, "min", 0); - mUnitsLeft = getAttributeStringValue(attrs, APPLICATIONNS, "unitsLeft", ""); - String units = getAttributeStringValue(attrs, APPLICATIONNS, "units", ""); - mUnitsRight = getAttributeStringValue(attrs, APPLICATIONNS, "unitsRight", units); - try { String newInterval = attrs.getAttributeValue(APPLICATIONNS, "interval"); if (newInterval != null) @@ -89,14 +83,6 @@ public class SeekBarPreference extends Preference implements OnSeekBarChangeList } - private String getAttributeStringValue(AttributeSet attrs, String namespace, String name, String defaultValue) { - String value = attrs.getAttributeValue(namespace, name); - if (value == null) - value = defaultValue; - - return value; - } - @Override protected View onCreateView(ViewGroup parent) { View view = super.onCreateView(parent); @@ -178,9 +164,7 @@ public class SeekBarPreference extends Preference implements OnSeekBarChangeList @Override protected Object onGetDefaultValue(TypedArray ta, int index) { - - int defaultValue = ta.getInt(index, DEFAULT_VALUE); - return defaultValue; + return ta.getInt(index, DEFAULT_VALUE); } diff --git a/app/src/main/res/anim/slide_in_right.xml b/app/src/main/res/anim/slide_in_right.xml deleted file mode 100644 index b5751ba8a..000000000 --- a/app/src/main/res/anim/slide_in_right.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ QuasselDroid - Quassel client for Android - ~ Copyright (C) 2016 Janne Koschinski - ~ Copyright (C) 2016 Ken Børge Viktil - ~ Copyright (C) 2016 Magnus Fjell - ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - ~ - ~ This program is free software: you can redistribute it and/or modify it - ~ under the terms of the GNU General Public License as published by the Free - ~ Software Foundation, either version 3 of the License, or (at your option) - ~ any later version. - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU General Public License for more details. - ~ - ~ You should have received a copy of the GNU General Public License along - ~ with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<set xmlns:android="http://schemas.android.com/apk/res/android"> - <translate android:fromXDelta="50%p" android:toXDelta="0" - android:duration="@android:integer/config_mediumAnimTime"/> - <alpha android:fromAlpha="0.0" android:toAlpha="1.0" - android:duration="@android:integer/config_mediumAnimTime" /> -</set> diff --git a/app/src/main/res/anim/slide_out_left.xml b/app/src/main/res/anim/slide_out_left.xml deleted file mode 100644 index 3d7278e5f..000000000 --- a/app/src/main/res/anim/slide_out_left.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ QuasselDroid - Quassel client for Android - ~ Copyright (C) 2016 Janne Koschinski - ~ Copyright (C) 2016 Ken Børge Viktil - ~ Copyright (C) 2016 Magnus Fjell - ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - ~ - ~ This program is free software: you can redistribute it and/or modify it - ~ under the terms of the GNU General Public License as published by the Free - ~ Software Foundation, either version 3 of the License, or (at your option) - ~ any later version. - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU General Public License for more details. - ~ - ~ You should have received a copy of the GNU General Public License along - ~ with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<set xmlns:android="http://schemas.android.com/apk/res/android"> - <translate android:fromXDelta="0" android:toXDelta="-50%p" - android:duration="@android:integer/config_mediumAnimTime"/> - <alpha android:fromAlpha="1.0" android:toAlpha="0.0" - android:duration="@android:integer/config_mediumAnimTime" /> -</set> - diff --git a/app/src/main/res/color/selectable_button_background.xml b/app/src/main/res/color/selectable_button_background.xml deleted file mode 100644 index b14317e10..000000000 --- a/app/src/main/res/color/selectable_button_background.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ QuasselDroid - Quassel client for Android - ~ Copyright (C) 2016 Janne Koschinski - ~ Copyright (C) 2016 Ken Børge Viktil - ~ Copyright (C) 2016 Magnus Fjell - ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - ~ - ~ This program is free software: you can redistribute it and/or modify it - ~ under the terms of the GNU General Public License as published by the Free - ~ Software Foundation, either version 3 of the License, or (at your option) - ~ any later version. - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU General Public License for more details. - ~ - ~ You should have received a copy of the GNU General Public License along - ~ with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - - <item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:color="#8A777777" /> - <item android:state_focused="true" android:state_enabled="false" android:color="#8A777777" /> - <item android:state_focused="true" android:state_pressed="true" android:color="#8A333333" /> - <item android:state_focused="false" android:state_pressed="true" android:color="#83333333" /> - <item android:state_focused="true" android:color="#8A333333" /> - <item android:color="#8A000000" /> -</selector> diff --git a/app/src/main/res/layout-sw600dp-land/activity_setup.xml b/app/src/main/res/layout-sw600dp-land/activity_setup.xml index aaa939798..6dd588f46 100644 --- a/app/src/main/res/layout-sw600dp-land/activity_setup.xml +++ b/app/src/main/res/layout-sw600dp-land/activity_setup.xml @@ -20,12 +20,11 @@ ~ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<FrameLayout +<merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="?attr/colorPrimary"> + android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/view_pager" @@ -47,4 +46,4 @@ app:pressedTranslationZ="0dip" app:srcCompat="@drawable/ic_arrow_right"/> -</FrameLayout> +</merge> diff --git a/app/src/main/res/layout-sw600dp/activity_setup.xml b/app/src/main/res/layout-sw600dp/activity_setup.xml index af75da8fd..b24493cf5 100644 --- a/app/src/main/res/layout-sw600dp/activity_setup.xml +++ b/app/src/main/res/layout-sw600dp/activity_setup.xml @@ -20,12 +20,11 @@ ~ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<FrameLayout +<merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="?attr/colorPrimary"> + android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/view_pager" @@ -54,4 +53,4 @@ </FrameLayout> -</FrameLayout> +</merge> diff --git a/app/src/main/res/layout-sw600dp/slide.xml b/app/src/main/res/layout-sw600dp/slide.xml index a20bf7a99..d68fea055 100644 --- a/app/src/main/res/layout-sw600dp/slide.xml +++ b/app/src/main/res/layout-sw600dp/slide.xml @@ -20,60 +20,55 @@ ~ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<FrameLayout + +<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="wrap_content" + android:layout_gravity="bottom"> - <ScrollView - android:layout_width="match_parent" + <LinearLayout + android:layout_width="400dp" android:layout_height="wrap_content" - android:layout_gravity="bottom"> + android:layout_gravity="center_horizontal" + android:orientation="vertical"> <LinearLayout - android:layout_width="400dp" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:orientation="vertical"> + android:layout_marginTop="64dp" + android:orientation="vertical" + android:padding="32dp"> - <LinearLayout + <TextView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="64dp" - android:orientation="vertical" - android:padding="32dp"> - - <TextView - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginBottom="32dp" - android:text="@string/slideAccountcoreTitle" - android:textColor="@android:color/white" - android:textSize="28sp" - android:textStyle="bold" /> - - <TextView - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/description" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/slideAccountcoreDescription" - android:textColor="@android:color/white" - android:textSize="16sp" /> + android:layout_marginBottom="32dp" + android:text="@string/slideAccountcoreTitle" + android:textColor="@android:color/white" + android:textSize="28sp" + android:textStyle="bold"/> - </LinearLayout> - - <android.support.v7.widget.CardView - android:id="@+id/content_host" + <TextView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/description" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/md_light_cards" - android:minHeight="400dp" /> + android:text="@string/slideAccountcoreDescription" + android:textColor="@android:color/white" + android:textSize="16sp"/> </LinearLayout> - </ScrollView> + <android.support.v7.widget.CardView + android:id="@+id/content_host" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/md_light_cards" + android:minHeight="400dp"/> + + </LinearLayout> -</FrameLayout> +</ScrollView> diff --git a/app/src/main/res/layout/activity_accountchooser.xml b/app/src/main/res/layout/activity_accountchooser.xml deleted file mode 100644 index d47d053c3..000000000 --- a/app/src/main/res/layout/activity_accountchooser.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ QuasselDroid - Quassel client for Android - ~ Copyright (C) 2016 Janne Koschinski - ~ Copyright (C) 2016 Ken Børge Viktil - ~ Copyright (C) 2016 Magnus Fjell - ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - ~ - ~ This program is free software: you can redistribute it and/or modify it - ~ under the terms of the GNU General Public License as published by the Free - ~ Software Foundation, either version 3 of the License, or (at your option) - ~ any later version. - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU General Public License for more details. - ~ - ~ You should have received a copy of the GNU General Public License along - ~ with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:orientation="vertical" android:layout_width="match_parent" - android:layout_height="match_parent"> - -</LinearLayout> diff --git a/app/src/main/res/layout/activity_channel_detail.xml b/app/src/main/res/layout/activity_channel_detail.xml index a6d7d64a8..564f036e3 100644 --- a/app/src/main/res/layout/activity_channel_detail.xml +++ b/app/src/main/res/layout/activity_channel_detail.xml @@ -52,7 +52,7 @@ android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:gravity="fill_vertical" - android:text="Topic" + android:text="@string/topic" android:textColor="?attr/colorAccent" /> <TextView @@ -72,7 +72,7 @@ android:layout_gravity="end" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" - android:text="Edit Topic" /> + android:text="@string/edit_topic"/> <View android:layout_width="match_parent" @@ -87,7 +87,7 @@ android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:gravity="fill_vertical" - android:text="Channel Modes" + android:text="@string/channel_modes" android:textColor="?attr/colorAccent" /> <LinearLayout diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml deleted file mode 100644 index 50b28109b..000000000 --- a/app/src/main/res/layout/activity_chat.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ QuasselDroid - Quassel client for Android - ~ Copyright (C) 2016 Janne Koschinski - ~ Copyright (C) 2016 Ken Børge Viktil - ~ Copyright (C) 2016 Magnus Fjell - ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - ~ - ~ This program is free software: you can redistribute it and/or modify it - ~ under the terms of the GNU General Public License as published by the Free - ~ Software Foundation, either version 3 of the License, or (at your option) - ~ any later version. - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU General Public License for more details. - ~ - ~ You should have received a copy of the GNU General Public License along - ~ with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - <include layout="@layout/widget_actionbar" /> - - <com.sothree.slidinguppanel.SlidingUpPanelLayout - 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:umanoScrollableView="@+id/chatline_scroller" - app:umanoShadowHeight="4dp"> - - <include layout="@layout/fragment_chat" /> - - <include layout="@layout/widget_slider" /> - - </com.sothree.slidinguppanel.SlidingUpPanelLayout> - -</LinearLayout> diff --git a/app/src/main/res/layout/activity_chatlist_edit.xml b/app/src/main/res/layout/activity_chatlist_edit.xml index 6609355e6..177edc335 100644 --- a/app/src/main/res/layout/activity_chatlist_edit.xml +++ b/app/src/main/res/layout/activity_chatlist_edit.xml @@ -59,7 +59,7 @@ android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="Name"/> + android:hint="@string/name"/> </android.support.design.widget.TextInputLayout> @@ -76,7 +76,7 @@ android:paddingBottom="8dp" android:paddingLeft="3dp" android:paddingRight="3dp" - android:text="Network" + android:text="@string/network" android:textSize="12sp"/> <android.support.v7.widget.AppCompatSpinner @@ -94,37 +94,37 @@ android:id="@+id/showChannels" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Show channels"/> + android:text="@string/show_channels"/> <android.support.v7.widget.AppCompatCheckBox android:id="@+id/showQueries" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Show Queries"/> + android:text="@string/show_queries"/> <android.support.v7.widget.AppCompatCheckBox android:id="@+id/hideInactiveChats" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Hide inactive chats"/> + android:text="@string/hide_inactive_chats"/> <android.support.v7.widget.AppCompatCheckBox android:id="@+id/hideInactiveNetworks" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Hide inactive networks"/> + android:text="@string/hide_inactive_networks"/> <android.support.v7.widget.AppCompatCheckBox android:id="@+id/addAutomatically" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Add new chats automatically"/> + android:text="@string/add_new_chats_automatically"/> <android.support.v7.widget.AppCompatCheckBox android:id="@+id/sortAlphabetically" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Sort alphabetically"/> + android:text="@string/sort_alphabetically"/> <LinearLayout android:layout_width="match_parent" @@ -139,7 +139,7 @@ android:paddingBottom="8dp" android:paddingLeft="3dp" android:paddingRight="3dp" - android:text="Minimum Activity" + android:text="@string/minimum_activity" android:textSize="12sp"/> <android.support.v7.widget.AppCompatSpinner diff --git a/app/src/main/res/layout/activity_identity_edit.xml b/app/src/main/res/layout/activity_identity_edit.xml index 47c030253..d98656b63 100644 --- a/app/src/main/res/layout/activity_identity_edit.xml +++ b/app/src/main/res/layout/activity_identity_edit.xml @@ -58,7 +58,7 @@ android:id="@+id/identityName" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="identityName"/> + android:hint="@string/identityname"/> </android.support.design.widget.TextInputLayout> @@ -70,7 +70,7 @@ android:id="@+id/realName" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="realName"/> + android:hint="@string/realname"/> </android.support.design.widget.TextInputLayout> @@ -82,7 +82,7 @@ android:id="@+id/ident" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="ident"/> + android:hint="@string/ident"/> </android.support.design.widget.TextInputLayout> @@ -94,7 +94,7 @@ android:id="@+id/nicks" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Edit Nicks"/> + android:text="@string/edit_nicks"/> </android.support.v7.widget.ButtonBarLayout> @@ -102,7 +102,7 @@ android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" - android:text="Messages" + android:text="@string/messages" android:textColor="?attr/colorAccent" android:textSize="14sp"/> @@ -114,7 +114,7 @@ android:id="@+id/kickReason" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="kickReason"/> + android:hint="@string/kickreason"/> </android.support.design.widget.TextInputLayout> @@ -126,7 +126,7 @@ android:id="@+id/partReason" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="partReason"/> + android:hint="@string/partreason"/> </android.support.design.widget.TextInputLayout> @@ -138,7 +138,7 @@ android:id="@+id/quitReason" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="quitReason"/> + android:hint="@string/quitreason"/> </android.support.design.widget.TextInputLayout> @@ -146,7 +146,7 @@ android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" - android:text="Away" + android:text="@string/away" android:textColor="?attr/colorAccent" android:textSize="14sp"/> @@ -158,7 +158,7 @@ android:id="@+id/awayReason" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="awayReason"/> + android:hint="@string/awayreason"/> </android.support.design.widget.TextInputLayout> @@ -168,7 +168,7 @@ android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" - android:text="Away on Detach" + android:text="@string/away_on_detach" android:textColor="?attr/colorAccent" android:textSize="14sp"/> @@ -186,7 +186,7 @@ android:id="@+id/awayOnDetachReason" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="awayOnDetachReason"/> + android:hint="@string/awayondetachreason"/> </android.support.design.widget.TextInputLayout> diff --git a/app/src/main/res/layout/activity_network_edit.xml b/app/src/main/res/layout/activity_network_edit.xml index 3b18b1c7d..4ca553564 100644 --- a/app/src/main/res/layout/activity_network_edit.xml +++ b/app/src/main/res/layout/activity_network_edit.xml @@ -59,7 +59,7 @@ android:id="@+id/networkName" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="networkName"/> + android:hint="@string/networkname"/> </android.support.design.widget.TextInputLayout> @@ -76,7 +76,7 @@ android:layout_marginBottom="8dp" android:paddingLeft="3dp" android:paddingRight="3dp" - android:text="identity" + android:text="@string/identity" android:textSize="12sp"/> <android.support.v7.widget.AppCompatSpinner @@ -94,7 +94,7 @@ android:id="@+id/rejoinChannels" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="rejoinChannels"/> + android:text="@string/rejoinchannels"/> <android.support.v7.widget.ButtonBarLayout android:layout_width="match_parent" @@ -104,7 +104,7 @@ android:id="@+id/servers" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Edit Servers"/> + android:text="@string/edit_servers"/> </android.support.v7.widget.ButtonBarLayout> @@ -114,7 +114,7 @@ android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" - android:text="Custom Codecs" + android:text="@string/custom_codecs" android:textColor="?attr/colorAccent" android:textSize="14sp"/> @@ -133,7 +133,7 @@ android:id="@+id/codecForServer" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="codecForServer"/> + android:hint="@string/codecforserver"/> </android.support.design.widget.TextInputLayout> @@ -145,7 +145,7 @@ android:id="@+id/codecForEncoding" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="codecForEncoding"/> + android:hint="@string/codecforencoding"/> </android.support.design.widget.TextInputLayout> @@ -157,7 +157,7 @@ android:id="@+id/codecForDecoding" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="codecForDecoding"/> + android:hint="@string/codecfordecoding"/> </android.support.design.widget.TextInputLayout> @@ -169,7 +169,7 @@ android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" - android:text="Auto Identify" + android:text="@string/auto_identify" android:textColor="?attr/colorAccent" android:textSize="14sp"/> @@ -188,7 +188,7 @@ android:id="@+id/autoIdentifyService" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="autoIdentifyService"/> + android:hint="@string/autoidentifyservice"/> </android.support.design.widget.TextInputLayout> @@ -200,7 +200,7 @@ android:id="@+id/autoIdentifyPassword" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="autoIdentifyPassword"/> + android:hint="@string/autoidentifypassword"/> </android.support.design.widget.TextInputLayout> @@ -212,7 +212,7 @@ android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" - android:text="SASL" + android:text="@string/sasl" android:textColor="?attr/colorAccent" android:textSize="14sp"/> @@ -230,7 +230,7 @@ android:id="@+id/saslAccount" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="saslAccount"/> + android:hint="@string/saslaccount"/> </android.support.design.widget.TextInputLayout> @@ -242,7 +242,7 @@ android:id="@+id/saslPassword" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="saslPassword"/> + android:hint="@string/saslpassword"/> </android.support.design.widget.TextInputLayout> </LinearLayout> @@ -253,7 +253,7 @@ android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" - android:text="Auto Reconnect" + android:text="@string/auto_reconnect" android:textColor="?attr/colorAccent" android:textSize="14sp"/> @@ -271,7 +271,7 @@ android:id="@+id/autoReconnectInterval" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="autoReconnectInterval" + android:hint="@string/autoreconnectinterval" android:inputType="number"/> </android.support.design.widget.TextInputLayout> @@ -280,7 +280,7 @@ android:id="@+id/unlimitedAutoReconnectRetries" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="unlimitedAutoReconnectRetries"/> + android:text="@string/unlimitedautoreconnectretries"/> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" @@ -290,7 +290,7 @@ android:id="@+id/autoReconnectRetries" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="autoReconnectRetries" + android:hint="@string/autoreconnectretries" android:inputType="number"/> </android.support.design.widget.TextInputLayout> diff --git a/app/src/main/res/layout/activity_networkserver_edit.xml b/app/src/main/res/layout/activity_networkserver_edit.xml index 63110f65c..f77fb0cab 100644 --- a/app/src/main/res/layout/activity_networkserver_edit.xml +++ b/app/src/main/res/layout/activity_networkserver_edit.xml @@ -59,7 +59,7 @@ android:id="@+id/host" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="host"/> + android:hint="@string/host"/> </android.support.design.widget.TextInputLayout> @@ -71,7 +71,7 @@ android:id="@+id/port" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="port" + android:hint="@string/port" android:inputType="number" android:maxLength="5"/> @@ -81,7 +81,7 @@ android:id="@+id/useSSL" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="useSSL"/> + android:text="@string/usessl"/> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" @@ -91,7 +91,7 @@ android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="password"/> + android:hint="@string/password"/> </android.support.design.widget.TextInputLayout> @@ -101,7 +101,7 @@ android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" - android:text="Proxy" + android:text="@string/proxy" android:textColor="?attr/colorAccent" android:textSize="14sp"/> @@ -120,7 +120,7 @@ android:id="@+id/proxyHost" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="proxyHost"/> + android:hint="@string/proxyhost"/> </android.support.design.widget.TextInputLayout> @@ -132,7 +132,7 @@ android:id="@+id/proxyPort" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="proxyPort" + android:hint="@string/proxyport" android:inputType="number" android:maxLength="5"/> @@ -151,7 +151,7 @@ android:layout_marginBottom="8dp" android:paddingLeft="3dp" android:paddingRight="3dp" - android:text="proxyType" + android:text="@string/proxytype" android:textSize="12sp"/> <android.support.v7.widget.AppCompatSpinner @@ -173,7 +173,7 @@ android:id="@+id/proxyUser" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="proxyUser"/> + android:hint="@string/proxyuser"/> </android.support.design.widget.TextInputLayout> @@ -185,7 +185,7 @@ android:id="@+id/proxyPassword" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="proxyPassword"/> + android:hint="@string/proxypassword"/> </android.support.design.widget.TextInputLayout> diff --git a/app/src/main/res/layout/activity_nick_list.xml b/app/src/main/res/layout/activity_nick_list.xml deleted file mode 100644 index 7f3dcc699..000000000 --- a/app/src/main/res/layout/activity_nick_list.xml +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ QuasselDroid - Quassel client for Android - ~ Copyright (C) 2016 Janne Koschinski - ~ Copyright (C) 2016 Ken Børge Viktil - ~ Copyright (C) 2016 Magnus Fjell - ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - ~ - ~ This program is free software: you can redistribute it and/or modify it - ~ under the terms of the GNU General Public License as published by the Free - ~ Software Foundation, either version 3 of the License, or (at your option) - ~ any later version. - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU General Public License for more details. - ~ - ~ You should have received a copy of the GNU General Public License along - ~ with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - <android.support.design.widget.AppBarLayout - android:id="@+id/appBar" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:theme="?attr/actionBarTheme"> - - <android.support.v7.widget.Toolbar - android:id="@+id/toolbar" - android:layout_width="match_parent" - android:layout_height="?attr/actionBarSize"/> - - </android.support.design.widget.AppBarLayout> - - <FrameLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - <android.support.v7.widget.RecyclerView - android:id="@+id/list" - android:layout_width="match_parent" - android:layout_height="match_parent"/> - - <android.support.design.widget.FloatingActionButton - android:id="@+id/add" - android:layout_width="56dp" - android:layout_height="56dp" - android:layout_gravity="end|bottom" - android:layout_marginBottom="16dp" - android:layout_marginEnd="16dp" - android:layout_marginRight="16dp" - android:tint="@color/colorFillDark" - app:srcCompat="@drawable/ic_add"/> - </FrameLayout> -</LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setup.xml b/app/src/main/res/layout/activity_setup.xml index c415b4ac9..70aadb377 100644 --- a/app/src/main/res/layout/activity_setup.xml +++ b/app/src/main/res/layout/activity_setup.xml @@ -20,12 +20,11 @@ ~ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<FrameLayout +<merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="?attr/colorPrimary"> + android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/view_pager" @@ -47,4 +46,4 @@ app:pressedTranslationZ="0dip" app:srcCompat="@drawable/ic_arrow_right"/> -</FrameLayout> +</merge> diff --git a/app/src/main/res/layout/dialog_address.xml b/app/src/main/res/layout/dialog_address.xml deleted file mode 100644 index 59d124bf3..000000000 --- a/app/src/main/res/layout/dialog_address.xml +++ /dev/null @@ -1,53 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ QuasselDroid - Quassel client for Android - ~ Copyright (C) 2016 Janne Koschinski - ~ Copyright (C) 2016 Ken Børge Viktil - ~ Copyright (C) 2016 Magnus Fjell - ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - ~ - ~ This program is free software: you can redistribute it and/or modify it - ~ under the terms of the GNU General Public License as published by the Free - ~ Software Foundation, either version 3 of the License, or (at your option) - ~ any later version. - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU General Public License for more details. - ~ - ~ You should have received a copy of the GNU General Public License along - ~ with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:paddingBottom="@dimen/activity_vertical_margin" - android:paddingLeft="@dimen/activity_horizontal_margin" - android:paddingRight="@dimen/activity_horizontal_margin" - android:paddingTop="@dimen/activity_vertical_margin"> - <android.support.design.widget.TextInputLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - <android.support.v7.widget.AppCompatEditText - android:id="@+id/host" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:hint="@string/labelHostname" - android:inputType="textUri" /> - </android.support.design.widget.TextInputLayout> - - <android.support.design.widget.TextInputLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - <android.support.v7.widget.AppCompatEditText - android:id="@+id/port" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:hint="@string/labelPort" - android:inputType="number" /> - </android.support.design.widget.TextInputLayout> -</LinearLayout> diff --git a/app/src/main/res/layout/fragment_chat.xml b/app/src/main/res/layout/fragment_chat.xml index 484db8acd..002c1ebe1 100644 --- a/app/src/main/res/layout/fragment_chat.xml +++ b/app/src/main/res/layout/fragment_chat.xml @@ -32,7 +32,7 @@ app:umanoPanelHeight="?attr/actionBarSize" app:umanoScrollableView="@+id/chatline_scroller" app:umanoShadowHeight="4dp" - tools:showIn="@layout/activity_chat"> + tools:showIn="@layout/activity_main"> <FrameLayout android:layout_width="match_parent" diff --git a/app/src/main/res/layout/fragment_loading.xml b/app/src/main/res/layout/fragment_loading.xml index 17025c0e1..2b0c883c4 100644 --- a/app/src/main/res/layout/fragment_loading.xml +++ b/app/src/main/res/layout/fragment_loading.xml @@ -20,38 +20,37 @@ ~ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent"> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="240dp" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical|center_horizontal" + android:orientation="vertical"> <LinearLayout - android:layout_width="240dp" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_centerHorizontal="true" - android:layout_centerVertical="true" - android:orientation="vertical"> - <LinearLayout - android:layout_width="match_parent" + android:orientation="horizontal"> + + <TextView + android:id="@+id/label" + android:layout_width="0dip" android:layout_height="wrap_content" - android:orientation="horizontal"> - <TextView - android:id="@+id/label" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:text="@string/statusConnecting" - android:textAppearance="@style/TextAppearance.AppCompat.Caption" /> - <TextView - android:id="@+id/count" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textAppearance="@style/TextAppearance.AppCompat.Caption" /> - </LinearLayout> - <ProgressBar - android:id="@+id/progressBar" - style="@style/Widget.AppCompat.ProgressBar.Horizontal" - android:layout_width="match_parent" + android:layout_weight="1" + android:text="@string/statusConnecting" + android:textAppearance="@style/TextAppearance.AppCompat.Caption"/> + + <TextView + android:id="@+id/count" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:indeterminate="true" /> + android:textAppearance="@style/TextAppearance.AppCompat.Caption"/> </LinearLayout> -</RelativeLayout> + + <ProgressBar + android:id="@+id/progressBar" + style="@style/Widget.AppCompat.ProgressBar.Horizontal" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:indeterminate="true"/> +</LinearLayout> diff --git a/app/src/main/res/layout/slide_account_name.xml b/app/src/main/res/layout/slide_account_name.xml index 5fcd81ce6..2d4a66a89 100644 --- a/app/src/main/res/layout/slide_account_name.xml +++ b/app/src/main/res/layout/slide_account_name.xml @@ -22,20 +22,19 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" + android:orientation="vertical" android:padding="32dp"> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="Account Name"> + android:hint="@string/account_name"> <android.support.design.widget.TextInputEditText android:id="@+id/name" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:inputType="textEmailSubject" /> + android:layout_height="wrap_content"/> </android.support.design.widget.TextInputLayout> </LinearLayout> diff --git a/app/src/main/res/layout/slide_account_user.xml b/app/src/main/res/layout/slide_account_user.xml index add3a0edd..d20320cc3 100644 --- a/app/src/main/res/layout/slide_account_user.xml +++ b/app/src/main/res/layout/slide_account_user.xml @@ -22,15 +22,15 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" + android:orientation="vertical" android:padding="32dp"> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="Username"> + android:hint="@string/username"> <android.support.design.widget.TextInputEditText android:id="@+id/user" android:layout_width="match_parent" @@ -41,7 +41,7 @@ <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="Password"> + android:hint="@string/password"> <android.support.design.widget.TextInputEditText android:id="@+id/pass" android:layout_width="match_parent" diff --git a/app/src/main/res/layout/slide_core_select_backend.xml b/app/src/main/res/layout/widget_chatmessage_markerline.xml similarity index 92% rename from app/src/main/res/layout/slide_core_select_backend.xml rename to app/src/main/res/layout/widget_chatmessage_markerline.xml index 6e39a33fa..bfbbd490f 100644 --- a/app/src/main/res/layout/slide_core_select_backend.xml +++ b/app/src/main/res/layout/widget_chatmessage_markerline.xml @@ -20,7 +20,8 @@ ~ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<android.support.v7.widget.RecyclerView +<View xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="400dp" /> \ No newline at end of file + android:layout_height="8dp" + android:background="@color/md_red_500"/> diff --git a/app/src/main/res/layout/widget_core_account_add.xml b/app/src/main/res/layout/widget_core_account_add.xml index 8c5422b65..01567be95 100644 --- a/app/src/main/res/layout/widget_core_account_add.xml +++ b/app/src/main/res/layout/widget_core_account_add.xml @@ -67,10 +67,10 @@ android:fontFamily="sans-serif-medium" android:gravity="center_vertical|start" android:lines="1" + android:paddingEnd="@dimen/material_drawer_item_primary_icon_padding_right" android:paddingRight="@dimen/material_drawer_item_primary_icon_padding_right" android:singleLine="true" - android:text="Add Account" - android:textDirection="anyRtl" + android:text="@string/add_account" android:textSize="@dimen/material_drawer_item_profile_text" /> </LinearLayout> </LinearLayout> diff --git a/app/src/main/res/layout/widget_drawer_network.xml b/app/src/main/res/layout/widget_drawer_network.xml index 0078a5940..99ccea32a 100644 --- a/app/src/main/res/layout/widget_drawer_network.xml +++ b/app/src/main/res/layout/widget_drawer_network.xml @@ -19,37 +19,29 @@ ~ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="@dimen/material_drawer_item_primary" - android:background="?attr/selectableItemBackground" - android:clickable="true" - android:orientation="horizontal" - android:paddingEnd="@dimen/material_drawer_vertical_padding" - android:paddingLeft="@dimen/material_drawer_vertical_padding" - android:paddingRight="@dimen/material_drawer_vertical_padding" - android:paddingStart="@dimen/material_drawer_vertical_padding"> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="@dimen/material_drawer_item_primary" + android:background="?attr/selectableItemBackground" + android:clickable="true" + android:gravity="center_vertical|start" + android:orientation="vertical" + android:paddingEnd="@dimen/material_drawer_vertical_padding" + android:paddingLeft="@dimen/material_drawer_vertical_padding" + android:paddingRight="@dimen/material_drawer_vertical_padding" + android:paddingStart="@dimen/material_drawer_vertical_padding"> - <LinearLayout - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_weight="1" + <TextView + android:id="@+id/material_drawer_name" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:fontFamily="sans-serif-medium" android:gravity="center_vertical|start" - android:orientation="vertical"> + android:lines="1" + android:singleLine="true" + android:textSize="@dimen/material_drawer_item_primary_text" + tools:text="Some drawer text"/> - <TextView - android:id="@+id/material_drawer_name" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:fontFamily="sans-serif-medium" - android:gravity="center_vertical|start" - android:lines="1" - android:singleLine="true" - android:textDirection="anyRtl" - android:textSize="@dimen/material_drawer_item_primary_text" - tools:text="Some drawer text" /> - - </LinearLayout> - -</LinearLayout> \ No newline at end of file +</LinearLayout> diff --git a/app/src/main/res/layout/widget_slider.xml b/app/src/main/res/layout/widget_slider.xml index 812fa9d2d..aeb551b6f 100644 --- a/app/src/main/res/layout/widget_slider.xml +++ b/app/src/main/res/layout/widget_slider.xml @@ -21,21 +21,21 @@ --> <com.sothree.slidinguppanel.SlidingUpPanelLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/sliding_layout_history" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:background="?attr/colorBackgroundCard" - android:clickable="false" - android:focusable="true" - android:gravity="bottom" - app:umanoFadeColor="?attr/colorBackground" - app:umanoOverlay="true" - app:umanoPanelHeight="0dip" - app:umanoScrollableView="@+id/msg_history" - app:umanoShadowHeight="0.0dip" - tools:showIn="@layout/activity_chat"> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/sliding_layout_history" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:background="?attr/colorBackgroundCard" + android:clickable="false" + android:focusable="true" + android:gravity="bottom" + app:umanoFadeColor="?attr/colorBackground" + app:umanoOverlay="true" + app:umanoPanelHeight="0dip" + app:umanoScrollableView="@+id/msg_history" + app:umanoShadowHeight="0.0dip" + tools:showIn="@layout/activity_main"> <include layout="@layout/widget_editor" /> diff --git a/app/src/main/res/menu/chat.xml b/app/src/main/res/menu/chat.xml index c6154866f..02cb18e3f 100644 --- a/app/src/main/res/menu/chat.xml +++ b/app/src/main/res/menu/chat.xml @@ -37,11 +37,11 @@ app:showAsAction="never" /> <item android:id="@+id/action_networks" - android:title="Networks" + android:title="@string/networks" app:showAsAction="never" /> <item android:id="@+id/action_identities" - android:title="Identities" + android:title="@string/identities" app:showAsAction="never" /> <item android:id="@+id/action_reauth" diff --git a/app/src/main/res/menu/confirm.xml b/app/src/main/res/menu/confirm.xml index 637496929..c952bf45a 100644 --- a/app/src/main/res/menu/confirm.xml +++ b/app/src/main/res/menu/confirm.xml @@ -25,6 +25,6 @@ <item android:id="@+id/action_confirm" android:icon="@drawable/ic_check" - android:title="Save" + android:title="@string/save" app:showAsAction="always"/> </menu> \ No newline at end of file diff --git a/app/src/main/res/menu/confirm_delete.xml b/app/src/main/res/menu/confirm_delete.xml index d45a6de75..c42fbdd84 100644 --- a/app/src/main/res/menu/confirm_delete.xml +++ b/app/src/main/res/menu/confirm_delete.xml @@ -25,11 +25,11 @@ <item android:id="@+id/action_delete" android:icon="@drawable/ic_delete" - android:title="Delete" + android:title="@string/delete" app:showAsAction="always"/> <item android:id="@+id/action_confirm" android:icon="@drawable/ic_check" - android:title="Save" + android:title="@string/save" app:showAsAction="always"/> </menu> \ No newline at end of file diff --git a/app/src/main/res/values-w720dp/bools.xml b/app/src/main/res/values-w720dp/bools.xml deleted file mode 100644 index 533e6f4ea..000000000 --- a/app/src/main/res/values-w720dp/bools.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ QuasselDroid - Quassel client for Android - ~ Copyright (C) 2016 Janne Koschinski - ~ Copyright (C) 2016 Ken Børge Viktil - ~ Copyright (C) 2016 Magnus Fjell - ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - ~ - ~ This program is free software: you can redistribute it and/or modify it - ~ under the terms of the GNU General Public License as published by the Free - ~ Software Foundation, either version 3 of the License, or (at your option) - ~ any later version. - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU General Public License for more details. - ~ - ~ You should have received a copy of the GNU General Public License along - ~ with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<resources> - <bool name="isTablet">true</bool> -</resources> diff --git a/app/src/main/res/values/bools.xml b/app/src/main/res/values/bools.xml deleted file mode 100644 index 26d3877c3..000000000 --- a/app/src/main/res/values/bools.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ QuasselDroid - Quassel client for Android - ~ Copyright (C) 2016 Janne Koschinski - ~ Copyright (C) 2016 Ken Børge Viktil - ~ Copyright (C) 2016 Magnus Fjell - ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org> - ~ - ~ This program is free software: you can redistribute it and/or modify it - ~ under the terms of the GNU General Public License as published by the Free - ~ Software Foundation, either version 3 of the License, or (at your option) - ~ any later version. - ~ - ~ This program is distributed in the hope that it will be useful, - ~ but WITHOUT ANY WARRANTY; without even the implied warranty of - ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ~ GNU General Public License for more details. - ~ - ~ You should have received a copy of the GNU General Public License along - ~ with this program. If not, see <http://www.gnu.org/licenses/>. - --> - -<resources> - <bool name="isTablet">false</bool> -</resources> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index f5c1591a4..8a80003cd 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -27,7 +27,5 @@ <dimen name="message_horizontal">8dp</dimen> <dimen name="message_vertical">2dp</dimen> - <dimen name="circular_button_size">56dp</dimen> - <dimen name="action_bar_default_padding_start_material">0dp</dimen> </resources> diff --git a/app/src/main/res/values/preferences.xml b/app/src/main/res/values/preferences.xml index 3b51bbdff..6fb036b3a 100644 --- a/app/src/main/res/values/preferences.xml +++ b/app/src/main/res/values/preferences.xml @@ -30,23 +30,23 @@ <string name="preference_colors" translatable="false">preference_colors</string> <string name="preference_colors_title">Use mIRC Colors</string> - <string name="preference_colors_summary_on"></string> - <string name="preference_colors_summary_off"></string> + <string name="preference_colors_summary_on">preference_colors_summary_on</string> + <string name="preference_colors_summary_off">preference_colors_summary_off</string> <string name="preference_hostmask" translatable="false">preference_hostname</string> <string name="preference_hostmask_title">Show Hostmask in Messages</string> - <string name="preference_hostmask_summary_on"></string> - <string name="preference_hostmask_summary_off"></string> + <string name="preference_hostmask_summary_on">preference_hostmask_summary_on</string> + <string name="preference_hostmask_summary_off">preference_hostmask_summary_off</string> <string name="preference_lag" translatable="false">preference_lag</string> <string name="preference_lag_title">Show Connection Lag</string> - <string name="preference_lag_summary_on"></string> - <string name="preference_lag_summary_off"></string> + <string name="preference_lag_summary_on">preference_lag_summary_on</string> + <string name="preference_lag_summary_off">preference_lag_summary_off</string> <string name="preference_brackets" translatable="false">preference_brackets</string> <string name="preference_brackets_title">Classical Nick Style</string> - <string name="preference_brackets_summary_on"></string> - <string name="preference_brackets_summary_off"></string> + <string name="preference_brackets_summary_on">preference_brackets_summary_on</string> + <string name="preference_brackets_summary_off">preference_brackets_summary_off</string> <string-array name="preference_theme_entries"> <item>Quassel™ (Light)</item> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b9de9c4ae..27bc27d9c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -40,10 +40,7 @@ <!-- Actions, Labels and Messages --> <string name="labelLogin">Login</string> <string name="labelCancel">Cancel</string> - <string name="labelReconnect">Connect</string> - <string name="labelSettings">Settings</string> <string name="labelStatusBuffer">Status Buffer</string> - <string name="labelAddress">Address</string> <string name="labelHistory">Input History</string> <string name="labelHostname">Hostname</string> <string name="labelPort">Port</string> @@ -95,12 +92,89 @@ <string name="action_part">Part</string> <string name="action_delete">Delete</string> - <string name="action_hidden_display">Show hidden Buffers</string> - <string name="action_hidden_hide">Hide hidden Buffers</string> - <string name="action_unhide">Make Visible</string> <string name="action_hide_temp">Hide Temporarily</string> <string name="action_hide_perm">Hide Permanently</string> <string name="all_networks">All Networks</string> + <string name="channeldetails">Channel Details</string> + <string name="editchatlists">Edit Chat Lists</string> + <string name="editchatlist">Edit Chat List</string> + <string name="createchatlist">Create Chat List</string> + <string name="editnetworks">Edit Networks</string> + <string name="editnetwork">Edit Network</string> + <string name="createnetwork">Create Network</string> + <string name="editnetworkservers">Edit NetworkServers</string> + <string name="editidentities">Edit Identities</string> + <string name="editidentity">Edit Identity</string> + <string name="createidentity">Create Identity</string> + <string name="editnicks">Edit Nicks</string> + <string name="editnetworkserver">Edit NetworkServer</string> + <string name="accountsetup">Account Setup</string> + <string name="accountselection">Account Selection</string> + <string name="coresetup">Core Setup</string> + <string name="settings">Settings</string> + <string name="areyousureyouwanttodelete">Are you sure you want to delete "%1$s"?</string> + <string name="yes">Yes</string> + <string name="no">No</string> + <string name="youhavemadechangesdoyouwishtosavethem">You have made changes, do you wish to save them?</string> + <string name="name">Name</string> + <string name="network">Network</string> + <string name="show_channels">Show channels</string> + <string name="show_queries">Show Queries</string> + <string name="hide_inactive_chats">Hide inactive chats</string> + <string name="hide_inactive_networks">Hide inactive networks</string> + <string name="add_new_chats_automatically">Add new chats automatically</string> + <string name="sort_alphabetically">Sort alphabetically</string> + <string name="minimum_activity">Minimum Activity</string> + <string name="identityname">identityName</string> + <string name="realname">realName</string> + <string name="ident">ident</string> + <string name="edit_nicks">Edit Nicks</string> + <string name="messages">Messages</string> + <string name="kickreason">kickReason</string> + <string name="partreason">partReason</string> + <string name="quitreason">quitReason</string> + <string name="away">Away</string> + <string name="awayreason">awayReason</string> + <string name="away_on_detach">Away on Detach</string> + <string name="awayondetachreason">awayOnDetachReason</string> + <string name="networkname">networkName</string> + <string name="identity">identity</string> + <string name="rejoinchannels">rejoinChannels</string> + <string name="edit_servers">Edit Servers</string> + <string name="custom_codecs">Custom Codecs</string> + <string name="codecforserver">codecForServer</string> + <string name="codecforencoding">codecForEncoding</string> + <string name="codecfordecoding">codecForDecoding</string> + <string name="auto_identify">Auto Identify</string> + <string name="autoidentifyservice">autoIdentifyService</string> + <string name="autoidentifypassword">autoIdentifyPassword</string> + <string name="sasl">SASL</string> + <string name="saslaccount">saslAccount</string> + <string name="saslpassword">saslPassword</string> + <string name="auto_reconnect">Auto Reconnect</string> + <string name="autoreconnectinterval">autoReconnectInterval</string> + <string name="unlimitedautoreconnectretries">unlimitedAutoReconnectRetries</string> + <string name="autoreconnectretries">autoReconnectRetries</string> + <string name="host">host</string> + <string name="port">port</string> + <string name="usessl">useSSL</string> + <string name="password">password</string> + <string name="proxy">Proxy</string> + <string name="proxyhost">proxyHost</string> + <string name="proxyport">proxyPort</string> + <string name="proxytype">proxyType</string> + <string name="proxyuser">proxyUser</string> + <string name="proxypassword">proxyPassword</string> + <string name="networks">Networks</string> + <string name="identities">Identities</string> + <string name="save">Save</string> + <string name="delete">Delete</string> + <string name="topic">Topic</string> + <string name="edit_topic">Edit Topic</string> + <string name="channel_modes">Channel Modes</string> + <string name="account_name">Account Name</string> + <string name="username">Username</string> + <string name="add_account">Add Account</string> </resources> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5d48bcba6..1881c90ce 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -76,6 +76,8 @@ <item name="colorFill">@color/colorFillLight</item> <item name="colorOffline">@color/colorOfflineLight</item> <item name="colorAway">@color/colorAwayLight</item> + + <item name="android:windowBackground">@color/colorPrimary</item> </style> <style name="RippleOverlay" parent="ThemeOverlay.AppCompat"> -- GitLab