fixed some bugs
added rate control to the changecolor event (much smoother now) extraced some more string from the code, more is to come
This commit is contained in:
@@ -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<LedStripe> 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();
|
||||
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
|
||||
|
@@ -94,6 +94,8 @@ public class ColorApplication extends Application {
|
||||
TypeToken<Set<LedDDaemon>>() {
|
||||
}.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");
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -356,6 +356,10 @@ public class AddStripeDialog extends DialogFragment implements DialogInterface.O
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
ColorApplication.getInstance().onResume();
|
||||
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (daemonArrayAdapter != null) {
|
||||
daemonArrayAdapter.clear();
|
||||
daemonArrayAdapter.addAll(ColorApplication.getInstance().getDaemons());
|
||||
@@ -365,6 +369,8 @@ public class AddStripeDialog extends DialogFragment implements DialogInterface.O
|
||||
refreshController((LedDDaemon) daemonSpinner.getSelectedItem());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void testChannel(EditText text, ImageButton button) {
|
||||
if (mDaemonSelected && mControllerSelected) {
|
||||
|
@@ -36,5 +36,9 @@
|
||||
<string name="hint_channel_b">B</string>
|
||||
<string name="text_add_stripe">Add Stripe</string>
|
||||
<string name="test_settings">Settings</string>
|
||||
<string name="snackbar_no_wlan">We currently only support WLAN, please connect to one</string>
|
||||
<string name="snackbar_stripes_reloaded">LED stripes reloaded</string>
|
||||
<string name="snackbar_no_connection_stripes">"Coudn't get stripes from daemon: "</string>
|
||||
<string name="snackbar_connection_failed">"Coudn't connect to daemon: "</string>
|
||||
|
||||
</resources>
|
||||
|
Reference in New Issue
Block a user