From 8bdca321f7fd972e4f588ab02c7ba32027e920bd Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Fri, 12 Feb 2016 22:41:10 +0100 Subject: [PATCH] Fixed bugs and issues, implemented first working version --- .../syncables/types/impl/BacklogManager.java | 2 +- .../quasseldroid_ng/ui/chat/MainActivity.java | 71 ++++++++++++++++++- .../ui/chat/fragment/ChatFragment.java | 17 +++-- .../ui/chat/util/SlidingPanelHandler.java | 27 +++++++ .../quasseldroid_ng/ui/chat/util/Status.java | 2 +- app/src/main/res/values/themes.xml | 2 +- 6 files changed, 108 insertions(+), 13 deletions(-) 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 4fa6f80d7..74f910c85 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 @@ -163,7 +163,7 @@ public class BacklogManager extends ABacklogManager<BacklogManager> { openBuffer = bufferId; if (bufferId != -1) client.bufferSyncer().requestMarkBufferAsRead(bufferId); - provider.sendEvent(new BufferChangeEvent()); + provider.event.postSticky(new BufferChangeEvent()); } @Override 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 a6d46c706..7c745d831 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 @@ -22,6 +22,7 @@ package de.kuschku.quasseldroid_ng.ui.chat; import android.os.Bundle; +import android.support.annotation.IntRange; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; @@ -33,18 +34,28 @@ import android.widget.FrameLayout; import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.AccountHeaderBuilder; import com.mikepenz.materialdrawer.Drawer; +import com.mikepenz.materialdrawer.model.ProfileDrawerItem; + +import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; +import de.kuschku.libquassel.client.Client; import de.kuschku.libquassel.events.ConnectionChangeEvent; import de.kuschku.libquassel.events.GeneralErrorEvent; +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.service.ClientBackgroundThread; +import de.kuschku.quasseldroid_ng.ui.chat.drawer.BufferItem; +import de.kuschku.quasseldroid_ng.ui.chat.drawer.BufferViewConfigItem; +import de.kuschku.quasseldroid_ng.ui.chat.drawer.NetworkItem; import de.kuschku.quasseldroid_ng.ui.chat.fragment.ChatFragment; import de.kuschku.quasseldroid_ng.ui.chat.fragment.LoadingFragment; import de.kuschku.quasseldroid_ng.ui.chat.util.ActivityImplFactory; import de.kuschku.quasseldroid_ng.ui.chat.util.ILayoutHelper; import de.kuschku.quasseldroid_ng.ui.chat.util.Status; +import de.kuschku.quasseldroid_ng.ui.theme.AppTheme; import de.kuschku.quasseldroid_ng.util.BoundActivity; import de.kuschku.quasseldroid_ng.util.accounts.AccountManager; @@ -89,6 +100,8 @@ public class MainActivity extends BoundActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + new Settings(this).theme.set(AppTheme.QUASSEL_LIGHT.name()); + super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); @@ -96,6 +109,17 @@ public class MainActivity extends BoundActivity { layoutHelper = ActivityImplFactory.of(getResources().getBoolean(R.bool.isTablet), this); accountHeader = buildAccountHeader(); drawerLeft = layoutHelper.buildDrawer(savedInstanceState, accountHeader, toolbar); + drawerLeft.setOnDrawerItemClickListener((view, position, drawerItem) -> { + if (drawerItem instanceof NetworkItem) { + drawerLeft.getAdapter().toggleExpandable(position); + return true; + } else if (drawerItem instanceof BufferItem) { + int id = ((BufferItem) drawerItem).getBuffer().getInfo().id(); + context.client().backlogManager().open(id); + return false; + } + return true; + }); replaceFragment(new LoadingFragment()); @@ -150,18 +174,21 @@ public class MainActivity extends BoundActivity { .withCompactStyle(true) .withHeaderBackground(R.drawable.bg1) .withProfileImagesVisible(false) + .withOnAccountHeaderListener((view, profile, current) -> { + selectBufferViewConfig((int) profile.getIdentifier()); + return true; + }) .build(); } public void onEventMainThread(ConnectionChangeEvent event) { - if (event.status == ConnectionChangeEvent.Status.CONNECTED) { - replaceFragment(new ChatFragment()); - } + onConnectionChange(event.status); } public void onConnectionChange(ConnectionChangeEvent.Status status) { if (status == ConnectionChangeEvent.Status.CONNECTED) { replaceFragment(new ChatFragment()); + updateBufferViewConfigs(); } } @@ -169,6 +196,44 @@ public class MainActivity extends BoundActivity { } + private void selectBufferViewConfig(@IntRange(from = -1) int bufferViewConfigId) { + assertNotNull(drawerLeft); + assertNotNull(accountHeader); + Client client = context.client(); + assertNotNull(client); + + status.bufferViewConfigId = bufferViewConfigId; + accountHeader.setActiveProfile(bufferViewConfigId, false); + + if (bufferViewConfigId == -1) { + drawerLeft.removeAllItems(); + } else { + drawerLeft.removeAllItems(); + QBufferViewManager bufferViewManager = client.bufferViewManager(); + assertNotNull(bufferViewManager); + QBufferViewConfig viewConfig = bufferViewManager.bufferViewConfig(bufferViewConfigId); + assertNotNull(viewConfig); + + new BufferViewConfigItem(drawerLeft, viewConfig, context); + } + } + + private void updateBufferViewConfigs() { + assertNotNull(context.client().bufferViewManager()); + List<QBufferViewConfig> bufferViews = context.client().bufferViewManager().bufferViewConfigs(); + accountHeader.clear(); + for (QBufferViewConfig viewConfig : bufferViews) { + if (viewConfig != null) { + accountHeader.addProfiles( + new ProfileDrawerItem() + .withName(viewConfig.bufferViewName()) + .withIdentifier(viewConfig.bufferViewId()) + ); + } + } + accountHeader.setActiveProfile(status.bufferViewConfigId, true); + } + @Override protected void onConnectToThread(@Nullable ClientBackgroundThread thread) { super.onConnectToThread(thread); 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 3abb53736..da9fbbd63 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,36 +41,32 @@ import de.kuschku.libquassel.events.BufferChangeEvent; import de.kuschku.libquassel.message.Message; import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager; import de.kuschku.quasseldroid_ng.R; -import de.kuschku.quasseldroid_ng.util.BoundFragment; import de.kuschku.quasseldroid_ng.ui.chat.chatview.MessageAdapter; import de.kuschku.quasseldroid_ng.ui.chat.util.SlidingPanelHandler; +import de.kuschku.quasseldroid_ng.util.BoundFragment; import de.kuschku.util.observables.AutoScroller; import de.kuschku.util.observables.lists.ObservableComparableSortedList; import static de.kuschku.util.AndroidAssert.assertNotNull; public class ChatFragment extends BoundFragment { - private SlidingPanelHandler panelHandler; - private MessageAdapter messageAdapter; - /** * The list containing the messages to be displayed */ @Bind(R.id.messages) RecyclerView messages; - @Bind(R.id.swipe_view) SwipeRefreshLayout swipeView; - @Bind(R.id.sliding_layout) SlidingUpPanelLayout sliderMain; + private MessageAdapter messageAdapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_chat, container, false); - panelHandler = new SlidingPanelHandler(getActivity(), (SlidingUpPanelLayout) view, context); ButterKnife.bind(this, view); + new SlidingPanelHandler(getActivity(), sliderMain, context); assertNotNull(messages); @@ -81,6 +77,13 @@ public class ChatFragment extends BoundFragment { swipeView.setColorSchemeColors(context.themeUtil().res.colorPrimary); swipeView.setEnabled(false); + swipeView.setOnRefreshListener(() -> { + Client client = context.client(); + assertNotNull(client); + QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager(); + assertNotNull(backlogManager); + backlogManager.requestMoreBacklog(client.backlogManager().open(), 20); + }); return view; } 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 3f02e84a2..66f920c64 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 @@ -29,6 +29,7 @@ import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; +import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -42,6 +43,7 @@ import com.sothree.slidinguppanel.SlidingUpPanelLayout; import butterknife.Bind; import butterknife.ButterKnife; +import de.kuschku.libquassel.localtypes.buffers.Buffer; import de.kuschku.quasseldroid_ng.R; import de.kuschku.quasseldroid_ng.ui.editor.AdvancedEditor; import de.kuschku.quasseldroid_ng.ui.theme.AppContext; @@ -176,6 +178,31 @@ public class SlidingPanelHandler { } }); setChatlineExpanded(slidingLayout.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED); + + send.setOnClickListener(v -> sendInput()); + chatline.setOnKeyListener((v, keyCode, event) -> { + if (event.getAction() == KeyEvent.ACTION_DOWN && (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER)) { + sendInput(); + return true; + } else { + return false; + } + }); + } + + private void sendInput() { + if (context.client() == null) return; + + int bufferId = context.client().backlogManager().open(); + + if (bufferId >= 0) { + Buffer buffer = context.client().bufferManager().buffer(bufferId); + assertNotNull(buffer); + + String text = editor.toFormatString(); + context.client().sendInput(buffer.getInfo(), text); + chatline.setText(""); + } } private void setupHistoryFakeData() { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/Status.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/Status.java index 15eb3f9b3..a854aa321 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/Status.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/Status.java @@ -26,5 +26,5 @@ import de.kuschku.util.instancestateutil.Store; public class Status extends Storable { @Store - int bufferViewConfigId = -1; + public int bufferViewConfigId = -1; } diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index ee979f7c7..40c4bcd47 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -268,7 +268,7 @@ <item name="colorBackground">#002B36</item> <item name="colorBackgroundHighlight">#268bd2</item> - <item name="colorBackgroundSecondary">#073642</item> + <item name="colorBackgroundSecondary">#002B36</item> <item name="colorBackgroundCard">#073642</item> <item name="colorTintActivity">#88cc33</item> -- GitLab