From 88c2d2ff1443ba24fc473c8f26b3c920aa17c46a Mon Sep 17 00:00:00 2001
From: maniac103 <dannybaumann@web.de>
Date: Mon, 10 Sep 2018 21:25:47 +0200
Subject: [PATCH] Don't scroll to selected list item if it didn't change.
 (#989)

Fixes #976

Signed-off-by: Danny Baumann <dannybaumann@web.de>
---
 .../org/openhab/habdroid/ui/OpenHABWidgetAdapter.java  |  5 +++--
 .../openhab/habdroid/ui/OpenHABWidgetListFragment.java | 10 ++++++----
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/OpenHABWidgetAdapter.java b/mobile/src/main/java/org/openhab/habdroid/ui/OpenHABWidgetAdapter.java
index fc104e68..85b0f26a 100644
--- a/mobile/src/main/java/org/openhab/habdroid/ui/OpenHABWidgetAdapter.java
+++ b/mobile/src/main/java/org/openhab/habdroid/ui/OpenHABWidgetAdapter.java
@@ -313,9 +313,9 @@ public class OpenHABWidgetAdapter extends RecyclerView.Adapter<OpenHABWidgetAdap
         }
     }
 
-    public void setSelectedPosition(int position) {
+    public boolean setSelectedPosition(int position) {
         if (mSelectedPosition == position) {
-            return;
+            return false;
         }
         if (mSelectedPosition >= 0) {
             notifyItemChanged(mSelectedPosition);
@@ -324,6 +324,7 @@ public class OpenHABWidgetAdapter extends RecyclerView.Adapter<OpenHABWidgetAdap
         if (position >= 0) {
             notifyItemChanged(position);
         }
+        return true;
     }
 
     @Override
diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/OpenHABWidgetListFragment.java b/mobile/src/main/java/org/openhab/habdroid/ui/OpenHABWidgetListFragment.java
index e2ca0e5d..6b7128c0 100644
--- a/mobile/src/main/java/org/openhab/habdroid/ui/OpenHABWidgetListFragment.java
+++ b/mobile/src/main/java/org/openhab/habdroid/ui/OpenHABWidgetListFragment.java
@@ -273,17 +273,19 @@ public class OpenHABWidgetListFragment extends Fragment
         if (openHABWidgetAdapter == null) {
             return;
         }
-        openHABWidgetAdapter.setSelectedPosition(-1);
         if (highlightedPageLink != null) {
             for (int i = 0; i < openHABWidgetAdapter.getItemCount(); i++) {
                 OpenHABLinkedPage page = openHABWidgetAdapter.getItem(i).linkedPage();
                 if (page != null && highlightedPageLink.equals(page.link())) {
-                    openHABWidgetAdapter.setSelectedPosition(i);
-                    mLayoutManager.scrollToPosition(i);
-                    break;
+                    if (openHABWidgetAdapter.setSelectedPosition(i)) {
+                        mLayoutManager.scrollToPosition(i);
+                    }
+                    return;
                 }
             }
         }
+        // We didn't find a matching page link, so unselect everything
+        openHABWidgetAdapter.setSelectedPosition(-1);
     }
 
     public void update(String pageTitle, List<OpenHABWidget> widgets) {
-- 
GitLab