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:
Giovanni Harting
2015-09-16 15:21:50 +02:00
parent 42ff424622
commit 9fa55d2994
5 changed files with 106 additions and 49 deletions

View File

@@ -27,6 +27,7 @@ import android.graphics.Color;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.design.widget.NavigationView; import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout;
@@ -72,6 +73,11 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O
private List<LedStripe> ledStripes; private List<LedStripe> ledStripes;
private LedStripe mCurrentStripe; private LedStripe mCurrentStripe;
private LedDHelper mCurrentHelper; 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@@ -83,8 +89,7 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo == null || !networkInfo.isConnected() || networkInfo.getType() != ConnectivityManager.TYPE_WIFI) { 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 Snackbar.make(mDrawerLayout, R.string.snackbar_no_wlan, Snackbar.LENGTH_INDEFINITE).setAction("RETRY", new View.OnClickListener() {
("RETRY", new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
refreshStripes(); refreshStripes();
@@ -98,7 +103,7 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O
colorPicker.setOnColorChangedListener(new ColorPicker.OnColorChangedListener() { colorPicker.setOnColorChangedListener(new ColorPicker.OnColorChangedListener() {
@Override @Override
public void onColorChanged(int i) { public void onColorChanged(int i) {
if (mCurrentStripe != null && mCurrentHelper != null) { if (mCurrentStripe != null && mCurrentHelper != null && isRateAcceptable()) {
float[] hsv = new float[3]; float[] hsv = new float[3];
Color.colorToHSV(i, hsv); Color.colorToHSV(i, hsv);
mCurrentStripe.setColor(new HSV(hsv[0], hsv[1], hsv[2])); mCurrentStripe.setColor(new HSV(hsv[0], hsv[1], hsv[2]));
@@ -190,6 +195,8 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O
super.onPause(); super.onPause();
ColorApplication.getInstance().teardown(); ColorApplication.getInstance().teardown();
unregisterReceiver(daemonsListener); unregisterReceiver(daemonsListener);
if (mCurrentStripe != null) PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("lastStripe", mCurrentStripe.getId()).commit();
} }
@Override @Override
@@ -201,9 +208,13 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
ColorApplication.getInstance().onResume(); if (!fromOnCreate) {
registerReceiver(daemonsListener, new IntentFilter(ColorApplication.INTENT_ACTION_REFRESH)); ColorApplication.getInstance().onResume();
refreshStripes(); registerReceiver(daemonsListener, new IntentFilter(ColorApplication.INTENT_ACTION_REFRESH));
refreshStripes();
} else {
fromOnCreate = false;
}
} }
@Override @Override
@@ -220,36 +231,7 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O
for (LedStripe stripe : ledStripes) { for (LedStripe stripe : ledStripes) {
if (stripe.getName().equals(menuItem.getTitle())) { if (stripe.getName().equals(menuItem.getTitle())) {
mCurrentStripe = stripe; selectStripe(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) {
}
});
return true; 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()); SubMenu nDaemonMenu = nvMenu.addSubMenu(Menu.NONE, Menu.NONE, finalI, dDaemon.toString());
nDaemonMenu.setGroupCheckable(stripeGroup, true, true); nDaemonMenu.setGroupCheckable(stripeGroup, true, true);
ledStripes = stripes; int lastStripeId = -1;
Snackbar.make(findViewById(android.R.id.content), "LED stripes reloaded", Snackbar.LENGTH_LONG).show(); if (PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).contains("lastStripe")) {
lastStripeId = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("lastStripe", -1);
}
ledStripes = stripes;
for (LedStripe stripe : ledStripes) { for (LedStripe stripe : ledStripes) {
MenuItem sItem = nDaemonMenu.add(stripeGroup, View.generateViewId(), stripe.getId(), stripe.getName()); MenuItem sItem = nDaemonMenu.add(stripeGroup, View.generateViewId(), stripe.getId(), stripe.getName());
sItem.setIcon(R.drawable.ic_wb_iridescent_black_48dp); 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 @Override
public void onGetFailed(String message) { 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 @Override
public void onConnectionFailed(String message) { 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 { protected class refreshDaemonsListener extends BroadcastReceiver {
@Override @Override

View File

@@ -94,6 +94,8 @@ public class ColorApplication extends Application {
TypeToken<Set<LedDDaemon>>() { TypeToken<Set<LedDDaemon>>() {
}.getType()); }.getType());
Log.i(ColorApplication.TAG, "Loaded " + ledDDaemons.size() + " Daemons from preferences");
for (final LedDDaemon ledDDaemon : ledDDaemons) { for (final LedDDaemon ledDDaemon : ledDDaemons) {
final LedDHelper helper = new LedDHelper(ledDDaemon, getApplicationContext()); 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");
} }
} }

View File

@@ -55,4 +55,9 @@ public class LedStripe {
this.name = name; this.name = name;
this.RGB = RGB; 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);
}
} }

View File

@@ -356,14 +356,20 @@ public class AddStripeDialog extends DialogFragment implements DialogInterface.O
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
ColorApplication.getInstance().onResume(); ColorApplication.getInstance().onResume();
if (daemonArrayAdapter != null) {
daemonArrayAdapter.clear();
daemonArrayAdapter.addAll(ColorApplication.getInstance().getDaemons());
}
if (controllerArrayAdapter != null && mDaemonSelected) { getActivity().runOnUiThread(new Runnable() {
refreshController((LedDDaemon) daemonSpinner.getSelectedItem()); @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) { private void testChannel(EditText text, ImageButton button) {

View File

@@ -36,5 +36,9 @@
<string name="hint_channel_b">B</string> <string name="hint_channel_b">B</string>
<string name="text_add_stripe">Add Stripe</string> <string name="text_add_stripe">Add Stripe</string>
<string name="test_settings">Settings</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> </resources>