Skip to content

Commit 11b6b23

Browse files
committed
- Redesign meters
- Update threads slider
1 parent 7520405 commit 11b6b23

14 files changed

+188
-54
lines changed

app/src/main/java/io/scalaproject/androidminer/MainActivity.java

Lines changed: 68 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
import android.graphics.Bitmap;
4343
import android.graphics.BitmapFactory;
4444
import android.graphics.Point;
45+
import android.graphics.PorterDuff;
46+
import android.graphics.Rect;
4547
import android.graphics.drawable.Drawable;
4648
import android.net.Uri;
4749
import android.os.BatteryManager;
@@ -66,7 +68,6 @@
6668
import android.widget.LinearLayout;
6769
import android.widget.ProgressBar;
6870
import android.widget.SeekBar;
69-
import android.widget.Space;
7071
import android.widget.TextView;
7172
import android.widget.Toast;
7273
import android.text.Spannable;
@@ -94,7 +95,7 @@
9495
import com.android.volley.VolleyError;
9596
import com.android.volley.toolbox.StringRequest;
9697
import com.android.volley.toolbox.Volley;
97-
import com.github.anastr.speedviewlib.DeluxeSpeedView;
98+
import com.github.anastr.speedviewlib.SpeedView;
9899
import com.github.anastr.speedviewlib.TubeSpeedometer;
99100
import com.github.anastr.speedviewlib.components.Section;
100101
import com.google.android.material.bottomnavigation.BottomNavigationView;
@@ -135,6 +136,8 @@ public class MainActivity extends BaseActivity
135136
private boolean bPayoutDataReceived = false;
136137

137138
private boolean bIgnoreCPUCoresEvent = false;
139+
private boolean bIsRestartEvent = false;
140+
private boolean bIsRestartDialogShown = false;
138141

139142
// Settings
140143
private boolean bDisableTemperatureControl = false;
@@ -290,20 +293,34 @@ protected void onCreate(Bundle savedInstanceState) {
290293
meterCores = findViewById(R.id.meter_cores);
291294
meterCores.makeSections(1, getResources().getColor(R.color.c_yellow), Section.Style.SQUARE);
292295
meterCores.setMaxSpeed(nNbMaxCores);
293-
meterCores.speedTo(nCores);
296+
meterCores.speedTo(nCores, 0);
294297

295298
tvNbCores = findViewById(R.id.nbcores);
296299

297300
// Hashrate
298301
meterHashrate = findViewById(R.id.meter_hashrate);
299302
meterHashrate.makeSections(1, getResources().getColor(R.color.c_blue), Section.Style.SQUARE);
303+
/*ImageIndicator imageIndicatorHs = new ImageIndicator(getApplicationContext(), getResources().getDrawable(R.drawable.indicator_speed));
304+
meterHashrate.setIndicator(imageIndicatorHs);*/
300305

301306
meterHashrate_avg = findViewById(R.id.meter_hashrate_avg);
302307
meterHashrate_avg.makeSections(1, getResources().getColor(android.R.color.transparent), Section.Style.SQUARE);
303308

309+
// Scale drawable
310+
/*Bitmap bitmapAvg = Utils.getBitmapFromVectorDrawable(contextOfApplication, R.drawable.indicator_avg);
311+
Drawable dAvg = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmapAvg, 12, 6, true));
312+
ImageIndicator imageIndicatorAvg = new ImageIndicator(getApplicationContext(), dAvg);
313+
meterHashrate_avg.setIndicator(imageIndicatorAvg);*/
314+
304315
meterHashrate_max = findViewById(R.id.meter_hashrate_max);
305316
meterHashrate_max.makeSections(1, getResources().getColor(android.R.color.transparent), Section.Style.SQUARE);
306317

318+
// Scale drawable
319+
/*Bitmap bitmapMax = Utils.getBitmapFromVectorDrawable(contextOfApplication, R.drawable.indicator_max);
320+
Drawable dMax = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmapMax, 12, 6, true));
321+
ImageIndicator imageIndicatorMax = new ImageIndicator(getApplicationContext(), dMax);
322+
meterHashrate_max.setIndicator(imageIndicatorMax);*/
323+
307324
tvHashrate = findViewById(R.id.hashrate);
308325
tvStatus = findViewById(R.id.miner_status);
309326

@@ -339,6 +356,9 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
339356
return;
340357

341358
if(isDeviceMining()) {
359+
if(bIsRestartDialogShown)
360+
return;
361+
342362
final Dialog dialog = new Dialog(MainActivity.this);
343363
dialog.setContentView(R.layout.stop_mining);
344364
dialog.setCancelable(false);
@@ -350,6 +370,8 @@ public void onClick(View v) {
350370
nCores = sbCores.getProgress();
351371
Config.write("cores", Integer.toString(nCores));
352372

373+
bIsRestartEvent = true;
374+
353375
MainActivity.this.stopMining(); // Stop mining
354376

355377
// Start miner with small delay
@@ -363,6 +385,7 @@ public void run() {
363385
updateCores();
364386

365387
dialog.dismiss();
388+
bIsRestartDialogShown = false;
366389
}
367390
});
368391

@@ -379,10 +402,12 @@ public void run() {
379402
});
380403

