citra_android: Start material 3 migration (#6335)
|  | @ -34,7 +34,7 @@ | ||||||
| 
 | 
 | ||||||
|         <activity |         <activity | ||||||
|             android:name="org.citra.citra_emu.ui.main.MainActivity" |             android:name="org.citra.citra_emu.ui.main.MainActivity" | ||||||
|             android:theme="@style/CitraBase" |             android:theme="@style/Theme.Citra.Main" | ||||||
|             android:resizeableActivity="false"> |             android:resizeableActivity="false"> | ||||||
| 
 | 
 | ||||||
|             <!-- This intentfilter marks this Activity as the one that gets launched from Home screen. --> |             <!-- This intentfilter marks this Activity as the one that gets launched from Home screen. --> | ||||||
|  | @ -48,13 +48,13 @@ | ||||||
|         <activity |         <activity | ||||||
|             android:name="org.citra.citra_emu.features.settings.ui.SettingsActivity" |             android:name="org.citra.citra_emu.features.settings.ui.SettingsActivity" | ||||||
|             android:configChanges="orientation|screenSize|uiMode" |             android:configChanges="orientation|screenSize|uiMode" | ||||||
|             android:theme="@style/CitraSettingsBase" |             android:theme="@style/Theme.Citra.Main" | ||||||
|             android:label="@string/preferences_settings"/> |             android:label="@string/preferences_settings"/> | ||||||
| 
 | 
 | ||||||
|         <activity |         <activity | ||||||
|             android:name="org.citra.citra_emu.activities.EmulationActivity" |             android:name="org.citra.citra_emu.activities.EmulationActivity" | ||||||
|             android:resizeableActivity="false" |             android:resizeableActivity="false" | ||||||
|             android:theme="@style/CitraEmulationBase" |             android:theme="@style/Theme.Citra.Main" | ||||||
|             android:launchMode="singleTop"/> |             android:launchMode="singleTop"/> | ||||||
| 
 | 
 | ||||||
|         <service android:name="org.citra.citra_emu.utils.ForegroundService"/> |         <service android:name="org.citra.citra_emu.utils.ForegroundService"/> | ||||||
|  | @ -72,7 +72,7 @@ | ||||||
|         <activity |         <activity | ||||||
|             android:name="org.citra.citra_emu.features.cheats.ui.CheatsActivity" |             android:name="org.citra.citra_emu.features.cheats.ui.CheatsActivity" | ||||||
|             android:exported="false" |             android:exported="false" | ||||||
|             android:theme="@style/CitraSettingsBase" |             android:theme="@style/Theme.Citra.Main" | ||||||
|             android:label="@string/cheats"/> |             android:label="@string/cheats"/> | ||||||
| 
 | 
 | ||||||
|         <service android:name="org.citra.citra_emu.utils.DirectoryInitialization"/> |         <service android:name="org.citra.citra_emu.utils.DirectoryInitialization"/> | ||||||
|  |  | ||||||
|  | @ -38,6 +38,8 @@ import java.util.Objects; | ||||||
| import static android.Manifest.permission.CAMERA; | import static android.Manifest.permission.CAMERA; | ||||||
| import static android.Manifest.permission.RECORD_AUDIO; | import static android.Manifest.permission.RECORD_AUDIO; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.dialog.MaterialAlertDialogBuilder; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Class which contains methods that interact |  * Class which contains methods that interact | ||||||
|  * with the native side of the Citra code. |  * with the native side of the Citra code. | ||||||
|  | @ -245,7 +247,7 @@ public final class NativeLibrary { | ||||||
|             final String title = Objects.requireNonNull(Objects.requireNonNull(getArguments()).getString("title")); |             final String title = Objects.requireNonNull(Objects.requireNonNull(getArguments()).getString("title")); | ||||||
|             final String message = Objects.requireNonNull(Objects.requireNonNull(getArguments()).getString("message")); |             final String message = Objects.requireNonNull(Objects.requireNonNull(getArguments()).getString("message")); | ||||||
| 
 | 
 | ||||||
|             return new AlertDialog.Builder(emulationActivity) |             return new MaterialAlertDialogBuilder(emulationActivity) | ||||||
|                     .setTitle(title) |                     .setTitle(title) | ||||||
|                     .setMessage(message) |                     .setMessage(message) | ||||||
|                     .setPositiveButton(R.string.continue_button, (dialog, which) -> { |                     .setPositiveButton(R.string.continue_button, (dialog, which) -> { | ||||||
|  | @ -345,7 +347,7 @@ public final class NativeLibrary { | ||||||
|         } else { |         } else { | ||||||
|             // Create object used for waiting. |             // Create object used for waiting. | ||||||
|             final Object lock = new Object(); |             final Object lock = new Object(); | ||||||
|             AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity) |             MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(emulationActivity) | ||||||
|                     .setTitle(caption) |                     .setTitle(caption) | ||||||
|                     .setMessage(text); |                     .setMessage(text); | ||||||
| 
 | 
 | ||||||
|  | @ -427,7 +429,7 @@ public final class NativeLibrary { | ||||||
|         return alertPromptResult; |         return alertPromptResult; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static AlertDialog.Builder displayAlertPromptImpl(String caption, String text, int buttonConfig) { |     public static MaterialAlertDialogBuilder displayAlertPromptImpl(String caption, String text, int buttonConfig) { | ||||||
|         final EmulationActivity emulationActivity = sEmulationActivity.get(); |         final EmulationActivity emulationActivity = sEmulationActivity.get(); | ||||||
|         alertPromptResult = ""; |         alertPromptResult = ""; | ||||||
|         alertPromptButton = 0; |         alertPromptButton = 0; | ||||||
|  | @ -444,7 +446,7 @@ public final class NativeLibrary { | ||||||
|         FrameLayout container = new FrameLayout(emulationActivity); |         FrameLayout container = new FrameLayout(emulationActivity); | ||||||
|         container.addView(alertPromptEditText); |         container.addView(alertPromptEditText); | ||||||
| 
 | 
 | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity) |         MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(emulationActivity) | ||||||
|                 .setTitle(caption) |                 .setTitle(caption) | ||||||
|                 .setView(container) |                 .setView(container) | ||||||
|                 .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> |                 .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> | ||||||
|  | @ -506,7 +508,7 @@ public final class NativeLibrary { | ||||||
|             captionId = R.string.loader_error_encrypted; |             captionId = R.string.loader_error_encrypted; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity) |         MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(emulationActivity) | ||||||
|                 .setTitle(captionId) |                 .setTitle(captionId) | ||||||
|                 .setMessage(Html.fromHtml("Please follow the guides to redump your <a href=\"https://citra-emu.org/wiki/dumping-game-cartridges/\">game cartidges</a> or <a href=\"https://citra-emu.org/wiki/dumping-installed-titles/\">installed titles</a>.", Html.FROM_HTML_MODE_LEGACY)) |                 .setMessage(Html.fromHtml("Please follow the guides to redump your <a href=\"https://citra-emu.org/wiki/dumping-game-cartridges/\">game cartidges</a> or <a href=\"https://citra-emu.org/wiki/dumping-installed-titles/\">installed titles</a>.", Html.FROM_HTML_MODE_LEGACY)) | ||||||
|                 .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> emulationActivity.finish()) |                 .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> emulationActivity.finish()) | ||||||
|  |  | ||||||
|  | @ -18,13 +18,11 @@ import android.view.MotionEvent; | ||||||
| import android.view.SubMenu; | import android.view.SubMenu; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.widget.CheckBox; | import android.widget.CheckBox; | ||||||
| import android.widget.SeekBar; |  | ||||||
| import android.widget.TextView; | import android.widget.TextView; | ||||||
| import android.widget.Toast; | import android.widget.Toast; | ||||||
| 
 | 
 | ||||||
| import androidx.annotation.IntDef; | import androidx.annotation.IntDef; | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.appcompat.app.AlertDialog; |  | ||||||
| import androidx.appcompat.app.AppCompatActivity; | import androidx.appcompat.app.AppCompatActivity; | ||||||
| import androidx.appcompat.widget.PopupMenu; | import androidx.appcompat.widget.PopupMenu; | ||||||
| import androidx.core.app.NotificationManagerCompat; | import androidx.core.app.NotificationManagerCompat; | ||||||
|  | @ -45,6 +43,7 @@ import org.citra.citra_emu.utils.EmulationMenuSettings; | ||||||
| import org.citra.citra_emu.utils.FileBrowserHelper; | import org.citra.citra_emu.utils.FileBrowserHelper; | ||||||
| import org.citra.citra_emu.utils.FileUtil; | import org.citra.citra_emu.utils.FileUtil; | ||||||
| import org.citra.citra_emu.utils.ForegroundService; | import org.citra.citra_emu.utils.ForegroundService; | ||||||
|  | import org.citra.citra_emu.utils.ThemeUtil; | ||||||
| 
 | 
 | ||||||
| import java.io.File; | import java.io.File; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  | @ -56,6 +55,9 @@ import static android.Manifest.permission.CAMERA; | ||||||
| import static android.Manifest.permission.RECORD_AUDIO; | import static android.Manifest.permission.RECORD_AUDIO; | ||||||
| import static java.lang.annotation.RetentionPolicy.SOURCE; | import static java.lang.annotation.RetentionPolicy.SOURCE; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.dialog.MaterialAlertDialogBuilder; | ||||||
|  | import com.google.android.material.slider.Slider; | ||||||
|  | 
 | ||||||
| public final class EmulationActivity extends AppCompatActivity { | public final class EmulationActivity extends AppCompatActivity { | ||||||
|     public static final String EXTRA_SELECTED_GAME = "SelectedGame"; |     public static final String EXTRA_SELECTED_GAME = "SelectedGame"; | ||||||
|     public static final String EXTRA_SELECTED_TITLE = "SelectedTitle"; |     public static final String EXTRA_SELECTED_TITLE = "SelectedTitle"; | ||||||
|  | @ -151,6 +153,8 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     protected void onCreate(Bundle savedInstanceState) { |     protected void onCreate(Bundle savedInstanceState) { | ||||||
|  |         ThemeUtil.applyTheme(this); | ||||||
|  | 
 | ||||||
|         super.onCreate(savedInstanceState); |         super.onCreate(savedInstanceState); | ||||||
| 
 | 
 | ||||||
|         if (savedInstanceState == null) { |         if (savedInstanceState == null) { | ||||||
|  | @ -179,8 +183,6 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
|         // Set these options now so that the SurfaceView the game renders into is the right size. |         // Set these options now so that the SurfaceView the game renders into is the right size. | ||||||
|         enableFullscreenImmersive(); |         enableFullscreenImmersive(); | ||||||
| 
 | 
 | ||||||
|         setTheme(R.style.CitraEmulationBase); |  | ||||||
| 
 |  | ||||||
|         setContentView(R.layout.activity_emulation); |         setContentView(R.layout.activity_emulation); | ||||||
| 
 | 
 | ||||||
|         // Find or create the EmulationFragment |         // Find or create the EmulationFragment | ||||||
|  | @ -243,7 +245,7 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
|             case NativeLibrary.REQUEST_CODE_NATIVE_CAMERA: |             case NativeLibrary.REQUEST_CODE_NATIVE_CAMERA: | ||||||
|                 if (grantResults[0] != PackageManager.PERMISSION_GRANTED && |                 if (grantResults[0] != PackageManager.PERMISSION_GRANTED && | ||||||
|                         shouldShowRequestPermissionRationale(CAMERA)) { |                         shouldShowRequestPermissionRationale(CAMERA)) { | ||||||
|                     new AlertDialog.Builder(this) |                     new MaterialAlertDialogBuilder(this) | ||||||
|                             .setTitle(R.string.camera) |                             .setTitle(R.string.camera) | ||||||
|                             .setMessage(R.string.camera_permission_needed) |                             .setMessage(R.string.camera_permission_needed) | ||||||
|                             .setPositiveButton(android.R.string.ok, null) |                             .setPositiveButton(android.R.string.ok, null) | ||||||
|  | @ -254,7 +256,7 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
|             case NativeLibrary.REQUEST_CODE_NATIVE_MIC: |             case NativeLibrary.REQUEST_CODE_NATIVE_MIC: | ||||||
|                 if (grantResults[0] != PackageManager.PERMISSION_GRANTED && |                 if (grantResults[0] != PackageManager.PERMISSION_GRANTED && | ||||||
|                         shouldShowRequestPermissionRationale(RECORD_AUDIO)) { |                         shouldShowRequestPermissionRationale(RECORD_AUDIO)) { | ||||||
|                     new AlertDialog.Builder(this) |                     new MaterialAlertDialogBuilder(this) | ||||||
|                             .setTitle(R.string.microphone) |                             .setTitle(R.string.microphone) | ||||||
|                             .setMessage(R.string.microphone_permission_needed) |                             .setMessage(R.string.microphone_permission_needed) | ||||||
|                             .setPositiveButton(android.R.string.ok, null) |                             .setPositiveButton(android.R.string.ok, null) | ||||||
|  | @ -324,7 +326,7 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
|         View view = inflater.inflate(R.layout.dialog_checkbox, null); |         View view = inflater.inflate(R.layout.dialog_checkbox, null); | ||||||
|         CheckBox checkBox = view.findViewById(R.id.checkBox); |         CheckBox checkBox = view.findViewById(R.id.checkBox); | ||||||
| 
 | 
 | ||||||
|         new AlertDialog.Builder(this) |         new MaterialAlertDialogBuilder(this) | ||||||
|                 .setTitle(R.string.savestate_warning_title) |                 .setTitle(R.string.savestate_warning_title) | ||||||
|                 .setMessage(R.string.savestate_warning_message) |                 .setMessage(R.string.savestate_warning_message) | ||||||
|                 .setView(view) |                 .setView(view) | ||||||
|  | @ -464,8 +466,8 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
| 
 | 
 | ||||||
|             case MENU_ACTION_LOAD_AMIIBO: |             case MENU_ACTION_LOAD_AMIIBO: | ||||||
|                 FileBrowserHelper.openFilePicker(this, REQUEST_SELECT_AMIIBO, |                 FileBrowserHelper.openFilePicker(this, REQUEST_SELECT_AMIIBO, | ||||||
|                                                  R.string.select_amiibo, |                         R.string.select_amiibo, | ||||||
|                                                  Collections.singletonList("bin"), false); |                         Collections.singletonList("bin"), false); | ||||||
|                 break; |                 break; | ||||||
| 
 | 
 | ||||||
|             case MENU_ACTION_REMOVE_AMIIBO: |             case MENU_ACTION_REMOVE_AMIIBO: | ||||||
|  | @ -490,7 +492,7 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
| 
 | 
 | ||||||
|             case MENU_ACTION_CLOSE_GAME: |             case MENU_ACTION_CLOSE_GAME: | ||||||
|                 NativeLibrary.PauseEmulation(); |                 NativeLibrary.PauseEmulation(); | ||||||
|                 new AlertDialog.Builder(this) |                 new MaterialAlertDialogBuilder(this) | ||||||
|                         .setTitle(R.string.emulation_close_game) |                         .setTitle(R.string.emulation_close_game) | ||||||
|                         .setMessage(R.string.emulation_close_game_message) |                         .setMessage(R.string.emulation_close_game_message) | ||||||
|                         .setPositiveButton(android.R.string.yes, (dialogInterface, i) -> |                         .setPositiveButton(android.R.string.yes, (dialogInterface, i) -> | ||||||
|  | @ -498,11 +500,8 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
|                             mEmulationFragment.stopEmulation(); |                             mEmulationFragment.stopEmulation(); | ||||||
|                             finish(); |                             finish(); | ||||||
|                         }) |                         }) | ||||||
|                         .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> |                         .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> NativeLibrary.UnPauseEmulation()) | ||||||
|                                 NativeLibrary.UnPauseEmulation()) |                         .setOnCancelListener(dialogInterface -> NativeLibrary.UnPauseEmulation()) | ||||||
|                         .setOnCancelListener(dialogInterface -> |  | ||||||
|                                 NativeLibrary.UnPauseEmulation()) |  | ||||||
|                         .create() |  | ||||||
|                         .show(); |                         .show(); | ||||||
|                 break; |                 break; | ||||||
|         } |         } | ||||||
|  | @ -589,11 +588,10 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (!success) { |         if (!success) { | ||||||
|             new AlertDialog.Builder(this) |             new MaterialAlertDialogBuilder(this) | ||||||
|                     .setTitle(R.string.amiibo_load_error) |                     .setTitle(R.string.amiibo_load_error) | ||||||
|                     .setMessage(R.string.amiibo_load_error_message) |                     .setMessage(R.string.amiibo_load_error_message) | ||||||
|                     .setPositiveButton(android.R.string.ok, null) |                     .setPositiveButton(android.R.string.ok, null) | ||||||
|                     .create() |  | ||||||
|                     .show(); |                     .show(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -605,8 +603,6 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
|     private void toggleControls() { |     private void toggleControls() { | ||||||
|         final SharedPreferences.Editor editor = mPreferences.edit(); |         final SharedPreferences.Editor editor = mPreferences.edit(); | ||||||
|         boolean[] enabledButtons = new boolean[14]; |         boolean[] enabledButtons = new boolean[14]; | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(this); |  | ||||||
|         builder.setTitle(R.string.emulation_toggle_controls); |  | ||||||
| 
 | 
 | ||||||
|         for (int i = 0; i < enabledButtons.length; i++) { |         for (int i = 0; i < enabledButtons.length; i++) { | ||||||
|             // Buttons that are disabled by default |             // Buttons that are disabled by default | ||||||
|  | @ -621,63 +617,47 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
| 
 | 
 | ||||||
|             enabledButtons[i] = mPreferences.getBoolean("buttonToggle" + i, defaultValue); |             enabledButtons[i] = mPreferences.getBoolean("buttonToggle" + i, defaultValue); | ||||||
|         } |         } | ||||||
|         builder.setMultiChoiceItems(R.array.n3dsButtons, enabledButtons, |  | ||||||
|                 (dialog, indexSelected, isChecked) -> editor |  | ||||||
|                         .putBoolean("buttonToggle" + indexSelected, isChecked)); |  | ||||||
|         builder.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> |  | ||||||
|         { |  | ||||||
|             editor.apply(); |  | ||||||
| 
 | 
 | ||||||
|             mEmulationFragment.refreshInputOverlay(); |         new MaterialAlertDialogBuilder(this) | ||||||
|         }); |                 .setTitle(R.string.emulation_toggle_controls) | ||||||
| 
 |                 .setMultiChoiceItems(R.array.n3dsButtons, enabledButtons, | ||||||
|         AlertDialog alertDialog = builder.create(); |                         (dialog, indexSelected, isChecked) -> editor | ||||||
|         alertDialog.show(); |                                 .putBoolean("buttonToggle" + indexSelected, isChecked)) | ||||||
|  |                 .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> | ||||||
|  |                 { | ||||||
|  |                     editor.apply(); | ||||||
|  |                     mEmulationFragment.refreshInputOverlay(); | ||||||
|  |                 }) | ||||||
|  |                 .show(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void adjustScale() { |     private void adjustScale() { | ||||||
|         LayoutInflater inflater = LayoutInflater.from(this); |         LayoutInflater inflater = LayoutInflater.from(this); | ||||||
|         View view = inflater.inflate(R.layout.dialog_seekbar, null); |         View view = inflater.inflate(R.layout.dialog_slider, null); | ||||||
| 
 | 
 | ||||||
|         final SeekBar seekbar = view.findViewById(R.id.seekbar); |         final Slider slider = view.findViewById(R.id.slider); | ||||||
|         final TextView value = view.findViewById(R.id.text_value); |         final TextView textValue = view.findViewById(R.id.text_value); | ||||||
|         final TextView units = view.findViewById(R.id.text_units); |         final TextView units = view.findViewById(R.id.text_units); | ||||||
| 
 | 
 | ||||||
|         seekbar.setMax(150); |         slider.setValueTo(150); | ||||||
|         seekbar.setProgress(mPreferences.getInt("controlScale", 50)); |         slider.setValue(mPreferences.getInt("controlScale", 50)); | ||||||
|         seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { |         slider.addOnChangeListener((slider1, progress, fromUser) -> { | ||||||
|             public void onStartTrackingTouch(SeekBar seekBar) { |             textValue.setText(String.valueOf((int) progress + 50)); | ||||||
|             } |             setControlScale((int) slider1.getValue()); | ||||||
| 
 |  | ||||||
|             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { |  | ||||||
|                 value.setText(String.valueOf(progress + 50)); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             public void onStopTrackingTouch(SeekBar seekBar) { |  | ||||||
|                 setControlScale(seekbar.getProgress()); |  | ||||||
|             } |  | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|         value.setText(String.valueOf(seekbar.getProgress() + 50)); |         textValue.setText(String.valueOf((int) slider.getValue() + 50)); | ||||||
|         units.setText("%"); |         units.setText("%"); | ||||||
| 
 | 
 | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(this); |         final int previousProgress = (int) slider.getValue(); | ||||||
|         builder.setTitle(R.string.emulation_control_scale); |  | ||||||
|         builder.setView(view); |  | ||||||
|         final int previousProgress = seekbar.getProgress(); |  | ||||||
|         builder.setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> { |  | ||||||
|             setControlScale(previousProgress); |  | ||||||
|         }); |  | ||||||
|         builder.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> |  | ||||||
|         { |  | ||||||
|             setControlScale(seekbar.getProgress()); |  | ||||||
|         }); |  | ||||||
|         builder.setNeutralButton(R.string.slider_default, (dialogInterface, i) -> { |  | ||||||
|             setControlScale(50); |  | ||||||
|         }); |  | ||||||
| 
 | 
 | ||||||
|         AlertDialog alertDialog = builder.create(); |         new MaterialAlertDialogBuilder(this) | ||||||
|         alertDialog.show(); |                 .setTitle(R.string.emulation_control_scale) | ||||||
|  |                 .setView(view) | ||||||
|  |                 .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> setControlScale(previousProgress)) | ||||||
|  |                 .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> setControlScale((int) slider.getValue())) | ||||||
|  |                 .setNeutralButton(R.string.slider_default, (dialogInterface, i) -> setControlScale(50)) | ||||||
|  |                 .show(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void setControlScale(int scale) { |     private void setControlScale(int scale) { | ||||||
|  | @ -688,12 +668,10 @@ public final class EmulationActivity extends AppCompatActivity { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void resetOverlay() { |     private void resetOverlay() { | ||||||
|         new AlertDialog.Builder(this) |         new MaterialAlertDialogBuilder(this) | ||||||
|                 .setTitle(getString(R.string.emulation_touch_overlay_reset)) |                 .setTitle(getString(R.string.emulation_touch_overlay_reset)) | ||||||
|                 .setPositiveButton(android.R.string.yes, (dialogInterface, i) -> mEmulationFragment.resetInputOverlay()) |                 .setPositiveButton(android.R.string.yes, (dialogInterface, i) -> mEmulationFragment.resetInputOverlay()) | ||||||
|                 .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> { |                 .setNegativeButton(android.R.string.cancel, null) | ||||||
|                 }) |  | ||||||
|                 .create() |  | ||||||
|                 .show(); |                 .show(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,8 +2,6 @@ package org.citra.citra_emu.adapters; | ||||||
| 
 | 
 | ||||||
| import android.database.Cursor; | import android.database.Cursor; | ||||||
| import android.database.DataSetObserver; | import android.database.DataSetObserver; | ||||||
| import android.graphics.Rect; |  | ||||||
| import android.graphics.drawable.Drawable; |  | ||||||
| import android.os.Build; | import android.os.Build; | ||||||
| import android.os.SystemClock; | import android.os.SystemClock; | ||||||
| import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||||
|  | @ -12,14 +10,14 @@ import android.view.ViewGroup; | ||||||
| 
 | 
 | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.annotation.RequiresApi; | import androidx.annotation.RequiresApi; | ||||||
| import androidx.core.content.ContextCompat; |  | ||||||
| import androidx.fragment.app.FragmentActivity; | import androidx.fragment.app.FragmentActivity; | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.color.MaterialColors; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.R; | import org.citra.citra_emu.R; | ||||||
| import org.citra.citra_emu.activities.EmulationActivity; | import org.citra.citra_emu.activities.EmulationActivity; | ||||||
| import org.citra.citra_emu.model.GameDatabase; | import org.citra.citra_emu.model.GameDatabase; | ||||||
| import org.citra.citra_emu.ui.DividerItemDecoration; |  | ||||||
| import org.citra.citra_emu.utils.Log; | import org.citra.citra_emu.utils.Log; | ||||||
| import org.citra.citra_emu.utils.PicassoUtils; | import org.citra.citra_emu.utils.PicassoUtils; | ||||||
| import org.citra.citra_emu.viewholders.GameViewHolder; | import org.citra.citra_emu.viewholders.GameViewHolder; | ||||||
|  | @ -99,9 +97,9 @@ public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> impl | ||||||
|                 holder.regions = mCursor.getString(GameDatabase.GAME_COLUMN_REGIONS); |                 holder.regions = mCursor.getString(GameDatabase.GAME_COLUMN_REGIONS); | ||||||
|                 holder.company = mCursor.getString(GameDatabase.GAME_COLUMN_COMPANY); |                 holder.company = mCursor.getString(GameDatabase.GAME_COLUMN_COMPANY); | ||||||
| 
 | 
 | ||||||
|                 final int backgroundColorId = isValidGame(holder.path) ? R.color.card_view_background : R.color.card_view_disabled; |                 final int backgroundColorId = isValidGame(holder.path) ? R.attr.colorSurface : R.attr.colorErrorContainer; | ||||||
|                 View itemView = holder.getItemView(); |                 View itemView = holder.getItemView(); | ||||||
|                 itemView.setBackgroundColor(ContextCompat.getColor(itemView.getContext(), backgroundColorId)); |                 itemView.setBackgroundColor(MaterialColors.getColor(itemView, backgroundColorId)); | ||||||
|             } else { |             } else { | ||||||
|                 Log.error("[GameAdapter] Can't bind view; Cursor is not valid."); |                 Log.error("[GameAdapter] Can't bind view; Cursor is not valid."); | ||||||
|             } |             } | ||||||
|  | @ -204,24 +202,6 @@ public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> impl | ||||||
|         EmulationActivity.launch((FragmentActivity) view.getContext(), holder.path, holder.title); |         EmulationActivity.launch((FragmentActivity) view.getContext(), holder.path, holder.title); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static class SpacesItemDecoration extends DividerItemDecoration { |  | ||||||
|         private int space; |  | ||||||
| 
 |  | ||||||
|         public SpacesItemDecoration(Drawable divider, int space) { |  | ||||||
|             super(divider); |  | ||||||
|             this.space = space; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         @Override |  | ||||||
|         public void getItemOffsets(Rect outRect, @NonNull View view, @NonNull RecyclerView parent, |  | ||||||
|                                    @NonNull RecyclerView.State state) { |  | ||||||
|             outRect.left = 0; |  | ||||||
|             outRect.right = 0; |  | ||||||
|             outRect.bottom = space; |  | ||||||
|             outRect.top = 0; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private boolean isValidGame(String path) { |     private boolean isValidGame(String path) { | ||||||
|         return Stream.of( |         return Stream.of( | ||||||
|                 ".rar", ".zip", ".7z", ".torrent", ".tar", ".gz").noneMatch(suffix -> path.toLowerCase().endsWith(suffix)); |                 ".rar", ".zip", ".7z", ".torrent", ".tar", ".gz").noneMatch(suffix -> path.toLowerCase().endsWith(suffix)); | ||||||
|  |  | ||||||
|  | @ -22,6 +22,8 @@ import androidx.annotation.NonNull; | ||||||
| import androidx.appcompat.app.AlertDialog; | import androidx.appcompat.app.AlertDialog; | ||||||
| import androidx.fragment.app.DialogFragment; | import androidx.fragment.app.DialogFragment; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.dialog.MaterialAlertDialogBuilder; | ||||||
|  | 
 | ||||||
| public final class MiiSelector { | public final class MiiSelector { | ||||||
|     public static class MiiSelectorConfig implements java.io.Serializable { |     public static class MiiSelectorConfig implements java.io.Serializable { | ||||||
|         public boolean enable_cancel_button; |         public boolean enable_cancel_button; | ||||||
|  | @ -69,8 +71,8 @@ public final class MiiSelector { | ||||||
|                     ? (int) config.initially_selected_mii_index |                     ? (int) config.initially_selected_mii_index | ||||||
|                     : 0; |                     : 0; | ||||||
|             data.index = initialIndex; |             data.index = initialIndex; | ||||||
|             AlertDialog.Builder builder = |             MaterialAlertDialogBuilder builder = | ||||||
|                     new AlertDialog.Builder(emulationActivity) |                     new MaterialAlertDialogBuilder(emulationActivity) | ||||||
|                             .setTitle(config.title.isEmpty() |                             .setTitle(config.title.isEmpty() | ||||||
|                                     ? emulationActivity.getString(R.string.mii_selector) |                                     ? emulationActivity.getString(R.string.mii_selector) | ||||||
|                                     : config.title) |                                     : config.title) | ||||||
|  |  | ||||||
|  | @ -19,6 +19,8 @@ import androidx.annotation.Nullable; | ||||||
| import androidx.appcompat.app.AlertDialog; | import androidx.appcompat.app.AlertDialog; | ||||||
| import androidx.fragment.app.DialogFragment; | import androidx.fragment.app.DialogFragment; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.dialog.MaterialAlertDialogBuilder; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.CitraApplication; | import org.citra.citra_emu.CitraApplication; | ||||||
| import org.citra.citra_emu.NativeLibrary; | import org.citra.citra_emu.NativeLibrary; | ||||||
| import org.citra.citra_emu.R; | import org.citra.citra_emu.R; | ||||||
|  | @ -124,7 +126,7 @@ public final class SoftwareKeyboard { | ||||||
|             FrameLayout container = new FrameLayout(emulationActivity); |             FrameLayout container = new FrameLayout(emulationActivity); | ||||||
|             container.addView(editText); |             container.addView(editText); | ||||||
| 
 | 
 | ||||||
|             AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity) |             MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(emulationActivity) | ||||||
|                     .setTitle(R.string.software_keyboard) |                     .setTitle(R.string.software_keyboard) | ||||||
|                     .setView(container); |                     .setView(container); | ||||||
|             setCancelable(false); |             setCancelable(false); | ||||||
|  | @ -227,7 +229,7 @@ public final class SoftwareKeyboard { | ||||||
|                 break; |                 break; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         new AlertDialog.Builder(emulationActivity) |         new MaterialAlertDialogBuilder(emulationActivity) | ||||||
|                 .setTitle(R.string.software_keyboard) |                 .setTitle(R.string.software_keyboard) | ||||||
|                 .setMessage(message) |                 .setMessage(message) | ||||||
|                 .setPositiveButton(android.R.string.ok, null) |                 .setPositiveButton(android.R.string.ok, null) | ||||||
|  |  | ||||||
|  | @ -8,7 +8,6 @@ import android.app.Activity; | ||||||
| import android.app.Dialog; | import android.app.Dialog; | ||||||
| import android.content.DialogInterface; | import android.content.DialogInterface; | ||||||
| import android.os.Bundle; | import android.os.Bundle; | ||||||
| import android.os.Handler; |  | ||||||
| import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.widget.ProgressBar; | import android.widget.ProgressBar; | ||||||
|  | @ -18,6 +17,8 @@ import androidx.annotation.NonNull; | ||||||
| import androidx.appcompat.app.AlertDialog; | import androidx.appcompat.app.AlertDialog; | ||||||
| import androidx.fragment.app.DialogFragment; | import androidx.fragment.app.DialogFragment; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.dialog.MaterialAlertDialogBuilder; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.NativeLibrary; | import org.citra.citra_emu.NativeLibrary; | ||||||
| import org.citra.citra_emu.R; | import org.citra.citra_emu.R; | ||||||
| import org.citra.citra_emu.activities.EmulationActivity; | import org.citra.citra_emu.activities.EmulationActivity; | ||||||
|  | @ -70,22 +71,15 @@ public class DiskShaderCacheProgress { | ||||||
|             setCancelable(false); |             setCancelable(false); | ||||||
|             setRetainInstance(true); |             setRetainInstance(true); | ||||||
| 
 | 
 | ||||||
|             AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity); |  | ||||||
|             builder.setTitle(title); |  | ||||||
|             builder.setMessage(message); |  | ||||||
|             builder.setView(view); |  | ||||||
|             builder.setNegativeButton(android.R.string.cancel, null); |  | ||||||
| 
 |  | ||||||
|             dialog = builder.create(); |  | ||||||
|             dialog.create(); |  | ||||||
| 
 |  | ||||||
|             dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener((v) -> emulationActivity.onBackPressed()); |  | ||||||
| 
 |  | ||||||
|             synchronized (finishLock) { |             synchronized (finishLock) { | ||||||
|                 finishLock.notifyAll(); |                 finishLock.notifyAll(); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             return dialog; |             return new MaterialAlertDialogBuilder(emulationActivity) | ||||||
|  |                     .setTitle(title) | ||||||
|  |                     .setMessage(message) | ||||||
|  |                     .setNegativeButton(android.R.string.cancel, (dialog, which) -> emulationActivity.onBackPressed()) | ||||||
|  |                     .create(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private void onUpdateProgress(String msg, int progress, int max) { |         private void onUpdateProgress(String msg, int progress, int max) { | ||||||
|  |  | ||||||
|  | @ -15,6 +15,8 @@ import androidx.appcompat.app.AlertDialog; | ||||||
| import androidx.fragment.app.Fragment; | import androidx.fragment.app.Fragment; | ||||||
| import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.dialog.MaterialAlertDialogBuilder; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.R; | import org.citra.citra_emu.R; | ||||||
| import org.citra.citra_emu.features.cheats.model.Cheat; | import org.citra.citra_emu.features.cheats.model.Cheat; | ||||||
| import org.citra.citra_emu.features.cheats.model.CheatsViewModel; | import org.citra.citra_emu.features.cheats.model.CheatsViewModel; | ||||||
|  | @ -80,12 +82,12 @@ public class CheatDetailsFragment extends Fragment { | ||||||
|     private void onDeleteClicked(View view) { |     private void onDeleteClicked(View view) { | ||||||
|         String name = mEditName.getText().toString(); |         String name = mEditName.getText().toString(); | ||||||
| 
 | 
 | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); |         new MaterialAlertDialogBuilder(requireContext()) | ||||||
|         builder.setMessage(getString(R.string.cheats_delete_confirmation, name)); |                 .setMessage(getString(R.string.cheats_delete_confirmation, name)) | ||||||
|         builder.setPositiveButton(android.R.string.yes, |                 .setPositiveButton(android.R.string.yes, | ||||||
|                 (dialog, i) -> mViewModel.deleteSelectedCheat()); |                         (dialog, i) -> mViewModel.deleteSelectedCheat()) | ||||||
|         builder.setNegativeButton(android.R.string.no, null); |                 .setNegativeButton(android.R.string.no, null) | ||||||
|         builder.show(); |                 .show(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void onEditClicked(View view) { |     private void onEditClicked(View view) { | ||||||
|  |  | ||||||
|  | @ -14,10 +14,13 @@ import androidx.core.view.ViewCompat; | ||||||
| import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||||
| import androidx.slidingpanelayout.widget.SlidingPaneLayout; | import androidx.slidingpanelayout.widget.SlidingPaneLayout; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.appbar.MaterialToolbar; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.R; | import org.citra.citra_emu.R; | ||||||
| import org.citra.citra_emu.features.cheats.model.Cheat; | import org.citra.citra_emu.features.cheats.model.Cheat; | ||||||
| import org.citra.citra_emu.features.cheats.model.CheatsViewModel; | import org.citra.citra_emu.features.cheats.model.CheatsViewModel; | ||||||
| import org.citra.citra_emu.ui.TwoPaneOnBackPressedCallback; | import org.citra.citra_emu.ui.TwoPaneOnBackPressedCallback; | ||||||
|  | import org.citra.citra_emu.utils.ThemeUtil; | ||||||
| 
 | 
 | ||||||
| public class CheatsActivity extends AppCompatActivity | public class CheatsActivity extends AppCompatActivity | ||||||
|         implements SlidingPaneLayout.PanelSlideListener { |         implements SlidingPaneLayout.PanelSlideListener { | ||||||
|  | @ -37,6 +40,8 @@ public class CheatsActivity extends AppCompatActivity | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     protected void onCreate(Bundle savedInstanceState) { |     protected void onCreate(Bundle savedInstanceState) { | ||||||
|  |         ThemeUtil.applyTheme(this); | ||||||
|  | 
 | ||||||
|         super.onCreate(savedInstanceState); |         super.onCreate(savedInstanceState); | ||||||
| 
 | 
 | ||||||
|         mViewModel = new ViewModelProvider(this).get(CheatsViewModel.class); |         mViewModel = new ViewModelProvider(this).get(CheatsViewModel.class); | ||||||
|  | @ -63,6 +68,8 @@ public class CheatsActivity extends AppCompatActivity | ||||||
|         mViewModel.getOpenDetailsViewEvent().observe(this, this::openDetailsView); |         mViewModel.getOpenDetailsViewEvent().observe(this, this::openDetailsView); | ||||||
| 
 | 
 | ||||||
|         // Show "Up" button in the action bar for navigation |         // Show "Up" button in the action bar for navigation | ||||||
|  |         MaterialToolbar toolbar = findViewById(R.id.toolbar_cheats); | ||||||
|  |         setSupportActionBar(toolbar); | ||||||
|         getSupportActionBar().setDisplayHomeAsUpEnabled(true); |         getSupportActionBar().setDisplayHomeAsUpEnabled(true); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -15,11 +15,14 @@ import androidx.appcompat.app.AppCompatActivity; | ||||||
| import androidx.fragment.app.FragmentTransaction; | import androidx.fragment.app.FragmentTransaction; | ||||||
| import androidx.localbroadcastmanager.content.LocalBroadcastManager; | import androidx.localbroadcastmanager.content.LocalBroadcastManager; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.appbar.MaterialToolbar; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.NativeLibrary; | import org.citra.citra_emu.NativeLibrary; | ||||||
| import org.citra.citra_emu.R; | import org.citra.citra_emu.R; | ||||||
| import org.citra.citra_emu.utils.DirectoryInitialization; | import org.citra.citra_emu.utils.DirectoryInitialization; | ||||||
| import org.citra.citra_emu.utils.DirectoryStateReceiver; | import org.citra.citra_emu.utils.DirectoryStateReceiver; | ||||||
| import org.citra.citra_emu.utils.EmulationMenuSettings; | import org.citra.citra_emu.utils.EmulationMenuSettings; | ||||||
|  | import org.citra.citra_emu.utils.ThemeUtil; | ||||||
| 
 | 
 | ||||||
| public final class SettingsActivity extends AppCompatActivity implements SettingsActivityView { | public final class SettingsActivity extends AppCompatActivity implements SettingsActivityView { | ||||||
|     private static final String ARG_MENU_TAG = "menu_tag"; |     private static final String ARG_MENU_TAG = "menu_tag"; | ||||||
|  | @ -38,6 +41,8 @@ public final class SettingsActivity extends AppCompatActivity implements Setting | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     protected void onCreate(Bundle savedInstanceState) { |     protected void onCreate(Bundle savedInstanceState) { | ||||||
|  |         ThemeUtil.applyTheme(this); | ||||||
|  | 
 | ||||||
|         super.onCreate(savedInstanceState); |         super.onCreate(savedInstanceState); | ||||||
| 
 | 
 | ||||||
|         setContentView(R.layout.activity_settings); |         setContentView(R.layout.activity_settings); | ||||||
|  | @ -49,6 +54,8 @@ public final class SettingsActivity extends AppCompatActivity implements Setting | ||||||
|         mPresenter.onCreate(savedInstanceState, menuTag, gameID); |         mPresenter.onCreate(savedInstanceState, menuTag, gameID); | ||||||
| 
 | 
 | ||||||
|         // Show "Back" button in the action bar for navigation |         // Show "Back" button in the action bar for navigation | ||||||
|  |         MaterialToolbar toolbar = findViewById(R.id.toolbar_settings); | ||||||
|  |         setSupportActionBar(toolbar); | ||||||
|         getSupportActionBar().setDisplayHomeAsUpEnabled(true); |         getSupportActionBar().setDisplayHomeAsUpEnabled(true); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,6 +4,8 @@ import android.content.IntentFilter; | ||||||
| import android.os.Bundle; | import android.os.Bundle; | ||||||
| import android.text.TextUtils; | import android.text.TextUtils; | ||||||
| 
 | 
 | ||||||
|  | import androidx.appcompat.app.AppCompatActivity; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.NativeLibrary; | import org.citra.citra_emu.NativeLibrary; | ||||||
| import org.citra.citra_emu.features.settings.model.Settings; | import org.citra.citra_emu.features.settings.model.Settings; | ||||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||||
|  | @ -109,8 +111,6 @@ public final class SettingsActivityPresenter { | ||||||
|             mSettings.saveSettings(mView); |             mSettings.saveSettings(mView); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         ThemeUtil.applyTheme(); |  | ||||||
| 
 |  | ||||||
|         NativeLibrary.ReloadSettings(); |         NativeLibrary.ReloadSettings(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -6,13 +6,16 @@ import android.view.LayoutInflater; | ||||||
| import android.view.View; | import android.view.View; | ||||||
| import android.view.ViewGroup; | import android.view.ViewGroup; | ||||||
| import android.widget.DatePicker; | import android.widget.DatePicker; | ||||||
| import android.widget.SeekBar; |  | ||||||
| import android.widget.TextView; | import android.widget.TextView; | ||||||
| import android.widget.TimePicker; | import android.widget.TimePicker; | ||||||
| 
 | 
 | ||||||
|  | import androidx.annotation.NonNull; | ||||||
| import androidx.appcompat.app.AlertDialog; | import androidx.appcompat.app.AlertDialog; | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.dialog.MaterialAlertDialogBuilder; | ||||||
|  | import com.google.android.material.slider.Slider; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.R; | import org.citra.citra_emu.R; | ||||||
| import org.citra.citra_emu.dialogs.MotionAlertDialog; | import org.citra.citra_emu.dialogs.MotionAlertDialog; | ||||||
| import org.citra.citra_emu.features.settings.model.FloatSetting; | import org.citra.citra_emu.features.settings.model.FloatSetting; | ||||||
|  | @ -41,15 +44,14 @@ import org.citra.citra_emu.utils.Log; | ||||||
| 
 | 
 | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| 
 | 
 | ||||||
| public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolder> | public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolder> implements DialogInterface.OnClickListener, Slider.OnChangeListener { | ||||||
|         implements DialogInterface.OnClickListener, SeekBar.OnSeekBarChangeListener { |  | ||||||
|     private SettingsFragmentView mView; |     private SettingsFragmentView mView; | ||||||
|     private Context mContext; |     private Context mContext; | ||||||
|     private ArrayList<SettingsItem> mSettings; |     private ArrayList<SettingsItem> mSettings; | ||||||
| 
 | 
 | ||||||
|     private SettingsItem mClickedItem; |     private SettingsItem mClickedItem; | ||||||
|     private int mClickedPosition; |     private int mClickedPosition; | ||||||
|     private int mSeekbarProgress; |     private int mSliderProgress; | ||||||
| 
 | 
 | ||||||
|     private AlertDialog mDialog; |     private AlertDialog mDialog; | ||||||
|     private TextView mTextSliderValue; |     private TextView mTextSliderValue; | ||||||
|  | @ -149,11 +151,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde | ||||||
| 
 | 
 | ||||||
|         int value = getSelectionForSingleChoiceValue(item); |         int value = getSelectionForSingleChoiceValue(item); | ||||||
| 
 | 
 | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity()); |         MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(mView.getActivity()) | ||||||
| 
 |                 .setTitle(item.getNameId()) | ||||||
|         builder.setTitle(item.getNameId()); |                 .setSingleChoiceItems(item.getChoicesId(), value, this); | ||||||
|         builder.setSingleChoiceItems(item.getChoicesId(), value, this); |  | ||||||
| 
 |  | ||||||
|         mDialog = builder.show(); |         mDialog = builder.show(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -162,11 +162,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde | ||||||
| 
 | 
 | ||||||
|         int value = getSelectionForSingleChoiceValue(item); |         int value = getSelectionForSingleChoiceValue(item); | ||||||
| 
 | 
 | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity()); |         MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(mView.getActivity()) | ||||||
| 
 |                 .setTitle(item.getNameId()) | ||||||
|         builder.setTitle(item.getNameId()); |                 .setSingleChoiceItems(item.getChoicesId(), value, this); | ||||||
|         builder.setSingleChoiceItems(item.getChoicesId(), value, this); |  | ||||||
| 
 |  | ||||||
|         mDialog = builder.show(); |         mDialog = builder.show(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -199,11 +197,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde | ||||||
|     public void onStringSingleChoiceClick(StringSingleChoiceSetting item) { |     public void onStringSingleChoiceClick(StringSingleChoiceSetting item) { | ||||||
|         mClickedItem = item; |         mClickedItem = item; | ||||||
| 
 | 
 | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity()); |         MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(mView.getActivity()) | ||||||
| 
 |                 .setTitle(item.getNameId()) | ||||||
|         builder.setTitle(item.getNameId()); |                 .setSingleChoiceItems(item.getChoicesId(), item.getSelectValueIndex(), this); | ||||||
|         builder.setSingleChoiceItems(item.getChoicesId(), item.getSelectValueIndex(), this); |  | ||||||
| 
 |  | ||||||
|         mDialog = builder.show(); |         mDialog = builder.show(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -226,8 +222,6 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde | ||||||
|         mClickedItem = item; |         mClickedItem = item; | ||||||
|         mClickedPosition = position; |         mClickedPosition = position; | ||||||
| 
 | 
 | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity()); |  | ||||||
| 
 |  | ||||||
|         LayoutInflater inflater = LayoutInflater.from(mView.getActivity()); |         LayoutInflater inflater = LayoutInflater.from(mView.getActivity()); | ||||||
|         View view = inflater.inflate(R.layout.sysclock_datetime_picker, null); |         View view = inflater.inflate(R.layout.sysclock_datetime_picker, null); | ||||||
| 
 | 
 | ||||||
|  | @ -265,44 +259,45 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde | ||||||
|             closeDialog(); |             closeDialog(); | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         builder.setView(view); |         MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(mView.getActivity()) | ||||||
|         builder.setPositiveButton(android.R.string.ok, ok); |                 .setView(view) | ||||||
|         builder.setNegativeButton(android.R.string.cancel, defaultCancelListener); |                 .setPositiveButton(android.R.string.ok, ok) | ||||||
|  |                 .setNegativeButton(android.R.string.cancel, defaultCancelListener); | ||||||
|         mDialog = builder.show(); |         mDialog = builder.show(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void onSliderClick(SliderSetting item, int position) { |     public void onSliderClick(SliderSetting item, int position) { | ||||||
|         mClickedItem = item; |         mClickedItem = item; | ||||||
|         mClickedPosition = position; |         mClickedPosition = position; | ||||||
|         mSeekbarProgress = item.getSelectedValue(); |         mSliderProgress = item.getSelectedValue(); | ||||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity()); |  | ||||||
| 
 | 
 | ||||||
|         LayoutInflater inflater = LayoutInflater.from(mView.getActivity()); |         LayoutInflater inflater = LayoutInflater.from(mView.getActivity()); | ||||||
|         View view = inflater.inflate(R.layout.dialog_seekbar, null); |         View view = inflater.inflate(R.layout.dialog_slider, null); | ||||||
| 
 | 
 | ||||||
|         SeekBar seekbar = view.findViewById(R.id.seekbar); |         Slider slider = view.findViewById(R.id.slider); | ||||||
| 
 | 
 | ||||||
|         builder.setTitle(item.getNameId()); |         MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(mView.getActivity()) | ||||||
|         builder.setView(view); |                 .setTitle(item.getNameId()) | ||||||
|         builder.setPositiveButton(android.R.string.ok, this); |                 .setView(view) | ||||||
|         builder.setNegativeButton(android.R.string.cancel, defaultCancelListener); |                 .setPositiveButton(android.R.string.ok, this) | ||||||
|         builder.setNeutralButton(R.string.slider_default, (DialogInterface dialog, int which) -> { |                 .setNegativeButton(android.R.string.cancel, defaultCancelListener) | ||||||
|             seekbar.setProgress(item.getDefaultValue()); |                 .setNeutralButton(R.string.slider_default, (DialogInterface dialog, int which) -> { | ||||||
|             onClick(dialog, which); |                     slider.setValue(item.getDefaultValue()); | ||||||
|         }); |                     onClick(dialog, which); | ||||||
|  |                 }); | ||||||
|         mDialog = builder.show(); |         mDialog = builder.show(); | ||||||
| 
 | 
 | ||||||
|         mTextSliderValue = view.findViewById(R.id.text_value); |         mTextSliderValue = view.findViewById(R.id.text_value); | ||||||
|         mTextSliderValue.setText(String.valueOf(mSeekbarProgress)); |         mTextSliderValue.setText(String.valueOf(mSliderProgress)); | ||||||
| 
 | 
 | ||||||
|         TextView units = view.findViewById(R.id.text_units); |         TextView units = view.findViewById(R.id.text_units); | ||||||
|         units.setText(item.getUnits()); |         units.setText(item.getUnits()); | ||||||
| 
 | 
 | ||||||
|         seekbar.setMin(item.getMin()); |         slider.setValueFrom(item.getMin()); | ||||||
|         seekbar.setMax(item.getMax()); |         slider.setValueTo(item.getMax()); | ||||||
|         seekbar.setProgress(mSeekbarProgress); |         slider.setValue(mSliderProgress); | ||||||
| 
 | 
 | ||||||
|         seekbar.setOnSeekBarChangeListener(this); |         slider.addOnChangeListener(this); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void onSubmenuClick(SubmenuSetting item) { |     public void onSubmenuClick(SubmenuSetting item) { | ||||||
|  | @ -375,19 +370,19 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde | ||||||
|             closeDialog(); |             closeDialog(); | ||||||
|         } else if (mClickedItem instanceof SliderSetting) { |         } else if (mClickedItem instanceof SliderSetting) { | ||||||
|             SliderSetting sliderSetting = (SliderSetting) mClickedItem; |             SliderSetting sliderSetting = (SliderSetting) mClickedItem; | ||||||
|             if (sliderSetting.getSelectedValue() != mSeekbarProgress) { |             if (sliderSetting.getSelectedValue() != mSliderProgress) { | ||||||
|                 mView.onSettingChanged(); |                 mView.onSettingChanged(); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (sliderSetting.getSetting() instanceof FloatSetting) { |             if (sliderSetting.getSetting() instanceof FloatSetting) { | ||||||
|                 float value = (float) mSeekbarProgress; |                 float value = (float) mSliderProgress; | ||||||
| 
 | 
 | ||||||
|                 FloatSetting setting = sliderSetting.setSelectedValue(value); |                 FloatSetting setting = sliderSetting.setSelectedValue(value); | ||||||
|                 if (setting != null) { |                 if (setting != null) { | ||||||
|                     mView.putSetting(setting); |                     mView.putSetting(setting); | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 IntSetting setting = sliderSetting.setSelectedValue(mSeekbarProgress); |                 IntSetting setting = sliderSetting.setSelectedValue(mSliderProgress); | ||||||
|                 if (setting != null) { |                 if (setting != null) { | ||||||
|                     mView.putSetting(setting); |                     mView.putSetting(setting); | ||||||
|                 } |                 } | ||||||
|  | @ -397,7 +392,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         mClickedItem = null; |         mClickedItem = null; | ||||||
|         mSeekbarProgress = -1; |         mSliderProgress = -1; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void closeDialog() { |     public void closeDialog() { | ||||||
|  | @ -411,20 +406,6 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |  | ||||||
|     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { |  | ||||||
|         mSeekbarProgress = progress; |  | ||||||
|         mTextSliderValue.setText(String.valueOf(mSeekbarProgress)); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public void onStartTrackingTouch(SeekBar seekBar) { |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public void onStopTrackingTouch(SeekBar seekBar) { |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private int getValueForSingleChoiceSelection(SingleChoiceSetting item, int which) { |     private int getValueForSingleChoiceSelection(SingleChoiceSetting item, int which) { | ||||||
|         int valuesId = item.getValuesId(); |         int valuesId = item.getValuesId(); | ||||||
| 
 | 
 | ||||||
|  | @ -484,4 +465,10 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde | ||||||
| 
 | 
 | ||||||
|         return -1; |         return -1; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void onValueChange(@NonNull Slider slider, float value, boolean fromUser) { | ||||||
|  |         mSliderProgress = (int) value; | ||||||
|  |         mTextSliderValue.setText(String.valueOf(mSliderProgress)); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -48,7 +48,7 @@ public final class MainActivity extends AppCompatActivity implements MainView { | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     protected void onCreate(Bundle savedInstanceState) { |     protected void onCreate(Bundle savedInstanceState) { | ||||||
|         ThemeUtil.applyTheme(); |         ThemeUtil.applyTheme(this); | ||||||
| 
 | 
 | ||||||
|         super.onCreate(savedInstanceState); |         super.onCreate(savedInstanceState); | ||||||
|         setContentView(R.layout.activity_main); |         setContentView(R.layout.activity_main); | ||||||
|  |  | ||||||
|  | @ -10,9 +10,13 @@ import android.widget.TextView; | ||||||
| import androidx.core.content.ContextCompat; | import androidx.core.content.ContextCompat; | ||||||
| import androidx.fragment.app.Fragment; | import androidx.fragment.app.Fragment; | ||||||
| import androidx.recyclerview.widget.GridLayoutManager; | import androidx.recyclerview.widget.GridLayoutManager; | ||||||
|  | import androidx.recyclerview.widget.LinearLayoutManager; | ||||||
| import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||||
| import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.color.MaterialColors; | ||||||
|  | import com.google.android.material.divider.MaterialDividerItemDecoration; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.CitraApplication; | import org.citra.citra_emu.CitraApplication; | ||||||
| import org.citra.citra_emu.R; | import org.citra.citra_emu.R; | ||||||
| import org.citra.citra_emu.adapters.GameAdapter; | import org.citra.citra_emu.adapters.GameAdapter; | ||||||
|  | @ -49,7 +53,9 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam | ||||||
| 
 | 
 | ||||||
|         mRecyclerView.setLayoutManager(layoutManager); |         mRecyclerView.setLayoutManager(layoutManager); | ||||||
|         mRecyclerView.setAdapter(mAdapter); |         mRecyclerView.setAdapter(mAdapter); | ||||||
|         mRecyclerView.addItemDecoration(new GameAdapter.SpacesItemDecoration(ContextCompat.getDrawable(getActivity(), R.drawable.gamelist_divider), 1)); |         MaterialDividerItemDecoration divider = new MaterialDividerItemDecoration(requireContext(), LinearLayoutManager.VERTICAL); | ||||||
|  |         divider.setLastItemDecorated(false); | ||||||
|  |         mRecyclerView.addItemDecoration(divider); | ||||||
| 
 | 
 | ||||||
|         // Add swipe down to refresh gesture |         // Add swipe down to refresh gesture | ||||||
|         final SwipeRefreshLayout pullToRefresh = view.findViewById(R.id.refresh_grid_games); |         final SwipeRefreshLayout pullToRefresh = view.findViewById(R.id.refresh_grid_games); | ||||||
|  | @ -59,6 +65,9 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam | ||||||
|             refresh(); |             refresh(); | ||||||
|             pullToRefresh.setRefreshing(false); |             pullToRefresh.setRefreshing(false); | ||||||
|         }); |         }); | ||||||
|  | 
 | ||||||
|  |         pullToRefresh.setProgressBackgroundColorSchemeColor(MaterialColors.getColor(pullToRefresh, R.attr.colorPrimary)); | ||||||
|  |         pullToRefresh.setColorSchemeColors(MaterialColors.getColor(pullToRefresh, R.attr.colorOnPrimary)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|  |  | ||||||
|  | @ -7,6 +7,8 @@ import android.text.TextUtils; | ||||||
| import androidx.appcompat.app.AlertDialog; | import androidx.appcompat.app.AlertDialog; | ||||||
| import androidx.fragment.app.FragmentActivity; | import androidx.fragment.app.FragmentActivity; | ||||||
| 
 | 
 | ||||||
|  | import com.google.android.material.dialog.MaterialAlertDialogBuilder; | ||||||
|  | 
 | ||||||
| import org.citra.citra_emu.R; | import org.citra.citra_emu.R; | ||||||
| import org.citra.citra_emu.activities.EmulationActivity; | import org.citra.citra_emu.activities.EmulationActivity; | ||||||
| 
 | 
 | ||||||
|  | @ -33,7 +35,7 @@ public final class StartupHandler { | ||||||
|     public static void HandleInit(FragmentActivity parent) { |     public static void HandleInit(FragmentActivity parent) { | ||||||
|         if (PermissionsHandler.isFirstBoot(parent)) { |         if (PermissionsHandler.isFirstBoot(parent)) { | ||||||
|             // Prompt user with standard first boot disclaimer |             // Prompt user with standard first boot disclaimer | ||||||
|             new AlertDialog.Builder(parent) |             new MaterialAlertDialogBuilder(parent) | ||||||
|                     .setTitle(R.string.app_name) |                     .setTitle(R.string.app_name) | ||||||
|                     .setIcon(R.mipmap.ic_launcher) |                     .setIcon(R.mipmap.ic_launcher) | ||||||
|                     .setMessage(parent.getResources().getString(R.string.app_disclaimer)) |                     .setMessage(parent.getResources().getString(R.string.app_disclaimer)) | ||||||
|  |  | ||||||
|  | @ -1,10 +1,14 @@ | ||||||
| package org.citra.citra_emu.utils; | package org.citra.citra_emu.utils; | ||||||
| 
 | 
 | ||||||
| import android.content.SharedPreferences; | import android.content.SharedPreferences; | ||||||
|  | import android.content.res.Configuration; | ||||||
| import android.os.Build; | import android.os.Build; | ||||||
| import android.preference.PreferenceManager; | import android.preference.PreferenceManager; | ||||||
| 
 | 
 | ||||||
|  | import androidx.appcompat.app.AppCompatActivity; | ||||||
| import androidx.appcompat.app.AppCompatDelegate; | import androidx.appcompat.app.AppCompatDelegate; | ||||||
|  | import androidx.core.view.WindowCompat; | ||||||
|  | import androidx.core.view.WindowInsetsControllerCompat; | ||||||
| 
 | 
 | ||||||
| import org.citra.citra_emu.CitraApplication; | import org.citra.citra_emu.CitraApplication; | ||||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||||
|  | @ -12,7 +16,7 @@ import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||||
| public class ThemeUtil { | public class ThemeUtil { | ||||||
|     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); |     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||||
| 
 | 
 | ||||||
|     private static void applyTheme(int designValue) { |     private static void applyTheme(int designValue, AppCompatActivity activity) { | ||||||
|         switch (designValue) { |         switch (designValue) { | ||||||
|             case 0: |             case 0: | ||||||
|                 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); |                 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); | ||||||
|  | @ -26,9 +30,13 @@ public class ThemeUtil { | ||||||
|                         AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY); |                         AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY); | ||||||
|                 break; |                 break; | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         int systemReportedThemeMode = activity.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; | ||||||
|  |         WindowInsetsControllerCompat windowController = WindowCompat.getInsetsController(activity.getWindow(), activity.getWindow().getDecorView()); | ||||||
|  |         windowController.setAppearanceLightStatusBars(systemReportedThemeMode == Configuration.UI_MODE_NIGHT_NO); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static void applyTheme() { |     public static void applyTheme(AppCompatActivity activity) { | ||||||
|         applyTheme(mPreferences.getInt(SettingsFile.KEY_DESIGN, 0)); |         applyTheme(mPreferences.getInt(SettingsFile.KEY_DESIGN, 0), activity); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| Before Width: | Height: | Size: 514 B | 
| Before Width: | Height: | Size: 275 B | 
| Before Width: | Height: | Size: 961 B | 
| Before Width: | Height: | Size: 793 B | 
| Before Width: | Height: | Size: 364 B | 
| Before Width: | Height: | Size: 214 B | 
| Before Width: | Height: | Size: 605 B | 
| Before Width: | Height: | Size: 556 B | 
| Before Width: | Height: | Size: 289 B | 
| Before Width: | Height: | Size: 955 B | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 405 B | 
| Before Width: | Height: | Size: 227 B | 
| Before Width: | Height: | Size: 595 B | 
| Before Width: | Height: | Size: 729 B | 
| Before Width: | Height: | Size: 347 B | 
| Before Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 555 B | 
| Before Width: | Height: | Size: 2 KiB | 
| Before Width: | Height: | Size: 2.1 KiB | 
| Before Width: | Height: | Size: 1.4 KiB | 
| Before Width: | Height: | Size: 657 B | 
| Before Width: | Height: | Size: 2.6 KiB | 
| Before Width: | Height: | Size: 2.5 KiB | 
| Before Width: | Height: | Size: 656 B | 
| Before Width: | Height: | Size: 325 B | 
| Before Width: | Height: | Size: 1.3 KiB | 
| Before Width: | Height: | Size: 1 KiB | 
| Before Width: | Height: | Size: 967 B | 
| Before Width: | Height: | Size: 487 B | 
| Before Width: | Height: | Size: 2 KiB | 
| Before Width: | Height: | Size: 1.6 KiB | 
| Before Width: | Height: | Size: 1.2 KiB | 
| Before Width: | Height: | Size: 591 B | 
| Before Width: | Height: | Size: 2.6 KiB | 
| Before Width: | Height: | Size: 2 KiB | 
|  | @ -6,6 +6,6 @@ | ||||||
|         android:width="1dp" |         android:width="1dp" | ||||||
|         android:height="1dp" /> |         android:height="1dp" /> | ||||||
| 
 | 
 | ||||||
|     <solid android:color="@color/gamelist_divider" /> |     <solid android:color="@color/citra_outlineVariant" /> | ||||||
| 
 | 
 | ||||||
| </shape> | </shape> | ||||||
|  |  | ||||||
|  | @ -4,6 +4,6 @@ | ||||||
|     android:viewportWidth="24" |     android:viewportWidth="24" | ||||||
|     android:viewportHeight="24"> |     android:viewportHeight="24"> | ||||||
|   <path |   <path | ||||||
|       android:fillColor="@android:color/white" |       android:fillColor="?attr/colorControlNormal" | ||||||
|       android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/> |       android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/> | ||||||
| </vector> | </vector> | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/android/app/src/main/res/drawable/ic_back.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,10 @@ | ||||||
|  | <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:width="24dp" | ||||||
|  |     android:height="24dp" | ||||||
|  |     android:autoMirrored="true" | ||||||
|  |     android:viewportWidth="24" | ||||||
|  |     android:viewportHeight="24"> | ||||||
|  |     <path | ||||||
|  |         android:fillColor="?attr/colorControlNormal" | ||||||
|  |         android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" /> | ||||||
|  | </vector> | ||||||
							
								
								
									
										9
									
								
								src/android/app/src/main/res/drawable/ic_folder.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,9 @@ | ||||||
|  | <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:width="24dp" | ||||||
|  |     android:height="24dp" | ||||||
|  |     android:viewportWidth="24" | ||||||
|  |     android:viewportHeight="24"> | ||||||
|  |     <path | ||||||
|  |         android:fillColor="?attr/colorControlNormal" | ||||||
|  |         android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z" /> | ||||||
|  | </vector> | ||||||
							
								
								
									
										9
									
								
								src/android/app/src/main/res/drawable/ic_heart.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,9 @@ | ||||||
|  | <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:width="24dp" | ||||||
|  |     android:height="24dp" | ||||||
|  |     android:viewportWidth="24" | ||||||
|  |     android:viewportHeight="24"> | ||||||
|  |     <path | ||||||
|  |         android:fillColor="?attr/colorControlNormal" | ||||||
|  |         android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z" /> | ||||||
|  | </vector> | ||||||
							
								
								
									
										9
									
								
								src/android/app/src/main/res/drawable/ic_install.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,9 @@ | ||||||
|  | <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:width="24dp" | ||||||
|  |     android:height="24dp" | ||||||
|  |     android:viewportWidth="24" | ||||||
|  |     android:viewportHeight="24"> | ||||||
|  |     <path | ||||||
|  |         android:fillColor="?attr/colorControlNormal" | ||||||
|  |         android:pathData="M19,12v7L5,19v-7L3,12v7c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2zM13,12.67l2.59,-2.58L17,11.5l-5,5 -5,-5 1.41,-1.41L11,12.67L11,3h2z" /> | ||||||
|  | </vector> | ||||||
							
								
								
									
										9
									
								
								src/android/app/src/main/res/drawable/ic_settings.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,9 @@ | ||||||
|  | <vector xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:width="24dp" | ||||||
|  |     android:height="24dp" | ||||||
|  |     android:viewportWidth="24" | ||||||
|  |     android:viewportHeight="24"> | ||||||
|  |     <path | ||||||
|  |         android:fillColor="?attr/colorControlNormal" | ||||||
|  |         android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z" /> | ||||||
|  | </vector> | ||||||
|  | @ -0,0 +1,4 @@ | ||||||
|  | <shape xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|  |     <solid android:color="?attr/colorSurface"/> | ||||||
|  |     <corners android:radius="4dp" /> | ||||||
|  | </shape> | ||||||
|  | @ -13,7 +13,6 @@ | ||||||
|         android:id="@+id/text_name" |         android:id="@+id/text_name" | ||||||
|         android:layout_width="0dp" |         android:layout_width="0dp" | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:textColor="@color/header_text" |  | ||||||
|         android:textSize="16sp" |         android:textSize="16sp" | ||||||
|         android:layout_margin="@dimen/spacing_large" |         android:layout_margin="@dimen/spacing_large" | ||||||
|         style="@style/TextAppearance.AppCompat.Headline" |         style="@style/TextAppearance.AppCompat.Headline" | ||||||
|  |  | ||||||
|  | @ -1,22 +1,58 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <androidx.slidingpanelayout.widget.SlidingPaneLayout | <androidx.constraintlayout.widget.ConstraintLayout | ||||||
|     xmlns:android="http://schemas.android.com/apk/res/android" |     xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|     android:id="@+id/sliding_pane_layout" |     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent"> |     android:layout_height="match_parent"> | ||||||
| 
 | 
 | ||||||
|     <androidx.fragment.app.FragmentContainerView |     <androidx.coordinatorlayout.widget.CoordinatorLayout | ||||||
|         android:layout_width="320dp" |         android:id="@+id/coordinator_cheats" | ||||||
|         android:layout_height="match_parent" |         android:layout_width="match_parent" | ||||||
|         android:layout_weight="1" |         android:layout_height="wrap_content" | ||||||
|         android:id="@+id/cheat_list" |         app:layout_constraintEnd_toEndOf="parent" | ||||||
|         android:name="org.citra.citra_emu.features.cheats.ui.CheatListFragment" /> |         app:layout_constraintStart_toStartOf="parent" | ||||||
|  |         app:layout_constraintTop_toTopOf="parent"> | ||||||
| 
 | 
 | ||||||
|     <androidx.fragment.app.FragmentContainerView |         <com.google.android.material.appbar.AppBarLayout | ||||||
|         android:layout_width="320dp" |             android:id="@+id/appbar_cheats" | ||||||
|         android:layout_height="match_parent" |             android:layout_width="match_parent" | ||||||
|         android:layout_weight="1" |             android:layout_height="wrap_content" | ||||||
|         android:id="@+id/cheat_details" |             app:elevation="0dp" | ||||||
|         android:name="org.citra.citra_emu.features.cheats.ui.CheatDetailsFragment" /> |             app:liftOnScroll="false"> | ||||||
| 
 | 
 | ||||||
| </androidx.slidingpanelayout.widget.SlidingPaneLayout> |             <com.google.android.material.appbar.MaterialToolbar | ||||||
|  |                 android:id="@+id/toolbar_cheats" | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:background="?attr/colorSurface" /> | ||||||
|  | 
 | ||||||
|  |         </com.google.android.material.appbar.AppBarLayout> | ||||||
|  | 
 | ||||||
|  |     </androidx.coordinatorlayout.widget.CoordinatorLayout> | ||||||
|  | 
 | ||||||
|  |     <androidx.slidingpanelayout.widget.SlidingPaneLayout | ||||||
|  |         android:id="@+id/sliding_pane_layout" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="0dp" | ||||||
|  |         app:layout_constraintBottom_toBottomOf="parent" | ||||||
|  |         app:layout_constraintEnd_toEndOf="parent" | ||||||
|  |         app:layout_constraintStart_toStartOf="parent" | ||||||
|  |         app:layout_constraintTop_toBottomOf="@id/coordinator_cheats"> | ||||||
|  | 
 | ||||||
|  |         <androidx.fragment.app.FragmentContainerView | ||||||
|  |             android:layout_width="320dp" | ||||||
|  |             android:layout_height="match_parent" | ||||||
|  |             android:layout_weight="1" | ||||||
|  |             android:id="@+id/cheat_list" | ||||||
|  |             android:name="org.citra.citra_emu.features.cheats.ui.CheatListFragment" /> | ||||||
|  | 
 | ||||||
|  |         <androidx.fragment.app.FragmentContainerView | ||||||
|  |             android:layout_width="320dp" | ||||||
|  |             android:layout_height="match_parent" | ||||||
|  |             android:layout_weight="1" | ||||||
|  |             android:id="@+id/cheat_details" | ||||||
|  |             android:name="org.citra.citra_emu.features.cheats.ui.CheatDetailsFragment" /> | ||||||
|  | 
 | ||||||
|  |     </androidx.slidingpanelayout.widget.SlidingPaneLayout> | ||||||
|  | 
 | ||||||
|  | </androidx.constraintlayout.widget.ConstraintLayout> | ||||||
|  |  | ||||||
|  | @ -1,27 +1,30 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" | <androidx.coordinatorlayout.widget.CoordinatorLayout | ||||||
|  |     xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" |     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|     android:id="@+id/coordinator_main" |     android:id="@+id/coordinator_main" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent"> |     android:layout_height="match_parent"> | ||||||
| 
 | 
 | ||||||
|  |     <com.google.android.material.appbar.AppBarLayout | ||||||
|  |         android:id="@+id/appbar" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="wrap_content"> | ||||||
|  | 
 | ||||||
|  |         <com.google.android.material.appbar.MaterialToolbar | ||||||
|  |             android:id="@+id/toolbar_main" | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="?attr/actionBarSize" | ||||||
|  |             android:background="?attr/colorSurface" | ||||||
|  |             app:subtitleTextColor="?attr/colorOnSurface" | ||||||
|  |             app:titleTextColor="?attr/colorOnSurface" /> | ||||||
|  | 
 | ||||||
|  |     </com.google.android.material.appbar.AppBarLayout> | ||||||
|  | 
 | ||||||
|     <FrameLayout |     <FrameLayout | ||||||
|         android:id="@+id/games_platform_frame" |         android:id="@+id/games_platform_frame" | ||||||
|         android:layout_width="match_parent" |         android:layout_width="match_parent" | ||||||
|         android:layout_height="match_parent" |         android:layout_height="match_parent" | ||||||
|         app:layout_behavior="@string/appbar_scrolling_view_behavior" /> |         app:layout_behavior="@string/appbar_scrolling_view_behavior" /> | ||||||
| 
 | 
 | ||||||
|     <com.google.android.material.appbar.AppBarLayout |  | ||||||
|         android:id="@+id/appbar" |  | ||||||
|         android:layout_width="match_parent" |  | ||||||
|         android:layout_height="wrap_content"> |  | ||||||
| 
 |  | ||||||
|         <androidx.appcompat.widget.Toolbar |  | ||||||
|             android:id="@+id/toolbar_main" |  | ||||||
|             android:layout_width="match_parent" |  | ||||||
|             android:layout_height="?attr/actionBarSize" |  | ||||||
|             android:background="?colorPrimary"/> |  | ||||||
| 
 |  | ||||||
|     </com.google.android.material.appbar.AppBarLayout> |  | ||||||
| 
 |  | ||||||
| </androidx.coordinatorlayout.widget.CoordinatorLayout> | </androidx.coordinatorlayout.widget.CoordinatorLayout> | ||||||
|  |  | ||||||
|  | @ -1,5 +1,27 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> | <androidx.coordinatorlayout.widget.CoordinatorLayout | ||||||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" |     xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|  |     android:id="@+id/coordinator_settings" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent" |     android:layout_height="match_parent"> | ||||||
|     android:id="@+id/frame_content" /> | 
 | ||||||
|  |     <com.google.android.material.appbar.AppBarLayout | ||||||
|  |         android:id="@+id/appbar_settings" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="wrap_content"> | ||||||
|  | 
 | ||||||
|  |         <com.google.android.material.appbar.MaterialToolbar | ||||||
|  |             android:id="@+id/toolbar_settings" | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="?attr/actionBarSize" | ||||||
|  |             android:background="?attr/colorSurface" /> | ||||||
|  | 
 | ||||||
|  |     </com.google.android.material.appbar.AppBarLayout> | ||||||
|  | 
 | ||||||
|  |     <FrameLayout | ||||||
|  |         android:id="@+id/frame_content" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent" | ||||||
|  |         app:layout_behavior="@string/appbar_scrolling_view_behavior" /> | ||||||
|  | 
 | ||||||
|  | </androidx.coordinatorlayout.widget.CoordinatorLayout> | ||||||
|  |  | ||||||
|  | @ -36,15 +36,13 @@ | ||||||
|             android:layout_marginStart="8dp" |             android:layout_marginStart="8dp" | ||||||
|             android:baselineAligned="false" |             android:baselineAligned="false" | ||||||
|             android:ellipsize="end" |             android:ellipsize="end" | ||||||
|             android:gravity="center_vertical" |  | ||||||
|             android:lines="1" |             android:lines="1" | ||||||
|             android:maxLines="1" |             android:maxLines="1" | ||||||
|             android:textAlignment="viewStart" |             android:textAlignment="viewStart" | ||||||
|             app:layout_constraintEnd_toEndOf="parent" |             app:layout_constraintEnd_toEndOf="parent" | ||||||
|             app:layout_constraintStart_toEndOf="@+id/image_game_screen" |             app:layout_constraintStart_toEndOf="@+id/image_game_screen" | ||||||
|             app:layout_constraintTop_toTopOf="parent" |             app:layout_constraintTop_toTopOf="parent" | ||||||
|             tools:text="The Legend of Zelda\nOcarina of Time 3D" |             tools:text="The Legend of Zelda\nOcarina of Time 3D" /> | ||||||
|             android:textColor="@color/header_text" /> |  | ||||||
| 
 | 
 | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/text_company" |             android:id="@+id/text_company" | ||||||
|  | @ -58,8 +56,7 @@ | ||||||
|             app:layout_constraintStart_toStartOf="@+id/text_game_title" |             app:layout_constraintStart_toStartOf="@+id/text_game_title" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/text_game_title" |             app:layout_constraintTop_toBottomOf="@+id/text_game_title" | ||||||
|             app:layout_constraintVertical_bias="0.842" |             app:layout_constraintVertical_bias="0.842" | ||||||
|             tools:text="Nintendo" |             tools:text="Nintendo" /> | ||||||
|             android:textColor="@color/header_subtext" /> |  | ||||||
| 
 | 
 | ||||||
|         <TextView |         <TextView | ||||||
|             android:id="@+id/text_filename" |             android:id="@+id/text_filename" | ||||||
|  | @ -73,10 +70,8 @@ | ||||||
|             app:layout_constraintStart_toStartOf="@+id/text_game_title" |             app:layout_constraintStart_toStartOf="@+id/text_game_title" | ||||||
|             app:layout_constraintTop_toBottomOf="@+id/text_game_title" |             app:layout_constraintTop_toBottomOf="@+id/text_game_title" | ||||||
|             app:layout_constraintVertical_bias="0.0" |             app:layout_constraintVertical_bias="0.0" | ||||||
|             tools:text="Pilotwings_Resort.cxi" |             tools:text="Pilotwings_Resort.cxi" /> | ||||||
|             android:textColor="@color/header_subtext" /> |  | ||||||
| 
 | 
 | ||||||
|     </androidx.constraintlayout.widget.ConstraintLayout> |     </androidx.constraintlayout.widget.ConstraintLayout> | ||||||
| 
 | 
 | ||||||
| </androidx.cardview.widget.CardView> | </androidx.cardview.widget.CardView> | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  | @ -5,8 +5,8 @@ | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="wrap_content"> |     android:layout_height="wrap_content"> | ||||||
| 
 | 
 | ||||||
|     <SeekBar |     <com.google.android.material.slider.Slider | ||||||
|         android:id="@+id/seekbar" |         android:id="@+id/slider" | ||||||
|         android:layout_width="match_parent" |         android:layout_width="match_parent" | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:layout_marginLeft="@dimen/spacing_large" |         android:layout_marginLeft="@dimen/spacing_large" | ||||||
|  | @ -40,7 +40,6 @@ | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:layout_gravity="center" |         android:layout_gravity="center" | ||||||
|         android:padding="@dimen/spacing_small" |         android:padding="@dimen/spacing_small" | ||||||
|         android:background="@color/citra_orange" |  | ||||||
|         android:text="@string/emulation_done" |         android:text="@string/emulation_done" | ||||||
|         android:visibility="gone" /> |         android:visibility="gone" /> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -17,17 +17,19 @@ | ||||||
|                 android:id="@+id/gamelist_empty_text" |                 android:id="@+id/gamelist_empty_text" | ||||||
|                 android:layout_width="match_parent" |                 android:layout_width="match_parent" | ||||||
|                 android:layout_height="match_parent" |                 android:layout_height="match_parent" | ||||||
|  |                 android:gravity="center" | ||||||
|                 android:text="@string/empty_gamelist" |                 android:text="@string/empty_gamelist" | ||||||
|                 android:visibility="gone" |  | ||||||
|                 android:textSize="18sp" |                 android:textSize="18sp" | ||||||
|                 android:gravity="center" /> |                 android:visibility="gone" /> | ||||||
| 
 | 
 | ||||||
|             <androidx.recyclerview.widget.RecyclerView |             <androidx.recyclerview.widget.RecyclerView | ||||||
|                 android:id="@+id/grid_games" |                 android:id="@+id/grid_games" | ||||||
|                 android:layout_width="match_parent" |                 android:layout_width="match_parent" | ||||||
|                 android:layout_height="match_parent" |                 android:layout_height="match_parent" | ||||||
|                 tools:listitem="@layout/card_game" /> |                 tools:listitem="@layout/card_game" /> | ||||||
|  | 
 | ||||||
|         </RelativeLayout> |         </RelativeLayout> | ||||||
| 
 | 
 | ||||||
|     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> |     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> | ||||||
|  | 
 | ||||||
| </FrameLayout> | </FrameLayout> | ||||||
|  | @ -1,12 +1,13 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <org.citra.citra_emu.features.settings.ui.SettingsFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | <org.citra.citra_emu.features.settings.ui.SettingsFrameLayout | ||||||
|  |     xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent"> |     android:layout_height="match_parent" | ||||||
|  |     android:background="?attr/colorSurface"> | ||||||
| 
 | 
 | ||||||
|     <androidx.recyclerview.widget.RecyclerView |     <androidx.recyclerview.widget.RecyclerView | ||||||
|         android:id="@+id/list_settings" |         android:id="@+id/list_settings" | ||||||
|         android:layout_width="match_parent" |         android:layout_width="match_parent" | ||||||
|         android:layout_height="match_parent" |         android:layout_height="match_parent" /> | ||||||
|         android:background="@color/card_view_background" /> |  | ||||||
| 
 | 
 | ||||||
| </org.citra.citra_emu.features.settings.ui.SettingsFrameLayout> | </org.citra.citra_emu.features.settings.ui.SettingsFrameLayout> | ||||||
|  | @ -13,7 +13,6 @@ | ||||||
|         android:id="@+id/text_name" |         android:id="@+id/text_name" | ||||||
|         android:layout_width="0dp" |         android:layout_width="0dp" | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|         android:textColor="@color/header_text" |  | ||||||
|         android:textSize="16sp" |         android:textSize="16sp" | ||||||
|         android:layout_margin="@dimen/spacing_large" |         android:layout_margin="@dimen/spacing_large" | ||||||
|         style="@style/TextAppearance.AppCompat.Headline" |         style="@style/TextAppearance.AppCompat.Headline" | ||||||
|  |  | ||||||
|  | @ -21,7 +21,6 @@ | ||||||
|         android:layout_alignParentEnd="true" |         android:layout_alignParentEnd="true" | ||||||
|         android:layout_marginStart="@dimen/spacing_large" |         android:layout_marginStart="@dimen/spacing_large" | ||||||
|         android:layout_marginEnd="@dimen/spacing_large" |         android:layout_marginEnd="@dimen/spacing_large" | ||||||
|         android:textColor="@color/header_text" |  | ||||||
|         android:textSize="16sp" |         android:textSize="16sp" | ||||||
|         tools:text="Setting Name" /> |         tools:text="Setting Name" /> | ||||||
| 
 | 
 | ||||||
|  | @ -37,7 +36,6 @@ | ||||||
|         android:layout_marginTop="@dimen/spacing_small" |         android:layout_marginTop="@dimen/spacing_small" | ||||||
|         android:layout_marginEnd="@dimen/spacing_large" |         android:layout_marginEnd="@dimen/spacing_large" | ||||||
|         android:visibility="visible" |         android:visibility="visible" | ||||||
|         tools:text="@string/app_disclaimer" |         tools:text="@string/app_disclaimer" /> | ||||||
|         android:textColor="@color/header_subtext" /> |  | ||||||
| 
 | 
 | ||||||
| </RelativeLayout> | </RelativeLayout> | ||||||
|  | @ -19,7 +19,6 @@ | ||||||
|         android:layout_marginStart="@dimen/spacing_large" |         android:layout_marginStart="@dimen/spacing_large" | ||||||
|         android:layout_marginTop="@dimen/spacing_large" |         android:layout_marginTop="@dimen/spacing_large" | ||||||
|         android:layout_toStartOf="@+id/checkbox" |         android:layout_toStartOf="@+id/checkbox" | ||||||
|         android:textColor="@color/header_text" |  | ||||||
|         android:textSize="16sp" |         android:textSize="16sp" | ||||||
|         tools:text="@string/frame_limit_enable" /> |         tools:text="@string/frame_limit_enable" /> | ||||||
| 
 | 
 | ||||||
|  | @ -36,7 +35,6 @@ | ||||||
|         android:layout_marginTop="@dimen/spacing_small" |         android:layout_marginTop="@dimen/spacing_small" | ||||||
|         android:layout_toStartOf="@+id/checkbox" |         android:layout_toStartOf="@+id/checkbox" | ||||||
|         android:textAlignment="textStart" |         android:textAlignment="textStart" | ||||||
|         android:textColor="@color/header_subtext" |  | ||||||
|         tools:text="@string/frame_limit_enable_description" /> |         tools:text="@string/frame_limit_enable_description" /> | ||||||
| 
 | 
 | ||||||
|     <CheckBox |     <CheckBox | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ | ||||||
|         android:layout_marginStart="@dimen/spacing_large" |         android:layout_marginStart="@dimen/spacing_large" | ||||||
|         android:layout_marginBottom="@dimen/spacing_small" |         android:layout_marginBottom="@dimen/spacing_small" | ||||||
|         android:layout_marginTop="@dimen/spacing_small" |         android:layout_marginTop="@dimen/spacing_small" | ||||||
|         android:textColor="?android:colorAccent" |         android:textColor="?attr/colorPrimary" | ||||||
|         android:textStyle="bold" |         android:textStyle="bold" | ||||||
|         tools:text="CPU Settings" /> |         tools:text="CPU Settings" /> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -21,7 +21,7 @@ | ||||||
|         android:layout_alignParentEnd="true" |         android:layout_alignParentEnd="true" | ||||||
|         android:layout_marginStart="@dimen/spacing_large" |         android:layout_marginStart="@dimen/spacing_large" | ||||||
|         android:layout_marginEnd="@dimen/spacing_large" |         android:layout_marginEnd="@dimen/spacing_large" | ||||||
|         android:textColor="?android:colorAccent" |         android:textColor="?attr/colorPrimary" | ||||||
|         android:textStyle="bold" |         android:textStyle="bold" | ||||||
|         tools:text="Setting Name" /> |         tools:text="Setting Name" /> | ||||||
| 
 | 
 | ||||||
|  | @ -37,7 +37,6 @@ | ||||||
|         android:layout_marginTop="@dimen/spacing_small" |         android:layout_marginTop="@dimen/spacing_small" | ||||||
|         android:layout_marginEnd="@dimen/spacing_large" |         android:layout_marginEnd="@dimen/spacing_large" | ||||||
|         android:visibility="visible" |         android:visibility="visible" | ||||||
|         tools:text="@string/app_disclaimer" |         tools:text="@string/app_disclaimer" /> | ||||||
|         android:textColor="@color/header_subtext" /> |  | ||||||
| 
 | 
 | ||||||
| </RelativeLayout> | </RelativeLayout> | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
| 
 | 
 | ||||||
|     <item |     <item | ||||||
|         android:id="@+id/button_premium" |         android:id="@+id/button_premium" | ||||||
|         android:icon="@drawable/ic_premium" |         android:icon="@drawable/ic_heart" | ||||||
|         android:title="@string/premium_text" |         android:title="@string/premium_text" | ||||||
|         app:showAsAction="ifRoom" /> |         app:showAsAction="ifRoom" /> | ||||||
|     <item |     <item | ||||||
|  | @ -20,14 +20,14 @@ | ||||||
|                 app:showAsAction="ifRoom" /> |                 app:showAsAction="ifRoom" /> | ||||||
|             <item |             <item | ||||||
|                 android:id="@+id/button_install_cia" |                 android:id="@+id/button_install_cia" | ||||||
|                 android:icon="@drawable/ic_cia_install" |                 android:icon="@drawable/ic_install" | ||||||
|                 android:title="@string/install_cia_title" |                 android:title="@string/install_cia_title" | ||||||
|                 app:showAsAction="ifRoom" /> |                 app:showAsAction="ifRoom" /> | ||||||
|         </menu> |         </menu> | ||||||
|     </item> |     </item> | ||||||
|     <item |     <item | ||||||
|         android:id="@+id/menu_settings_core" |         android:id="@+id/menu_settings_core" | ||||||
|         android:icon="@drawable/ic_settings_core" |         android:icon="@drawable/ic_settings" | ||||||
|         android:title="@string/grid_menu_core_settings" |         android:title="@string/grid_menu_core_settings" | ||||||
|         app:showAsAction="ifRoom" /> |         app:showAsAction="ifRoom" /> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										33
									
								
								src/android/app/src/main/res/values-night/citra_colors.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,33 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <resources> | ||||||
|  | 
 | ||||||
|  |     <color name="citra_primary">#F8BE00</color> | ||||||
|  |     <color name="citra_onPrimary">#3F2E00</color> | ||||||
|  |     <color name="citra_primaryContainer">#451C00</color> | ||||||
|  |     <color name="citra_onPrimaryContainer">#FFDF9A</color> | ||||||
|  |     <color name="citra_secondary">#D7C4A0</color> | ||||||
|  |     <color name="citra_onSecondary">#3A2F15</color> | ||||||
|  |     <color name="citra_secondaryContainer">#52452A</color> | ||||||
|  |     <color name="citra_onSecondaryContainer">#F4E0BB</color> | ||||||
|  |     <color name="citra_tertiary">#FFB2BC</color> | ||||||
|  |     <color name="citra_onTertiary">#5F1126</color> | ||||||
|  |     <color name="citra_tertiaryContainer">#7D293B</color> | ||||||
|  |     <color name="citra_onTertiaryContainer">#FFD9DD</color> | ||||||
|  |     <color name="citra_error">#FFB4AB</color> | ||||||
|  |     <color name="citra_errorContainer">#93000A</color> | ||||||
|  |     <color name="citra_onError">#690005</color> | ||||||
|  |     <color name="citra_onErrorContainer">#FFDAD6</color> | ||||||
|  |     <color name="citra_background">#1E1B16</color> | ||||||
|  |     <color name="citra_onBackground">#E9E1D9</color> | ||||||
|  |     <color name="citra_surface">#1E1B16</color> | ||||||
|  |     <color name="citra_onSurface">#E9E1D9</color> | ||||||
|  |     <color name="citra_surfaceVariant">#4D4639</color> | ||||||
|  |     <color name="citra_onSurfaceVariant">#D0C5B4</color> | ||||||
|  |     <color name="citra_outline">#999080</color> | ||||||
|  |     <color name="citra_inverseOnSurface">#1E1B16</color> | ||||||
|  |     <color name="citra_inverseSurface">#E9E1D9</color> | ||||||
|  |     <color name="citra_inversePrimary">#785A00</color> | ||||||
|  |     <color name="citra_surfaceTint">#F8BE00</color> | ||||||
|  |     <color name="citra_outlineVariant">#4D4639</color> | ||||||
|  | 
 | ||||||
|  | </resources> | ||||||
|  | @ -1,17 +0,0 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <resources> |  | ||||||
| 
 |  | ||||||
|     <color name="citra_orange">#272727</color> |  | ||||||
|     <color name="citra_orange_dark">#121212</color> |  | ||||||
|     <color name="citra_accent">#FEC303</color> |  | ||||||
| 
 |  | ||||||
|     <color name="card_view_background">#121212</color> |  | ||||||
|     <color name="card_view_disabled">#3D3D3D</color> |  | ||||||
| 
 |  | ||||||
|     <color name="gamelist_divider">#404040</color> |  | ||||||
| 
 |  | ||||||
|     <color name="header_text">#E0E0E0</color> |  | ||||||
|     <color name="header_subtext">#A0A0A0</color> |  | ||||||
| 
 |  | ||||||
|     <color name="citra_logo_text_color">@color/citra_accent</color> |  | ||||||
| </resources> |  | ||||||
							
								
								
									
										35
									
								
								src/android/app/src/main/res/values/citra_colors.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,35 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <resources> | ||||||
|  | 
 | ||||||
|  |     <color name="citra_primary">#FFAB03</color> | ||||||
|  |     <color name="citra_onPrimary">#FFFFFF</color> | ||||||
|  |     <color name="citra_primaryContainer">#FFDF9A</color> | ||||||
|  |     <color name="citra_onPrimaryContainer">#251A00</color> | ||||||
|  |     <color name="citra_secondary">#6B5D3F</color> | ||||||
|  |     <color name="citra_onSecondary">#FFFFFF</color> | ||||||
|  |     <color name="citra_secondaryContainer">#F4E0BB</color> | ||||||
|  |     <color name="citra_onSecondaryContainer">#241A04</color> | ||||||
|  |     <color name="citra_tertiary">#9B4052</color> | ||||||
|  |     <color name="citra_onTertiary">#FFFFFF</color> | ||||||
|  |     <color name="citra_tertiaryContainer">#FFD9DD</color> | ||||||
|  |     <color name="citra_onTertiaryContainer">#400013</color> | ||||||
|  |     <color name="citra_error">#BA1A1A</color> | ||||||
|  |     <color name="citra_errorContainer">#FFDAD6</color> | ||||||
|  |     <color name="citra_onError">#FFFFFF</color> | ||||||
|  |     <color name="citra_onErrorContainer">#410002</color> | ||||||
|  |     <color name="citra_background">#FFFBFF</color> | ||||||
|  |     <color name="citra_onBackground">#1E1B16</color> | ||||||
|  |     <color name="citra_surface">#FFFBFF</color> | ||||||
|  |     <color name="citra_onSurface">#1E1B16</color> | ||||||
|  |     <color name="citra_surfaceVariant">#EDE1CF</color> | ||||||
|  |     <color name="citra_onSurfaceVariant">#4D4639</color> | ||||||
|  |     <color name="citra_outline">#7F7667</color> | ||||||
|  |     <color name="citra_inverseOnSurface">#F7F0E7</color> | ||||||
|  |     <color name="citra_inverseSurface">#33302A</color> | ||||||
|  |     <color name="citra_inversePrimary">#F8BE00</color> | ||||||
|  |     <color name="citra_shadow">#000000</color> | ||||||
|  |     <color name="citra_surfaceTint">#783E00</color> | ||||||
|  |     <color name="citra_outlineVariant">#D0C5B4</color> | ||||||
|  |     <color name="citra_scrim">#000000</color> | ||||||
|  | 
 | ||||||
|  | </resources> | ||||||
|  | @ -1,17 +0,0 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <resources> |  | ||||||
| 
 |  | ||||||
|     <color name="citra_orange">#FFC303</color> |  | ||||||
|     <color name="citra_orange_dark">#FF8D03</color> |  | ||||||
|     <color name="citra_accent">#CC7102</color> |  | ||||||
| 
 |  | ||||||
|     <color name="card_view_background">#ffffff</color> |  | ||||||
|     <color name="card_view_disabled">#D5D5D5</color> |  | ||||||
| 
 |  | ||||||
|     <color name="gamelist_divider">#ffffff</color> |  | ||||||
| 
 |  | ||||||
|     <color name="header_text">#1C1424</color> |  | ||||||
|     <color name="header_subtext">#5C5661</color> |  | ||||||
| 
 |  | ||||||
|     <color name="citra_logo_text_color">@color/header_text</color> |  | ||||||
| </resources> |  | ||||||
|  | @ -1,65 +1,37 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <resources> | <resources> | ||||||
| 
 | 
 | ||||||
|     <!-- Inherit from the material theme --> |  | ||||||
|     <style name="CitraBase" parent="Theme.AppCompat.DayNight.NoActionBar"> |  | ||||||
|         <!-- Main theme colors --> |  | ||||||
|         <!-- Branding color for the app bar --> |  | ||||||
|         <item name="colorPrimary">@color/citra_orange</item> |  | ||||||
|         <!-- Darker variant for the status bar and contextual app bars --> |  | ||||||
|         <item name="colorPrimaryDark">@color/citra_orange_dark</item> |  | ||||||
|         <item name="colorAccent">@color/citra_accent</item> |  | ||||||
| 
 |  | ||||||
|         <item name="titleTextColor">@color/citra_logo_text_color</item> |  | ||||||
| 
 |  | ||||||
|         <!-- Enable window content transitions --> |  | ||||||
|         <item name="android:windowContentTransitions">true</item> |  | ||||||
|         <item name="android:windowAllowEnterTransitionOverlap">true</item> |  | ||||||
|         <item name="android:windowAllowReturnTransitionOverlap">true</item> |  | ||||||
| 
 |  | ||||||
|         <item name="android:colorControlHighlight">?attr/colorAccent</item> |  | ||||||
|     </style> |  | ||||||
| 
 |  | ||||||
|     <!-- Same as above, but use default action bar, and mandate margins. --> |  | ||||||
|     <style name="CitraSettingsBase" parent="Theme.AppCompat.DayNight"> |  | ||||||
|         <item name="colorPrimary">@color/citra_orange</item> |  | ||||||
|         <item name="colorPrimaryDark">@color/citra_orange_dark</item> |  | ||||||
|         <item name="colorAccent">@color/citra_accent</item> |  | ||||||
|     </style> |  | ||||||
| 
 |  | ||||||
|     <!-- Inherit from the Base Citra Dialog Theme --> |  | ||||||
|     <style name="CitraEmulationBase" parent="Theme.AppCompat.DayNight"> |  | ||||||
|         <item name="colorPrimary">@color/citra_orange</item> |  | ||||||
|         <item name="colorPrimaryDark">@color/citra_orange_dark</item> |  | ||||||
|         <item name="colorAccent">@color/citra_accent</item> |  | ||||||
|         <item name="android:windowTranslucentNavigation">true</item> |  | ||||||
| 
 |  | ||||||
|         <item name="android:windowBackground">@android:color/black</item> |  | ||||||
| 
 |  | ||||||
|         <!-- Enable window content transitions --> |  | ||||||
|         <item name="android:windowContentTransitions">true</item> |  | ||||||
|         <item name="android:windowAllowEnterTransitionOverlap">true</item> |  | ||||||
|         <item name="android:windowAllowReturnTransitionOverlap">true</item> |  | ||||||
|     </style> |  | ||||||
| 
 |  | ||||||
|     <!-- Inherit from a base file picker theme that handles day/night --> |  | ||||||
|     <style name="FilePickerTheme" parent="FilePickerBaseTheme"> |  | ||||||
|         <item name="colorPrimary">@color/citra_orange</item> |  | ||||||
|         <item name="colorPrimaryDark">@color/citra_orange_dark</item> |  | ||||||
|         <item name="colorAccent">@color/citra_accent</item> |  | ||||||
|         <item name="android:windowBackground">@color/card_view_background</item> |  | ||||||
| 
 |  | ||||||
|         <!-- Need to set this also to style create folder dialog --> |  | ||||||
|         <item name="alertDialogTheme">@style/FilePickerAlertDialogTheme</item> |  | ||||||
| 
 |  | ||||||
|         <item name="nnf_list_item_divider">@drawable/gamelist_divider</item> |  | ||||||
|         <item name="nnf_toolbarTheme">@style/ThemeOverlay.AppCompat.DayNight.ActionBar</item> |  | ||||||
|     </style> |  | ||||||
| 
 |  | ||||||
|     <style name="FilePickerAlertDialogTheme" parent="Theme.AppCompat.DayNight.Dialog.Alert"> |     <style name="FilePickerAlertDialogTheme" parent="Theme.AppCompat.DayNight.Dialog.Alert"> | ||||||
|         <item name="colorPrimary">@color/citra_orange</item> |         <item name="colorPrimary">@color/citra_primary</item> | ||||||
|         <item name="colorPrimaryDark">@color/citra_orange_dark</item> |         <item name="colorPrimaryDark">@color/citra_secondary</item> | ||||||
|         <item name="colorAccent">@color/citra_accent</item> |         <item name="colorAccent">@color/citra_primaryContainer</item> | ||||||
|  |     </style> | ||||||
|  | 
 | ||||||
|  |     <style name="CitraMaterialDialog" parent="ThemeOverlay.Material3.MaterialAlertDialog"> | ||||||
|  |         <item name="colorPrimary">@color/citra_surface</item> | ||||||
|  |         <item name="colorSurface">@color/citra_surface</item> | ||||||
|  |         <item name="colorSecondary">@color/citra_primary</item> | ||||||
|  |         <item name="buttonBarPositiveButtonStyle">@style/CitraButton</item> | ||||||
|  |         <item name="buttonBarNegativeButtonStyle">@style/CitraButton</item> | ||||||
|  |         <item name="buttonBarNeutralButtonStyle">@style/CitraButton</item> | ||||||
|  |     </style> | ||||||
|  | 
 | ||||||
|  |     <style name="CitraButton" parent="Widget.Material3.Button.TextButton.Dialog"> | ||||||
|  |         <item name="android:textColor">@color/citra_primary</item> | ||||||
|  |         <item name="rippleColor">@color/citra_secondaryContainer</item> | ||||||
|  |     </style> | ||||||
|  | 
 | ||||||
|  |     <style name="CitraShapedPopup" parent="Widget.Material3.PopupMenu"> | ||||||
|  |         <item name="android:popupBackground">@drawable/popup_background</item> | ||||||
|  |     </style> | ||||||
|  | 
 | ||||||
|  |     <style name="CitraPopup" parent="ThemeOverlay.Material3"> | ||||||
|  |         <item name="colorPrimary">@color/citra_surface</item> | ||||||
|  |     </style> | ||||||
|  | 
 | ||||||
|  |     <style name="CitraSlider" parent="Widget.Material3.Slider"> | ||||||
|  |         <item name="tickVisible">false</item> | ||||||
|  |         <item name="labelBehavior">gone</item> | ||||||
|     </style> |     </style> | ||||||
| 
 | 
 | ||||||
| </resources> | </resources> | ||||||
|  |  | ||||||
							
								
								
									
										55
									
								
								src/android/app/src/main/res/values/themes.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,55 @@ | ||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <resources> | ||||||
|  | 
 | ||||||
|  |     <style name="Theme.Citra.Main" parent="Theme.Material3.DayNight.NoActionBar"> | ||||||
|  |         <!-- Main theme colors --> | ||||||
|  |         <item name="colorPrimary">@color/citra_primary</item> | ||||||
|  |         <item name="colorOnPrimary">@color/citra_onPrimary</item> | ||||||
|  |         <item name="colorPrimaryContainer">@color/citra_primaryContainer</item> | ||||||
|  |         <item name="colorOnPrimaryContainer">@color/citra_onPrimaryContainer</item> | ||||||
|  |         <item name="colorSecondary">@color/citra_secondary</item> | ||||||
|  |         <item name="colorOnSecondary">@color/citra_onSecondary</item> | ||||||
|  |         <item name="colorSecondaryContainer">@color/citra_secondaryContainer</item> | ||||||
|  |         <item name="colorOnSecondaryContainer">@color/citra_onSecondaryContainer</item> | ||||||
|  |         <item name="colorTertiary">@color/citra_tertiary</item> | ||||||
|  |         <item name="colorOnTertiary">@color/citra_onTertiary</item> | ||||||
|  |         <item name="colorTertiaryContainer">@color/citra_tertiaryContainer</item> | ||||||
|  |         <item name="colorOnTertiaryContainer">@color/citra_onTertiaryContainer</item> | ||||||
|  |         <item name="colorError">@color/citra_error</item> | ||||||
|  |         <item name="colorErrorContainer">@color/citra_errorContainer</item> | ||||||
|  |         <item name="colorOnError">@color/citra_onError</item> | ||||||
|  |         <item name="colorOnErrorContainer">@color/citra_onErrorContainer</item> | ||||||
|  |         <item name="android:colorBackground">@color/citra_background</item> | ||||||
|  |         <item name="colorOnBackground">@color/citra_onBackground</item> | ||||||
|  |         <item name="colorSurface">@color/citra_surface</item> | ||||||
|  |         <item name="colorOnSurface">@color/citra_onSurface</item> | ||||||
|  |         <item name="colorSurfaceVariant">@color/citra_surfaceVariant</item> | ||||||
|  |         <item name="colorOnSurfaceVariant">@color/citra_onSurfaceVariant</item> | ||||||
|  |         <item name="colorOutline">@color/citra_outline</item> | ||||||
|  |         <item name="colorOnSurfaceInverse">@color/citra_inverseOnSurface</item> | ||||||
|  |         <item name="colorSurfaceInverse">@color/citra_inverseSurface</item> | ||||||
|  |         <item name="colorPrimaryInverse">@color/citra_inversePrimary</item> | ||||||
|  | 
 | ||||||
|  |         <item name="homeAsUpIndicator">@drawable/ic_back</item> | ||||||
|  |         <item name="android:statusBarColor">@color/citra_surface</item> | ||||||
|  |         <item name="android:textColorLink">@color/citra_primary</item> | ||||||
|  |         <item name="materialAlertDialogTheme">@style/CitraMaterialDialog</item> | ||||||
|  |         <item name="popupMenuStyle">@style/CitraShapedPopup</item> | ||||||
|  |         <item name="popupTheme">@style/CitraPopup</item> | ||||||
|  |         <item name="sliderStyle">@style/CitraSlider</item> | ||||||
|  |     </style> | ||||||
|  | 
 | ||||||
|  |     <!-- Inherit from a base file picker theme that handles day/night --> | ||||||
|  |     <style name="FilePickerTheme" parent="FilePickerBaseTheme"> | ||||||
|  |         <item name="colorPrimary">@color/citra_primary</item> | ||||||
|  |         <item name="colorPrimaryDark">@color/citra_primary</item> | ||||||
|  |         <item name="colorAccent">@color/citra_primary</item> | ||||||
|  | 
 | ||||||
|  |         <!-- Need to set this also to style create folder dialog --> | ||||||
|  |         <item name="alertDialogTheme">@style/FilePickerAlertDialogTheme</item> | ||||||
|  | 
 | ||||||
|  |         <item name="nnf_list_item_divider">@drawable/gamelist_divider</item> | ||||||
|  |         <item name="nnf_toolbarTheme">@style/ThemeOverlay.AppCompat.DayNight.ActionBar</item> | ||||||
|  |     </style> | ||||||
|  | 
 | ||||||
|  | </resources> | ||||||