diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java index 0f3c07105..3c65e1d0c 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/shared/NavigationBar.java @@ -25,20 +25,21 @@ public final class NavigationBar { * How long to wait for the set nav button latch to be released. Maximum wait time must * be as small as possible while still allowing enough time for the nav bar to update. *
- * YT calls it's back button handlers out of order, - * and litho starts filtering before the navigation bar is updated. + * YT calls it's back button handlers out of order, and litho starts filtering before the + * navigation bar is updated. Fixing this situation and not needlessly waiting requires + * somehow detecting if a back button key/gesture will not change the active tab. *
- * Fixing this situation and not needlessly waiting requires somehow - * detecting if a back button key-press will cause a tab change. + * On average the time between pressing the back button and the first litho event is + * about 10-20ms. Waiting up to 75-150ms should be enough time to handle normal use cases + * and not be noticeable, since YT typically takes 100-200ms (or more) to update the view. *
- * Typically after pressing the back button, the time between the first litho event and - * when the nav button is updated is about 10-20ms. Using 50-100ms here should be enough time - * and not noticeable, since YT typically takes 100-200ms (or more) to update the view anyways. + * This delay is only noticeable when the device back button/gesture will not + * change the current navigation tab, such as backing out of the watch history. *
* This issue can also be avoided on a patch by patch basis, by avoiding calls to * {@link NavigationButton#getSelectedNavigationButton()} unless absolutely necessary. */ - private static final long LATCH_AWAIT_TIMEOUT_MILLISECONDS = 75; + private static final long LATCH_AWAIT_TIMEOUT_MILLISECONDS = 120; /** * Used as a workaround to fix the issue of YT calling back button handlers out of order. @@ -84,7 +85,8 @@ public final class NavigationBar { // The latch is released from the main thread, and waiting from the main thread will always timeout. // This situation has only been observed when navigating out of a submenu and not changing tabs. // and for that use case the nav bar does not change so it's safe to return here. - Logger.printDebug(() -> "Cannot block main thread waiting for nav button. Using last known navbar button status."); + Logger.printDebug(() -> "Cannot block main thread waiting for nav button. " + + "Using last known navbar button status."); return; } @@ -102,7 +104,9 @@ public final class NavigationBar { Logger.printDebug(() -> "Latch wait timed out"); } catch (InterruptedException ex) { - Logger.printException(() -> "Latch wait interrupted failure", ex); // Will never happen. + // Calling YouTube thread was interrupted. + Logger.printException(() -> "Latch wait interrupted", ex); + Thread.currentThread().interrupt(); // Restore interrupt status flag. } } @@ -256,8 +260,8 @@ public final class NavigationBar { *
* All code calling this method should handle a null return value. *
- * Due to issues with how YT processes physical back button events, - * this patch uses workarounds that can cause this method to take up to 75ms + * Due to issues with how YT processes physical back button/gesture events, + * this patch uses workarounds that can cause this method to take up to 120ms * if the device back button was recently pressed. * * @return The active navigation tab.