Skip to content

Commit 02dec78

Browse files
committed
fix: remove dead code + beauty fixes
1 parent ec1fa26 commit 02dec78

7 files changed

Lines changed: 125 additions & 279 deletions

‎app/src/main/java/com/drivehub/kamera/DashcamSettingsController.java‎

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818

1919
final class DashcamSettingsController {
2020

21-
private static final String KEY_ENABLED = "enabled";
22-
private static final String KEY_SEGMENT_MIN = "segmentMin";
23-
private static final String KEY_TOTAL_MIN = "totalMin";
21+
static final String KEY_ENABLED = "enabled";
22+
static final String KEY_SEGMENT_MIN = "segmentMin";
23+
static final String KEY_TOTAL_MIN = "totalMin";
2424
private static final String KEY_RECORDING_FPS = "recordingFps";
2525
private static final String KEY_SIGNATURE = "recordingSignature";
2626
private static final String KEY_SHOW_SPEED = "recordingShowSpeed";
@@ -29,6 +29,7 @@ final class DashcamSettingsController {
2929
private static final int MIN_RECORDING_FPS = 1;
3030
private static final int MAX_RECORDING_FPS = 60;
3131
private static final int MAX_SIGNATURE_LENGTH = 40;
32+
private static final String RECORDS_DIR_NAME = "mg4_cam_records";
3233

3334
private final MainActivity activity;
3435
private boolean syncingEnabled;
@@ -120,30 +121,19 @@ public void afterTextChanged(Editable s) {
120121
saveFields(prefs, etSegmentMin, etTotalMin, etRecordingFps, etSignature, false);
121122
}
122123
};
123-
if (etSegmentMin != null) {
124-
etSegmentMin.addTextChangedListener(watcher);
125-
etSegmentMin.setOnFocusChangeListener((v, hasFocus) -> {
126-
if (!hasFocus) saveFields(prefs, etSegmentMin, etTotalMin, etRecordingFps, etSignature, true);
127-
});
128-
}
129-
if (etTotalMin != null) {
130-
etTotalMin.addTextChangedListener(watcher);
131-
etTotalMin.setOnFocusChangeListener((v, hasFocus) -> {
132-
if (!hasFocus) saveFields(prefs, etSegmentMin, etTotalMin, etRecordingFps, etSignature, true);
133-
});
134-
}
135-
if (etRecordingFps != null) {
136-
etRecordingFps.addTextChangedListener(watcher);
137-
etRecordingFps.setOnFocusChangeListener((v, hasFocus) -> {
138-
if (!hasFocus) saveFields(prefs, etSegmentMin, etTotalMin, etRecordingFps, etSignature, true);
139-
});
140-
}
141-
if (etSignature != null) {
142-
etSignature.addTextChangedListener(watcher);
143-
etSignature.setOnFocusChangeListener((v, hasFocus) -> {
144-
if (!hasFocus) saveFields(prefs, etSegmentMin, etTotalMin, etRecordingFps, etSignature, true);
145-
});
146-
}
124+
Runnable normalize = () -> saveFields(prefs, etSegmentMin, etTotalMin, etRecordingFps, etSignature, true);
125+
bindEditText(etSegmentMin, watcher, normalize);
126+
bindEditText(etTotalMin, watcher, normalize);
127+
bindEditText(etRecordingFps, watcher, normalize);
128+
bindEditText(etSignature, watcher, normalize);
129+
}
130+
131+
private void bindEditText(EditText editText, android.text.TextWatcher watcher, Runnable onBlur) {
132+
if (editText == null) return;
133+
editText.addTextChangedListener(watcher);
134+
editText.setOnFocusChangeListener((v, hasFocus) -> {
135+
if (!hasFocus) onBlur.run();
136+
});
147137
}
148138

149139
private void saveFields(SharedPreferences prefs, EditText etSegmentMin, EditText etTotalMin,
@@ -226,9 +216,9 @@ private boolean hasStoragePermission() {
226216
== PackageManager.PERMISSION_GRANTED;
227217
}
228218

229-
private File getRecordsBaseDir() {
219+
static File getRecordsBaseDir() {
230220
File downloads = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
231-
File dir = new File(downloads, "mg4_cam_records");
221+
File dir = new File(downloads, RECORDS_DIR_NAME);
232222
//noinspection ResultOfMethodCallIgnored
233223
dir.mkdirs();
234224
return dir;
@@ -246,14 +236,4 @@ private File findMountedUsbRoot() {
246236
}
247237
return null;
248238
}
249-
250-
private abstract static class SimpleTextWatcher implements android.text.TextWatcher {
251-
@Override
252-
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
253-
}
254-
255-
@Override
256-
public void onTextChanged(CharSequence s, int start, int before, int count) {
257-
}
258-
}
259239
}

