Skip to content

Commit c8a3437

Browse files
Merge pull request #161 from appdevforall/feat/ADFA-4595-footer-gestures
ADFA-4595: version footer — three-gesture scheme (tap=updates, long-p…
2 parents bd10945 + 1c299b7 commit c8a3437

2 files changed

Lines changed: 40 additions & 16 deletions

File tree

‎controller/app/src/main/java/org/iiab/controller/MainActivity.java‎

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -321,37 +321,62 @@ public void onPageSelected(int position) {
321321
terminalController = new TerminalController(this, this);
322322
terminalController.bind();
323323

324-
// 3-second Ninja trigger & OTA Updater
324+
// ADFA-4595: version footer — three gestures:
325+
// single tap -> check version / updates (OTA)
326+
// long-press -> show the main.version help tooltip
327+
// double-tap + hold -> open the hidden full terminal (double-tap = key, hold = confirm)
325328
versionFooter.setOnTouchListener(new View.OnTouchListener() {
326329
private final Handler handler = new Handler(android.os.Looper.getMainLooper());
327-
private final Runnable longPressRunnable = () -> terminalController.openFullTerminal();
328-
private long touchStartTime;
330+
private final int longPressMs = android.view.ViewConfiguration.getLongPressTimeout();
331+
private final int doubleTapMs = android.view.ViewConfiguration.getDoubleTapTimeout();
332+
private long downTime = 0L;
333+
private long lastUpTime = 0L;
334+
private boolean secondTap = false;
335+
private boolean longFired = false;
336+
private Runnable longPress;
337+
private Runnable singleTap;
329338

330339
@Override
331340
public boolean onTouch(View v, MotionEvent event) {
332-
switch (event.getAction()) {
341+
switch (event.getActionMasked()) {
333342
case MotionEvent.ACTION_DOWN:
334-
touchStartTime = System.currentTimeMillis();
335-
handler.postDelayed(longPressRunnable, 3000);
343+
downTime = System.currentTimeMillis();
344+
secondTap = (downTime - lastUpTime) < doubleTapMs;
345+
longFired = false;
346+
if (singleTap != null) handler.removeCallbacks(singleTap);
347+
final boolean armedForTerminal = secondTap;
348+
longPress = () -> {
349+
longFired = true;
350+
if (armedForTerminal) {
351+
terminalController.openFullTerminal();
352+
} else {
353+
org.iiab.controller.help.TooltipManager.showTooltip(
354+
MainActivity.this, versionFooter,
355+
org.iiab.controller.help.TooltipCategory.K2GO,
356+
org.iiab.controller.help.TooltipTag.MAIN_VERSION);
357+
}
358+
};
359+
handler.postDelayed(longPress, longPressMs);
336360
return true;
337361
case MotionEvent.ACTION_UP:
338362
case MotionEvent.ACTION_CANCEL:
339-
handler.removeCallbacks(longPressRunnable);
340-
341-
// --- THE UPDATER (OTA LOGIC) ---
342-
// If released early and it was a quick tap (<500ms), trigger normal OTA update
343-
if (System.currentTimeMillis() - touchStartTime < 500) {
344-
updateController.checkForUpdatesManual();
363+
if (longPress != null) handler.removeCallbacks(longPress);
364+
long now = System.currentTimeMillis();
365+
boolean wasTap = !longFired && (now - downTime) < longPressMs;
366+
if (wasTap && !secondTap) {
367+
// Might be a single tap; confirm updates only if no second tap follows.
368+
lastUpTime = now;
369+
singleTap = () -> updateController.checkForUpdatesManual();
370+
handler.postDelayed(singleTap, doubleTapMs);
371+
} else {
372+
lastUpTime = wasTap ? now : 0L;
345373
}
346374
return true;
347375
}
348376
return false;
349377
}
350378
});
351379

352-
// Check for version with 10s cooldown span
353-
versionFooter.setOnClickListener(v -> updateController.checkForUpdatesManual());
354-
355380
viewPager.setCurrentItem(0, false);
356381

357382
// 1. Initialize Result Launchers

‎controller/app/src/main/java/org/iiab/controller/help/TooltipWiring.java‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ private TooltipWiring() {}
113113
MAP.put(R.id.btn_share_qr, TooltipTag.MAIN_SHARE_QR);
114114
MAP.put(R.id.btn_settings, TooltipTag.MAIN_SETTINGS);
115115
MAP.put(R.id.theme_toggle, TooltipTag.MAIN_THEME_TOGGLE);
116-
MAP.put(R.id.version_text, TooltipTag.MAIN_VERSION);
117116
}
118117

119118
/** Attach tier-1/2 tooltips (long-press) to every mapped control found under {@code root}. */

0 commit comments

Comments
 (0)