diff --git a/app_pojavlauncher/build.gradle b/app_pojavlauncher/build.gradle index 681edba7ff..fcb86d7ae7 100644 --- a/app_pojavlauncher/build.gradle +++ b/app_pojavlauncher/build.gradle @@ -206,6 +206,7 @@ dependencies { implementation 'commons-codec:commons-codec:1.15' // implementation 'com.wu-man:android-bsf-api:3.1.3' implementation 'androidx.preference:preference:1.2.0' + implementation 'androidx.palette:palette:1.0.0' //implementation 'androidx.core:core:1.7.0' implementation 'androidx.drawerlayout:drawerlayout:1.2.0' implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01' @@ -237,4 +238,4 @@ dependencies { implementation "net.java.dev.jna:jna:5.13.0@aar" -} +} \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/com/kdt/mcgui/MineButton.java b/app_pojavlauncher/src/main/java/com/kdt/mcgui/MineButton.java index 669ca2775b..324498ab29 100644 --- a/app_pojavlauncher/src/main/java/com/kdt/mcgui/MineButton.java +++ b/app_pojavlauncher/src/main/java/com/kdt/mcgui/MineButton.java @@ -24,7 +24,7 @@ public void init() { getContext(), R.font.noto_sans_bold)); setBackground(ResourcesCompat.getDrawable( getResources(), - R.drawable.mine_button_background, null)); + R.drawable.mine_button_background, getContext().getTheme())); setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen._13ssp)); setTextColor(Color.WHITE); @@ -41,4 +41,4 @@ public void init() { return false; }); } -} +} \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/com/kdt/mcgui/TextProgressBar.java b/app_pojavlauncher/src/main/java/com/kdt/mcgui/TextProgressBar.java index db1862ebcd..8993354fcc 100644 --- a/app_pojavlauncher/src/main/java/com/kdt/mcgui/TextProgressBar.java +++ b/app_pojavlauncher/src/main/java/com/kdt/mcgui/TextProgressBar.java @@ -34,7 +34,7 @@ public TextProgressBar(Context context, AttributeSet attrs, int defStyleAttr, in private String mText = ""; private void init(){ - setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.view_text_progressbar, null)); + setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.view_text_progressbar, getContext().getTheme())); setProgress(35); mTextPaint = new Paint(); mTextPaint.setColor(Color.WHITE); @@ -65,4 +65,4 @@ public final void setText(String text){ public final void setTextPadding(int padding){ mTextPadding = padding; } -} +} \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/com/kdt/mcgui/mcAccountSpinner.java b/app_pojavlauncher/src/main/java/com/kdt/mcgui/mcAccountSpinner.java index 479390e64d..b3031e725c 100644 --- a/app_pojavlauncher/src/main/java/com/kdt/mcgui/mcAccountSpinner.java +++ b/app_pojavlauncher/src/main/java/com/kdt/mcgui/mcAccountSpinner.java @@ -50,6 +50,8 @@ import java.util.List; import java.util.Objects; +import android.util.TypedValue; + import fr.spse.extended_view.ExtendedTextView; public class mcAccountSpinner extends AppCompatSpinner implements AdapterView.OnItemSelectedListener { @@ -125,7 +127,7 @@ public mcAccountSpinner(@NonNull Context context, @Nullable AttributeSet attrs) /* Triggered when we need to do microsoft login */ private final ExtraListener mMicrosoftLoginListener = (key, value) -> { - mLoginBarPaint.setColor(getResources().getColor(R.color.minebutton_color)); + mLoginBarPaint.setColor(getThemeColor(net.kdt.pojavlaunch.R.attr.copperAccent)); new MicrosoftBackgroundLogin(false, value.getQueryParameter("code")).performLogin( mProgressListener, mDoneListener, mErrorListener); return false; @@ -151,8 +153,8 @@ public mcAccountSpinner(@NonNull Context context, @Nullable AttributeSet attrs) @SuppressLint("ClickableViewAccessibility") private void init(){ // Set visual properties - setBackgroundColor(getResources().getColor(R.color.background_status_bar)); - mLoginBarPaint.setColor(getResources().getColor(R.color.minebutton_color)); + setBackgroundColor(getThemeColor(net.kdt.pojavlaunch.R.attr.colorBgStatusBar)); + mLoginBarPaint.setColor(getThemeColor(net.kdt.pojavlaunch.R.attr.copperAccent)); mLoginBarPaint.setStrokeWidth(getResources().getDimensionPixelOffset(R.dimen._2sdp)); // Set behavior @@ -284,7 +286,7 @@ private void performLogin(MinecraftAccount minecraftAccount){ } if(minecraftAccount.isLocal()) return; - mLoginBarPaint.setColor(getResources().getColor(R.color.minebutton_color)); + mLoginBarPaint.setColor(getThemeColor(net.kdt.pojavlaunch.R.attr.copperAccent)); if(minecraftAccount.isMicrosoft){ if(System.currentTimeMillis() > minecraftAccount.expiresAt){ // Perform login only if needed @@ -420,6 +422,10 @@ private void showDeleteDialog(Context context, int position) { } } - - -} + /** Resolve a theme colour attribute (e.g. R.attr.copperAccent) to an int colour. */ + private int getThemeColor(int attr) { + TypedValue tv = new TypedValue(); + getContext().getTheme().resolveAttribute(attr, tv, true); + return tv.data; + } +} \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java index 24ae138024..630f359f89 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java @@ -222,6 +222,12 @@ public boolean setFullscreen() { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // Apply saved colour theme before layout inflation + setTheme(net.kdt.pojavlaunch.theme.ThemeManager.getSavedTheme()); + // Apply force-landscape preference before layout inflation + if (LauncherPreferences.DEFAULT_PREF.getBoolean("force_landscape", false)) { + setRequestedOrientation(android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + } setContentView(R.layout.activity_pojav_launcher); FragmentManager fragmentManager = getSupportFragmentManager(); // If we don't have a back stack root yet... diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/fragments/RightPaneHomeFragment.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/fragments/RightPaneHomeFragment.java index 684626b753..cceea28ac0 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/fragments/RightPaneHomeFragment.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/fragments/RightPaneHomeFragment.java @@ -1,7 +1,10 @@ package net.kdt.pojavlaunch.fragments; +import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.util.TypedValue; import android.view.View; +import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -10,13 +13,18 @@ import net.kdt.pojavlaunch.R; import net.kdt.pojavlaunch.Tools; +import java.io.File; + /** * Default content of the right pane in landscape two-pane mode. - * Shows the cat wallpaper, Wiki and Discord buttons at the top. + * Shows a custom background (if set), otherwise a plain transparent pane. + * Wiki and Discord buttons are pinned at the top. */ public class RightPaneHomeFragment extends Fragment { public static final String TAG = "RightPaneHomeFragment"; + /** File path where the custom launcher background image is stored. */ + public static final String CUSTOM_BG_PATH = Tools.DIR_DATA + "/custom_launcher_bg"; public RightPaneHomeFragment() { super(R.layout.fragment_right_pane_home); @@ -29,5 +37,43 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat view.findViewById(R.id.discord_button_pane).setOnClickListener( v -> Tools.openURL(requireActivity(), getString(R.string.discord_invite))); + + loadBackground(view); + } + + /** + * Called after saving or removing a custom background so the pane + * refreshes without needing a full fragment recreate. + */ + public void reloadBackground() { + View v = getView(); + if (v != null) loadBackground(v); + } + + private void loadBackground(@NonNull View view) { + ImageView wallpaper = view.findViewById(R.id.right_pane_wallpaper); + File bgFile = new File(CUSTOM_BG_PATH); + if (bgFile.exists()) { + Drawable d = Drawable.createFromPath(bgFile.getAbsolutePath()); + if (d != null) { + wallpaper.setImageDrawable(d); + wallpaper.setScaleType(ImageView.ScaleType.CENTER_CROP); + wallpaper.setBackground(null); + wallpaper.setVisibility(View.VISIBLE); + return; + } + } + // No custom bg — show the gradient drawable as the pane background if gradient is on, + // otherwise stay transparent (root fragment_launcher bg shows through). + wallpaper.setImageDrawable(null); + TypedValue tv = new TypedValue(); + view.getContext().getTheme().resolveAttribute(R.attr.bgMainDrawable, tv, true); + if (tv.resourceId != 0) { + wallpaper.setBackgroundResource(tv.resourceId); + wallpaper.setVisibility(View.VISIBLE); + } else { + wallpaper.setBackground(null); + wallpaper.setVisibility(View.GONE); + } } } \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceExperimentalFragment.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceExperimentalFragment.java index 6b5ea17b87..83b3e5711b 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceExperimentalFragment.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceExperimentalFragment.java @@ -1,13 +1,143 @@ package net.kdt.pojavlaunch.prefs.screens; +import android.app.AlertDialog; +import android.net.Uri; import android.os.Bundle; +import android.widget.Toast; + +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; +import androidx.preference.Preference; +import androidx.preference.SwitchPreferenceCompat; import net.kdt.pojavlaunch.R; +import net.kdt.pojavlaunch.fragments.MainMenuFragment; +import net.kdt.pojavlaunch.fragments.RightPaneHomeFragment; +import net.kdt.pojavlaunch.theme.ThemeManager; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; + +import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; +import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; public class LauncherPreferenceExperimentalFragment extends LauncherPreferenceFragment { + private final ActivityResultLauncher mImagePickerLauncher = + registerForActivityResult(new ActivityResultContracts.GetContent(), uri -> { + if (uri != null) copyImageToBgFile(uri); + }); + @Override public void onCreatePreferences(Bundle b, String str) { addPreferencesFromResource(R.xml.pref_experimental); + setupForceLandscape(); + setupCustomBackground(); + setupColourTheme(); + } + + // ── Force landscape ─────────────────────────────────────────────────────── + + private void setupForceLandscape() { + SwitchPreferenceCompat pref = requirePreference("force_landscape", SwitchPreferenceCompat.class); + pref.setOnPreferenceChangeListener((preference, newValue) -> { + boolean force = Boolean.TRUE.equals(newValue); + requireActivity().setRequestedOrientation( + force ? SCREEN_ORIENTATION_SENSOR_LANDSCAPE : SCREEN_ORIENTATION_UNSPECIFIED); + return true; + }); + + SwitchPreferenceCompat gradientPref = requirePreference("enable_bg_gradient", SwitchPreferenceCompat.class); + gradientPref.setOnPreferenceChangeListener((preference, newValue) -> { + // Save explicitly before recreate — the framework saves after listener returns + net.kdt.pojavlaunch.prefs.LauncherPreferences.DEFAULT_PREF.edit() + .putBoolean(ThemeManager.KEY_GRADIENT, Boolean.TRUE.equals(newValue)) + .commit(); // commit() not apply() — must be synchronous before recreate + requireActivity().recreate(); + return true; + }); + } + + // ── Custom background ───────────────────────────────────────────────────── + + private void setupCustomBackground() { + requirePreference("set_custom_launcher_bg").setOnPreferenceClickListener(p -> { + mImagePickerLauncher.launch("image/*"); + return true; + }); + + requirePreference("remove_custom_launcher_bg").setOnPreferenceClickListener(p -> { + File bgFile = new File(RightPaneHomeFragment.CUSTOM_BG_PATH); + if (bgFile.exists()) bgFile.delete(); + notifyHomeFragmentBgChanged(); + toast(R.string.preference_custom_bg_removed); + return true; + }); + } + + private void copyImageToBgFile(@NonNull Uri uri) { + File bgFile = new File(RightPaneHomeFragment.CUSTOM_BG_PATH); + try (InputStream in = requireContext().getContentResolver().openInputStream(uri); + OutputStream out = new FileOutputStream(bgFile)) { + if (in == null) throw new Exception("Cannot open URI"); + byte[] buf = new byte[8192]; + int len; + while ((len = in.read(buf)) != -1) out.write(buf, 0, len); + notifyHomeFragmentBgChanged(); + toast(R.string.preference_custom_bg_set_success); + } catch (Exception e) { + if (bgFile.exists()) bgFile.delete(); + toast(R.string.preference_custom_bg_error); + } + } + + // ── Colour theme ────────────────────────────────────────────────────────── + + private void setupColourTheme() { + // Button 1: preset picker + reset + requirePreference("colour_theme_presets").setOnPreferenceClickListener(p -> { + showPresetDialog(); + return true; + }); + } + + private void showPresetDialog() { + ThemeManager.Preset[] presets = ThemeManager.PRESETS; + String[] labels = new String[presets.length + 1]; + for (int i = 0; i < presets.length; i++) labels[i] = presets[i].name; + labels[presets.length] = getString(R.string.preference_colour_reset); + + new AlertDialog.Builder(requireContext()) + .setTitle(R.string.preference_colour_presets_title) + .setItems(labels, (dialog, which) -> { + if (which < presets.length) { + ThemeManager.applyPreset(presets[which]); + } else { + ThemeManager.resetToDefault(); + } + requireActivity().recreate(); + }) + .setNegativeButton(android.R.string.cancel, null) + .show(); + } + + // ── Helpers ─────────────────────────────────────────────────────────────── + + private void toast(int resId) { + Toast.makeText(requireContext(), resId, Toast.LENGTH_SHORT).show(); + } + + private void notifyHomeFragmentBgChanged() { + MainMenuFragment mmf = (MainMenuFragment) requireActivity() + .getSupportFragmentManager() + .findFragmentByTag("ROOT"); + if (mmf == null) return; + RightPaneHomeFragment home = (RightPaneHomeFragment) mmf + .getChildFragmentManager() + .findFragmentByTag(RightPaneHomeFragment.TAG); + if (home != null) home.reloadBackground(); } -} +} \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceFragment.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceFragment.java index d4791a6f12..e46bc1b875 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceFragment.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceFragment.java @@ -23,7 +23,7 @@ public class LauncherPreferenceFragment extends PreferenceFragmentCompat impleme @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - view.setBackgroundColor(getResources().getColor(R.color.background_app)); + net.kdt.pojavlaunch.theme.ThemeManager.applyToPrefView(view); super.onViewCreated(view, savedInstanceState); } @@ -84,4 +84,4 @@ protected T requirePreference(CharSequence key, Class if(preferenceClass.isInstance(preference)) return (T)preference; throw new IllegalStateException("Preference "+key+" is not an instance of "+preferenceClass.getSimpleName()); } -} +} \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/theme/ThemeManager.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/theme/ThemeManager.java new file mode 100644 index 0000000000..6f469941a8 --- /dev/null +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/theme/ThemeManager.java @@ -0,0 +1,132 @@ +package net.kdt.pojavlaunch.theme; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import androidx.annotation.NonNull; +import androidx.annotation.StyleRes; +import androidx.palette.graphics.Palette; + +import net.kdt.pojavlaunch.R; +import net.kdt.pojavlaunch.fragments.RightPaneHomeFragment; +import net.kdt.pojavlaunch.prefs.LauncherPreferences; + +import java.io.File; + +public class ThemeManager { + + private static final String KEY_THEME = "launcher_theme"; + public static final String KEY_GRADIENT = "enable_bg_gradient"; + + public static final Preset[] PRESETS = { + new Preset("Default (Copper)", R.style.AppTheme, R.style.AppTheme_Gradient), + new Preset("Midnight Blue", R.style.AppTheme_MidnightBlue, R.style.AppTheme_MidnightBlue_Gradient), + new Preset("Forest Green", R.style.AppTheme_ForestGreen, R.style.AppTheme_ForestGreen_Gradient), + new Preset("Crimson", R.style.AppTheme_Crimson, R.style.AppTheme_Crimson_Gradient), + new Preset("Amethyst", R.style.AppTheme_Amethyst, R.style.AppTheme_Amethyst_Gradient), + new Preset("Arctic", R.style.AppTheme_Arctic, R.style.AppTheme_Arctic_Gradient), + }; + + public static void applyPreset(@NonNull Preset preset) { + LauncherPreferences.DEFAULT_PREF.edit() + .putInt(KEY_THEME, preset.styleRes) + .apply(); + } + + public static void resetToDefault() { + applyPreset(PRESETS[0]); + } + + /** + * Apply the current theme's bgMainDrawable to a preference fragment's root view. + * Called from LauncherPreferenceFragment.onViewCreated(). + */ + public static void applyToPrefView(@NonNull android.view.View view) { + android.util.TypedValue tv = new android.util.TypedValue(); + view.getContext().getTheme().resolveAttribute( + net.kdt.pojavlaunch.R.attr.bgMainDrawable, tv, true); + if (tv.type >= android.util.TypedValue.TYPE_FIRST_COLOR_INT + && tv.type <= android.util.TypedValue.TYPE_LAST_COLOR_INT) { + view.setBackgroundColor(tv.data); + } else if (tv.resourceId != 0) { + view.setBackgroundResource(tv.resourceId); + } + } + + /** + * Call in Activity.onCreate() BEFORE setContentView(). + * Returns the flat or gradient style depending on the gradient toggle. + */ + @StyleRes + public static int getSavedTheme() { + int base = LauncherPreferences.DEFAULT_PREF.getInt(KEY_THEME, R.style.AppTheme); + boolean gradient = LauncherPreferences.DEFAULT_PREF.getBoolean(KEY_GRADIENT, false); + + // Normalise: always find the matching flat preset style + // (guards against an old gradient style ID being stored in prefs) + Preset matched = PRESETS[0]; + for (Preset p : PRESETS) { + if (p.styleRes == base || p.gradientStyleRes == base) { + matched = p; + break; + } + } + + return gradient ? matched.gradientStyleRes : matched.styleRes; + } + + /** + * Use Palette API to pick the closest built-in preset from the custom background. + */ + public static boolean applyFromCustomBackground() { + File bgFile = new File(RightPaneHomeFragment.CUSTOM_BG_PATH); + if (!bgFile.exists()) return false; + + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inSampleSize = 4; + Bitmap bmp = BitmapFactory.decodeFile(bgFile.getAbsolutePath(), opts); + if (bmp == null) return false; + + Palette palette = Palette.from(bmp).maximumColorCount(24).generate(); + bmp.recycle(); + + Palette.Swatch dominant = firstNonNull( + palette.getDarkVibrantSwatch(), + palette.getVibrantSwatch(), + palette.getDarkMutedSwatch(), + palette.getMutedSwatch() + ); + if (dominant == null) return false; + + float[] hsl = dominant.getHsl(); + float[] presetHues = { 20f, 210f, 120f, 0f, 280f, 185f }; + Preset best = PRESETS[0]; + float bestDist = Float.MAX_VALUE; + for (int i = 0; i < PRESETS.length; i++) { + float dist = Math.abs(hsl[0] - presetHues[i]); + if (dist > 180) dist = 360 - dist; + if (dist < bestDist) { bestDist = dist; best = PRESETS[i]; } + } + + applyPreset(best); + return true; + } + + @SafeVarargs + private static T firstNonNull(T... items) { + for (T t : items) if (t != null) return t; + return null; + } + + public static final class Preset { + public final String name; + public final int styleRes; + public final int gradientStyleRes; + public Preset(String name, int styleRes, int gradientStyleRes) { + this.name = name; + this.styleRes = styleRes; + this.gradientStyleRes = gradientStyleRes; + } + } +} \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/drawable-nodpi/bg_rory_xmas.png b/app_pojavlauncher/src/main/res/drawable-nodpi/bg_rory_xmas.png deleted file mode 100644 index e6278ed5c2..0000000000 Binary files a/app_pojavlauncher/src/main/res/drawable-nodpi/bg_rory_xmas.png and /dev/null differ diff --git a/app_pojavlauncher/src/main/res/drawable/background_card.xml b/app_pojavlauncher/src/main/res/drawable/background_card.xml index 6ca24ef61b..9ba01ae684 100644 --- a/app_pojavlauncher/src/main/res/drawable/background_card.xml +++ b/app_pojavlauncher/src/main/res/drawable/background_card.xml @@ -7,5 +7,5 @@ android:left="@dimen/_2sdp" android:right="@dimen/_2sdp" android:top="@dimen/_2sdp" /> - - + + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/drawable/background_control_editor.xml b/app_pojavlauncher/src/main/res/drawable/background_control_editor.xml index 5e350dd5b1..125d4a5c7a 100644 --- a/app_pojavlauncher/src/main/res/drawable/background_control_editor.xml +++ b/app_pojavlauncher/src/main/res/drawable/background_control_editor.xml @@ -7,5 +7,5 @@ android:left="@dimen/padding_small" android:right="@dimen/padding_small" android:top="@dimen/padding_small" /> - - + + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/drawable/background_line_selected.xml b/app_pojavlauncher/src/main/res/drawable/background_line_selected.xml index dc9926671e..949f587b9f 100644 --- a/app_pojavlauncher/src/main/res/drawable/background_line_selected.xml +++ b/app_pojavlauncher/src/main/res/drawable/background_line_selected.xml @@ -1,15 +1,11 @@ - - - + - + android:color="?attr/copperAccent"/> - + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/drawable/bg_gradient_amethyst.xml b/app_pojavlauncher/src/main/res/drawable/bg_gradient_amethyst.xml new file mode 100644 index 0000000000..e6d8f360cd --- /dev/null +++ b/app_pojavlauncher/src/main/res/drawable/bg_gradient_amethyst.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app_pojavlauncher/src/main/res/drawable/bg_gradient_arctic.xml b/app_pojavlauncher/src/main/res/drawable/bg_gradient_arctic.xml new file mode 100644 index 0000000000..60ec1a442c --- /dev/null +++ b/app_pojavlauncher/src/main/res/drawable/bg_gradient_arctic.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app_pojavlauncher/src/main/res/drawable/bg_gradient_copper.xml b/app_pojavlauncher/src/main/res/drawable/bg_gradient_copper.xml new file mode 100644 index 0000000000..311fa1a0b0 --- /dev/null +++ b/app_pojavlauncher/src/main/res/drawable/bg_gradient_copper.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/drawable/bg_gradient_crimson.xml b/app_pojavlauncher/src/main/res/drawable/bg_gradient_crimson.xml new file mode 100644 index 0000000000..8c5f0fb17f --- /dev/null +++ b/app_pojavlauncher/src/main/res/drawable/bg_gradient_crimson.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app_pojavlauncher/src/main/res/drawable/bg_gradient_forest_green.xml b/app_pojavlauncher/src/main/res/drawable/bg_gradient_forest_green.xml new file mode 100644 index 0000000000..5a02c426a8 --- /dev/null +++ b/app_pojavlauncher/src/main/res/drawable/bg_gradient_forest_green.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app_pojavlauncher/src/main/res/drawable/bg_gradient_midnight_blue.xml b/app_pojavlauncher/src/main/res/drawable/bg_gradient_midnight_blue.xml new file mode 100644 index 0000000000..19283c7b16 --- /dev/null +++ b/app_pojavlauncher/src/main/res/drawable/bg_gradient_midnight_blue.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app_pojavlauncher/src/main/res/drawable/bg_right_pane.xml b/app_pojavlauncher/src/main/res/drawable/bg_right_pane.xml index 13da7f8dbb..a510b9f0fa 100644 --- a/app_pojavlauncher/src/main/res/drawable/bg_right_pane.xml +++ b/app_pojavlauncher/src/main/res/drawable/bg_right_pane.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/drawable/control_button.xml b/app_pojavlauncher/src/main/res/drawable/control_button.xml index 3ace1776b2..e6baf418fd 100644 --- a/app_pojavlauncher/src/main/res/drawable/control_button.xml +++ b/app_pojavlauncher/src/main/res/drawable/control_button.xml @@ -1,6 +1,5 @@ - - - - + + + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/drawable/mine_button_background.xml b/app_pojavlauncher/src/main/res/drawable/mine_button_background.xml index a9d04beb17..85bbaff606 100644 --- a/app_pojavlauncher/src/main/res/drawable/mine_button_background.xml +++ b/app_pojavlauncher/src/main/res/drawable/mine_button_background.xml @@ -4,28 +4,19 @@ - - + - - - + @@ -35,42 +26,31 @@ - + - + - - - + - - - + - - + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/drawable/view_text_progressbar.xml b/app_pojavlauncher/src/main/res/drawable/view_text_progressbar.xml index 1ead508f43..b7f4b06280 100644 --- a/app_pojavlauncher/src/main/res/drawable/view_text_progressbar.xml +++ b/app_pojavlauncher/src/main/res/drawable/view_text_progressbar.xml @@ -1,13 +1,17 @@ - + + - + + + - - + + + diff --git a/app_pojavlauncher/src/main/res/layout-land/fragment_launcher.xml b/app_pojavlauncher/src/main/res/layout-land/fragment_launcher.xml index 72ce35b44e..e6f7ebeeee 100644 --- a/app_pojavlauncher/src/main/res/layout-land/fragment_launcher.xml +++ b/app_pojavlauncher/src/main/res/layout-land/fragment_launcher.xml @@ -5,7 +5,7 @@ android:id="@+id/fragment_menu_main" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/background_app"> + android:background="?attr/bgMainDrawable"> + android:background="?attr/colorDivider" /> @@ -76,7 +76,7 @@ android:text="@string/mcl_section_instance_tools" android:textAllCaps="true" android:textSize="@dimen/_11ssp" - android:textColor="@color/secondary_text" + android:textColor="?attr/colorTextSecondary" android:letterSpacing="0.08" android:paddingHorizontal="@dimen/padding_heavy" android:paddingTop="@dimen/padding_large" @@ -144,7 +144,7 @@ android:id="@+id/pane_divider" android:layout_width="@dimen/padding_tiny" android:layout_height="0dp" - android:background="@color/divider" + android:background="?attr/colorDivider" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="@id/pane_guideline" @@ -176,7 +176,7 @@ android:layout_height="@dimen/_48sdp" android:orientation="horizontal" android:gravity="center_vertical" - android:background="@color/background_bottom_bar" + android:background="?attr/colorBgBottomBar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@id/pane_divider" app:layout_constraintEnd_toEndOf="parent"> diff --git a/app_pojavlauncher/src/main/res/layout/activity_pojav_launcher.xml b/app_pojavlauncher/src/main/res/layout/activity_pojav_launcher.xml index cd011b9934..aa36e52c24 100644 --- a/app_pojavlauncher/src/main/res/layout/activity_pojav_launcher.xml +++ b/app_pojavlauncher/src/main/res/layout/activity_pojav_launcher.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@android:color/transparent"> + android:background="?attr/bgMainDrawable"> - + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/layout/fragment_controller_remapper.xml b/app_pojavlauncher/src/main/res/layout/fragment_controller_remapper.xml index bf5a97dbf9..3d2cd2d171 100644 --- a/app_pojavlauncher/src/main/res/layout/fragment_controller_remapper.xml +++ b/app_pojavlauncher/src/main/res/layout/fragment_controller_remapper.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/background_app"> + android:background="?attr/colorBgApp"> + android:background="?attr/bgMainDrawable"> + android:background="?attr/colorDivider" /> @@ -104,7 +104,7 @@ android:text="@string/mcl_section_instance_tools" android:textAllCaps="true" android:textSize="@dimen/_11ssp" - android:textColor="@color/secondary_text" + android:textColor="?attr/colorTextSecondary" android:letterSpacing="0.08" android:paddingHorizontal="@dimen/padding_heavy" android:paddingTop="@dimen/padding_large" @@ -159,6 +159,7 @@ android:layout_width="0dp" android:layout_height="@dimen/_52sdp" android:background="@android:color/transparent" + android:scrollbarThumbVertical="?attr/copperAccent" android:drawableEnd="@drawable/spinner_arrow" app:drawableEndSize="@dimen/padding_heavy" app:drawableStartIntegerScaling="true" @@ -182,7 +183,7 @@ android:id="@+id/_background_display_view" android:layout_width="match_parent" android:layout_height="0dp" - android:background="@color/background_bottom_bar" + android:background="?attr/colorBgBottomBar" android:translationZ="-1dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="@id/mc_version_spinner" /> @@ -197,4 +198,4 @@ android:text="@string/main_play" app:layout_constraintBottom_toBottomOf="parent" /> - + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/layout/fragment_mod_version_list.xml b/app_pojavlauncher/src/main/res/layout/fragment_mod_version_list.xml index 0c644ba71d..488cc03b64 100644 --- a/app_pojavlauncher/src/main/res/layout/fragment_mod_version_list.xml +++ b/app_pojavlauncher/src/main/res/layout/fragment_mod_version_list.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" - android:background="@color/background_app" + android:background="?attr/bgMainDrawable" android:paddingHorizontal="@dimen/fragment_padding_medium"> @@ -32,10 +32,10 @@ android:layout_height="wrap_content" android:gravity="center" android:text="" - android:textColor="@color/primary_text" /> + android:textColor="?attr/colorTextPrimary" /> + android:scrollbarThumbVertical="?attr/copperAccent"> - + diff --git a/app_pojavlauncher/src/main/res/layout/spinner_mc_version.xml b/app_pojavlauncher/src/main/res/layout/spinner_mc_version.xml index 8a39fe5149..158dddc0a3 100644 --- a/app_pojavlauncher/src/main/res/layout/spinner_mc_version.xml +++ b/app_pojavlauncher/src/main/res/layout/spinner_mc_version.xml @@ -6,8 +6,8 @@ android:layout_height="match_parent" android:scrollbars="vertical" android:fadeScrollbars="false" - android:scrollbarThumbVertical="@color/minebutton_color" + android:scrollbarThumbVertical="?attr/copperAccent" android:paddingVertical="@dimen/_14sdp" android:scrollbarSize="@dimen/padding_medium" - android:background="@color/background_bottom_bar" + android:background="?attr/colorBgBottomBar" android:divider="@null" /> \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/values-land/styles.xml b/app_pojavlauncher/src/main/res/values-land/styles.xml index 50086519f3..950d3aba37 100644 --- a/app_pojavlauncher/src/main/res/values-land/styles.xml +++ b/app_pojavlauncher/src/main/res/values-land/styles.xml @@ -1,16 +1,161 @@ - + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + - + + \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/xml/pref_experimental.xml b/app_pojavlauncher/src/main/res/xml/pref_experimental.xml index 59443c39c6..ba2a6e2789 100644 --- a/app_pojavlauncher/src/main/res/xml/pref_experimental.xml +++ b/app_pojavlauncher/src/main/res/xml/pref_experimental.xml @@ -14,5 +14,42 @@ android:key="bigCoreAffinity" android:title="@string/preference_force_big_core_title" android:summary="@string/preference_force_big_core_desc" /> + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file