From 4a70e845f6d8242f07822944d23a73c5fd37f66e Mon Sep 17 00:00:00 2001
From: Julian Catoni <julian.catoni@tu-dresden.de>
Date: Wed, 7 Aug 2019 09:54:40 +0200
Subject: [PATCH] Fixed snackbar after manual changes

---
 .../openhab/habdroid/ui/WidgetAdapter.java    | 37 ++++++++++---------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java
index 8ca278ea..3375b776 100644
--- a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java
+++ b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java
@@ -10,7 +10,6 @@
 package org.openhab.habdroid.ui;
 
 import android.annotation.SuppressLint;
-import android.app.Activity;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.res.ColorStateList;
@@ -71,15 +70,11 @@ import org.openhab.habdroid.util.Util;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Random;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 
 /**
  * This class provides openHAB widgets adapter for list view.
@@ -1000,19 +995,18 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder
         }
     }
 
-    private final static Handler handler = new Handler();
-    private final static int DELAY_SNACKBAR = 3000;
+    private final static Handler mSnackbarHandler = new Handler();
+    private final static int DELAY_SNACKBAR = 2000;
 
-    private static void showSnackbar(View v, int delay, AlertDialog dialog) {
-        handler.removeCallbacksAndMessages(null);
+    private static void showSnackbar(View v, int delay) {
+        mSnackbarHandler.removeCallbacksAndMessages(null);
         final View currentView = v.getRootView().findFocus();
-        handler.postDelayed(() -> {
-            Snackbar snackbar = Snackbar.make(currentView, "Soll die manuelle Änderung als neuer Standardwert genutzt werden?", Snackbar.LENGTH_LONG);
-            snackbar.setAction("Setze als Standard", v1 -> {
+        mSnackbarHandler.postDelayed(() -> {
+            Snackbar snackbar = Snackbar.make(currentView, "Manuelle Änderung als neuen Standardwert setzen?", Snackbar.LENGTH_LONG);
+            snackbar.setAction("Setze als\nStandard", v1 -> {
                 Toast.makeText(currentView.getContext(), "Änderung wurde als neuer Standardwert gesetzt!", Toast.LENGTH_SHORT).show();
             });
             snackbar.show();
-            if (dialog != null) dialog.dismiss();
         }, delay);
 
     }
@@ -1024,7 +1018,7 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder
         private Item mBoundItem;
         private final LayoutInflater mInflater;
         private final Handler mHandler = new Handler(this);
-        private AlertDialog mAlertDialog;
+        private boolean mColorChanged;
 
         ColorViewHolder(LayoutInflater inflater, ViewGroup parent,
                 Connection conn, ColorMapper colorMapper) {
@@ -1053,7 +1047,7 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder
                 if (v.getTag() instanceof String) {
                     final String cmd = (String) v.getTag();
                     Util.sendItemCommand(mConnection.getAsyncHttpClient(), mBoundItem, cmd);
-                    WidgetAdapter.showSnackbar(v, DELAY_SNACKBAR, mAlertDialog);
+                    WidgetAdapter.showSnackbar(v, DELAY_SNACKBAR);
                 } else {
                     showColorPickerDialog();
                 }
@@ -1069,7 +1063,6 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder
             final String newColorValue = String.format(Locale.US, "%f,%f,%f",
                     hsv[0], hsv[1] * 100, hsv[2] * 100);
             Util.sendItemCommand(mConnection.getAsyncHttpClient(), mBoundItem, newColorValue);
-            WidgetAdapter.showSnackbar(itemView, DELAY_SNACKBAR, mAlertDialog);
             return true;
         }
 
@@ -1090,13 +1083,23 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder
             colorPicker.setOnColorChangedListener(this);
             colorPicker.setShowOldCenterColor(false);
 
+            colorPicker.setOnColorSelectedListener(color -> mColorChanged = true);
+            saturationBar.setOnSaturationChangedListener(saturation -> mColorChanged = true);
+            valueBar.setOnValueChangedListener(value -> mColorChanged = true);
+
             float[] initialColor = mBoundItem.stateAsHsv();
             if (initialColor != null) {
                 colorPicker.setColor(Color.HSVToColor(initialColor));
             }
 
-            mAlertDialog = new AlertDialog.Builder(contentView.getContext())
+            new AlertDialog.Builder(contentView.getContext())
                     .setView(contentView)
+                    .setOnDismissListener(dialog -> {
+                        if (mColorChanged) {
+                            WidgetAdapter.showSnackbar(itemView, 0);
+                            mColorChanged = false;
+                        }
+                    })
                     .setNegativeButton(R.string.close, null).show();
         }
     }
-- 
GitLab