diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogmanagers/BacklogFilter.java b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogmanagers/BacklogFilter.java index 8890efa051ec1f9541488e20b5f8861444814e66..370099559148321b941ca112eba5da04bb7190c3 100644 --- a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogmanagers/BacklogFilter.java +++ b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogmanagers/BacklogFilter.java @@ -81,7 +81,7 @@ public class BacklogFilter implements UICallback { private void updateRemove() { for (Message message : unfiltered) { - if (filterItem(message)) { + if (filterItem(message) && filtered.contains(message)) { String simpleName = getClass().getSimpleName(); Log.e(simpleName, "Filtered: "+message); filtered.remove(message); @@ -91,7 +91,7 @@ public class BacklogFilter implements UICallback { private void updateAdd() { for (Message message : unfiltered) { - if (!filterItem(message)) { + if (!filterItem(message) && !filtered.contains(message)) { String simpleName = getClass().getSimpleName(); Log.e(simpleName, "Unfiltered: "+message); filtered.add(message); diff --git a/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java b/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java index b8cea4b7b5431d912e396698c69484b9d458f046..ed1322d3fa4879a780ee57e02b3cf1b72925e4bf 100644 --- a/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java +++ b/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java @@ -119,8 +119,6 @@ public class DatastreamPeer implements RemotePeer { } public void onEventBackgroundThread(@NonNull SyncFunction func) { - assertNotNull(func); - assertNotNull(connection.getOutputExecutor()); connection.getOutputExecutor().submit(new OutputRunnable<>( VariantVariantListSerializer.<SyncFunction>get(), @@ -129,9 +127,6 @@ public class DatastreamPeer implements RemotePeer { } public void onEventBackgroundThread(@NonNull RpcCallFunction func) { - assertNotNull(func); - - Log.e("TEST", String.valueOf(func)); assertNotNull(connection.getOutputExecutor()); connection.getOutputExecutor().submit(new OutputRunnable<>( VariantVariantListSerializer.<RpcCallFunction>get(), @@ -140,8 +135,6 @@ public class DatastreamPeer implements RemotePeer { } public void onEventBackgroundThread(@NonNull InitRequestFunction func) { - assertNotNull(func); - assertNotNull(connection.getOutputExecutor()); connection.getOutputExecutor().submit(new OutputRunnable<>( VariantVariantListSerializer.<InitRequestFunction>get(), @@ -150,8 +143,6 @@ public class DatastreamPeer implements RemotePeer { } public void onEventBackgroundThread(@NonNull InitDataFunction func) { - assertNotNull(func); - assertNotNull(connection.getOutputExecutor()); connection.getOutputExecutor().submit(new OutputRunnable<>( VariantVariantListSerializer.<InitDataFunction>get(), @@ -160,8 +151,6 @@ public class DatastreamPeer implements RemotePeer { } public void onEventBackgroundThread(@NonNull Heartbeat func) { - assertNotNull(func); - assertNotNull(connection.getOutputExecutor()); connection.getOutputExecutor().submit(new OutputRunnable<>( VariantVariantListSerializer.<InitDataFunction>get(), @@ -170,8 +159,6 @@ public class DatastreamPeer implements RemotePeer { } public void onEventBackgroundThread(@NonNull HeartbeatReply func) { - assertNotNull(func); - assertNotNull(connection.getOutputExecutor()); connection.getOutputExecutor().submit(new OutputRunnable<>( VariantVariantListSerializer.<InitDataFunction>get(), @@ -180,8 +167,6 @@ public class DatastreamPeer implements RemotePeer { } public void onEventBackgroundThread(@NonNull HandshakeFunction func) { - assertNotNull(func); - assertNotNull(connection.getOutputExecutor()); Map<String, QVariant> variantMap = MessageTypeRegistry.toVariantMap(func.data).data; assertNotNull(variantMap); diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java index f7fb9ed33c172fbf470b21d58119a65ec4c10877..51072a4efd5f0bb26de4682eb578824ebdc6e2e8 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java @@ -20,8 +20,12 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; +import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import com.google.common.base.Splitter; import com.mikepenz.fastadapter.FastAdapter; @@ -33,6 +37,7 @@ import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.ProfileDrawerItem; +import com.mikepenz.materialdrawer.model.SecondaryDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IProfile; import com.sothree.slidinguppanel.SlidingUpPanelLayout; @@ -92,6 +97,7 @@ public class ChatActivity extends AppCompatActivity { SwipeRefreshLayout swipeView; @Bind(R.id.messages) RecyclerView messages; + private boolean tr = true; @PreferenceWrapper(BuildConfig.APPLICATION_ID) @@ -130,20 +136,19 @@ public class ChatActivity extends AppCompatActivity { private void disconnect() { if (binder != null) binder.stopBackgroundThread(); - if (backgroundThread != null) backgroundThread.provider.event.unregister(this); - backgroundThread = null; + if (context.getProvider() != null) context.getProvider().event.unregister(this); + context.setProvider(null); + context.setClient(null); } } private QuasselService.LocalBinder binder; - private ClientBackgroundThread backgroundThread; private MessageAdapter messageAdapter; private AccountHeader accountHeader; private Drawer drawerLeft; private BufferViewConfigWrapper wrapper; - private CharSequence subtitle; private ServiceConnection serviceConnection = new ServiceConnection() { @UiThread @@ -166,7 +171,7 @@ public class ChatActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { context.setSettings(new WrappedSettings(this)); - AppTheme theme = AppTheme.QUASSEL; + AppTheme theme = AppTheme.themeFromString(context.getSettings().theme.get()); setTheme(theme.themeId); context.setThemeUtil(new ThemeUtil(this, theme)); @@ -199,11 +204,18 @@ public class ChatActivity extends AppCompatActivity { .withTranslucentStatusBar(true) .build(); drawerLeft.addStickyFooterItem(new PrimaryDrawerItem().withIcon(R.drawable.ic_server_light).withName("(Re-)Connect").withIdentifier(-1)); + drawerLeft.addStickyFooterItem(new SecondaryDrawerItem().withName("Settings").withIdentifier(-2)); drawerLeft.setOnDrawerItemClickListener((view, position, drawerItem) -> { long identifier = drawerItem.getIdentifier(); + Log.e("DEBUG", "IDENT: "+identifier); + Log.e("DEBUG", "IDENT: "+(identifier==-1)); + Log.e("DEBUG", "IDENT: "+(identifier==-2)); if (identifier == -1) { showConnectDialog(); return false; + } else if (identifier == -2) { + showThemeDialog(); + return false; } else { if (((IExpandable) drawerItem).getSubItems() != null) { drawerLeft.getAdapter().toggleExpandable(position); @@ -224,6 +236,7 @@ public class ChatActivity extends AppCompatActivity { msgHistory.setLayoutManager(new LinearLayoutManager(this)); msgHistory.setItemAnimator(new DefaultItemAnimator()); + swipeView.setColorSchemeColors(context.getThemeUtil().colors.colorPrimary); swipeView.setOnRefreshListener(() -> { assertNotNull(context.getClient()); context.getClient().getBacklogManager().requestMoreBacklog(status.bufferId, 20); @@ -232,6 +245,29 @@ public class ChatActivity extends AppCompatActivity { send.setOnClickListener(view -> sendInput()); } + public void showThemeDialog() { + String[] strings = new String[AppTheme.values().length]; + int startIndex = -1; + for (int i = 0; i < strings.length; i++) { + AppTheme theme = AppTheme.values()[i]; + strings[i] = theme.name(); + if (theme.name().equals(context.getSettings().theme.get())) startIndex = i; + } + + new MaterialDialog.Builder(this) + .items(strings) + .positiveText("Select Theme") + .neutralText("Cancel") + .itemsCallbackSingleChoice(startIndex, (dialog, itemView, which, text) -> { + context.getSettings().theme.set(strings[dialog.getSelectedIndex()]); + recreate(); + return true; + }) + .buttonRippleColor(context.getThemeUtil().colors.colorAccent) + .build() + .show(); + } + @Override protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { assertNotNull(savedInstanceState); @@ -253,10 +289,12 @@ public class ChatActivity extends AppCompatActivity { serviceInterface.disconnect(); - this.backgroundThread = backgroundThread; backgroundThread.provider.event.register(this); + context.setClient(backgroundThread.handler.client); + context.setProvider(backgroundThread.provider); selectBuffer(status.bufferId); selectBufferViewConfig(status.bufferViewConfigId); + updateSubTitle(); } private void selectBufferViewConfig(@IntRange(from = -1) int bufferViewConfigId) { @@ -301,9 +339,8 @@ public class ChatActivity extends AppCompatActivity { private void onConnectionEstablished() { assertNotNull(binder); - this.backgroundThread = binder.getBackgroundThread(); - assertNotNull(this.backgroundThread); - context.setClient(this.backgroundThread.handler.client); + assertNotNull(binder.getBackgroundThread()); + context.setClient(binder.getBackgroundThread().handler.client); assertNotNull(context.getClient()); } @@ -314,10 +351,11 @@ public class ChatActivity extends AppCompatActivity { CharSequence text = chatline.getText(); context.getClient().sendInput(buffer.getInfo(), text.toString()); + chatline.setText(""); } public void onEventMainThread(ConnectionChangeEvent event) { - setSubtitle(event.status.name()); + updateSubTitle(); switch (event.status) { case HANDSHAKE: @@ -425,16 +463,11 @@ public class ChatActivity extends AppCompatActivity { updateSubTitle(); } - protected void setSubtitle(CharSequence subtitle) { - this.subtitle = subtitle; - updateSubTitle(); - } - private void updateSubTitle() { if (context.getClient() != null) { - toolbar.setSubtitle(SpanFormatter.format("Lag: %.2f, %s", context.getClient().getLag() / 1000.0F, subtitle)); + toolbar.setSubtitle(SpanFormatter.format("Lag: %.2f, %s", context.getClient().getLag() / 1000.0F, context.getClient().getConnectionStatus())); } else { - toolbar.setSubtitle(subtitle); + toolbar.setSubtitle(""); } } }