From 9ff32af9f1fa95a5857f6df779b151cccc2183cc Mon Sep 17 00:00:00 2001 From: Giovanni Harting <539@idlegandalf.com> Date: Thu, 17 Mar 2016 20:38:16 +0100 Subject: [PATCH] Upgraded gradle parts to latest Switched to another fork of the holo-color-picker Switched to MaterialDrawer due NavigationView is still very buggy and much more limited General cleanup Version bump to 1.0.3 --- app/build.gradle | 29 +- app/libs/holo-color-picker.aar | Bin 0 -> 29620 bytes app/libs/holo-color-picker_ledd_version.aar | Bin 29387 -> 0 bytes app/src/main/AndroidManifest.xml | 1 + .../com/idlegandalf/ledd/ColorActivity.java | 320 ++++++++++-------- .../idlegandalf/ledd/ColorApplication.java | 2 +- .../ledd/components/LedStripe.java | 5 + .../idlegandalf/ledd/utils/GraphicUtils.java | 146 ++++++++ .../ic_wb_iridescent_white_48dp.png | Bin 0 -> 411 bytes .../ic_wb_iridescent_white_48dp.png | Bin 0 -> 273 bytes .../ic_wb_iridescent_white_48dp.png | Bin 0 -> 465 bytes .../ic_wb_iridescent_white_48dp.png | Bin 0 -> 573 bytes .../ic_wb_iridescent_white_48dp.png | Bin 0 -> 814 bytes app/src/main/res/layout/activity_color.xml | 123 +++---- app/src/main/res/menu/navigation_drawer.xml | 35 -- app/src/main/res/values-v11/styles.xml | 29 -- app/src/main/res/values-v14/styles.xml | 30 -- app/src/main/res/values-v19/styles.xml | 2 +- app/src/main/res/values-v21/styles.xml | 30 -- app/src/main/res/values/color.xml | 1 + app/src/main/res/values/strings.xml | 2 +- app/src/main/res/values/styles.xml | 9 +- build.gradle | 2 +- 23 files changed, 408 insertions(+), 358 deletions(-) create mode 100644 app/libs/holo-color-picker.aar delete mode 100644 app/libs/holo-color-picker_ledd_version.aar create mode 100644 app/src/main/java/com/idlegandalf/ledd/utils/GraphicUtils.java create mode 100644 app/src/main/res/drawable-hdpi/ic_wb_iridescent_white_48dp.png create mode 100644 app/src/main/res/drawable-mdpi/ic_wb_iridescent_white_48dp.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_wb_iridescent_white_48dp.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_wb_iridescent_white_48dp.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_wb_iridescent_white_48dp.png delete mode 100644 app/src/main/res/menu/navigation_drawer.xml delete mode 100644 app/src/main/res/values-v11/styles.xml delete mode 100644 app/src/main/res/values-v14/styles.xml delete mode 100644 app/src/main/res/values-v21/styles.xml diff --git a/app/build.gradle b/app/build.gradle index 5e7368b..28a45e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,7 +28,7 @@ buildscript { dependencies { classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1' - classpath 'com.github.ben-manes:gradle-versions-plugin:0.11.3' + classpath 'com.github.ben-manes:gradle-versions-plugin:0.12.0' } } @@ -46,10 +46,10 @@ android { defaultConfig { applicationId "com.idlegandalf.ledd" - minSdkVersion 17 + minSdkVersion 18 targetSdkVersion 23 - versionCode 2 - versionName "1.0.1" + versionCode 3 + versionName "1.0.3" } buildTypes { release { @@ -57,7 +57,7 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } - + debug { zipAlignEnabled true } @@ -66,15 +66,18 @@ android { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:appcompat-v7:23.1.1' - compile 'com.android.support:support-v4:23.1.1' - compile 'com.squareup.okhttp:okhttp:2.5.0' - compile 'com.google.code.gson:gson:2.4' + compile 'com.android.support:appcompat-v7:23.2.1' + compile 'com.android.support:support-v4:23.2.1' + compile 'com.squareup.okhttp:okhttp:2.7.5' + compile 'com.google.code.gson:gson:2.6.2' compile 'com.jakewharton:butterknife:7.0.1' - compile 'com.koushikdutta.async:androidasync:2.1.6' - compile 'com.android.support:design:23.1.1' + compile 'com.koushikdutta.async:androidasync:2.1.7' + compile 'com.android.support:design:23.2.1' compile 'com.larswerkman:HoloColorPicker:1.5@aar' - compile 'com.google.guava:guava:19.0-rc2' + compile 'com.google.guava:guava:19.0' compile 'com.thetransactioncompany:jsonrpc2-base:1.38' - provided 'org.projectlombok:lombok:1.16.6' + compile('com.mikepenz:materialdrawer:5.1.4@aar') { + transitive = true + } + provided 'org.projectlombok:lombok:1.16.8' } diff --git a/app/libs/holo-color-picker.aar b/app/libs/holo-color-picker.aar new file mode 100644 index 0000000000000000000000000000000000000000..692c3ee00c1fc47dbe28c75a2f3a14cdf826098c GIT binary patch literal 29620 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 literal 0 HcmV?d00001 diff --git a/app/libs/holo-color-picker_ledd_version.aar b/app/libs/holo-color-picker_ledd_version.aar deleted file mode 100644 index ee686e15593ecc9de8c7e9c347d31e5aba62f284..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29387 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 + mDaemons; private refreshDaemonsListener daemonsListener; private List ledStripes; private LedStripe mCurrentStripe; private boolean fromOnCreate = true; private boolean autoColorSet = false; private RateLimiter limiter; - private View headerLayout; + private boolean isRefreshRunning = false; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -97,21 +92,11 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O setContentView(R.layout.activity_color); ButterKnife.bind(this); - headerLayout = navigationView.getHeaderView(0); - 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(); if (networkInfo == null || !networkInfo.isConnected() || networkInfo.getType() != ConnectivityManager.TYPE_WIFI) { - Snackbar.make(mDrawerLayout, R.string.snackbar_no_wlan, Snackbar.LENGTH_INDEFINITE).setAction("RETRY", new View.OnClickListener() { + Snackbar.make(scrollView, R.string.snackbar_no_wlan, Snackbar.LENGTH_INDEFINITE).setAction("RETRY", new View.OnClickListener() { @Override public void onClick(View v) { refreshStripes(); @@ -119,6 +104,7 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O }).show(); } + mDaemons = new ArrayList<>(); limiter = new RateLimiter(5.0, 100.0); colorPicker.addSaturationBar(saturationBar); @@ -128,37 +114,30 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O colorPicker.setOnColorChangedListener(new ColorPicker.OnColorChangedListener() { @Override public void onColorChanged(int i) { - if (mCurrentStripe != null && limiter.check() && aSwitch.isChecked() && !autoColorSet) { + if (mCurrentStripe != null && limiter.check() && !autoColorSet) { mCurrentStripe.setColor(i); - mStripeHex.setText(String.format("#%06X", (0xFFFFFF & i))); } } }); - navigationView.setNavigationItemSelectedListener(this); setSupportActionBar(toolbar); toolbar.setTitle(R.string.app_name); - mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.app_name, R.string.app_name) { + mDrawer = new DrawerBuilder() + .withActivity(this) + .withToolbar(toolbar) + .withOnDrawerItemClickListener(this) + .addStickyDrawerItems( + new PrimaryDrawerItem().withName(R.string.text_add_stripe).withTag("add_stripe").withSelectable(false), + new PrimaryDrawerItem().withName(R.string.text_settings).withTag("settings").withSelectable(false) + ) + .build(); - /** Called when a drawer has settled in a completely closed state. */ - public void onDrawerClosed(View view) { - // TODO: do things that have to be done here - } - - /** Called when a drawer has settled in a completely open state. */ - public void onDrawerOpened(View drawerView) { - // TODO: do things that have to be done here - } - }; - - // set the drawer toggle as the DrawerListener - mDrawerLayout.setDrawerListener(mDrawerToggle); // enable Homebutton navigation to drawer if (getSupportActionBar() != null) { - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setHomeButtonEnabled(true); + getSupportActionBar().setDisplayHomeAsUpEnabled(false); + mDrawer.getActionBarDrawerToggle().setDrawerIndicatorEnabled(true); } daemonsListener = new refreshDaemonsListener(); @@ -173,46 +152,43 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O return true; } - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - // Sync the toggle state after onRestoreInstanceState has occurred. - mDrawerToggle.syncState(); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - mDrawerToggle.onConfigurationChanged(newConfig); - } - @Override public boolean onOptionsItemSelected(MenuItem item) { - // Pass the event to ActionBarDrawerToggle, if it returns - // true, then it has handled the app icon touch event - if (mDrawerToggle.onOptionsItemSelected(item)) { - return true; - } - // Handle your other action bar items... - - return super.onOptionsItemSelected(item); } - @OnCheckedChanged(R.id.switch_onoff) - public void onOffToggle(boolean checked) { - if (mCurrentStripe != null) { - if (!checked) { - HSV nHSV = mCurrentStripe.getColor(); - if (nHSV != null) { - nHSV.setValue(0.0); - mCurrentStripe.setColor(nHSV); + @Override + protected void onRestart() { + super.onRestart(); + refreshStripes(); + } + + @Override + public void onCheckedChanged(IDrawerItem drawerItem, CompoundButton buttonView, boolean isChecked) { + LedStripe stripe = null; + for (LedStripe ledStripe : ledStripes) { + if (((int) drawerItem.getTag()) == ledStripe.getId()) { + stripe = ledStripe; + break; + } + } + + if (stripe != null) { + if (isChecked) { + if (stripe == mCurrentStripe) { + if (colorPicker.getColor() != Color.BLACK) + stripe.setColor(colorPicker.getColor()); + else { + colorPicker.setColor(Color.WHITE); + } } else { - mCurrentStripe.setColor(Color.BLACK); + stripe.setColor(Color.WHITE); } - //colorPicker.setColor(Color.HSVToColor(new float[]{(float) nHSV.getHue(), (float) nHSV.getSaturation(), (float) nHSV.getValue()})); } else { - mCurrentStripe.setColor(colorPicker.getColor()); + if (stripe == mCurrentStripe) + colorPicker.setColor(Color.BLACK); + else + stripe.setColor(Color.BLACK); } } } @@ -220,10 +196,10 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { - if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) { - mDrawerLayout.closeDrawer(Gravity.LEFT); + if (mDrawer.isDrawerOpen()) { + mDrawer.closeDrawer(); } else { - mDrawerLayout.openDrawer(Gravity.LEFT); + mDrawer.openDrawer(); } return true; @@ -237,7 +213,8 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O ColorApplication.getInstance().teardown(); unregisterReceiver(daemonsListener); - if (mCurrentStripe != null) PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("lastStripe", mCurrentStripe.getId()).commit(); + if (mCurrentStripe != null) + PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("lastStripe", mCurrentStripe.getId()).commit(); } @Override @@ -258,68 +235,134 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O } } + @Override - public boolean onNavigationItemSelected(MenuItem menuItem) { - int id = menuItem.getItemId(); + public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { + if (drawerItem.isSelectable()) { - switch (id) { - case R.id.nv_add_stripe: - new AddStripeDialog().show(getFragmentManager(), ""); - return true; - case R.id.nv_settings: - return true; - } + if (drawerItem.getTag() instanceof String) { + String tag = (String) drawerItem.getTag(); - for (LedStripe stripe : ledStripes) { - if (stripe.getName().equals(menuItem.getTitle())) { - selectStripe(stripe); - return true; + if (tag.equals("add_stripe")) { + new AddStripeDialog().show(getFragmentManager(), ""); + return true; + } else if (tag.equals("settings")) { + return true; + } + } + + if (drawerItem.getTag() instanceof Integer) { + int tag = (int) drawerItem.getTag(); + + for (LedStripe stripe : ledStripes) { + if (tag == stripe.getId()) { + selectStripe(stripe); + return true; + } + } } } - return false; } public void refreshStripes() { - reCreateNavigationView(); // need to recreate the navigationview since we can't remove a once added submenu - - final Menu nvMenu = navigationView.getMenu(); - final int stripeGroup = 42; + if (isRefreshRunning) + return; + isRefreshRunning = true; int i = 1; for (final LedDDaemon dDaemon : ColorApplication.getInstance().getDaemons()) { - LedDHelper helper = ColorApplication.getInstance().getHelperForDaemon(dDaemon); if (helper != null) { final int finalI = i; helper.getStripes(new StripesCallback() { @Override - public void onSuccess(final List stripes) { + public void onSuccess(List stripes) { + ledStripes = stripes; runOnUiThread(new Runnable() { @Override public void run() { - SubMenu nDaemonMenu = nvMenu.addSubMenu(Menu.NONE, Menu.NONE, finalI, dDaemon.toString()); - nDaemonMenu.setGroupCheckable(stripeGroup, true, true); + PrimaryDrawerItem nDaemonMenu = null; + long selectedItemId = -1; + for (IDrawerItem drawerItem : mDaemons) { + if (((PrimaryDrawerItem) drawerItem).getName().getText().equals(dDaemon.toString())) { + nDaemonMenu = (PrimaryDrawerItem) drawerItem; + break; + } + } + + if (nDaemonMenu == null) { + nDaemonMenu = new PrimaryDrawerItem().withName(dDaemon.toString()).withTag(finalI).withSelectable(false).withIsExpanded(true); + mDrawer.addItem(nDaemonMenu); + mDaemons.add(nDaemonMenu); + } int lastStripeId = -1; if (PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).contains("lastStripe")) { lastStripeId = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("lastStripe", -1); } - ledStripes = stripes; + List mStripes = new ArrayList<>(); for (LedStripe stripe : ledStripes) { - MenuItem sItem = nDaemonMenu.add(stripeGroup, View.generateViewId(), stripe.getId(), stripe.getName()); - sItem.setIcon(R.drawable.ic_wb_iridescent_black_48dp); + final SecondarySwitchDrawerItem sItem = new SecondarySwitchDrawerItem() + .withName(stripe.getName()) + .withTag(stripe.getId()) + .withIcon(R.drawable.ic_wb_iridescent_black_48dp) + .withOnCheckedChangeListener(ColorActivity.this); + + mStripes.add(sItem); if (lastStripeId != -1 && stripe.getId() == lastStripeId) { selectStripe(stripe); + selectedItemId = sItem.getIdentifier(); } } + nDaemonMenu.withSubItems(mStripes); + nDaemonMenu.withBadge(String.valueOf(mStripes.size())); + nDaemonMenu.withBadgeStyle(new BadgeStyle().withColor(getResources().getColor(R.color.material_drawer_accent)).withTextColor(Color.WHITE)); + mDrawer.updateItem(nDaemonMenu); + if (selectedItemId != -1) + mDrawer.setSelection(selectedItemId); + Snackbar.make(findViewById(android.R.id.content), R.string.snackbar_stripes_reloaded, Snackbar.LENGTH_LONG).show(); } }); + + for (LedStripe stripe : ledStripes) { + stripe.getColor(new RecieveColorCallback() { + @Override + public void onConnectionFailed(String message) { + + } + + @Override + public void onColorRecieved(LedStripe stripe) { + if (stripe.isOn()) { + IDrawerItem sItem = findItemForStripe(stripe); + + if (sItem != null) { + final SecondarySwitchDrawerItem cItem = (SecondarySwitchDrawerItem) sItem; + cItem.withSwitchEnabled(true); + + runOnUiThread(new Runnable() { + @Override + public void run() { + mDrawer.updateItem(cItem); + } + }); + } + } + } + + @Override + public void onRecievFailed(int code, String msg) { + + } + + }); + } } @Override @@ -340,41 +383,20 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O i++; } - } - private void reCreateNavigationView() { - runOnUiThread(new Runnable() { - @Override - public void run() { - mDrawerLayout.removeView(navigationView); - navigationView = new NavigationView(ColorActivity.this); - DrawerLayout.LayoutParams params = new DrawerLayout.LayoutParams(DrawerLayout.LayoutParams.WRAP_CONTENT, DrawerLayout.LayoutParams - .MATCH_PARENT); - params.gravity = Gravity.START; - navigationView.setLayoutParams(params); - navigationView.inflateMenu(R.menu.navigation_drawer); - navigationView.inflateHeaderView(R.layout.navigation_header); - mDrawerLayout.addView(navigationView, params); - navigationView.setNavigationItemSelectedListener(ColorActivity.this); - mDrawerToggle.syncState(); - } - }); + isRefreshRunning = false; } @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()); autoColorSet = true; + mDrawer.closeDrawer(); mCurrentStripe.getColor(new RecieveColorCallback() { @Override - public void onColorRecieved(LedStripe stripe) { + public void onColorRecieved(final LedStripe stripe) { final HSV cColor = stripe.getColor(); final int color = Color.HSVToColor(new float[]{(float) cColor.getHue(), (float) cColor.getSaturation(), (float) cColor.getValue()}); @@ -384,10 +406,11 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O colorPicker.setColor(color); autoColorSet = false; - if (cColor.getValue() == 0.0) { - aSwitch.setChecked(false); - } else { - aSwitch.setChecked(true); + if (stripe.isOn()) { + IDrawerItem fItem = findItemForStripe(stripe); + + if (fItem != null) + ((SecondarySwitchDrawerItem) fItem).withSwitchEnabled(true); } } }); @@ -414,4 +437,19 @@ public class ColorActivity extends AppCompatActivity implements NavigationView.O } } } + + @DebugLog + private IDrawerItem findItemForStripe(LedStripe stripe) { + for (IDrawerItem dItem : mDaemons) { + if (((PrimaryDrawerItem) dItem).getSubItems() != null) { + for (IDrawerItem sItem : ((PrimaryDrawerItem) dItem).getSubItems()) { + if (((int) sItem.getTag()) == stripe.getId()) { + return sItem; + } + } + } + } + + return null; + } } diff --git a/app/src/main/java/com/idlegandalf/ledd/ColorApplication.java b/app/src/main/java/com/idlegandalf/ledd/ColorApplication.java index f9cf234..a9a40e9 100644 --- a/app/src/main/java/com/idlegandalf/ledd/ColorApplication.java +++ b/app/src/main/java/com/idlegandalf/ledd/ColorApplication.java @@ -47,8 +47,8 @@ public class ColorApplication extends Application { @Override public void onCreate() { super.onCreate(); - singleton = this; + singleton = this; ledDHelpers = new HashMap<>(); this.onResume(); } 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 48590c0..409f1ce 100644 --- a/app/src/main/java/com/idlegandalf/ledd/components/LedStripe.java +++ b/app/src/main/java/com/idlegandalf/ledd/components/LedStripe.java @@ -95,4 +95,9 @@ public class LedStripe { helper.getColor(this, callback); } + + @DebugLog + public boolean isOn() { + return color != null && color.getValue() != 0.0; + } } \ No newline at end of file diff --git a/app/src/main/java/com/idlegandalf/ledd/utils/GraphicUtils.java b/app/src/main/java/com/idlegandalf/ledd/utils/GraphicUtils.java new file mode 100644 index 0000000..56d1cee --- /dev/null +++ b/app/src/main/java/com/idlegandalf/ledd/utils/GraphicUtils.java @@ -0,0 +1,146 @@ +package com.idlegandalf.ledd.utils; + + +import android.graphics.Bitmap; +import android.graphics.Color; +import android.opengl.GLES30; +import android.util.Log; + +import java.nio.IntBuffer; + +public class GraphicUtils { + int fmt; + int w; + int h; + int nBytes; + int[] PBOs; + int numDownloads = 0; + int numPBOs = 0; + int dx = 0; + IntBuffer pixelBuf; + + public GraphicUtils(int fmt, int w, int h, int xbuff) { + if (PBOs != null) { + Log.w("LedD", "Already initialized. Not necessary to initialize again; or shutdown first."); + return; + } + + if (xbuff < 1 || xbuff > 10) { + Log.w("LedD", "Invalid number of buffers: more then 10 or less then 1 buffer"); + return; + } + + this.fmt = fmt; + this.w = w; + this.h = h; + this.numPBOs = xbuff; + + if (fmt == GLES30.GL_RED || fmt == GLES30.GL_GREEN || fmt == GLES30.GL_BLUE) { + this.nBytes = w * h; + } else if (fmt == GLES30.GL_RGB) { + this.nBytes = w * h * 3; + } else if (fmt == GLES30.GL_RGBA) { + this.nBytes = w * h * 4; + } else { + Log.w("LedD", "Unhandled pixel format, use GL_R, GL_RG, GL_RGB or GL_RGBA."); + } + + if (this.nBytes == 0) { + Log.w("LedD", String.format("Invalid width or height given: %d x %d", w, h)); + return; + } + + PBOs = new int[xbuff]; + + pixelBuf = IntBuffer.allocate(nBytes); + + GLES30.glGenBuffers(xbuff, PBOs, 0); + + for (int i = 0; i < xbuff; i++) { + GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, PBOs[i]); + GLES30.glBufferData(GLES30.GL_PIXEL_PACK_BUFFER, nBytes, null, GLES30.GL_STREAM_READ); + } + + GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, 0); + } + + public void download() { + long curNanos = System.nanoTime(); + + if (numDownloads < numPBOs) { + GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, PBOs[dx]); + GLES30.glReadPixels(0, 0, w, h, fmt, GLES30.GL_UNSIGNED_BYTE, null); + Log.d("LedD", String.format("glReadPixels() with pbo: %d", PBOs[dx])); + } else { + Log.d("LedD", String.format("glMapBuffer() with pbo: %d", PBOs[dx])); + + GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, PBOs[dx]); + GLES30.glBufferData(GLES30.GL_PIXEL_PACK_BUFFER, nBytes, pixelBuf, GLES30.GL_STATIC_READ); + + GLES30.glReadPixels(0, 0, w, h, fmt, GLES30.GL_UNSIGNED_BYTE, null); + } + + dx++; + dx = dx % numPBOs; + + numDownloads++; + if (numDownloads == Integer.MAX_VALUE) { + numDownloads = 0; + } + + GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, 0); + + Log.d("LedD", String.format("Download took: %f ms.", ((double) System.nanoTime() - curNanos) / 1000000.0)); + } + + public Bitmap getCurBufferBitmap() { + int[] b = pixelBuf.array(); + int[] bt = new int[w * h]; + + for (int i = 0; i < h; i++) { + //remember, that OpenGL bitmap is incompatible with Android bitmap + //and so, some correction need. + + for (int j = 0; j < w; j++) { + int pix = b[i * w + j]; + int pb = (pix >> 16) & 0xff; + int pr = (pix << 16) & 0x00ff0000; + int pix1 = (pix & 0xff00ff00) | pr | pb; + bt[(h - i - 1) * w + j] = pix1; + } + } + Bitmap.Config bconfig = Bitmap.Config.RGB_565; + + return Bitmap.createBitmap(bt, w, h, bconfig); + } + + public int getAvgBitmapBufferColor() { + download(); + Bitmap bitmap = getCurBufferBitmap(); + int redBucket = 0; + int greenBucket = 0; + int blueBucket = 0; + int alphaBucket = 0; + + boolean hasAlpha = bitmap.hasAlpha(); + int pixelCount = bitmap.getWidth() * bitmap.getHeight(); + int[] pixels = new int[pixelCount]; + bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight()); + + for (int y = 0, h = bitmap.getHeight(); y < h; y++) { + for (int x = 0, w = bitmap.getWidth(); x < w; x++) { + int color = pixels[x + y * w]; // x + y * width + redBucket += (color >> 16) & 0xFF; // Color.red + greenBucket += (color >> 8) & 0xFF; // Color.greed + blueBucket += (color & 0xFF); // Color.blue + if (hasAlpha) alphaBucket += (color >>> 24); // Color.alpha + } + } + + return Color.argb( + (hasAlpha) ? (alphaBucket / pixelCount) : 255, + redBucket / pixelCount, + greenBucket / pixelCount, + blueBucket / pixelCount); + } +} diff --git a/app/src/main/res/drawable-hdpi/ic_wb_iridescent_white_48dp.png b/app/src/main/res/drawable-hdpi/ic_wb_iridescent_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2a4bfdb18042fc7e6e1ebac8f826d616ed10ed GIT binary patch literal 411 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84i*LmhW}5h&oD4BCV9FzhEy=Vy?NHlDNx|R z$Il#kQS6tprz9<_%?P@+$W{MhyMW?D;qV1uW4>^2~qMIv%oE zJUmq+())(+=lhO~TmcR5GIuujN&FKrVd~1CaBR^R*LIx-c3zL72`cTk&Q#8y$fjaB z>B(`%iYpDPL>8!PS{S6eZ(bPYR<$hYQAou}i`=tqMVFfRPDZpF-QK~Z;t|%jVz-*8 zOosnVg`1X(g1xwAO{;$;rYk0>>%K} zy>p&c(>%q5hlWBSPUl1fY=XM(I6ho@LC0*D@uCF=^|$Q*=WhLdeW!BgdxPJMZjuT4 z4E~=?8Mw4O|8T!}F2G&QY8%k*Z|~75@tE;cYVx~Y+fEC+&(X5mC;aTMC>CT^l1kj; zuJOp$N$mZcVwGJ#1Pe=-eeRfQ)WFD-(4fn>jCl{cDsR!oR1VYPAmS{$nPO%v$vMXpWz2j^7NO> belgBned68H4vS|D3=9mOu6{1-oD!MeEX;^Z`Ncw zpYz{OwI?Sh~8ZY8IBfrs`Ng$Ew{ATV4v*w*= z;C{%gTe~DWM4fGOoHW literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_wb_iridescent_white_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_wb_iridescent_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3389ccc3d2310695ceb98cd02e1a59b9ccadc45d GIT binary patch literal 573 zcmeAS@N?(olHy`uVBq!ia0y~yV3+{H9Lx+13>Rhybuln7gar76xc>kDpMinlKUKjK zfna_H1_tSpAirP+2D!WcWE5^cFnX7{WyAY7Ir=84hH(aZQ3){%gmh0bFfi77x;TbZ z+5Ye;{)wD$%1hB!T`?H5WWDmXT= za0;osIOniD(mrG7>T0`XKi5casfo*ZHIFlp%37JBs{6OCAXX_OoC7+4cD5p756Td2;R=ufD4+`tHnjYaKJclFfYOoUMK~ z9Uq=7I?~MHujd6~D%o^$`0E`C7Jc|q@Zrj?4_`Vyh`6?2y!Eee#>|;Fbxr>|fgR;B z0qQy^W0(GfnKNhJ4LbccBUkjj;`P;j=da(cnfA_Du(aYvPnc~-l}$&MoQtiTODX@N zJIxv&6uN9Xgh0#{FC4d=x6!ug*!BI!!z7z;f0k!#fALje(b2+~i)j~MIkr5n?wQ5m zueYjF;NeT5P@9eqUpha8xK#XdsnAlgd3jh`$wpLgo=6MF`LA<7E>UoC{~yE3DWn2& jSLAweUSs3e@7NDa*et{!){xD>z`)??>gTe~DWM4fvf?1d literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_wb_iridescent_white_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_wb_iridescent_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..638499afb26a8223c80b9a7ad38916a09c58c17a GIT binary patch literal 814 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Lx+145>_WOc@v$LIQk3Tp1V`{!<$m#M?|` zU|^6b3GxeOn8WZtkeA;-_201*Nxp}94lyzv{SzL2AnvcvjGI1L6Brnnay?xfLn>~) zz3b>F9Vo%_P@Lb)kdeKIdB&ap^CG7`37utb8#Lt=bH%IZGkIUCEuLHbF54WNnH+wr z$e59dg+oBWp@9L+_^_Yp-M8CJeBWO)?UR@P7R|(G-`Ahb@FHG}#g^gk>81oW2m2LBXHH+K-V;#+!?;8*1r-<5w@ zJ?N`zTX4Jo!OPPPe-8_Bc>O*7GMzz#BkM0i(ZSEBfBk)aeT}?>-i|-FM8B1J{$f1B z^y@d%uVRL#D*L7d@(v0M_G>SwmuqPFx2@q{B?Hs1+f2WnGjhCG&;4RPyTXF~`Vh%| z5XskI$$2mHx$nK4&$eNDon^lkgV|h&FQMLD!x3RN4@CqiB%o?wBLAxDKB&M#2`u+! zPwds5j23(L5K#k;bS;V*Yn+5e^lDF^$es(J+pNBgFtdL={a|Vu2|DLAJZ1`u%!1QZ21Iw55i~<+#vnVX6XFD+OMLv^2%`bN=l=PtR oK%Vu_zM1#AIbmsJ&3^lKYmeJE*VX=HU|?YIboFyt=akR{08z+ny8r+H literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_color.xml b/app/src/main/res/layout/activity_color.xml index 4e21b0a..611118f 100644 --- a/app/src/main/res/layout/activity_color.xml +++ b/app/src/main/res/layout/activity_color.xml @@ -16,85 +16,58 @@ ~ along with this program. If not, see . --> - + + + + android:id="@+id/main_layout" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:fitsSystemWindows="true" + android:orientation="vertical"> - + - + + + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginTop="25dp" + app:color_center_radius="100dp" + app:color_pointer_halo_radius="13dp" + app:color_pointer_radius="12dp" + app:color_wheel_radius="180dp" + app:color_wheel_thickness="20dp" /> - + - + - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/app/src/main/res/menu/navigation_drawer.xml b/app/src/main/res/menu/navigation_drawer.xml deleted file mode 100644 index 3103fae..0000000 --- a/app/src/main/res/menu/navigation_drawer.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - -

- - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-v11/styles.xml b/app/src/main/res/values-v11/styles.xml deleted file mode 100644 index f61a03d..0000000 --- a/app/src/main/res/values-v11/styles.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/values-v14/styles.xml b/app/src/main/res/values-v14/styles.xml deleted file mode 100644 index 5cec8a8..0000000 --- a/app/src/main/res/values-v14/styles.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/values-v19/styles.xml b/app/src/main/res/values-v19/styles.xml index b444b87..f92e4eb 100644 --- a/app/src/main/res/values-v19/styles.xml +++ b/app/src/main/res/values-v19/styles.xml @@ -22,7 +22,7 @@ Base application theme for API 19+. This theme completely replaces AppBaseTheme from res/values/styles.xml on API 19+ devices. --> - diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml deleted file mode 100644 index fcf4827..0000000 --- a/app/src/main/res/values-v21/styles.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - \ 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 d1837a3..15c1235 100644 --- a/app/src/main/res/values/color.xml +++ b/app/src/main/res/values/color.xml @@ -20,4 +20,5 @@ #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 6a58f9d..b395c0d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -35,7 +35,7 @@ G B Add Stripe - Settings + Settings We currently only support WLAN, please connect to one LED stripes reloaded Couldn\'t get stripes from daemon: diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index db20e05..eb5437d 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -22,7 +22,7 @@ Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> - + + diff --git a/build.gradle b/build.gradle index aac6a05..372e9c5 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.1' + classpath 'com.android.tools.build:gradle:2.0.0-beta7' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files