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