diff --git a/app/src/main/java/com/idlegandalf/ledd/ColorActivity.java b/app/src/main/java/com/idlegandalf/ledd/ColorActivity.java index 6d22504..5554381 100644 --- a/app/src/main/java/com/idlegandalf/ledd/ColorActivity.java +++ b/app/src/main/java/com/idlegandalf/ledd/ColorActivity.java @@ -27,6 +27,7 @@ import android.graphics.Color; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; import android.support.v4.widget.DrawerLayout; @@ -72,6 +73,11 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O private List ledStripes; private LedStripe mCurrentStripe; private LedDHelper mCurrentHelper; + private boolean fromOnCreate = true; + private double rate = 5.0; + private double per = 100.0; + private double allowance = rate; + private long last_check = System.currentTimeMillis(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -83,8 +89,7 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo == null || !networkInfo.isConnected() || networkInfo.getType() != ConnectivityManager.TYPE_WIFI) { - Snackbar.make(mDrawerLayout, "We currently only support WLAN networks, please connect to one", Snackbar.LENGTH_INDEFINITE).setAction - ("RETRY", new View.OnClickListener() { + Snackbar.make(mDrawerLayout, R.string.snackbar_no_wlan, Snackbar.LENGTH_INDEFINITE).setAction("RETRY", new View.OnClickListener() { @Override public void onClick(View v) { refreshStripes(); @@ -98,7 +103,7 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O colorPicker.setOnColorChangedListener(new ColorPicker.OnColorChangedListener() { @Override public void onColorChanged(int i) { - if (mCurrentStripe != null && mCurrentHelper != null) { + if (mCurrentStripe != null && mCurrentHelper != null && isRateAcceptable()) { float[] hsv = new float[3]; Color.colorToHSV(i, hsv); mCurrentStripe.setColor(new HSV(hsv[0], hsv[1], hsv[2])); @@ -190,6 +195,8 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O super.onPause(); ColorApplication.getInstance().teardown(); unregisterReceiver(daemonsListener); + + if (mCurrentStripe != null) PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("lastStripe", mCurrentStripe.getId()).commit(); } @Override @@ -201,9 +208,13 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O @Override protected void onResume() { super.onResume(); - ColorApplication.getInstance().onResume(); - registerReceiver(daemonsListener, new IntentFilter(ColorApplication.INTENT_ACTION_REFRESH)); - refreshStripes(); + if (!fromOnCreate) { + ColorApplication.getInstance().onResume(); + registerReceiver(daemonsListener, new IntentFilter(ColorApplication.INTENT_ACTION_REFRESH)); + refreshStripes(); + } else { + fromOnCreate = false; + } } @Override @@ -220,36 +231,7 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O for (LedStripe stripe : ledStripes) { if (stripe.getName().equals(menuItem.getTitle())) { - mCurrentStripe = stripe; - mCurrentHelper = ColorApplication.getInstance().getHelperForDaemon(stripe.getLedDDaemon()); - - mDrawerLayout.closeDrawer(Gravity.LEFT); - toolbar.setTitle(stripe.getName()); - mCurrentHelper.getColor(mCurrentStripe, new RecieveColorCallback() { - @Override - public void onColorRecieved(LedStripe stripe) { - final HSV cColor = stripe.getColor(); - - runOnUiThread(new Runnable() { - @Override - public void run() { - colorPicker.setColor(Color.HSVToColor(new float[]{(float) cColor.getHue(), (float) cColor.getSaturation(), (float) - cColor.getValue()})); - } - }); - } - - @Override - public void onRecievFailed(String msg) { - - } - - @Override - public void onConnectionFailed(String message) { - - } - }); - + selectStripe(stripe); return true; } } @@ -279,26 +261,37 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O SubMenu nDaemonMenu = nvMenu.addSubMenu(Menu.NONE, Menu.NONE, finalI, dDaemon.toString()); nDaemonMenu.setGroupCheckable(stripeGroup, true, true); - ledStripes = stripes; - Snackbar.make(findViewById(android.R.id.content), "LED stripes reloaded", Snackbar.LENGTH_LONG).show(); + int lastStripeId = -1; + if (PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).contains("lastStripe")) { + lastStripeId = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("lastStripe", -1); + } + ledStripes = stripes; for (LedStripe stripe : ledStripes) { MenuItem sItem = nDaemonMenu.add(stripeGroup, View.generateViewId(), stripe.getId(), stripe.getName()); sItem.setIcon(R.drawable.ic_wb_iridescent_black_48dp); + + if (lastStripeId != -1 && stripe.getId() == lastStripeId) { + selectStripe(stripe); + } } + + Snackbar.make(findViewById(android.R.id.content), R.string.snackbar_stripes_reloaded, Snackbar.LENGTH_LONG).show(); } }); } @Override public void onGetFailed(String message) { - Snackbar.make(findViewById(android.R.id.content), "Coudn't get stripes from daemon: " + message, Snackbar.LENGTH_LONG).show(); + Snackbar.make(findViewById(android.R.id.content), getString(R.string.snackbar_no_connection_stripes) + message, Snackbar + .LENGTH_LONG).show(); } @Override public void onConnectionFailed(String message) { - Snackbar.make(findViewById(android.R.id.content), "Coudn't connect to daemon: " + message, Snackbar.LENGTH_LONG).show(); + Snackbar.make(findViewById(android.R.id.content), getString(R.string.snackbar_connection_failed) + message, Snackbar + .LENGTH_LONG).show(); } }); @@ -327,6 +320,55 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O }); } + private void selectStripe(LedStripe stripe) { + mCurrentStripe = stripe; + mCurrentHelper = ColorApplication.getInstance().getHelperForDaemon(stripe.getLedDDaemon()); + + mDrawerLayout.closeDrawer(Gravity.LEFT); + toolbar.setTitle(stripe.getName()); + mCurrentHelper.getColor(mCurrentStripe, new RecieveColorCallback() { + @Override + public void onColorRecieved(LedStripe stripe) { + final HSV cColor = stripe.getColor(); + + runOnUiThread(new Runnable() { + @Override + public void run() { + colorPicker.setColor(Color.HSVToColor(new float[]{(float) cColor.getHue(), (float) cColor.getSaturation(), (float) cColor + .getValue()})); + } + }); + } + + @Override + public void onRecievFailed(String msg) { + + } + + @Override + public void onConnectionFailed(String message) { + + } + }); + } + + private boolean isRateAcceptable() { + long current = System.currentTimeMillis(); + long time_passed = current - last_check; + last_check = current; + allowance += time_passed * (rate / per); + if (allowance > rate) { + allowance = rate; // throttle + } + + if (allowance < 1.0) { + return false; + } else { + allowance -= 1.0; + return true; + } + } + protected class refreshDaemonsListener extends BroadcastReceiver { @Override diff --git a/app/src/main/java/com/idlegandalf/ledd/ColorApplication.java b/app/src/main/java/com/idlegandalf/ledd/ColorApplication.java index ab05838..f9cf234 100644 --- a/app/src/main/java/com/idlegandalf/ledd/ColorApplication.java +++ b/app/src/main/java/com/idlegandalf/ledd/ColorApplication.java @@ -94,6 +94,8 @@ public class ColorApplication extends Application { TypeToken>() { }.getType()); + Log.i(ColorApplication.TAG, "Loaded " + ledDDaemons.size() + " Daemons from preferences"); + for (final LedDDaemon ledDDaemon : ledDDaemons) { final LedDHelper helper = new LedDHelper(ledDDaemon, getApplicationContext()); @@ -118,7 +120,5 @@ public class ColorApplication extends Application { }); } } - - Log.i(ColorApplication.TAG, "Loaded " + ledDHelpers.size() + " Daemons from preferences"); } } diff --git a/app/src/main/java/com/idlegandalf/ledd/components/LedStripe.java b/app/src/main/java/com/idlegandalf/ledd/components/LedStripe.java index 3ca182f..77e1c67 100644 --- a/app/src/main/java/com/idlegandalf/ledd/components/LedStripe.java +++ b/app/src/main/java/com/idlegandalf/ledd/components/LedStripe.java @@ -55,4 +55,9 @@ public class LedStripe { this.name = name; this.RGB = RGB; } + + @Override + public String toString() { + return String.format("%s<-%s@%s (r=%d;g=%d;b=%d)", name, controller.getAddress(), ledDDaemon, channelRed, channelGreen, channelBlue); + } } \ No newline at end of file diff --git a/app/src/main/java/com/idlegandalf/ledd/fragments/AddStripeDialog.java b/app/src/main/java/com/idlegandalf/ledd/fragments/AddStripeDialog.java index e1654a6..deb3c8b 100644 --- a/app/src/main/java/com/idlegandalf/ledd/fragments/AddStripeDialog.java +++ b/app/src/main/java/com/idlegandalf/ledd/fragments/AddStripeDialog.java @@ -356,14 +356,20 @@ public class AddStripeDialog extends DialogFragment implements DialogInterface.O public void onResume() { super.onResume(); ColorApplication.getInstance().onResume(); - if (daemonArrayAdapter != null) { - daemonArrayAdapter.clear(); - daemonArrayAdapter.addAll(ColorApplication.getInstance().getDaemons()); - } - if (controllerArrayAdapter != null && mDaemonSelected) { - refreshController((LedDDaemon) daemonSpinner.getSelectedItem()); - } + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (daemonArrayAdapter != null) { + daemonArrayAdapter.clear(); + daemonArrayAdapter.addAll(ColorApplication.getInstance().getDaemons()); + } + + if (controllerArrayAdapter != null && mDaemonSelected) { + refreshController((LedDDaemon) daemonSpinner.getSelectedItem()); + } + } + }); } private void testChannel(EditText text, ImageButton button) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a138fff..9b27216 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -36,5 +36,9 @@ B Add Stripe Settings + We currently only support WLAN, please connect to one + LED stripes reloaded + "Coudn't get stripes from daemon: " + "Coudn't connect to daemon: "