381404
dialog.dismiss();
405+
bIsRestartDialogShown = false;
382406
}
383407
});
384408

385409
dialog.show();
410+
bIsRestartDialogShown = true;
386411
}
387412
else {
388413
nCores = sbCores.getProgress();
@@ -702,7 +727,7 @@ private void updateCores() {
702727
String sCores = nCores + "/" + nNbMaxCores;
703728
tvNbCores.setText(sCores);
704729

705-
meterCores.speedTo(nCores);
730+
meterCores.speedTo(nCores, 0);
706731
}
707732

708733
@Override
@@ -922,6 +947,9 @@ private void toggleMiningState() {
922947
}
923948

924949
private void setMiningButtonState(Boolean state) {
950+
if(bIsRestartEvent)
951+
return;
952+
925953
Drawable buttonDrawableStart = btnStart.getBackground();
926954
buttonDrawableStart = DrawableCompat.wrap(buttonDrawableStart);
927955

@@ -945,6 +973,24 @@ private void setMiningButtonState(Boolean state) {
945973
}
946974
}
947975

976+
private void enableSliderCores(boolean enable) {
977+
if(bIsRestartEvent)
978+
return;
979+
980+
Rect bounds = sbCores.getProgressDrawable().getBounds();
981+
982+
if(enable) {
983+
sbCores.setProgressDrawable(getResources().getDrawable(R.drawable.seekbar_ruler_yellow));
984+
sbCores.getThumb().setColorFilter(getResources().getColor(R.color.c_white), PorterDuff.Mode.SRC_IN);
985+
}
986+
else {
987+
sbCores.setProgressDrawable(getResources().getDrawable(R.drawable.seekbar_ruler_inactive));
988+
sbCores.getThumb().setColorFilter(getResources().getColor(R.color.c_light_grey), PorterDuff.Mode.SRC_IN);
989+
}
990+
991+
sbCores.getProgressDrawable().setBounds(bounds);
992+
}
993+
948994
private void setMinerStatus(Integer status) {
949995
if(status == STATE_STOPPED) {
950996
llStatus.setVisibility(View.GONE);
@@ -962,6 +1008,7 @@ private void setMinerStatus(Integer status) {
9621008

9631009
stopTimerStatusHashrate();
9641010
resetHashrateTicks();
1011+
enableSliderCores(true);
9651012
}
9661013
else if(status == STATE_MINING) {
9671014
if(tvHashrate.getText().equals("0")) {
@@ -979,6 +1026,8 @@ else if(status == STATE_MINING) {
9791026
View v = findViewById(R.id.main_navigation);
9801027
v.setKeepScreenOn(true);
9811028
}
1029+
1030+
enableSliderCores(false);
9821031
}
9831032
else {
9841033
llStatus.setVisibility(View.VISIBLE);
@@ -1042,7 +1091,7 @@ public void stopTimerStatusHashrate() {
10421091
}
10431092

10441093
private void resetHashrateTicks() {
1045-
DeluxeSpeedView meterTicks = findViewById(R.id.meter_hashrate_ticks);
1094+
SpeedView meterTicks = findViewById(R.id.meter_hashrate_ticks);
10461095
meterTicks.setMaxSpeed(500);
10471096
meterTicks.setTickNumber(0);
10481097
meterTicks.setTextColor(getResources().getColor(android.R.color.transparent));
@@ -1053,9 +1102,13 @@ private void resetHashrateTicks() {
10531102
}
10541103

10551104
private void updateHashrateTicks(float fMax) {
1056-
DeluxeSpeedView meterTicks = findViewById(R.id.meter_hashrate_ticks);
1105+
SpeedView meterTicks = findViewById(R.id.meter_hashrate_ticks);
10571106
if(meterTicks.getTickNumber() == 0 && fMax > 0) {
1058-
float hrMax = nNbMaxCores * fMax / nCores * 1.05f;
1107+
float hrMax = nNbMaxCores * fMax / nCores;
1108+
if(!nCores.equals(nNbMaxCores)) {
1109+
hrMax = hrMax * 1.05f;
1110+
}
1111+
10591112
meterTicks.setMaxSpeed(hrMax);
10601113
meterTicks.setTickNumber(10);
10611114
meterTicks.setTextColor(getResources().getColor(R.color.txt_main));
@@ -1091,7 +1144,7 @@ private void updateHashrate(float fSpeed, float fMax) {
10911144
if(!isDeviceMining() || fSpeed < 0.0f)
10921145
return;
10931146

1094-
DeluxeSpeedView meterTicks = findViewById(R.id.meter_hashrate_ticks);
1147+
SpeedView meterTicks = findViewById(R.id.meter_hashrate_ticks);
10951148
if(meterTicks.getTickNumber() == 0) {
10961149
updateHashrateTicks(fMax);
10971150

@@ -1453,6 +1506,8 @@ public void onStateChange(Boolean state) {
14531506

14541507
setStatusText("Miner Stopped");
14551508
}
1509+
1510+
bIsRestartEvent = false;
14561511
});
14571512
}
14581513

@@ -1470,9 +1525,9 @@ public void onStatusChange(String status, float speed, float max, Integer accept
14701525
}
14711526

14721527
if(accepted == 1) {
1473-
tvAcceptedShares.setTextColor(getResources().getColor(R.color.txt_main));
1474-
tvDifficulty.setTextColor(getResources().getColor(R.color.txt_main));
1475-
tvConnection.setTextColor(getResources().getColor(R.color.txt_main));
1528+
tvAcceptedShares.setTextColor(getResources().getColor(R.color.c_white));
1529+
tvDifficulty.setTextColor(getResources().getColor(R.color.c_white));
1530+
tvConnection.setTextColor(getResources().getColor(R.color.c_white));
14761531
}
14771532

14781533
updateHashrate(speed, max);
@@ -1674,9 +1729,9 @@ private void enableStartBtn(boolean enabled) {
16741729
btnStart.setBackground(buttonDrawable);
16751730
btnStart.setTextColor(getResources().getColor(R.color.c_white));
16761731
} else {
1677-
DrawableCompat.setTint(buttonDrawable, getResources().getColor(R.color.c_black));
1732+
DrawableCompat.setTint(buttonDrawable, getResources().getColor(R.color.c_inactive));
16781733
btnStart.setBackground(buttonDrawable);
1679-
btnStart.setTextColor(getResources().getColor(R.color.c_black));
1734+
btnStart.setTextColor(getResources().getColor(R.color.c_inactive));
16801735
}
16811736

16821737
btnStart.setEnabled(enabled);

app/src/main/java/io/scalaproject/androidminer/Utils.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,20 @@
66
import android.content.ClipData;
77
import android.content.ClipboardManager;
88
import android.content.Context;
9+
import android.graphics.Bitmap;
10+
import android.graphics.Canvas;
11+
import android.graphics.drawable.Drawable;
12+
import android.os.Build;
913
import android.view.Gravity;
1014
import android.view.LayoutInflater;
1115
import android.view.MotionEvent;
1216
import android.view.View;
1317
import android.widget.LinearLayout;
1418
import android.widget.PopupWindow;
1519

20+
import androidx.core.content.ContextCompat;
21+
import androidx.core.graphics.drawable.DrawableCompat;
22+
1623
import java.text.DateFormat;
1724
import java.text.SimpleDateFormat;
1825
import java.util.Calendar;
@@ -120,4 +127,19 @@ static String pasteFromClipboard(Context appContext) {
120127

121128
return pasteData;
122129
}
130+
131+
static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
132+
Drawable drawable = ContextCompat.getDrawable(context, drawableId);
133+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
134+
drawable = (DrawableCompat.wrap(drawable)).mutate();
135+
}
136+
137+
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
138+
drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
139+
Canvas canvas = new Canvas(bitmap);
140+
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
141+
drawable.draw(canvas);
142+
143+
return bitmap;
144+
}
123145
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:width="12dp"
4+
android:height="6dp"
5+
android:viewportWidth="28.35"
6+
android:viewportHeight="14.17">
7+
8+
<path
9+
android:fillColor="#C8D1E8"
10+
android:pathData="M0.009,14.172 L14.183,-0.001 L28.355,14.172 Z" />
11+
</vector>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:width="12dp"
4+
android:height="6dp"
5+
android:viewportWidth="28.35"
6+
android:viewportHeight="14.17">
7+
8+
<path
9+
android:fillColor="#E98138"
10+
android:pathData="M0.009,14.172 L14.183,-0.001 L28.355,14.172 Z" />
11+
</vector>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:width="1.42dp"
4+
android:height="14.17dp"
5+
android:viewportWidth="1.42"
6+
android:viewportHeight="14.17">
7+
8+
<path
9+
android:fillColor="#E8EEF9"
10+
android:pathData="M0.001,-0.001 L1.418,-0.001 L1.418,14.171 L0.001,14.171 L0.001,-0.001 Z" />
11+
</vector>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
3+
<item android:id="@android:id/background">
4+
<shape android:shape="rectangle">
5+
<solid
6+
android:color="@color/bg_lighter" />
7+
<corners android:radius="5dp" />
8+
</shape>
9+
</item>
10+
<item android:id="@android:id/progress">
11+
<clip>
12+
<shape android:shape="rectangle">
13+
<solid
14+
android:color="@color/c_inactive" />
15+
<corners android:radius="5dp" />
16+
</shape>
17+
</clip>
18+
</item>
19+
</layer-list>

0 commit comments

Comments
 (0)