Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
5e5b94d
refactor(YouTube - Settings): Using an overlay to show search results
MarcaDian Sep 12, 2025
db583c5
fix merge
MarcaDian Sep 12, 2025
7f755b0
refactor highlighting
MarcaDian Sep 12, 2025
719375f
fix: Remove periods because nothing else on screen uses end periods
LisoUseInAIKyrios Sep 13, 2025
347679a
remove highlighting entries
MarcaDian Sep 13, 2025
e193672
fix switch summary updating after refactor
MarcaDian Sep 13, 2025
810fa80
fix list summary updating after refactor
MarcaDian Sep 13, 2025
e07ef60
another shot to implement the entries highlighting
MarcaDian Sep 13, 2025
55af734
Merge remote-tracking branch 'ReVanced/dev' into overlay-settings
MarcaDian Sep 16, 2025
90cd86c
fix merge
MarcaDian Sep 16, 2025
24ebf56
refactor search to abstract classes
MarcaDian Sep 17, 2025
f7aea3a
Merge remote-tracking branch 'ReVanced/dev' into overlay-settings
MarcaDian Sep 17, 2025
af6c955
fix merge
MarcaDian Sep 17, 2025
06f0ef9
cleanup
MarcaDian Sep 17, 2025
47992a4
add a search history switch to settings
MarcaDian Sep 17, 2025
eee0270
rename dir
MarcaDian Sep 17, 2025
253194e
fix settings
MarcaDian Sep 17, 2025
20f63bf
refactor
MarcaDian Sep 17, 2025
bc7547c
fix save color opacity
MarcaDian Sep 18, 2025
647e5cd
fix compiler warning
LisoUseInAIKyrios Sep 18, 2025
39c1cdc
Move settings to shared
LisoUseInAIKyrios Sep 18, 2025
6886413
fix? search color widget does not update when change color
MarcaDian Sep 18, 2025
a1711a3
fix logic (was wrong before refactor)
LisoUseInAIKyrios Sep 18, 2025
89d4b5d
fix error toast when changing SB server setting
LisoUseInAIKyrios Sep 18, 2025
bc2590e
refactor
LisoUseInAIKyrios Sep 18, 2025
fe5a478
Simplification. Seems to work ok but needs a little more verification…
LisoUseInAIKyrios Sep 18, 2025
955e5a5
refactor
LisoUseInAIKyrios Sep 18, 2025
2018b73
Consolidate code, add ReVanced language setting to YT Music
LisoUseInAIKyrios Sep 18, 2025
2aa3864
Improve formatting of spoof streams side effect text
LisoUseInAIKyrios Sep 18, 2025
2d1ad03
Use improved formatting everywhere bullet points are used
LisoUseInAIKyrios Sep 18, 2025
4604d85
refactor text color dot to drawable color widget in dialog
MarcaDian Sep 18, 2025
9ade7a4
fix search history not showing
LisoUseInAIKyrios Sep 18, 2025
886d791
refactor
LisoUseInAIKyrios Sep 18, 2025
0bf57cd
refactor
LisoUseInAIKyrios Sep 18, 2025
fba1f94
adding an optional opacity slider
MarcaDian Sep 18, 2025
4790ec9
refactor
LisoUseInAIKyrios Sep 18, 2025
9210a7d
Merge remote-tracking branch 'MarcaDian/overlay-settings' into overla…
MarcaDian Sep 18, 2025
6761e7c
refactor: Inline private static classes
LisoUseInAIKyrios Sep 18, 2025
78af1dc
refactor
LisoUseInAIKyrios Sep 18, 2025
cf58adc
removing obsolete code
MarcaDian Sep 18, 2025
503e821
Migrate opacity setting for existing users, add opacity to SB JSON im…
LisoUseInAIKyrios Sep 18, 2025
717caad
don't export internal dummy settings in case they somehow become corrupt
LisoUseInAIKyrios Sep 18, 2025
49a27d7
cleanup
LisoUseInAIKyrios Sep 18, 2025
9e48733
refactor segment category preference
MarcaDian Sep 18, 2025
519b853
fix reset color error
MarcaDian Sep 18, 2025
3c2d7df
round opacity to 2 decimal digits
MarcaDian Sep 18, 2025
b72603c
comments
MarcaDian Sep 19, 2025
c2218b0
refactor others to the same style
MarcaDian Sep 19, 2025
4fae4bc
Merge remote-tracking branch 'ReVanced/dev' into overlay-settings
MarcaDian Sep 19, 2025
a3bac6d
Merge remote-tracking branch 'upstream/dev' into overlay-settings
LisoUseInAIKyrios Sep 20, 2025
920f5e5
Merge remote-tracking branch 'upstream/dev' into overlay-settings
LisoUseInAIKyrios Sep 20, 2025
3e0185a
add import/export preference to YT Music
LisoUseInAIKyrios Sep 20, 2025
004d9cf
add opacity slider to swipe controls color picker
MarcaDian Sep 20, 2025
e1cba9d
Merge remote-tracking branch 'upstream/dev' into overlay-settings
LisoUseInAIKyrios Sep 20, 2025
080cd20
fix YT Music settings?
LisoUseInAIKyrios Sep 20, 2025
1473523
override `finish()`` to intercept back gesture
MarcaDian Sep 20, 2025
c900bcc
Merge remote-tracking branch 'upstream/dev' into overlay-settings
LisoUseInAIKyrios Sep 20, 2025
f9a2651
refactor
LisoUseInAIKyrios Sep 21, 2025
27bb47d
fix SB settings not showing correct initial value
LisoUseInAIKyrios Sep 21, 2025
8a03bf6
refactor: Restore preference sync method
LisoUseInAIKyrios Sep 21, 2025
0e02a52
refactor
LisoUseInAIKyrios Sep 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package app.revanced.extension.music.settings;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.preference.PreferenceFragment;
import android.view.View;
import android.widget.Toolbar;

import app.revanced.extension.music.settings.preference.MusicPreferenceFragment;
import app.revanced.extension.music.settings.search.MusicSearchViewController;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BaseActivityHook;

/**
* Hooks GoogleApiActivity to inject a custom {@link MusicPreferenceFragment} with a toolbar and search.
*/
public class MusicActivityHook extends BaseActivityHook {

@SuppressLint("StaticFieldLeak")
public static MusicSearchViewController searchViewController;

/**
* Injection point.
*/
@SuppressWarnings("unused")
public static void initialize(Activity parentActivity) {
// Must touch the Music settings to ensure the class is loaded and
// the values can be found when setting the UI preferences.
// Logging anything under non debug ensures this is set.
Logger.printInfo(() -> "Permanent repeat enabled: " + Settings.PERMANENT_REPEAT.get());

// YT Music always uses dark mode.
Utils.setIsDarkModeEnabled(true);

BaseActivityHook.initialize(new MusicActivityHook(), parentActivity);
}

/**
* Sets the fixed theme for the activity.
*/
@Override
protected void customizeActivityTheme(Activity activity) {
// Override the default YouTube Music theme to increase start padding of list items.
// Custom style located in resources/music/values/style.xml
activity.setTheme(Utils.getResourceIdentifierOrThrow(
"Theme.ReVanced.YouTubeMusic.Settings", "style"));
}

/**
* Returns the resource ID for the YouTube Music settings layout.
*/
@Override
protected int getContentViewResourceId() {
return LAYOUT_REVANCED_SETTINGS_WITH_TOOLBAR;
}

/**
* Returns the fixed background color for the toolbar.
*/
@Override
protected int getToolbarBackgroundColor() {
return Utils.getResourceColor("ytm_color_black");
}

/**
* Returns the navigation icon with a color filter applied.
*/
@Override
protected Drawable getNavigationIcon() {
Drawable navigationIcon = MusicPreferenceFragment.getBackButtonDrawable();
navigationIcon.setColorFilter(Utils.getAppForegroundColor(), PorterDuff.Mode.SRC_IN);
return navigationIcon;
}

/**
* Returns the click listener that finishes the activity when the navigation icon is clicked.
*/
@Override
protected View.OnClickListener getNavigationClickListener(Activity activity) {
return view -> {
if (searchViewController != null && searchViewController.isSearchActive()) {
searchViewController.closeSearch();
} else {
activity.finish();
}
};
}

/**
* Adds search view components to the toolbar for {@link MusicPreferenceFragment}.
*
* @param activity The activity hosting the toolbar.
* @param toolbar The configured toolbar.
* @param fragment The PreferenceFragment associated with the activity.
*/
@Override
protected void onPostToolbarSetup(Activity activity, Toolbar toolbar, PreferenceFragment fragment) {
if (fragment instanceof MusicPreferenceFragment) {
searchViewController = MusicSearchViewController.addSearchViewComponents(
activity, toolbar, (MusicPreferenceFragment) fragment);
}
}

/**
* Creates a new {@link MusicPreferenceFragment} for the activity.
*/
@Override
protected PreferenceFragment createPreferenceFragment() {
return new MusicPreferenceFragment();
}

/**
* Injection point.
* <p>
* Overrides {@link Activity#finish()} of the injection Activity.
*
* @return if the original activity finish method should be allowed to run.
*/
@SuppressWarnings("unused")
public static boolean handleFinish() {
return MusicSearchViewController.handleFinish(searchViewController);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;

import static app.revanced.extension.shared.settings.Setting.parent;

import app.revanced.extension.shared.settings.BaseSettings;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package app.revanced.extension.music.settings.preference;

import android.app.Dialog;
import android.preference.PreferenceScreen;
import android.widget.Toolbar;

import app.revanced.extension.music.settings.MusicActivityHook;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.preference.ToolbarPreferenceFragment;

/**
* Preference fragment for ReVanced settings.
*/
@SuppressWarnings("deprecation")
public class MusicPreferenceFragment extends ToolbarPreferenceFragment {
/**
* The main PreferenceScreen used to display the current set of preferences.
*/
private PreferenceScreen preferenceScreen;

/**
* Initializes the preference fragment.
*/
@Override
protected void initialize() {
super.initialize();

try {
preferenceScreen = getPreferenceScreen();
Utils.sortPreferenceGroups(preferenceScreen);
setPreferenceScreenToolbar(preferenceScreen);
} catch (Exception ex) {
Logger.printException(() -> "initialize failure", ex);
}
}

/**
* Called when the fragment starts.
*/
@Override
public void onStart() {
super.onStart();
try {
// Initialize search controller if needed
if (MusicActivityHook.searchViewController != null) {
// Trigger search data collection after fragment is ready.
MusicActivityHook.searchViewController.initializeSearchData();
}
} catch (Exception ex) {
Logger.printException(() -> "onStart failure", ex);
}
}

/**
* Sets toolbar for all nested preference screens.
*/
@Override
protected void customizeToolbar(Toolbar toolbar) {
MusicActivityHook.setToolbarLayoutParams(toolbar);
}

/**
* Perform actions after toolbar setup.
*/
@Override
protected void onPostToolbarSetup(Toolbar toolbar, Dialog preferenceScreenDialog) {
if (MusicActivityHook.searchViewController != null
&& MusicActivityHook.searchViewController.isSearchActive()) {
toolbar.post(() -> MusicActivityHook.searchViewController.closeSearch());
}
}

/**
* Returns the preference screen for external access by SearchViewController.
*/
public PreferenceScreen getPreferenceScreenForSearch() {
return preferenceScreen;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package app.revanced.extension.music.settings.search;

import android.content.Context;
import android.preference.PreferenceScreen;

import app.revanced.extension.shared.settings.search.BaseSearchResultsAdapter;
import app.revanced.extension.shared.settings.search.BaseSearchViewController;
import app.revanced.extension.shared.settings.search.BaseSearchResultItem;

import java.util.List;

/**
* Music-specific search results adapter.
*/
@SuppressWarnings("deprecation")
public class MusicSearchResultsAdapter extends BaseSearchResultsAdapter {

public MusicSearchResultsAdapter(Context context, List<BaseSearchResultItem> items,
BaseSearchViewController.BasePreferenceFragment fragment,
BaseSearchViewController searchViewController) {
super(context, items, fragment, searchViewController);
}

@Override
protected PreferenceScreen getMainPreferenceScreen() {
return fragment.getPreferenceScreenForSearch();
}
}
Loading
Loading