‎app/src/main/java/com/drivehub/kamera/MainActivity.java‎

Lines changed: 14 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -291,12 +291,14 @@ private void showSettingsDialog() {
291291
TextView tabDashcam = dialog.findViewById(R.id.tabDashcam);
292292
TextView tabOptik = dialog.findViewById(R.id.tabOptik);
293293
TextView tabCredits = dialog.findViewById(R.id.tabCredits);
294+
TextView[] settingsTabs = {tabUpdate, tabSettings, tabSignalCamera, tabDashcam, tabOptik, tabCredits};
294295
View sectionUpdate = dialog.findViewById(R.id.sectionUpdate);
295296
View sectionSettings = dialog.findViewById(R.id.sectionSettings);
296297
View sectionSignalCamera = dialog.findViewById(R.id.sectionSignalCamera);
297298
View sectionDashcam = dialog.findViewById(R.id.sectionDashcam);
298299
View sectionOptik = dialog.findViewById(R.id.sectionOptik);
299300
View sectionCredits = dialog.findViewById(R.id.sectionCredits);
301+
View[] settingsSections = {sectionUpdate, sectionSettings, sectionSignalCamera, sectionDashcam, sectionOptik, sectionCredits};
300302
View sectionDevTools = dialog.findViewById(R.id.sectionDevTools);
301303
View accentRow = dialog.findViewById(R.id.rowAccentColor);
302304
View accentPreview = dialog.findViewById(R.id.viewAccentPreview);
@@ -350,39 +352,11 @@ private void showSettingsDialog() {
350352
DashcamEventOverlayService.showConfirmation(MainActivity.this));
351353
}
352354

353-
bindSettingsTab(tabUpdate, tabSettings, tabSignalCamera, tabDashcam, tabOptik, tabCredits,
354-
sectionUpdate, sectionSettings, sectionSignalCamera, sectionDashcam, sectionOptik, sectionCredits, 1);
355-
appearanceController.reapplyForActiveTab(1);
356-
tabUpdate.setOnClickListener(v -> {
357-
bindSettingsTab(tabUpdate, tabSettings, tabSignalCamera, tabDashcam, tabOptik, tabCredits,
358-
sectionUpdate, sectionSettings, sectionSignalCamera, sectionDashcam, sectionOptik, sectionCredits, 0);
359-
appearanceController.reapplyForActiveTab(0);
360-
});
361-
tabSettings.setOnClickListener(v -> {
362-
bindSettingsTab(tabUpdate, tabSettings, tabSignalCamera, tabDashcam, tabOptik, tabCredits,
363-
sectionUpdate, sectionSettings, sectionSignalCamera, sectionDashcam, sectionOptik, sectionCredits, 1);
364-
appearanceController.reapplyForActiveTab(1);
365-
});
366-
tabSignalCamera.setOnClickListener(v -> {
367-
bindSettingsTab(tabUpdate, tabSettings, tabSignalCamera, tabDashcam, tabOptik, tabCredits,
368-
sectionUpdate, sectionSettings, sectionSignalCamera, sectionDashcam, sectionOptik, sectionCredits, 2);
369-
appearanceController.reapplyForActiveTab(2);
370-
});
371-
tabDashcam.setOnClickListener(v -> {
372-
bindSettingsTab(tabUpdate, tabSettings, tabSignalCamera, tabDashcam, tabOptik, tabCredits,
373-
sectionUpdate, sectionSettings, sectionSignalCamera, sectionDashcam, sectionOptik, sectionCredits, 3);
374-
appearanceController.reapplyForActiveTab(3);
375-
});
376-
tabOptik.setOnClickListener(v -> {
377-
bindSettingsTab(tabUpdate, tabSettings, tabSignalCamera, tabDashcam, tabOptik, tabCredits,
378-
sectionUpdate, sectionSettings, sectionSignalCamera, sectionDashcam, sectionOptik, sectionCredits, 4);
379-
appearanceController.reapplyForActiveTab(4);
380-
});
381-
tabCredits.setOnClickListener(v -> {
382-
bindSettingsTab(tabUpdate, tabSettings, tabSignalCamera, tabDashcam, tabOptik, tabCredits,
383-
sectionUpdate, sectionSettings, sectionSignalCamera, sectionDashcam, sectionOptik, sectionCredits, 5);
384-
appearanceController.reapplyForActiveTab(5);
385-
});
355+
switchSettingsTab(settingsTabs, settingsSections, 1);
356+
for (int i = 0; i < settingsTabs.length; i++) {
357+
final int tabIndex = i;
358+
settingsTabs[i].setOnClickListener(v -> switchSettingsTab(settingsTabs, settingsSections, tabIndex));
359+
}
386360

