refactor(YouTube - Settings): Back button/gesture closes search instead of exiting (#5439)
This commit is contained in:
+7
@@ -5,6 +5,7 @@ import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
|||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.res.Configuration;
|
||||||
import android.preference.PreferenceFragment;
|
import android.preference.PreferenceFragment;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@@ -171,4 +172,10 @@ public class LicenseActivityHook extends Activity {
|
|||||||
Utils.setIsDarkModeEnabled(themeOrdinal == 1);
|
Utils.setIsDarkModeEnabled(themeOrdinal == 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void handleConfigurationChanged(Activity activity, Configuration newConfig) {
|
||||||
|
if (searchViewController != null) {
|
||||||
|
searchViewController.handleOrientationChange(newConfig.orientation);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-16
@@ -95,6 +95,7 @@ public class SearchViewController {
|
|||||||
this.originalTitle = toolbar.getTitle();
|
this.originalTitle = toolbar.getTitle();
|
||||||
this.showSettingsSearchHistory = Settings.SETTINGS_SEARCH_HISTORY.get();
|
this.showSettingsSearchHistory = Settings.SETTINGS_SEARCH_HISTORY.get();
|
||||||
this.searchHistory = new LinkedList<>();
|
this.searchHistory = new LinkedList<>();
|
||||||
|
this.currentOrientation = activity.getResources().getConfiguration().orientation;
|
||||||
StringSetting searchEntries = Settings.SETTINGS_SEARCH_ENTRIES;
|
StringSetting searchEntries = Settings.SETTINGS_SEARCH_ENTRIES;
|
||||||
if (showSettingsSearchHistory) {
|
if (showSettingsSearchHistory) {
|
||||||
String entries = searchEntries.get();
|
String entries = searchEntries.get();
|
||||||
@@ -208,8 +209,6 @@ public class SearchViewController {
|
|||||||
Logger.printException(() -> "navigation click failure", ex);
|
Logger.printException(() -> "navigation click failure", ex);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
monitorOrientationChanges();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -292,19 +291,14 @@ public class SearchViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void monitorOrientationChanges() {
|
public void handleOrientationChange(int newOrientation) {
|
||||||
currentOrientation = activity.getResources().getConfiguration().orientation;
|
if (newOrientation != currentOrientation) {
|
||||||
|
currentOrientation = newOrientation;
|
||||||
searchView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
|
if (autoCompleteTextView != null) {
|
||||||
int newOrientation = activity.getResources().getConfiguration().orientation;
|
autoCompleteTextView.dismissDropDown();
|
||||||
if (newOrientation != currentOrientation) {
|
Logger.printDebug(() -> "Orientation changed, search history dismissed");
|
||||||
currentOrientation = newOrientation;
|
|
||||||
if (autoCompleteTextView != null) {
|
|
||||||
autoCompleteTextView.dismissDropDown();
|
|
||||||
Logger.printDebug(() -> "Orientation changed, search history dismissed");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -350,14 +344,14 @@ public class SearchViewController {
|
|||||||
|
|
||||||
public static boolean handleBackPress() {
|
public static boolean handleBackPress() {
|
||||||
if (LicenseActivityHook.searchViewController != null
|
if (LicenseActivityHook.searchViewController != null
|
||||||
&& LicenseActivityHook.searchViewController.isSearchExpanded()) {
|
&& LicenseActivityHook.searchViewController.isSearchActive()) {
|
||||||
LicenseActivityHook.searchViewController.closeSearch();
|
LicenseActivityHook.searchViewController.closeSearch();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSearchExpanded() {
|
public boolean isSearchActive() {
|
||||||
return isSearchActive;
|
return isSearchActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -280,7 +280,7 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
|||||||
LicenseActivityHook.setToolbarLayoutParams(toolbar);
|
LicenseActivityHook.setToolbarLayoutParams(toolbar);
|
||||||
|
|
||||||
if (LicenseActivityHook.searchViewController != null
|
if (LicenseActivityHook.searchViewController != null
|
||||||
&& LicenseActivityHook.searchViewController.isSearchExpanded()) {
|
&& LicenseActivityHook.searchViewController.isSearchActive()) {
|
||||||
toolbar.post(() -> LicenseActivityHook.searchViewController.closeSearch());
|
toolbar.post(() -> LicenseActivityHook.searchViewController.closeSearch());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+27
-12
@@ -235,9 +235,9 @@ val settingsPatch = bytecodePatch(
|
|||||||
methods.removeIf { it.name != "onCreate" && !MethodUtil.isConstructor(it) }
|
methods.removeIf { it.name != "onCreate" && !MethodUtil.isConstructor(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add context override to force a specific settings language.
|
|
||||||
licenseActivityOnCreateFingerprint.classDef.apply {
|
licenseActivityOnCreateFingerprint.classDef.apply {
|
||||||
val attachBaseContext = ImmutableMethod(
|
// Add attachBaseContext method to override the context for setting a specific language.
|
||||||
|
ImmutableMethod(
|
||||||
type,
|
type,
|
||||||
"attachBaseContext",
|
"attachBaseContext",
|
||||||
listOf(ImmutableMethodParameter("Landroid/content/Context;", null, null)),
|
listOf(ImmutableMethodParameter("Landroid/content/Context;", null, null)),
|
||||||
@@ -255,13 +255,10 @@ val settingsPatch = bytecodePatch(
|
|||||||
return-void
|
return-void
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}.let(methods::add)
|
||||||
|
|
||||||
methods.add(attachBaseContext)
|
// Add onBackPressed method to handle back button presses, delegating to SearchViewController.
|
||||||
}
|
ImmutableMethod(
|
||||||
|
|
||||||
licenseActivityOnCreateFingerprint.classDef.apply {
|
|
||||||
val onBackPressed = ImmutableMethod(
|
|
||||||
type,
|
type,
|
||||||
"onBackPressed",
|
"onBackPressed",
|
||||||
emptyList(),
|
emptyList(),
|
||||||
@@ -269,7 +266,7 @@ val settingsPatch = bytecodePatch(
|
|||||||
AccessFlags.PUBLIC.value,
|
AccessFlags.PUBLIC.value,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
MutableMethodImplementation(3)
|
MutableMethodImplementation(3),
|
||||||
).toMutable().apply {
|
).toMutable().apply {
|
||||||
addInstructions(
|
addInstructions(
|
||||||
"""
|
"""
|
||||||
@@ -281,10 +278,28 @@ val settingsPatch = bytecodePatch(
|
|||||||
return-void
|
return-void
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
}.let(methods::add)
|
||||||
|
|
||||||
};
|
// Add onConfigurationChanged method to handle configuration changes (e.g., screen orientation).
|
||||||
methods.add(onBackPressed);
|
ImmutableMethod(
|
||||||
};
|
type,
|
||||||
|
"onConfigurationChanged",
|
||||||
|
listOf(ImmutableMethodParameter("Landroid/content/res/Configuration;", null, null)),
|
||||||
|
"V",
|
||||||
|
AccessFlags.PUBLIC.value,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
MutableMethodImplementation(3)
|
||||||
|
).toMutable().apply {
|
||||||
|
addInstructions(
|
||||||
|
"""
|
||||||
|
invoke-super { p0, p1 }, Landroid/app/Activity;->onConfigurationChanged(Landroid/content/res/Configuration;)V
|
||||||
|
invoke-static { p0, p1 }, $EXTENSION_CLASS_DESCRIPTOR->handleConfigurationChanged(Landroid/app/Activity;Landroid/content/res/Configuration;)V
|
||||||
|
return-void
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
}.let(methods::add)
|
||||||
|
}
|
||||||
|
|
||||||
// Update shared dark mode status based on YT theme.
|
// Update shared dark mode status based on YT theme.
|
||||||
// This is needed because YT allows forcing light/dark mode
|
// This is needed because YT allows forcing light/dark mode
|
||||||
|
|||||||
Reference in New Issue
Block a user