From 9a7e8da28cc585f20a8339badebbe0f11533d242 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 24 Aug 2018 11:05:04 +0200 Subject: [PATCH] Fix #296 Signed-off-by: Mario Danic --- .../ConversationsListController.java | 96 +++++++++++++------ app/src/main/res/drawable/ic_logo_blue.xml | 37 +++++++ .../layout/controller_conversations_rv.xml | 87 +++++++++++++++++ app/src/main/res/values/strings.xml | 3 +- 4 files changed, 195 insertions(+), 28 deletions(-) create mode 100644 app/src/main/res/drawable/ic_logo_blue.xml create mode 100644 app/src/main/res/layout/controller_conversations_rv.xml diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index ef419942a..a0f262ab7 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -43,6 +43,8 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.inputmethod.EditorInfo; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; @@ -112,9 +114,15 @@ public class ConversationsListController extends BaseController implements Searc @BindView(R.id.recycler_view) RecyclerView recyclerView; - @BindView(R.id.swipe_refresh_layout) + @BindView(R.id.swipeRefreshLayoutView) SwipeRefreshLayout swipeRefreshLayout; + @BindView(R.id.progressBar) + ProgressBar progressBarView; + + @BindView(R.id.emptyLayout) + RelativeLayout emptyLayoutView; + @BindView(R.id.fast_scroller) FastScroller fastScroller; @@ -133,6 +141,8 @@ public class ConversationsListController extends BaseController implements Searc private String credentials; + private boolean adapterWasNull = true; + public ConversationsListController() { super(); setHasOptionsMenu(true); @@ -140,7 +150,7 @@ public class ConversationsListController extends BaseController implements Searc @Override protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) { - return inflater.inflate(R.layout.controller_generic_rv, container, false); + return inflater.inflate(R.layout.controller_conversations_rv, container, false); } @Override @@ -152,9 +162,10 @@ public class ConversationsListController extends BaseController implements Searc getActionBar().show(); } - if (adapter == null) { adapter = new FlexibleAdapter<>(callItems, getActivity(), false); + } else { + progressBarView.setVisibility(View.GONE); } adapter.addListener(this); @@ -279,37 +290,58 @@ public class ConversationsListController extends BaseController implements Searc .observeOn(AndroidSchedulers.mainThread()) .subscribe(roomsOverall -> { - if (roomsOverall != null) { - for (int i = 0; i < roomsOverall.getOcs().getData().size(); i++) { - if (shouldUseLastMessageLayout) { - callItems.add(new ConversationItem(roomsOverall.getOcs().getData().get(i), - currentUser)); - } else { - callItems.add(new CallItem(roomsOverall.getOcs().getData().get(i), currentUser)); - } + if (adapterWasNull) { + adapterWasNull = false; + progressBarView.setVisibility(View.GONE); + } + + if (roomsOverall.getOcs().getData().size() > 0) { + if (emptyLayoutView.getVisibility() != View.GONE) { + emptyLayoutView.setVisibility(View.GONE); } + if (swipeRefreshLayout.getVisibility() != View.VISIBLE) { + swipeRefreshLayout.setVisibility(View.VISIBLE); + } + } else { + if (emptyLayoutView.getVisibility() != View.VISIBLE) { + emptyLayoutView.setVisibility(View.VISIBLE); + } - if (currentUser.hasSpreedCapabilityWithName("last-room-activity")) { - Collections.sort(callItems, (o1, o2) -> { - Conversation conversation1 = ((ConversationItem) o1).getModel(); - Conversation conversation2 = ((ConversationItem) o2).getModel(); - return new CompareToBuilder() - .append(conversation2.isFavorite(), conversation1.isFavorite()) - .append(conversation2.getLastActivity(), conversation1.getLastActivity()) - .toComparison(); - }); + if (swipeRefreshLayout.getVisibility() != View.GONE) { + swipeRefreshLayout.setVisibility(View.GONE); + } + } + + for (int i = 0; i < roomsOverall.getOcs().getData().size(); i++) { + if (shouldUseLastMessageLayout) { + callItems.add(new ConversationItem(roomsOverall.getOcs().getData().get(i), + currentUser)); } else { - Collections.sort(callItems, (callItem, t1) -> - Long.compare(((CallItem) t1).getModel().getLastPing(), - ((CallItem) callItem).getModel().getLastPing())); + callItems.add(new CallItem(roomsOverall.getOcs().getData().get(i), currentUser)); } + } - adapter.updateDataSet(callItems, true); - if (searchItem != null) { - searchItem.setVisible(callItems.size() > 0); - } + if (currentUser.hasSpreedCapabilityWithName("last-room-activity")) { + Collections.sort(callItems, (o1, o2) -> { + Conversation conversation1 = ((ConversationItem) o1).getModel(); + Conversation conversation2 = ((ConversationItem) o2).getModel(); + return new CompareToBuilder() + .append(conversation2.isFavorite(), conversation1.isFavorite()) + .append(conversation2.getLastActivity(), conversation1.getLastActivity()) + .toComparison(); + }); + } else { + Collections.sort(callItems, (callItem, t1) -> + Long.compare(((CallItem) t1).getModel().getLastPing(), + ((CallItem) callItem).getModel().getLastPing())); + } + + adapter.updateDataSet(callItems, true); + + if (searchItem != null) { + searchItem.setVisible(callItems.size() > 0); } if (swipeRefreshLayout != null) { @@ -377,6 +409,16 @@ public class ConversationsListController extends BaseController implements Searc swipeRefreshLayout.setOnRefreshListener(() -> fetchData(false)); swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary); + emptyLayoutView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (getParentController() != null && getParentController().getView() != null) { + ((BottomNavigationView) getParentController().getView().findViewById(R.id.navigation)) + .setSelectedItemId(R.id.navigation_contacts); + } + } + }); + fastScroller.addOnScrollStateChangeListener(this); adapter.setFastScroller(fastScroller); fastScroller.setBubbleTextCreator(position -> { diff --git a/app/src/main/res/drawable/ic_logo_blue.xml b/app/src/main/res/drawable/ic_logo_blue.xml new file mode 100644 index 000000000..3455d8fac --- /dev/null +++ b/app/src/main/res/drawable/ic_logo_blue.xml @@ -0,0 +1,37 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/controller_conversations_rv.xml b/app/src/main/res/layout/controller_conversations_rv.xml new file mode 100644 index 000000000..7160c81ae --- /dev/null +++ b/app/src/main/res/layout/controller_conversations_rv.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4e77c745b..30119b44b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -203,8 +203,9 @@ Find Nextcloud on https://nextcloud.com Menu for public conversation %1$s Send message - + Tap to be the first to say %1$s! + You haven\'t talked to anyone yet!\n Tap to start a conversation. Hello