387361
TextView tvVersion = dialog.findViewById(R.id.tvDialogVersion);
388362
TextView tvBeta = dialog.findViewById(R.id.tvDialogVersionBeta);
@@ -407,9 +381,7 @@ private void showSettingsDialog() {
407381
if (sectionDevTools != null) {
408382
sectionDevTools.setVisibility(View.VISIBLE);
409383
}
410-
bindSettingsTab(tabUpdate, tabSettings, tabSignalCamera, tabDashcam, tabOptik, tabCredits,
411-
sectionUpdate, sectionSettings, sectionSignalCamera, sectionDashcam, sectionOptik, sectionCredits, 1);
412-
appearanceController.reapplyForActiveTab(1);
384+
switchSettingsTab(settingsTabs, settingsSections, 1);
413385
Toast.makeText(this, R.string.settings_dev_unlocked, Toast.LENGTH_SHORT).show();
414386
};
415387
tvVersion.setOnClickListener(unlockDevListener);
@@ -446,23 +418,12 @@ private void showSettingsDialog() {
446418
}
447419
}
448420

449-
private void bindSettingsTab(
450-
TextView tabUpdate, TextView tabSettings, TextView tabSignalCamera, TextView tabDashcam, TextView tabOptik, TextView tabCredits,
451-
View sectionUpdate, View sectionSettings, View sectionSignalCamera, View sectionDashcam, View sectionOptik, View sectionCredits,
452-
int active
453-
) {
454-
sectionUpdate.setVisibility(active == 0 ? View.VISIBLE : View.GONE);
455-
sectionSettings.setVisibility(active == 1 ? View.VISIBLE : View.GONE);
456-
sectionSignalCamera.setVisibility(active == 2 ? View.VISIBLE : View.GONE);
457-
sectionDashcam.setVisibility(active == 3 ? View.VISIBLE : View.GONE);
458-
sectionOptik.setVisibility(active == 4 ? View.VISIBLE : View.GONE);
459-
sectionCredits.setVisibility(active == 5 ? View.VISIBLE : View.GONE);
460-
styleSettingsTab(tabUpdate, active == 0);
461-
styleSettingsTab(tabSettings, active == 1);
462-
styleSettingsTab(tabSignalCamera, active == 2);
463-
styleSettingsTab(tabDashcam, active == 3);
464-
styleSettingsTab(tabOptik, active == 4);
465-
styleSettingsTab(tabCredits, active == 5);
421+
private void switchSettingsTab(TextView[] tabs, View[] sections, int activeIndex) {
422+
for (int i = 0; i < tabs.length; i++) {
423+
sections[i].setVisibility(i == activeIndex ? View.VISIBLE : View.GONE);
424+
styleSettingsTab(tabs[i], i == activeIndex);
425+
}
426+
appearanceController.reapplyForActiveTab(activeIndex);
466427
}
467428

468429
private void styleSettingsTab(TextView tab, boolean active) {

‎app/src/main/java/com/drivehub/kamera/OtaController.java‎

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ final class OtaController {
2727
private final Handler progressHandler = new Handler(Looper.getMainLooper());
2828
private Runnable progressRunnable;
2929
private Dialog progressDialog;
30+
private enum VerificationState { IDLE, IN_FLIGHT, PASSED, FAILED }
31+
3032
private long verificationDownloadId = -1L;
31-
private boolean verificationInFlight = false;
32-
private boolean verificationCompleted = false;
33-
private boolean verificationPassed = false;
33+
private VerificationState verificationState = VerificationState.IDLE;
3434
private OtaUpdateManager.UpdateInfo activeDownloadInfo;
3535
private TextView releaseTitleView;
3636
private TextView releaseChannelView;
@@ -145,9 +145,7 @@ private void showProgressDialog(OtaUpdateManager.UpdateInfo info, long downloadI
145145
progressDialog = handle.dialog;
146146
progressDialog.setOnDismissListener(d -> stopProgressWatcher());
147147
verificationDownloadId = -1L;
148-
verificationInFlight = false;
149-
verificationCompleted = false;
150-
verificationPassed = false;
148+
verificationState = VerificationState.IDLE;
151149

152150
final TextView statusView = handle.statusView;
153151
final ProgressBar progressBar = handle.progressBar;
@@ -201,14 +199,14 @@ private boolean tickProgress(long downloadId, ProgressBar progressBar, TextView
201199
progressBar.setMax(100);
202200
progressBar.setProgress(100);
203201
}
204-
if (verificationCompleted) {
202+
if (verificationState == VerificationState.PASSED || verificationState == VerificationState.FAILED) {
205203
if (installButton != null) {
206-
installButton.setVisibility(verificationPassed ? View.VISIBLE : View.GONE);
204+
installButton.setVisibility(verificationState == VerificationState.PASSED ? View.VISIBLE : View.GONE);
207205
}
208206
return false;
209207
}
210208
if (installButton != null) installButton.setVisibility(View.GONE);
211-
if (!verificationInFlight || verificationDownloadId != downloadId) {
209+
if (verificationState != VerificationState.IN_FLIGHT || verificationDownloadId != downloadId) {
212210
startVerification(downloadId, statusView, installButton);
213211
} else if (statusView != null) {
214212
statusView.setText(R.string.ota_progress_verifying);
@@ -250,19 +248,17 @@ private void updateProgressBar(ProgressBar bar, long total, int pct) {
250248
// -------------------------------------------------------------------------
251249

252250
private void startVerification(long downloadId, TextView statusView, View installButton) {
253-
if (verificationInFlight && verificationDownloadId == downloadId) return;
251+
if (verificationState == VerificationState.IN_FLIGHT && verificationDownloadId == downloadId) return;
254252
verificationDownloadId = downloadId;
255-
verificationInFlight = true;
256-
verificationCompleted = false;
257-
verificationPassed = false;
253+
verificationState = VerificationState.IN_FLIGHT;
258254
if (installButton != null) installButton.setVisibility(View.GONE);
259255
if (statusView != null) statusView.setText(R.string.ota_progress_verifying);
260256

261257
Uri apkUri;
262258
try {
263259
apkUri = resolveDownloadedApkUri(downloadId);
264260
} catch (Exception e) {
265-
verificationInFlight = false;
261+
verificationState = VerificationState.FAILED;
266262
if (statusView != null) {
267263
statusView.setText(activity.getString(
268264
R.string.ota_progress_integrity_failed, e.getClass().getSimpleName()));
@@ -272,9 +268,7 @@ private void startVerification(long downloadId, TextView statusView, View instal
272268

273269
OtaUpdateManager.verifyDownloadedApk(activity, downloadId, apkUri, activeDownloadInfo, (success, computedSha256, message) -> {
274270
if (downloadId != verificationDownloadId) return;
275-
verificationInFlight = false;
276-
verificationCompleted = true;
277-
verificationPassed = success;
271+
verificationState = success ? VerificationState.PASSED : VerificationState.FAILED;
278272
if (statusView != null) {
279273
if (success) {
280274
statusView.setText(R.string.ota_progress_verified);
@@ -311,19 +305,6 @@ private void openDownloadsFolder() {
311305
}
312306
}
313307

314-
private java.io.File resolveDownloadedApkFile(long downloadId) throws Exception {
315-
DownloadManager dm = activity.getSystemService(DownloadManager.class);
316-
if (dm == null) return null;
317-
try (Cursor cursor = dm.query(new DownloadManager.Query().setFilterById(downloadId))) {
318-
if (cursor == null || !cursor.moveToFirst()) return null;
319-
String localUri = cursor.getString(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_URI));
320-
if (localUri == null || localUri.isEmpty()) return null;
321-
Uri local = Uri.parse(localUri);
322-
if (!"file".equalsIgnoreCase(local.getScheme())) return null;
323-
return new java.io.File(local.getPath());
324-
}
325-
}
326-
327308
private Uri resolveDownloadedApkUri(long downloadId) throws Exception {
328309
DownloadManager dm = activity.getSystemService(DownloadManager.class);
329310
if (dm == null) return null;
@@ -371,9 +352,7 @@ private void stopProgressWatcher() {
371352
progressRunnable = null;
372353
}
373354
verificationDownloadId = -1L;
374-
verificationInFlight = false;
375-
verificationCompleted = false;
376-
verificationPassed = false;
355+
verificationState = VerificationState.IDLE;
377356
activeDownloadInfo = null;
378357
if (progressDialog != null && progressDialog.isShowing()) {
379358
progressDialog.dismiss();

0 commit comments

Comments
 (0)