Skip to content

Commit 06cdcc3

Browse files
committed
Update UI
1 parent 063b3fe commit 06cdcc3

38 files changed

+834
-469
lines changed

app/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,5 @@ dependencies {
5050
implementation 'androidx.preference:preference-ktx:1.2.1'
5151

5252
implementation 'androidx.browser:browser:1.8.0'
53+
implementation 'com.google.android.material:material:1.4.0'
5354
}

app/src/main/java/cc/calliope/mini/activity/BaseActivity.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -394,12 +394,11 @@ public void startBluetoothEnableActivity(View view) {
394394

395395
public void onFabClick(View view) {
396396
State state = ApplicationStateHandler.getStateLiveData().getValue();
397-
boolean flashing = false;
398-
if (state != null) {
399-
flashing = state.getType() == State.STATE_FLASHING;
397+
if (state == null) {
398+
return;
400399
}
401400

402-
if (flashing) {
401+
if (state.getType() == State.STATE_FLASHING || state.getType() == State.STATE_BUSY) {
403402
startFlashingActivity();
404403
} else {
405404
createPopupMenu(view);

app/src/main/java/cc/calliope/mini/activity/FlashingActivity.java

+1
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ protected void onPause() {
143143

144144
@Override
145145
public void onBackPressed() {
146+
super.onBackPressed();
146147
finish();
147148
}
148149

app/src/main/java/cc/calliope/mini/activity/MainActivity.java

+22-19
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
import android.os.Build;
88
import android.os.Bundle;
99
import android.util.Log;
10+
import android.view.MenuItem;
1011
import android.view.View;
1112
import android.view.WindowManager;
1213
import android.widget.AdapterView;
1314

1415
import java.io.File;
16+
import java.util.HashMap;
1517
import java.util.List;
18+
import java.util.Map;
1619

1720
import androidx.activity.result.ActivityResultLauncher;
1821
import androidx.activity.result.contract.ActivityResultContracts;
@@ -23,6 +26,8 @@
2326
import androidx.navigation.Navigation;
2427
import androidx.navigation.ui.NavigationUI;
2528

29+
import com.google.android.material.bottomnavigation.BottomNavigationView;
30+
2631
import cc.calliope.mini.popup.PopupItem;
2732
import cc.calliope.mini.R;
2833
import cc.calliope.mini.databinding.ActivityMainBinding;
@@ -53,28 +58,26 @@ protected void onCreate(Bundle savedInstanceState) {
5358

5459
setPatternFab(binding.patternFab);
5560

61+
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
62+
5663
NavController navController = Navigation.findNavController(this, R.id.navigation_host_fragment);
57-
navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
58-
previousFragment = currentFragment;
59-
currentFragment = destination.getId();
60-
61-
if (currentFragment == R.id.navigation_web) {
62-
binding.bottomNavigation.setVisibility(View.GONE);
63-
binding.patternFab.moveDown();
64-
} else if (previousFragment == R.id.navigation_web){
65-
binding.bottomNavigation.setVisibility(View.VISIBLE);
66-
binding.patternFab.moveUp();
67-
}
64+
NavigationUI.setupWithNavController(bottomNavigationView, navController);
6865

69-
if (currentFragment == R.id.navigation_help) {
70-
binding.patternFab.setVisibility(View.GONE);
71-
} else if (previousFragment == R.id.navigation_help){
72-
binding.patternFab.setVisibility(View.VISIBLE);
73-
}
66+
Map<Integer, Integer> navMapping = new HashMap<>();
67+
navMapping.put(R.id.navigation_info, R.id.navigation_home);
68+
navMapping.put(R.id.navigation_web, R.id.navigation_editors);
69+
navMapping.put(R.id.navigation_help, R.id.navigation_settings);
7470

75-
Log.v(TAG, "Destination id: " + destination.getId());
76-
Log.v(TAG, "Select item id: " + binding.bottomNavigation.getSelectedItemId());
71+
navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
72+
int destId = destination.getId();
73+
Integer mapping = navMapping.get(destId);
74+
int menuId = (mapping != null) ? mapping : destId;
75+
MenuItem menuItem = binding.bottomNavigation.getMenu().findItem(menuId);
76+
if (menuItem != null) {
77+
menuItem.setChecked(true);
78+
}
7779
});
80+
7881
NavigationUI.setupWithNavController(binding.bottomNavigation, navController);
7982

8083
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
@@ -132,7 +135,7 @@ public void onPopupMenuItemClick(AdapterView<?> parent, View view, int position,
132135
if (position == 1) {
133136
ScriptsFragment scriptsFragment = new ScriptsFragment();
134137
scriptsFragment.show(getSupportFragmentManager(), "Bottom Sheet Dialog Fragment");
135-
}else if(position == 2){
138+
} else if (position == 2) {
136139
if (fullScreen) {
137140
disableFullScreenMode();
138141
} else {

app/src/main/java/cc/calliope/mini/core/service/FlashingService.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import cc.calliope.mini.R;
3030
import cc.calliope.mini.core.state.ApplicationStateHandler;
3131
import cc.calliope.mini.core.state.Error;
32+
import cc.calliope.mini.core.state.Notification;
3233
import cc.calliope.mini.core.state.Progress;
3334
import cc.calliope.mini.core.state.State;
3435
import cc.calliope.mini.utils.FileUtils;
@@ -103,7 +104,8 @@ public int onStartCommand(Intent intent, int flags, int startId) {
103104
super.onStartCommand(intent, flags, startId);
104105
Log.d(TAG, "FlashingService started");
105106

106-
ApplicationStateHandler.updateNotification(INFO, "Flashing in progress. Please wait...");
107+
String message = getString(R.string.partial_flashing_starting);
108+
ApplicationStateHandler.updateNotification(Notification.INFO, message);
107109

108110
if (!isBluetoothEnabled() || flashingInProgress()) {
109111
return START_NOT_STICKY;

app/src/main/java/cc/calliope/mini/core/service/PartialFlashingInitService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ class PartialFlashingInitService : Service() {
350350
bundle.putBoolean("result", errorCounter == 0)
351351
resultReceiver?.send(RESULT_OK, bundle)
352352

353-
ApplicationStateHandler.updateState(State.STATE_IDLE)
353+
//ApplicationStateHandler.updateState(State.STATE_IDLE)
354354
Log.d(TAG, "Service destroyed")
355355
}
356356

app/src/main/java/cc/calliope/mini/core/service/PartialFlashingService.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import static android.app.Activity.RESULT_OK;
44
import static cc.calliope.mini.core.state.State.STATE_BUSY;
5-
import static cc.calliope.mini.core.state.State.STATE_ERROR;
65
import static cc.calliope.mini.core.state.State.STATE_FLASHING;
76
import static cc.calliope.mini.core.state.State.STATE_IDLE;
87

@@ -31,6 +30,7 @@ public class PartialFlashingService extends PartialFlashingBaseService {
3130
static final String TAG = "PartialFlashingService";
3231

3332
private ResultReceiver resultReceiver = null;
33+
private int finalState = STATE_IDLE;
3434

3535
@Override
3636
public void logi(String message) {
@@ -90,7 +90,7 @@ public void onCreate() {
9090
public void onDestroy() {
9191
super.onDestroy();
9292

93-
//ApplicationStateHandler.updateState(STATE_READY);
93+
ApplicationStateHandler.updateState(finalState);
9494
LocalBroadcastManager.getInstance(this).unregisterReceiver(progressReceiver);
9595
}
9696

@@ -120,19 +120,21 @@ public void onReceive(Context context, Intent intent) {
120120
String message = getString(R.string.flashing_uploading);
121121
ApplicationStateHandler.updateNotification(Notification.INFO, message);
122122
ApplicationStateHandler.updateState(STATE_BUSY);
123+
ApplicationStateHandler.updateProgress(DfuService.PROGRESS_STARTING);
123124
}
124125
case BROADCAST_COMPLETE -> {
126+
finalState = STATE_IDLE;
125127
String message = getString(R.string.flashing_completed);
126128
ApplicationStateHandler.updateNotification(Notification.INFO, message);
127-
ApplicationStateHandler.updateState(STATE_IDLE);
128-
ApplicationStateHandler.updateProgress(0);
129+
ApplicationStateHandler.updateProgress(DfuService.PROGRESS_COMPLETED);
129130
sendResult(true);
130131
}
131132
case BROADCAST_PF_FAILED, BROADCAST_PF_ATTEMPT_DFU, BROADCAST_PF_ABORTED -> {
133+
finalState = STATE_BUSY;
134+
String message = getString(R.string.partial_flashing_failed);
132135
final int data = intent.getIntExtra(EXTRA_DATA, 0);
133-
Log.e(TAG, "Partial flashing failed");
134-
ApplicationStateHandler.updateState(STATE_BUSY);
135-
ApplicationStateHandler.updateNotification(Notification.INFO, "Partial flashing failed, attempting full flashing");
136+
ApplicationStateHandler.updateNotification(Notification.INFO, message);
137+
Log.e(TAG, "Partial flashing failed, error code: " + data);
136138
//ApplicationStateHandler.updateState(STATE_ERROR);
137139
//ApplicationStateHandler.updateNotification(Notification.ERROR, R.string.error_connection_failed);
138140
//ApplicationStateHandler.updateError(data, "Partial flashing failed");

app/src/main/java/cc/calliope/mini/dialog/DialogUtils.java

+45-22
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package cc.calliope.mini.dialog;
22

33
import android.content.Context;
4+
import android.graphics.Color;
45
import android.graphics.drawable.ColorDrawable;
6+
import android.util.Pair;
57
import android.view.LayoutInflater;
68
import android.view.View;
79
import android.view.Window;
@@ -12,12 +14,30 @@
1214
import androidx.appcompat.app.AlertDialog;
1315
import cc.calliope.mini.R;
1416

15-
public class DialogUtils {
17+
public final class DialogUtils {
18+
private DialogUtils() {
19+
}
20+
21+
private static Pair<AlertDialog, View> createDialog(Context context, int layoutResId) {
22+
View view = LayoutInflater.from(context).inflate(layoutResId, null);
23+
AlertDialog alertDialog = new AlertDialog.Builder(context)
24+
.setView(view)
25+
.create();
26+
setTransparentBackground(alertDialog);
27+
return new Pair<>(alertDialog, view);
28+
}
29+
30+
private static void setTransparentBackground(AlertDialog dialog) {
31+
Window window = dialog.getWindow();
32+
if (window != null) {
33+
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
34+
}
35+
}
1636

1737
public static void showEditDialog(Context context, String title, String input, OnEditDialogListener listener) {
18-
View view = LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);
19-
AlertDialog.Builder builder = new AlertDialog.Builder(context);
20-
builder.setView(view);
38+
Pair<AlertDialog, View> pair = createDialog(context, R.layout.dialog_edit);
39+
AlertDialog alertDialog = pair.first;
40+
View view = pair.second;
2141

2242
TextView dialogTitle = view.findViewById(R.id.dialog_title);
2343
EditText dialogInput = view.findViewById(R.id.dialog_input);
@@ -27,16 +47,9 @@ public static void showEditDialog(Context context, String title, String input, O
2747
dialogTitle.setText(title);
2848
dialogInput.setText(input);
2949

30-
AlertDialog alertDialog = builder.create();
31-
Window window = alertDialog.getWindow();
32-
if (window != null) {
33-
window.setBackgroundDrawable(new ColorDrawable(0));
34-
}
35-
3650
dialogOkButton.setOnClickListener(v -> {
37-
String inputText = dialogInput.getText().toString();
3851
if (listener != null) {
39-
listener.onOkButtonClicked(inputText);
52+
listener.onOkButtonClicked(dialogInput.getText().toString());
4053
}
4154
alertDialog.dismiss();
4255
});
@@ -45,10 +58,27 @@ public static void showEditDialog(Context context, String title, String input, O
4558
alertDialog.show();
4659
}
4760

61+
public static void showInfoDialog(Context context, String title, String message) {
62+
Pair<AlertDialog, View> pair = createDialog(context, R.layout.dialog_info);
63+
AlertDialog alertDialog = pair.first;
64+
View view = pair.second;
65+
66+
TextView dialogTitle = view.findViewById(R.id.dialog_title);
67+
TextView dialogMessage = view.findViewById(R.id.dialog_message);
68+
Button dialogCancelButton = view.findViewById(R.id.dialog_cancel);
69+
70+
dialogTitle.setText(title);
71+
dialogMessage.setText(message);
72+
73+
dialogCancelButton.setOnClickListener(v -> alertDialog.dismiss());
74+
75+
alertDialog.show();
76+
}
77+
4878
public static void showWarningDialog(Context context, String title, String message, OnWarningDialogListener listener) {
49-
AlertDialog.Builder builder = new AlertDialog.Builder(context);
50-
View view = LayoutInflater.from(context).inflate(R.layout.dialog_warning, null);
51-
builder.setView(view);
79+
Pair<AlertDialog, View> pair = createDialog(context, R.layout.dialog_warning);
80+
AlertDialog alertDialog = pair.first;
81+
View view = pair.second;
5282

5383
TextView dialogTitle = view.findViewById(R.id.dialog_title);
5484
TextView dialogMessage = view.findViewById(R.id.dialog_message);
@@ -58,12 +88,6 @@ public static void showWarningDialog(Context context, String title, String messa
5888
dialogTitle.setText(title);
5989
dialogMessage.setText(message);
6090

61-
AlertDialog alertDialog = builder.create();
62-
Window window = alertDialog.getWindow();
63-
if (window != null) {
64-
window.setBackgroundDrawable(new ColorDrawable(0));
65-
}
66-
6791
dialogOkButton.setOnClickListener(v -> {
6892
if (listener != null) {
6993
listener.onOkButtonClicked();
@@ -72,7 +96,6 @@ public static void showWarningDialog(Context context, String title, String messa
7296
});
7397

7498
dialogCancelButton.setOnClickListener(v -> alertDialog.dismiss());
75-
7699
alertDialog.show();
77100
}
78101

app/src/main/java/cc/calliope/mini/fragment/WebInfoFragment.kt

-38
This file was deleted.

0 commit comments

Comments
 (0)