diff --git a/app/src/main/java/com/idlegandalf/ledd/ColorActivity.java b/app/src/main/java/com/idlegandalf/ledd/ColorActivity.java index 002bf7b..3998669 100644 --- a/app/src/main/java/com/idlegandalf/ledd/ColorActivity.java +++ b/app/src/main/java/com/idlegandalf/ledd/ColorActivity.java @@ -41,6 +41,7 @@ import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.Switch; +import android.widget.TextView; import com.idlegandalf.ledd.callbacks.RecieveColorCallback; import com.idlegandalf.ledd.callbacks.StripesCallback; @@ -49,6 +50,7 @@ import com.idlegandalf.ledd.components.LedDDaemon; import com.idlegandalf.ledd.components.LedStripe; import com.idlegandalf.ledd.fragments.AddStripeDialog; import com.idlegandalf.ledd.helper.LedDHelper; +import com.idlegandalf.ledd.utils.RateLimiter; import com.larswerkman.holocolorpicker.ColorPicker; import com.larswerkman.holocolorpicker.SaturationBar; import com.larswerkman.holocolorpicker.ValueBar; @@ -58,6 +60,7 @@ import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnCheckedChanged; +import hugo.weaving.DebugLog; public class ColorActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { @@ -75,16 +78,18 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O ValueBar valueBar; @Bind(R.id.switch_onoff) Switch aSwitch; + TextView mStripeName; + TextView mStripeMapping; + TextView mStripeType; + TextView mStripeHex; private ActionBarDrawerToggle mDrawerToggle; private refreshDaemonsListener daemonsListener; private List ledStripes; private LedStripe mCurrentStripe; private boolean fromOnCreate = true; private boolean autoColorSet = false; - private double rate = 5.0; - private double per = 100.0; - private double allowance = rate; - private long last_check = System.currentTimeMillis(); + private RateLimiter limiter; + private View headerLayout; @Override protected void onCreate(Bundle savedInstanceState) { @@ -92,6 +97,17 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O setContentView(R.layout.activity_color); ButterKnife.bind(this); + // workaround for issue #190226 in design libary + headerLayout = navigationView.inflateHeaderView(R.layout.navigation_header); + mStripeName = ButterKnife.findById(headerLayout, R.id.nvh_name); + System.out.println("name: " + mStripeName.getText().toString()); + mStripeType = ButterKnife.findById(headerLayout, R.id.nvh_type); + System.out.println("type: " + mStripeType.getText().toString()); + mStripeHex = ButterKnife.findById(headerLayout, R.id.nvh_hex_color); + System.out.println("hex: " + mStripeHex.getText().toString()); + mStripeMapping = ButterKnife.findById(headerLayout, R.id.nvh_mapping); + System.out.println("mapping: " + mStripeMapping.getText().toString()); + // check for connectivity ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); @@ -104,6 +120,8 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O }).show(); } + limiter = new RateLimiter(5.0, 100.0); + colorPicker.addSaturationBar(saturationBar); colorPicker.addValueBar(valueBar); colorPicker.setShowOldCenterColor(false); @@ -111,8 +129,9 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O colorPicker.setOnColorChangedListener(new ColorPicker.OnColorChangedListener() { @Override public void onColorChanged(int i) { - if (mCurrentStripe != null && isRateAcceptable() && aSwitch.isChecked() && !autoColorSet) { + if (mCurrentStripe != null && limiter.check() && aSwitch.isChecked() && !autoColorSet) { mCurrentStripe.setColor(i); + mStripeHex.setText(String.format("#%06X", (0xFFFFFF & i))); } } }); @@ -186,8 +205,12 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O if (mCurrentStripe != null) { if (!checked) { HSV nHSV = mCurrentStripe.getColor(); - nHSV.setValue(0.0); - mCurrentStripe.setColor(nHSV); + if (nHSV != null) { + nHSV.setValue(0.0); + mCurrentStripe.setColor(nHSV); + } else { + mCurrentStripe.setColor(Color.BLACK); + } //colorPicker.setColor(Color.HSVToColor(new float[]{(float) nHSV.getHue(), (float) nHSV.getSaturation(), (float) nHSV.getValue()})); } else { mCurrentStripe.setColor(colorPicker.getColor()); @@ -339,8 +362,13 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O }); } + @DebugLog private void selectStripe(LedStripe stripe) { mCurrentStripe = stripe; + mStripeName.setText(stripe.getName()); + System.out.println("name: " + mStripeName.getText().toString()); + mStripeMapping.setText(String.format("R: %d - G: %d - B: %d", stripe.getChannelRed(), stripe.getChannelGreen(), stripe.getChannelBlue())); + headerLayout.invalidate(); mDrawerLayout.closeDrawer(Gravity.LEFT); toolbar.setTitle(stripe.getName()); @@ -368,33 +396,16 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O @Override public void onRecievFailed(int code, String msg) { - + autoColorSet = false; } @Override public void onConnectionFailed(String message) { - + autoColorSet = false; } }); } - 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/components/LedStripe.java b/app/src/main/java/com/idlegandalf/ledd/components/LedStripe.java index bab0666..48590c0 100644 --- a/app/src/main/java/com/idlegandalf/ledd/components/LedStripe.java +++ b/app/src/main/java/com/idlegandalf/ledd/components/LedStripe.java @@ -66,7 +66,7 @@ public class LedStripe { @Override public String toString() { - return String.format("%s<-%s@%s (r=%d;g=%d;b=%d)", name, controller.getAddress(), ledDDaemon, channelRed, channelGreen, channelBlue); + return String.format("%s->%s->%s (%d|%d|%d)", ledDDaemon, controller.getAddress(), name, channelRed, channelGreen, channelBlue); } @DebugLog diff --git a/app/src/main/java/com/idlegandalf/ledd/components/Sendable.java b/app/src/main/java/com/idlegandalf/ledd/components/Sendable.java index 27c30fe..97658e9 100644 --- a/app/src/main/java/com/idlegandalf/ledd/components/Sendable.java +++ b/app/src/main/java/com/idlegandalf/ledd/components/Sendable.java @@ -48,6 +48,8 @@ public class Sendable { } public void onConnectionFailed(String message) { - onAnswer.onConnectionFailed(message); + if (onAnswer != null) { + onAnswer.onConnectionFailed(message); + } } } diff --git a/app/src/main/java/com/idlegandalf/ledd/fragments/AddDaemonDialog.java b/app/src/main/java/com/idlegandalf/ledd/fragments/AddDaemonDialog.java index b8752f3..77bd07a 100644 --- a/app/src/main/java/com/idlegandalf/ledd/fragments/AddDaemonDialog.java +++ b/app/src/main/java/com/idlegandalf/ledd/fragments/AddDaemonDialog.java @@ -301,7 +301,8 @@ public class AddDaemonDialog extends DialogFragment implements DialogInterface.O getActivity().runOnUiThread(new Runnable() { @Override public void run() { - Snackbar.make(((ViewGroup) getActivity().getWindow().getDecorView().findViewById(android.R.id.content)).getChildAt(0), getActivity().getString(R.string.snackbar_added_daemon_version) + version, Snackbar.LENGTH_LONG).show(); + Snackbar.make(((ViewGroup) getActivity().getWindow().getDecorView().findViewById(android.R.id.content)).getChildAt(0), + getActivity().getString(R.string.snackbar_added_daemon_version, version), Snackbar.LENGTH_LONG).show(); } }); diff --git a/app/src/main/java/com/idlegandalf/ledd/helper/LedDHelper.java b/app/src/main/java/com/idlegandalf/ledd/helper/LedDHelper.java index de589a0..1ea74c3 100644 --- a/app/src/main/java/com/idlegandalf/ledd/helper/LedDHelper.java +++ b/app/src/main/java/com/idlegandalf/ledd/helper/LedDHelper.java @@ -231,10 +231,16 @@ public class LedDHelper { try { JSONObject json = new JSONObject(response.getResult().toString()); JSONArray hsv = json.getJSONArray("color"); - ledStripe.setColor(new HSV(hsv.getDouble(0), hsv.getDouble(1), hsv.getDouble(2))); - callback.onColorRecieved(ledStripe); + if (hsv.length() == 3) { + System.out.println(hsv); + ledStripe.setColor(new HSV(hsv.getDouble(0), hsv.getDouble(1), hsv.getDouble(2))); + callback.onColorRecieved(ledStripe); + } else { + callback.onRecievFailed(-1, "HSV was empty"); + } } catch (JSONException e) { e.printStackTrace(); + callback.onRecievFailed(-1, "Unhandeled JSON Exception"); } } else { @SuppressWarnings("ThrowableResultOfMethodCallIgnored") JSONRPC2Error error = response.getError(); diff --git a/app/src/main/java/com/idlegandalf/ledd/services/ColorService.java b/app/src/main/java/com/idlegandalf/ledd/services/ColorService.java index b32c143..2f2ef0d 100644 --- a/app/src/main/java/com/idlegandalf/ledd/services/ColorService.java +++ b/app/src/main/java/com/idlegandalf/ledd/services/ColorService.java @@ -86,7 +86,6 @@ public class ColorService extends Service { try { reqIn = JSONRPC2Response.parse(new String(bb.getAllByteArray())); - } catch (JSONRPC2ParseException e) { e.printStackTrace(); } diff --git a/app/src/main/java/com/idlegandalf/ledd/utils/RateLimiter.java b/app/src/main/java/com/idlegandalf/ledd/utils/RateLimiter.java new file mode 100644 index 0000000..d951f34 --- /dev/null +++ b/app/src/main/java/com/idlegandalf/ledd/utils/RateLimiter.java @@ -0,0 +1,51 @@ +/* + * LEDD Project + * Copyright (C) 2015 LEDD Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.idlegandalf.ledd.utils; + + +public class RateLimiter { + private double rate; + private double per; + private double allowance; + private long last_check; + + public RateLimiter(double rate, double per) { + this.rate = rate; + this.per = per; + this.allowance = rate; + this.last_check = System.currentTimeMillis(); + } + + public boolean check() { + 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; + } + } +} diff --git a/app/src/main/res/layout/activity_color.xml b/app/src/main/res/layout/activity_color.xml index a339d8c..43390d0 100644 --- a/app/src/main/res/layout/activity_color.xml +++ b/app/src/main/res/layout/activity_color.xml @@ -26,54 +26,66 @@ - + android:layout_height="match_parent"> - + android:orientation="vertical"> - + android:background="?attr/colorPrimary" + android:minHeight="?android:attr/actionBarSize"> - + - + - + - + - + + + + + @@ -82,7 +94,6 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" - app:headerLayout="@layout/navigation_header" app:menu="@menu/navigation_drawer"/> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_adddaemon.xml b/app/src/main/res/layout/fragment_adddaemon.xml index 1fe7b59..da9ddb3 100644 --- a/app/src/main/res/layout/fragment_adddaemon.xml +++ b/app/src/main/res/layout/fragment_adddaemon.xml @@ -46,7 +46,7 @@ android:layout_marginLeft="7dp" android:layout_toRightOf="@id/img_host" android:gravity="center" - android:text="Choose Daemon" + android:text="@string/text_choose_daemon" android:textAppearance="?android:textAppearanceMedium" /> diff --git a/app/src/main/res/layout/navigation_header.xml b/app/src/main/res/layout/navigation_header.xml index 9bc6475..408102e 100644 --- a/app/src/main/res/layout/navigation_header.xml +++ b/app/src/main/res/layout/navigation_header.xml @@ -26,18 +26,61 @@ android:theme="@style/ThemeOverlay.AppCompat.Dark"> + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/color.xml b/app/src/main/res/values/color.xml index 1c92c10..d1837a3 100644 --- a/app/src/main/res/values/color.xml +++ b/app/src/main/res/values/color.xml @@ -18,6 +18,6 @@ --> - #3ae765 - #69cc59 + #3ae88d + #327D26 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 37d32bd..6a58f9d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,7 +43,7 @@ Added Controller (Id=%1$d) Error: Couldn\'t connect to daemon at %1$s: %2$s - Added LedD Daemon version: + Added LedD Daemon version: %1$s Added Stripe (Id=%1$d) Failed to add Stripe: