mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 23:06:43 +08:00 
			
		
		
		
	android: Minimize frontend & convert to yuzu.
This commit is contained in:
		
							parent
							
								
									18527a8c42
								
							
						
					
					
						commit
						5e198d1421
					
				| @ -30,7 +30,7 @@ android { | ||||
| 
 | ||||
|     defaultConfig { | ||||
|         // TODO If this is ever modified, change application_id in strings.xml | ||||
|         applicationId "org.citra.citra_emu" | ||||
|         applicationId "org.yuzu.yuzu_emu" | ||||
|         minSdkVersion 28 | ||||
|         targetSdkVersion 29 | ||||
|         versionCode autoVersion | ||||
|  | ||||
| @ -1,3 +1,3 @@ | ||||
| package org.citra.citra_emu; | ||||
| package org.yuzu.yuzu_emu; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| @ -1,6 +1,6 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     package="org.citra.citra_emu"> | ||||
|     package="org.yuzu.yuzu_emu"> | ||||
|     <uses-feature | ||||
|         android:name="android.hardware.touchscreen" | ||||
|         android:required="false"/> | ||||
| @ -11,9 +11,6 @@ | ||||
|     <uses-feature android:glEsVersion="0x00030002" android:required="true" /> | ||||
| 
 | ||||
|     <uses-feature android:name="android.hardware.opengles.aep" android:required="true" /> | ||||
|     <uses-feature | ||||
|         android:name="android.hardware.camera.any" | ||||
|         android:required="false" /> | ||||
| 
 | ||||
|     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | ||||
|     <uses-permission android:name="android.permission.INTERNET" /> | ||||
| @ -23,7 +20,7 @@ | ||||
| 
 | ||||
| 
 | ||||
|     <application | ||||
|         android:name="org.citra.citra_emu.CitraApplication" | ||||
|         android:name="org.yuzu.yuzu_emu.YuzuApplication" | ||||
|         android:label="@string/app_name" | ||||
|         android:icon="@mipmap/ic_launcher" | ||||
|         android:allowBackup="false" | ||||
| @ -33,8 +30,8 @@ | ||||
|         android:requestLegacyExternalStorage="true"> | ||||
| 
 | ||||
|         <activity | ||||
|             android:name="org.citra.citra_emu.ui.main.MainActivity" | ||||
|             android:theme="@style/CitraBase" | ||||
|             android:name="org.yuzu.yuzu_emu.ui.main.MainActivity" | ||||
|             android:theme="@style/YuzuBase" | ||||
|             android:resizeableActivity="false"> | ||||
| 
 | ||||
|             <!-- This intentfilter marks this Activity as the one that gets launched from Home screen. --> | ||||
| @ -46,22 +43,22 @@ | ||||
|         </activity> | ||||
| 
 | ||||
|         <activity | ||||
|             android:name="org.citra.citra_emu.features.settings.ui.SettingsActivity" | ||||
|             android:name="org.yuzu.yuzu_emu.features.settings.ui.SettingsActivity" | ||||
|             android:configChanges="orientation|screenSize|uiMode" | ||||
|             android:theme="@style/CitraSettingsBase" | ||||
|             android:theme="@style/YuzuSettingsBase" | ||||
|             android:label="@string/preferences_settings"/> | ||||
| 
 | ||||
|         <activity | ||||
|             android:name="org.citra.citra_emu.activities.EmulationActivity" | ||||
|             android:name="org.yuzu.yuzu_emu.activities.EmulationActivity" | ||||
|             android:resizeableActivity="false" | ||||
|             android:theme="@style/CitraEmulationBase" | ||||
|             android:theme="@style/YuzuEmulationBase" | ||||
|             android:launchMode="singleTop" | ||||
|             android:screenOrientation="landscape"/> | ||||
| 
 | ||||
|         <service android:name="org.citra.citra_emu.utils.ForegroundService"/> | ||||
|         <service android:name="org.yuzu.yuzu_emu.utils.ForegroundService"/> | ||||
| 
 | ||||
|         <activity | ||||
|             android:name="org.citra.citra_emu.activities.CustomFilePickerActivity" | ||||
|             android:name="org.yuzu.yuzu_emu.activities.CustomFilePickerActivity" | ||||
|             android:label="@string/app_name" | ||||
|             android:theme="@style/FilePickerTheme"> | ||||
|             <intent-filter> | ||||
| @ -70,16 +67,10 @@ | ||||
|             </intent-filter> | ||||
|         </activity> | ||||
| 
 | ||||
|         <activity | ||||
|             android:name="org.citra.citra_emu.features.cheats.ui.CheatsActivity" | ||||
|             android:exported="false" | ||||
|             android:theme="@style/CitraSettingsBase" | ||||
|             android:label="@string/cheats"/> | ||||
| 
 | ||||
|         <service android:name="org.citra.citra_emu.utils.DirectoryInitialization"/> | ||||
|         <service android:name="org.yuzu.yuzu_emu.utils.DirectoryInitialization"/> | ||||
| 
 | ||||
|         <provider | ||||
|             android:name="org.citra.citra_emu.model.GameProvider" | ||||
|             android:name="org.yuzu.yuzu_emu.model.GameProvider" | ||||
|             android:authorities="${applicationId}.provider" | ||||
|             android:enabled="true" | ||||
|             android:exported="false"> | ||||
| @ -97,3 +88,4 @@ | ||||
|     </application> | ||||
| 
 | ||||
| </manifest> | ||||
| 
 | ||||
|  | ||||
| @ -1,122 +0,0 @@ | ||||
| // Copyright 2020 Citra Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
| 
 | ||||
| package org.citra.citra_emu.applets; | ||||
| 
 | ||||
| import android.app.Activity; | ||||
| import android.app.Dialog; | ||||
| import android.os.Bundle; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.fragment.app.DialogFragment; | ||||
| 
 | ||||
| public final class MiiSelector { | ||||
|     public static class MiiSelectorConfig implements java.io.Serializable { | ||||
|         public boolean enable_cancel_button; | ||||
|         public String title; | ||||
|         public long initially_selected_mii_index; | ||||
|         // List of Miis to display | ||||
|         public String[] mii_names; | ||||
|     } | ||||
| 
 | ||||
|     public static class MiiSelectorData { | ||||
|         public long return_code; | ||||
|         public int index; | ||||
| 
 | ||||
|         private MiiSelectorData(long return_code, int index) { | ||||
|             this.return_code = return_code; | ||||
|             this.index = index; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static class MiiSelectorDialogFragment extends DialogFragment { | ||||
|         static MiiSelectorDialogFragment newInstance(MiiSelectorConfig config) { | ||||
|             MiiSelectorDialogFragment frag = new MiiSelectorDialogFragment(); | ||||
|             Bundle args = new Bundle(); | ||||
|             args.putSerializable("config", config); | ||||
|             frag.setArguments(args); | ||||
|             return frag; | ||||
|         } | ||||
| 
 | ||||
|         @NonNull | ||||
|         @Override | ||||
|         public Dialog onCreateDialog(Bundle savedInstanceState) { | ||||
|             final Activity emulationActivity = Objects.requireNonNull(getActivity()); | ||||
| 
 | ||||
|             MiiSelectorConfig config = | ||||
|                     Objects.requireNonNull((MiiSelectorConfig) Objects.requireNonNull(getArguments()) | ||||
|                             .getSerializable("config")); | ||||
| 
 | ||||
|             // Note: we intentionally leave out the Standard Mii in the native code so that | ||||
|             // the string can get translated | ||||
|             ArrayList<String> list = new ArrayList<>(); | ||||
|             list.add(emulationActivity.getString(R.string.standard_mii)); | ||||
|             list.addAll(Arrays.asList(config.mii_names)); | ||||
| 
 | ||||
|             final int initialIndex = config.initially_selected_mii_index < list.size() | ||||
|                     ? (int) config.initially_selected_mii_index | ||||
|                     : 0; | ||||
|             data.index = initialIndex; | ||||
|             AlertDialog.Builder builder = | ||||
|                     new AlertDialog.Builder(emulationActivity) | ||||
|                             .setTitle(config.title.isEmpty() | ||||
|                                     ? emulationActivity.getString(R.string.mii_selector) | ||||
|                                     : config.title) | ||||
|                             .setSingleChoiceItems(list.toArray(new String[]{}), initialIndex, | ||||
|                                     (dialog, which) -> { | ||||
|                                         data.index = which; | ||||
|                                     }) | ||||
|                             .setPositiveButton(android.R.string.ok, (dialog, which) -> { | ||||
|                                 data.return_code = 0; | ||||
|                                 synchronized (finishLock) { | ||||
|                                     finishLock.notifyAll(); | ||||
|                                 } | ||||
|                             }); | ||||
|             if (config.enable_cancel_button) { | ||||
|                 builder.setNegativeButton(android.R.string.cancel, (dialog, which) -> { | ||||
|                     data.return_code = 1; | ||||
|                     synchronized (finishLock) { | ||||
|                         finishLock.notifyAll(); | ||||
|                     } | ||||
|                 }); | ||||
|             } | ||||
|             setCancelable(false); | ||||
|             return builder.create(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private static MiiSelectorData data; | ||||
|     private static final Object finishLock = new Object(); | ||||
| 
 | ||||
|     private static void ExecuteImpl(MiiSelectorConfig config) { | ||||
|         final EmulationActivity emulationActivity = NativeLibrary.sEmulationActivity.get(); | ||||
| 
 | ||||
|         data = new MiiSelectorData(0, 0); | ||||
| 
 | ||||
|         MiiSelectorDialogFragment fragment = MiiSelectorDialogFragment.newInstance(config); | ||||
|         fragment.show(emulationActivity.getSupportFragmentManager(), "mii_selector"); | ||||
|     } | ||||
| 
 | ||||
|     public static MiiSelectorData Execute(MiiSelectorConfig config) { | ||||
|         NativeLibrary.sEmulationActivity.get().runOnUiThread(() -> ExecuteImpl(config)); | ||||
| 
 | ||||
|         synchronized (finishLock) { | ||||
|             try { | ||||
|                 finishLock.wait(); | ||||
|             } catch (Exception ignored) { | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return data; | ||||
|     } | ||||
| } | ||||
| @ -1,65 +0,0 @@ | ||||
| // Copyright 2020 Citra Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
| 
 | ||||
| package org.citra.citra_emu.camera; | ||||
| 
 | ||||
| import android.content.Intent; | ||||
| import android.graphics.Bitmap; | ||||
| import android.provider.MediaStore; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| import org.citra.citra_emu.utils.PicassoUtils; | ||||
| 
 | ||||
| import androidx.annotation.Nullable; | ||||
| 
 | ||||
| // Used in native code. | ||||
| public final class StillImageCameraHelper { | ||||
|     public static final int REQUEST_CAMERA_FILE_PICKER = 1; | ||||
|     private static final Object filePickerLock = new Object(); | ||||
|     private static @Nullable | ||||
|     String filePickerPath; | ||||
| 
 | ||||
|     // Opens file picker for camera. | ||||
|     public static @Nullable | ||||
|     String OpenFilePicker() { | ||||
|         final EmulationActivity emulationActivity = NativeLibrary.sEmulationActivity.get(); | ||||
| 
 | ||||
|         // At this point, we are assuming that we already have permissions as they are | ||||
|         // needed to launch a game | ||||
|         emulationActivity.runOnUiThread(() -> { | ||||
|             Intent intent = new Intent(Intent.ACTION_PICK); | ||||
|             intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*"); | ||||
|             emulationActivity.startActivityForResult( | ||||
|                     Intent.createChooser(intent, | ||||
|                             emulationActivity.getString(R.string.camera_select_image)), | ||||
|                     REQUEST_CAMERA_FILE_PICKER); | ||||
|         }); | ||||
| 
 | ||||
|         synchronized (filePickerLock) { | ||||
|             try { | ||||
|                 filePickerLock.wait(); | ||||
|             } catch (InterruptedException ignored) { | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return filePickerPath; | ||||
|     } | ||||
| 
 | ||||
|     // Called from EmulationActivity. | ||||
|     public static void OnFilePickerResult(Intent result) { | ||||
|         filePickerPath = result == null ? null : result.getDataString(); | ||||
| 
 | ||||
|         synchronized (filePickerLock) { | ||||
|             filePickerLock.notifyAll(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // Blocking call. Load image from file and crop/resize it to fit in width x height. | ||||
|     @Nullable | ||||
|     public static Bitmap LoadImageFromFile(String uri, int width, int height) { | ||||
|         return PicassoUtils.LoadBitmapFromFile(uri, width, height); | ||||
|     } | ||||
| } | ||||
| @ -1,138 +0,0 @@ | ||||
| // Copyright 2021 Citra Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
| 
 | ||||
| package org.citra.citra_emu.disk_shader_cache; | ||||
| 
 | ||||
| import android.app.Activity; | ||||
| import android.app.Dialog; | ||||
| import android.content.DialogInterface; | ||||
| import android.os.Bundle; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.widget.ProgressBar; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.fragment.app.DialogFragment; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class DiskShaderCacheProgress { | ||||
| 
 | ||||
|     // Equivalent to VideoCore::LoadCallbackStage | ||||
|     public enum LoadCallbackStage { | ||||
|         Prepare, | ||||
|         Decompile, | ||||
|         Build, | ||||
|         Complete, | ||||
|     } | ||||
| 
 | ||||
|     private static final Object finishLock = new Object(); | ||||
|     private static ProgressDialogFragment fragment; | ||||
| 
 | ||||
|     public static class ProgressDialogFragment extends DialogFragment { | ||||
|         ProgressBar progressBar; | ||||
|         TextView progressText; | ||||
|         AlertDialog dialog; | ||||
| 
 | ||||
|         static ProgressDialogFragment newInstance(String title, String message) { | ||||
|             ProgressDialogFragment frag = new ProgressDialogFragment(); | ||||
|             Bundle args = new Bundle(); | ||||
|             args.putString("title", title); | ||||
|             args.putString("message", message); | ||||
|             frag.setArguments(args); | ||||
|             return frag; | ||||
|         } | ||||
| 
 | ||||
|         @NonNull | ||||
|         @Override | ||||
|         public Dialog onCreateDialog(Bundle savedInstanceState) { | ||||
|             final Activity emulationActivity = Objects.requireNonNull(getActivity()); | ||||
| 
 | ||||
|             final String title = Objects.requireNonNull(Objects.requireNonNull(getArguments()).getString("title")); | ||||
|             final String message = Objects.requireNonNull(Objects.requireNonNull(getArguments()).getString("message")); | ||||
| 
 | ||||
|             LayoutInflater inflater = LayoutInflater.from(emulationActivity); | ||||
|             View view = inflater.inflate(R.layout.dialog_progress_bar, null); | ||||
| 
 | ||||
|             progressBar = view.findViewById(R.id.progress_bar); | ||||
|             progressText = view.findViewById(R.id.progress_text); | ||||
|             progressText.setText(""); | ||||
| 
 | ||||
|             setCancelable(false); | ||||
|             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) { | ||||
|                 finishLock.notifyAll(); | ||||
|             } | ||||
| 
 | ||||
|             return dialog; | ||||
|         } | ||||
| 
 | ||||
|         private void onUpdateProgress(String msg, int progress, int max) { | ||||
|             Objects.requireNonNull(getActivity()).runOnUiThread(() -> { | ||||
|                 progressBar.setProgress(progress); | ||||
|                 progressBar.setMax(max); | ||||
|                 progressText.setText(String.format("%d/%d", progress, max)); | ||||
|                 dialog.setMessage(msg); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private static void prepareDialog() { | ||||
|         NativeLibrary.sEmulationActivity.get().runOnUiThread(() -> { | ||||
|             final EmulationActivity emulationActivity = NativeLibrary.sEmulationActivity.get(); | ||||
|             fragment = ProgressDialogFragment.newInstance(emulationActivity.getString(R.string.loading), emulationActivity.getString(R.string.preparing_shaders)); | ||||
|             fragment.show(emulationActivity.getSupportFragmentManager(), "diskShaders"); | ||||
|         }); | ||||
| 
 | ||||
|         synchronized (finishLock) { | ||||
|             try { | ||||
|                 finishLock.wait(); | ||||
|             } catch (Exception ignored) { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static void loadProgress(LoadCallbackStage stage, int progress, int max) { | ||||
|         final EmulationActivity emulationActivity = NativeLibrary.sEmulationActivity.get(); | ||||
|         if (emulationActivity == null) { | ||||
|             Log.error("[DiskShaderCacheProgress] EmulationActivity not present"); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         switch (stage) { | ||||
|             case Prepare: | ||||
|                 prepareDialog(); | ||||
|                 break; | ||||
|             case Decompile: | ||||
|                 fragment.onUpdateProgress(emulationActivity.getString(R.string.preparing_shaders), progress, max); | ||||
|                 break; | ||||
|             case Build: | ||||
|                 fragment.onUpdateProgress(emulationActivity.getString(R.string.building_shaders), progress, max); | ||||
|                 break; | ||||
|             case Complete: | ||||
|                 // Workaround for when dialog is dismissed when the app is in the background | ||||
|                 fragment.dismissAllowingStateLoss(); | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,57 +0,0 @@ | ||||
| package org.citra.citra_emu.features.cheats.model; | ||||
| 
 | ||||
| import androidx.annotation.Keep; | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| 
 | ||||
| public class Cheat { | ||||
|     @Keep | ||||
|     private final long mPointer; | ||||
| 
 | ||||
|     private Runnable mEnabledChangedCallback = null; | ||||
| 
 | ||||
|     @Keep | ||||
|     private Cheat(long pointer) { | ||||
|         mPointer = pointer; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected native void finalize(); | ||||
| 
 | ||||
|     @NonNull | ||||
|     public native String getName(); | ||||
| 
 | ||||
|     @NonNull | ||||
|     public native String getNotes(); | ||||
| 
 | ||||
|     @NonNull | ||||
|     public native String getCode(); | ||||
| 
 | ||||
|     public native boolean getEnabled(); | ||||
| 
 | ||||
|     public void setEnabled(boolean enabled) { | ||||
|         setEnabledImpl(enabled); | ||||
|         onEnabledChanged(); | ||||
|     } | ||||
| 
 | ||||
|     private native void setEnabledImpl(boolean enabled); | ||||
| 
 | ||||
|     public void setEnabledChangedCallback(@Nullable Runnable callback) { | ||||
|         mEnabledChangedCallback = callback; | ||||
|     } | ||||
| 
 | ||||
|     private void onEnabledChanged() { | ||||
|         if (mEnabledChangedCallback != null) { | ||||
|             mEnabledChangedCallback.run(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * If the code is valid, returns 0. Otherwise, returns the 1-based index | ||||
|      * for the line containing the error. | ||||
|      */ | ||||
|     public static native int isValidGatewayCode(@NonNull String code); | ||||
| 
 | ||||
|     public static native Cheat createGatewayCode(@NonNull String name, @NonNull String notes, | ||||
|                                                  @NonNull String code); | ||||
| } | ||||
| @ -1,13 +0,0 @@ | ||||
| package org.citra.citra_emu.features.cheats.model; | ||||
| 
 | ||||
| public class CheatEngine { | ||||
|     public static native Cheat[] getCheats(); | ||||
| 
 | ||||
|     public static native void addCheat(Cheat cheat); | ||||
| 
 | ||||
|     public static native void removeCheat(int index); | ||||
| 
 | ||||
|     public static native void updateCheat(int index, Cheat newCheat); | ||||
| 
 | ||||
|     public static native void saveCheatFile(); | ||||
| } | ||||
| @ -1,177 +0,0 @@ | ||||
| package org.citra.citra_emu.features.cheats.model; | ||||
| 
 | ||||
| import androidx.lifecycle.LiveData; | ||||
| import androidx.lifecycle.MutableLiveData; | ||||
| import androidx.lifecycle.ViewModel; | ||||
| 
 | ||||
| public class CheatsViewModel extends ViewModel { | ||||
|     private int mSelectedCheatPosition = -1; | ||||
|     private final MutableLiveData<Cheat> mSelectedCheat = new MutableLiveData<>(null); | ||||
|     private final MutableLiveData<Boolean> mIsAdding = new MutableLiveData<>(false); | ||||
|     private final MutableLiveData<Boolean> mIsEditing = new MutableLiveData<>(false); | ||||
| 
 | ||||
|     private final MutableLiveData<Integer> mCheatAddedEvent = new MutableLiveData<>(null); | ||||
|     private final MutableLiveData<Integer> mCheatChangedEvent = new MutableLiveData<>(null); | ||||
|     private final MutableLiveData<Integer> mCheatDeletedEvent = new MutableLiveData<>(null); | ||||
|     private final MutableLiveData<Boolean> mOpenDetailsViewEvent = new MutableLiveData<>(false); | ||||
| 
 | ||||
|     private Cheat[] mCheats; | ||||
|     private boolean mCheatsNeedSaving = false; | ||||
| 
 | ||||
|     public void load() { | ||||
|         mCheats = CheatEngine.getCheats(); | ||||
| 
 | ||||
|         for (int i = 0; i < mCheats.length; i++) { | ||||
|             int position = i; | ||||
|             mCheats[i].setEnabledChangedCallback(() -> { | ||||
|                 mCheatsNeedSaving = true; | ||||
|                 notifyCheatUpdated(position); | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void saveIfNeeded() { | ||||
|         if (mCheatsNeedSaving) { | ||||
|             CheatEngine.saveCheatFile(); | ||||
|             mCheatsNeedSaving = false; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public Cheat[] getCheats() { | ||||
|         return mCheats; | ||||
|     } | ||||
| 
 | ||||
|     public LiveData<Cheat> getSelectedCheat() { | ||||
|         return mSelectedCheat; | ||||
|     } | ||||
| 
 | ||||
|     public void setSelectedCheat(Cheat cheat, int position) { | ||||
|         if (mIsEditing.getValue()) { | ||||
|             setIsEditing(false); | ||||
|         } | ||||
| 
 | ||||
|         mSelectedCheat.setValue(cheat); | ||||
|         mSelectedCheatPosition = position; | ||||
|     } | ||||
| 
 | ||||
|     public LiveData<Boolean> getIsAdding() { | ||||
|         return mIsAdding; | ||||
|     } | ||||
| 
 | ||||
|     public LiveData<Boolean> getIsEditing() { | ||||
|         return mIsEditing; | ||||
|     } | ||||
| 
 | ||||
|     public void setIsEditing(boolean isEditing) { | ||||
|         mIsEditing.setValue(isEditing); | ||||
| 
 | ||||
|         if (mIsAdding.getValue() && !isEditing) { | ||||
|             mIsAdding.setValue(false); | ||||
|             setSelectedCheat(null, -1); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * When a cheat is added, the integer stored in the returned LiveData | ||||
|      * changes to the position of that cheat, then changes back to null. | ||||
|      */ | ||||
|     public LiveData<Integer> getCheatAddedEvent() { | ||||
|         return mCheatAddedEvent; | ||||
|     } | ||||
| 
 | ||||
|     private void notifyCheatAdded(int position) { | ||||
|         mCheatAddedEvent.setValue(position); | ||||
|         mCheatAddedEvent.setValue(null); | ||||
|     } | ||||
| 
 | ||||
|     public void startAddingCheat() { | ||||
|         mSelectedCheat.setValue(null); | ||||
|         mSelectedCheatPosition = -1; | ||||
| 
 | ||||
|         mIsAdding.setValue(true); | ||||
|         mIsEditing.setValue(true); | ||||
|     } | ||||
| 
 | ||||
|     public void finishAddingCheat(Cheat cheat) { | ||||
|         if (!mIsAdding.getValue()) { | ||||
|             throw new IllegalStateException(); | ||||
|         } | ||||
| 
 | ||||
|         mIsAdding.setValue(false); | ||||
|         mIsEditing.setValue(false); | ||||
| 
 | ||||
|         int position = mCheats.length; | ||||
| 
 | ||||
|         CheatEngine.addCheat(cheat); | ||||
| 
 | ||||
|         mCheatsNeedSaving = true; | ||||
|         load(); | ||||
| 
 | ||||
|         notifyCheatAdded(position); | ||||
|         setSelectedCheat(mCheats[position], position); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * When a cheat is edited, the integer stored in the returned LiveData | ||||
|      * changes to the position of that cheat, then changes back to null. | ||||
|      */ | ||||
|     public LiveData<Integer> getCheatUpdatedEvent() { | ||||
|         return mCheatChangedEvent; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Notifies that an edit has been made to the contents of the cheat at the given position. | ||||
|      */ | ||||
|     private void notifyCheatUpdated(int position) { | ||||
|         mCheatChangedEvent.setValue(position); | ||||
|         mCheatChangedEvent.setValue(null); | ||||
|     } | ||||
| 
 | ||||
|     public void updateSelectedCheat(Cheat newCheat) { | ||||
|         CheatEngine.updateCheat(mSelectedCheatPosition, newCheat); | ||||
| 
 | ||||
|         mCheatsNeedSaving = true; | ||||
|         load(); | ||||
| 
 | ||||
|         notifyCheatUpdated(mSelectedCheatPosition); | ||||
|         setSelectedCheat(mCheats[mSelectedCheatPosition], mSelectedCheatPosition); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * When a cheat is deleted, the integer stored in the returned LiveData | ||||
|      * changes to the position of that cheat, then changes back to null. | ||||
|      */ | ||||
|     public LiveData<Integer> getCheatDeletedEvent() { | ||||
|         return mCheatDeletedEvent; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Notifies that the cheat at the given position has been deleted. | ||||
|      */ | ||||
|     private void notifyCheatDeleted(int position) { | ||||
|         mCheatDeletedEvent.setValue(position); | ||||
|         mCheatDeletedEvent.setValue(null); | ||||
|     } | ||||
| 
 | ||||
|     public void deleteSelectedCheat() { | ||||
|         int position = mSelectedCheatPosition; | ||||
| 
 | ||||
|         setSelectedCheat(null, -1); | ||||
| 
 | ||||
|         CheatEngine.removeCheat(position); | ||||
| 
 | ||||
|         mCheatsNeedSaving = true; | ||||
|         load(); | ||||
| 
 | ||||
|         notifyCheatDeleted(position); | ||||
|     } | ||||
| 
 | ||||
|     public LiveData<Boolean> getOpenDetailsViewEvent() { | ||||
|         return mOpenDetailsViewEvent; | ||||
|     } | ||||
| 
 | ||||
|     public void openDetailsView() { | ||||
|         mOpenDetailsViewEvent.setValue(true); | ||||
|         mOpenDetailsViewEvent.setValue(false); | ||||
|     } | ||||
| } | ||||
| @ -1,174 +0,0 @@ | ||||
| package org.citra.citra_emu.features.cheats.ui; | ||||
| 
 | ||||
| import android.os.Bundle; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.Button; | ||||
| import android.widget.EditText; | ||||
| import android.widget.ScrollView; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import androidx.lifecycle.ViewModelProvider; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.cheats.model.Cheat; | ||||
| import org.citra.citra_emu.features.cheats.model.CheatsViewModel; | ||||
| 
 | ||||
| public class CheatDetailsFragment extends Fragment { | ||||
|     private View mRoot; | ||||
|     private ScrollView mScrollView; | ||||
|     private TextView mLabelName; | ||||
|     private EditText mEditName; | ||||
|     private EditText mEditNotes; | ||||
|     private EditText mEditCode; | ||||
|     private Button mButtonDelete; | ||||
|     private Button mButtonEdit; | ||||
|     private Button mButtonCancel; | ||||
|     private Button mButtonOk; | ||||
| 
 | ||||
|     private CheatsViewModel mViewModel; | ||||
| 
 | ||||
|     @Nullable | ||||
|     @Override | ||||
|     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, | ||||
|                              @Nullable Bundle savedInstanceState) { | ||||
|         return inflater.inflate(R.layout.fragment_cheat_details, container, false); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { | ||||
|         mRoot = view.findViewById(R.id.root); | ||||
|         mScrollView = view.findViewById(R.id.scroll_view); | ||||
|         mLabelName = view.findViewById(R.id.label_name); | ||||
|         mEditName = view.findViewById(R.id.edit_name); | ||||
|         mEditNotes = view.findViewById(R.id.edit_notes); | ||||
|         mEditCode = view.findViewById(R.id.edit_code); | ||||
|         mButtonDelete = view.findViewById(R.id.button_delete); | ||||
|         mButtonEdit = view.findViewById(R.id.button_edit); | ||||
|         mButtonCancel = view.findViewById(R.id.button_cancel); | ||||
|         mButtonOk = view.findViewById(R.id.button_ok); | ||||
| 
 | ||||
|         CheatsActivity activity = (CheatsActivity) requireActivity(); | ||||
|         mViewModel = new ViewModelProvider(activity).get(CheatsViewModel.class); | ||||
| 
 | ||||
|         mViewModel.getSelectedCheat().observe(getViewLifecycleOwner(), | ||||
|                 this::onSelectedCheatUpdated); | ||||
|         mViewModel.getIsEditing().observe(getViewLifecycleOwner(), this::onIsEditingUpdated); | ||||
| 
 | ||||
|         mButtonDelete.setOnClickListener(this::onDeleteClicked); | ||||
|         mButtonEdit.setOnClickListener(this::onEditClicked); | ||||
|         mButtonCancel.setOnClickListener(this::onCancelClicked); | ||||
|         mButtonOk.setOnClickListener(this::onOkClicked); | ||||
| 
 | ||||
|         // On a portrait phone screen (or other narrow screen), only one of the two panes are shown | ||||
|         // at the same time. If the user is navigating using a d-pad and moves focus to an element | ||||
|         // in the currently hidden pane, we need to manually show that pane. | ||||
|         CheatsActivity.setOnFocusChangeListenerRecursively(view, | ||||
|                 (v, hasFocus) -> activity.onDetailsViewFocusChange(hasFocus)); | ||||
|     } | ||||
| 
 | ||||
|     private void clearEditErrors() { | ||||
|         mEditName.setError(null); | ||||
|         mEditCode.setError(null); | ||||
|     } | ||||
| 
 | ||||
|     private void onDeleteClicked(View view) { | ||||
|         String name = mEditName.getText().toString(); | ||||
| 
 | ||||
|         AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); | ||||
|         builder.setMessage(getString(R.string.cheats_delete_confirmation, name)); | ||||
|         builder.setPositiveButton(android.R.string.yes, | ||||
|                 (dialog, i) -> mViewModel.deleteSelectedCheat()); | ||||
|         builder.setNegativeButton(android.R.string.no, null); | ||||
|         builder.show(); | ||||
|     } | ||||
| 
 | ||||
|     private void onEditClicked(View view) { | ||||
|         mViewModel.setIsEditing(true); | ||||
|         mButtonOk.requestFocus(); | ||||
|     } | ||||
| 
 | ||||
|     private void onCancelClicked(View view) { | ||||
|         mViewModel.setIsEditing(false); | ||||
|         onSelectedCheatUpdated(mViewModel.getSelectedCheat().getValue()); | ||||
|         mButtonDelete.requestFocus(); | ||||
|     } | ||||
| 
 | ||||
|     private void onOkClicked(View view) { | ||||
|         clearEditErrors(); | ||||
| 
 | ||||
|         String name = mEditName.getText().toString(); | ||||
|         String notes = mEditNotes.getText().toString(); | ||||
|         String code = mEditCode.getText().toString(); | ||||
| 
 | ||||
|         if (name.isEmpty()) { | ||||
|             mEditName.setError(getString(R.string.cheats_error_no_name)); | ||||
|             mScrollView.smoothScrollTo(0, mLabelName.getTop()); | ||||
|             return; | ||||
|         } else if (code.isEmpty()) { | ||||
|             mEditCode.setError(getString(R.string.cheats_error_no_code_lines)); | ||||
|             mScrollView.smoothScrollTo(0, mEditCode.getBottom()); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         int validityResult = Cheat.isValidGatewayCode(code); | ||||
| 
 | ||||
|         if (validityResult != 0) { | ||||
|             mEditCode.setError(getString(R.string.cheats_error_on_line, validityResult)); | ||||
|             mScrollView.smoothScrollTo(0, mEditCode.getBottom()); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         Cheat newCheat = Cheat.createGatewayCode(name, notes, code); | ||||
| 
 | ||||
|         if (mViewModel.getIsAdding().getValue()) { | ||||
|             mViewModel.finishAddingCheat(newCheat); | ||||
|         } else { | ||||
|             mViewModel.updateSelectedCheat(newCheat); | ||||
|         } | ||||
| 
 | ||||
|         mButtonEdit.requestFocus(); | ||||
|     } | ||||
| 
 | ||||
|     private void onSelectedCheatUpdated(@Nullable Cheat cheat) { | ||||
|         clearEditErrors(); | ||||
| 
 | ||||
|         boolean isEditing = mViewModel.getIsEditing().getValue(); | ||||
| 
 | ||||
|         mRoot.setVisibility(isEditing || cheat != null ? View.VISIBLE : View.GONE); | ||||
| 
 | ||||
|         // If the fragment was recreated while editing a cheat, it's vital that we | ||||
|         // don't repopulate the fields, otherwise the user's changes will be lost | ||||
|         if (!isEditing) { | ||||
|             if (cheat == null) { | ||||
|                 mEditName.setText(""); | ||||
|                 mEditNotes.setText(""); | ||||
|                 mEditCode.setText(""); | ||||
|             } else { | ||||
|                 mEditName.setText(cheat.getName()); | ||||
|                 mEditNotes.setText(cheat.getNotes()); | ||||
|                 mEditCode.setText(cheat.getCode()); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void onIsEditingUpdated(boolean isEditing) { | ||||
|         if (isEditing) { | ||||
|             mRoot.setVisibility(View.VISIBLE); | ||||
|         } | ||||
| 
 | ||||
|         mEditName.setEnabled(isEditing); | ||||
|         mEditNotes.setEnabled(isEditing); | ||||
|         mEditCode.setEnabled(isEditing); | ||||
| 
 | ||||
|         mButtonDelete.setVisibility(isEditing ? View.GONE : View.VISIBLE); | ||||
|         mButtonEdit.setVisibility(isEditing ? View.GONE : View.VISIBLE); | ||||
|         mButtonCancel.setVisibility(isEditing ? View.VISIBLE : View.GONE); | ||||
|         mButtonOk.setVisibility(isEditing ? View.VISIBLE : View.GONE); | ||||
|     } | ||||
| } | ||||
| @ -1,46 +0,0 @@ | ||||
| package org.citra.citra_emu.features.cheats.ui; | ||||
| 
 | ||||
| import android.os.Bundle; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import androidx.lifecycle.ViewModelProvider; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| 
 | ||||
| import com.google.android.material.floatingactionbutton.FloatingActionButton; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.cheats.model.CheatsViewModel; | ||||
| import org.citra.citra_emu.ui.DividerItemDecoration; | ||||
| 
 | ||||
| public class CheatListFragment extends Fragment { | ||||
|     @Nullable | ||||
|     @Override | ||||
|     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, | ||||
|                              @Nullable Bundle savedInstanceState) { | ||||
|         return inflater.inflate(R.layout.fragment_cheat_list, container, false); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { | ||||
|         RecyclerView recyclerView = view.findViewById(R.id.cheat_list); | ||||
|         FloatingActionButton fab = view.findViewById(R.id.fab); | ||||
| 
 | ||||
|         CheatsActivity activity = (CheatsActivity) requireActivity(); | ||||
|         CheatsViewModel viewModel = new ViewModelProvider(activity).get(CheatsViewModel.class); | ||||
| 
 | ||||
|         recyclerView.setAdapter(new CheatsAdapter(activity, viewModel)); | ||||
|         recyclerView.setLayoutManager(new LinearLayoutManager(activity)); | ||||
|         recyclerView.addItemDecoration(new DividerItemDecoration(activity, null)); | ||||
| 
 | ||||
|         fab.setOnClickListener(v -> { | ||||
|             viewModel.startAddingCheat(); | ||||
|             viewModel.openDetailsView(); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| @ -1,56 +0,0 @@ | ||||
| package org.citra.citra_emu.features.cheats.ui; | ||||
| 
 | ||||
| import android.view.View; | ||||
| import android.widget.CheckBox; | ||||
| import android.widget.CompoundButton; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.lifecycle.ViewModelProvider; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.cheats.model.Cheat; | ||||
| import org.citra.citra_emu.features.cheats.model.CheatsViewModel; | ||||
| 
 | ||||
| public class CheatViewHolder extends RecyclerView.ViewHolder | ||||
|         implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { | ||||
|     private final View mRoot; | ||||
|     private final TextView mName; | ||||
|     private final CheckBox mCheckbox; | ||||
| 
 | ||||
|     private CheatsViewModel mViewModel; | ||||
|     private Cheat mCheat; | ||||
|     private int mPosition; | ||||
| 
 | ||||
|     public CheatViewHolder(@NonNull View itemView) { | ||||
|         super(itemView); | ||||
| 
 | ||||
|         mRoot = itemView.findViewById(R.id.root); | ||||
|         mName = itemView.findViewById(R.id.text_name); | ||||
|         mCheckbox = itemView.findViewById(R.id.checkbox); | ||||
|     } | ||||
| 
 | ||||
|     public void bind(CheatsActivity activity, Cheat cheat, int position) { | ||||
|         mCheckbox.setOnCheckedChangeListener(null); | ||||
| 
 | ||||
|         mViewModel = new ViewModelProvider(activity).get(CheatsViewModel.class); | ||||
|         mCheat = cheat; | ||||
|         mPosition = position; | ||||
| 
 | ||||
|         mName.setText(mCheat.getName()); | ||||
|         mCheckbox.setChecked(mCheat.getEnabled()); | ||||
| 
 | ||||
|         mRoot.setOnClickListener(this); | ||||
|         mCheckbox.setOnCheckedChangeListener(this); | ||||
|     } | ||||
| 
 | ||||
|     public void onClick(View root) { | ||||
|         mViewModel.setSelectedCheat(mCheat, mPosition); | ||||
|         mViewModel.openDetailsView(); | ||||
|     } | ||||
| 
 | ||||
|     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { | ||||
|         mCheat.setEnabled(isChecked); | ||||
|     } | ||||
| } | ||||
| @ -1,161 +0,0 @@ | ||||
| package org.citra.citra_emu.features.cheats.ui; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.os.Bundle; | ||||
| import android.view.Menu; | ||||
| import android.view.MenuInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.lifecycle.ViewModelProvider; | ||||
| import androidx.slidingpanelayout.widget.SlidingPaneLayout; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.cheats.model.Cheat; | ||||
| import org.citra.citra_emu.features.cheats.model.CheatsViewModel; | ||||
| import org.citra.citra_emu.ui.TwoPaneOnBackPressedCallback; | ||||
| 
 | ||||
| public class CheatsActivity extends AppCompatActivity | ||||
|         implements SlidingPaneLayout.PanelSlideListener { | ||||
|     private CheatsViewModel mViewModel; | ||||
| 
 | ||||
|     private SlidingPaneLayout mSlidingPaneLayout; | ||||
|     private View mCheatList; | ||||
|     private View mCheatDetails; | ||||
| 
 | ||||
|     private View mCheatListLastFocus; | ||||
|     private View mCheatDetailsLastFocus; | ||||
| 
 | ||||
|     public static void launch(Context context) { | ||||
|         Intent intent = new Intent(context, CheatsActivity.class); | ||||
|         context.startActivity(intent); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
| 
 | ||||
|         mViewModel = new ViewModelProvider(this).get(CheatsViewModel.class); | ||||
|         mViewModel.load(); | ||||
| 
 | ||||
|         setContentView(R.layout.activity_cheats); | ||||
| 
 | ||||
|         mSlidingPaneLayout = findViewById(R.id.sliding_pane_layout); | ||||
|         mCheatList = findViewById(R.id.cheat_list); | ||||
|         mCheatDetails = findViewById(R.id.cheat_details); | ||||
| 
 | ||||
|         mCheatListLastFocus = mCheatList; | ||||
|         mCheatDetailsLastFocus = mCheatDetails; | ||||
| 
 | ||||
|         mSlidingPaneLayout.addPanelSlideListener(this); | ||||
| 
 | ||||
|         getOnBackPressedDispatcher().addCallback(this, | ||||
|                 new TwoPaneOnBackPressedCallback(mSlidingPaneLayout)); | ||||
| 
 | ||||
|         mViewModel.getSelectedCheat().observe(this, this::onSelectedCheatChanged); | ||||
|         mViewModel.getIsEditing().observe(this, this::onIsEditingChanged); | ||||
|         onSelectedCheatChanged(mViewModel.getSelectedCheat().getValue()); | ||||
| 
 | ||||
|         mViewModel.getOpenDetailsViewEvent().observe(this, this::openDetailsView); | ||||
| 
 | ||||
|         // Show "Up" button in the action bar for navigation | ||||
|         getSupportActionBar().setDisplayHomeAsUpEnabled(true); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCreateOptionsMenu(Menu menu) { | ||||
|         MenuInflater inflater = getMenuInflater(); | ||||
|         inflater.inflate(R.menu.menu_settings, menu); | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected void onStop() { | ||||
|         super.onStop(); | ||||
| 
 | ||||
|         mViewModel.saveIfNeeded(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onPanelSlide(@NonNull View panel, float slideOffset) { | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onPanelOpened(@NonNull View panel) { | ||||
|         boolean rtl = ViewCompat.getLayoutDirection(panel) == ViewCompat.LAYOUT_DIRECTION_RTL; | ||||
|         mCheatDetailsLastFocus.requestFocus(rtl ? View.FOCUS_LEFT : View.FOCUS_RIGHT); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onPanelClosed(@NonNull View panel) { | ||||
|         boolean rtl = ViewCompat.getLayoutDirection(panel) == ViewCompat.LAYOUT_DIRECTION_RTL; | ||||
|         mCheatListLastFocus.requestFocus(rtl ? View.FOCUS_RIGHT : View.FOCUS_LEFT); | ||||
|     } | ||||
| 
 | ||||
|     private void onIsEditingChanged(boolean isEditing) { | ||||
|         if (isEditing) { | ||||
|             mSlidingPaneLayout.setLockMode(SlidingPaneLayout.LOCK_MODE_UNLOCKED); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void onSelectedCheatChanged(Cheat selectedCheat) { | ||||
|         boolean cheatSelected = selectedCheat != null || mViewModel.getIsEditing().getValue(); | ||||
| 
 | ||||
|         if (!cheatSelected && mSlidingPaneLayout.isOpen()) { | ||||
|             mSlidingPaneLayout.close(); | ||||
|         } | ||||
| 
 | ||||
|         mSlidingPaneLayout.setLockMode(cheatSelected ? | ||||
|                 SlidingPaneLayout.LOCK_MODE_UNLOCKED : SlidingPaneLayout.LOCK_MODE_LOCKED_CLOSED); | ||||
|     } | ||||
| 
 | ||||
|     public void onListViewFocusChange(boolean hasFocus) { | ||||
|         if (hasFocus) { | ||||
|             mCheatListLastFocus = mCheatList.findFocus(); | ||||
|             if (mCheatListLastFocus == null) | ||||
|                 throw new NullPointerException(); | ||||
| 
 | ||||
|             mSlidingPaneLayout.close(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void onDetailsViewFocusChange(boolean hasFocus) { | ||||
|         if (hasFocus) { | ||||
|             mCheatDetailsLastFocus = mCheatDetails.findFocus(); | ||||
|             if (mCheatDetailsLastFocus == null) | ||||
|                 throw new NullPointerException(); | ||||
| 
 | ||||
|             mSlidingPaneLayout.open(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onSupportNavigateUp() { | ||||
|         onBackPressed(); | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     private void openDetailsView(boolean open) { | ||||
|         if (open) { | ||||
|             mSlidingPaneLayout.open(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static void setOnFocusChangeListenerRecursively(@NonNull View view, | ||||
|                                                            View.OnFocusChangeListener listener) { | ||||
|         view.setOnFocusChangeListener(listener); | ||||
| 
 | ||||
|         if (view instanceof ViewGroup) { | ||||
|             ViewGroup viewGroup = (ViewGroup) view; | ||||
|             for (int i = 0; i < viewGroup.getChildCount(); i++) { | ||||
|                 View child = viewGroup.getChildAt(i); | ||||
|                 setOnFocusChangeListenerRecursively(child, listener); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,72 +0,0 @@ | ||||
| package org.citra.citra_emu.features.cheats.ui; | ||||
| 
 | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.cheats.model.Cheat; | ||||
| import org.citra.citra_emu.features.cheats.model.CheatsViewModel; | ||||
| 
 | ||||
| public class CheatsAdapter extends RecyclerView.Adapter<CheatViewHolder> { | ||||
|     private final CheatsActivity mActivity; | ||||
|     private final CheatsViewModel mViewModel; | ||||
| 
 | ||||
|     public CheatsAdapter(CheatsActivity activity, CheatsViewModel viewModel) { | ||||
|         mActivity = activity; | ||||
|         mViewModel = viewModel; | ||||
| 
 | ||||
|         mViewModel.getCheatAddedEvent().observe(activity, (position) -> { | ||||
|             if (position != null) { | ||||
|                 notifyItemInserted(position); | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
|         mViewModel.getCheatUpdatedEvent().observe(activity, (position) -> { | ||||
|             if (position != null) { | ||||
|                 notifyItemChanged(position); | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
|         mViewModel.getCheatDeletedEvent().observe(activity, (position) -> { | ||||
|             if (position != null) { | ||||
|                 notifyItemRemoved(position); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|     @NonNull | ||||
|     @Override | ||||
|     public CheatViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { | ||||
|         LayoutInflater inflater = LayoutInflater.from(parent.getContext()); | ||||
| 
 | ||||
|         View cheatView = inflater.inflate(R.layout.list_item_cheat, parent, false); | ||||
|         addViewListeners(cheatView); | ||||
|         return new CheatViewHolder(cheatView); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onBindViewHolder(@NonNull CheatViewHolder holder, int position) { | ||||
|         holder.bind(mActivity, getItemAt(position), position); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public int getItemCount() { | ||||
|         return mViewModel.getCheats().length; | ||||
|     } | ||||
| 
 | ||||
|     private void addViewListeners(View view) { | ||||
|         // On a portrait phone screen (or other narrow screen), only one of the two panes are shown | ||||
|         // at the same time. If the user is navigating using a d-pad and moves focus to an element | ||||
|         // in the currently hidden pane, we need to manually show that pane. | ||||
|         CheatsActivity.setOnFocusChangeListenerRecursively(view, | ||||
|                 (v, hasFocus) -> mActivity.onListViewFocusChange(hasFocus)); | ||||
|     } | ||||
| 
 | ||||
|     private Cheat getItemAt(int position) { | ||||
|         return mViewModel.getCheats()[position]; | ||||
|     } | ||||
| } | ||||
| @ -4,7 +4,7 @@ | ||||
|  * Refer to the license.txt file included. | ||||
|  */ | ||||
| 
 | ||||
| package org.citra.citra_emu; | ||||
| package org.yuzu.yuzu_emu; | ||||
| 
 | ||||
| import android.app.Activity; | ||||
| import android.app.Dialog; | ||||
| @ -24,9 +24,9 @@ import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.core.content.ContextCompat; | ||||
| import androidx.fragment.app.DialogFragment; | ||||
| 
 | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| import org.citra.citra_emu.utils.EmulationMenuSettings; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.activities.EmulationActivity; | ||||
| import org.yuzu.yuzu_emu.utils.EmulationMenuSettings; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| import java.lang.ref.WeakReference; | ||||
| import java.util.Objects; | ||||
| @ -314,7 +314,7 @@ public final class NativeLibrary { | ||||
|     } | ||||
| 
 | ||||
|     public static boolean isPortraitMode() { | ||||
|         return CitraApplication.getAppContext().getResources().getConfiguration().orientation == | ||||
|         return YuzuApplication.getAppContext().getResources().getConfiguration().orientation == | ||||
|                 Configuration.ORIENTATION_PORTRAIT; | ||||
|     } | ||||
| 
 | ||||
| @ -420,10 +420,10 @@ public final class NativeLibrary { | ||||
|         alertPromptButton = 0; | ||||
| 
 | ||||
|         FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); | ||||
|         params.leftMargin = params.rightMargin = CitraApplication.getAppContext().getResources().getDimensionPixelSize(R.dimen.dialog_margin); | ||||
|         params.leftMargin = params.rightMargin = YuzuApplication.getAppContext().getResources().getDimensionPixelSize(R.dimen.dialog_margin); | ||||
| 
 | ||||
|         // Set up the input | ||||
|         alertPromptEditText = new EditText(CitraApplication.getAppContext()); | ||||
|         alertPromptEditText = new EditText(YuzuApplication.getAppContext()); | ||||
|         alertPromptEditText.setText(text); | ||||
|         alertPromptEditText.setSingleLine(); | ||||
|         alertPromptEditText.setLayoutParams(params); | ||||
| @ -2,7 +2,7 @@ | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
| 
 | ||||
| package org.citra.citra_emu; | ||||
| package org.yuzu.yuzu_emu; | ||||
| 
 | ||||
| import android.app.Application; | ||||
| import android.app.NotificationChannel; | ||||
| @ -10,13 +10,13 @@ import android.app.NotificationManager; | ||||
| import android.content.Context; | ||||
| import android.os.Build; | ||||
| 
 | ||||
| import org.citra.citra_emu.model.GameDatabase; | ||||
| import org.citra.citra_emu.utils.DirectoryInitialization; | ||||
| import org.citra.citra_emu.utils.PermissionsHandler; | ||||
| import org.yuzu.yuzu_emu.model.GameDatabase; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryInitialization; | ||||
| import org.yuzu.yuzu_emu.utils.PermissionsHandler; | ||||
| 
 | ||||
| public class CitraApplication extends Application { | ||||
| public class YuzuApplication extends Application { | ||||
|     public static GameDatabase databaseHelper; | ||||
|     private static CitraApplication application; | ||||
|     private static YuzuApplication application; | ||||
| 
 | ||||
|     private void createNotificationChannel() { | ||||
|         // Create the NotificationChannel, but only on API 26+ because | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.activities; | ||||
| package org.yuzu.yuzu_emu.activities; | ||||
| 
 | ||||
| import android.content.Intent; | ||||
| import android.os.Environment; | ||||
| @ -8,7 +8,7 @@ import androidx.annotation.Nullable; | ||||
| import com.nononsenseapps.filepicker.AbstractFilePickerFragment; | ||||
| import com.nononsenseapps.filepicker.FilePickerActivity; | ||||
| 
 | ||||
| import org.citra.citra_emu.fragments.CustomFilePickerFragment; | ||||
| import org.yuzu.yuzu_emu.fragments.CustomFilePickerFragment; | ||||
| 
 | ||||
| import java.io.File; | ||||
| 
 | ||||
| @ -1,9 +1,10 @@ | ||||
| package org.citra.citra_emu.activities; | ||||
| package org.yuzu.yuzu_emu.activities; | ||||
| 
 | ||||
| import android.app.Activity; | ||||
| import android.content.Intent; | ||||
| import android.content.SharedPreferences; | ||||
| import android.content.pm.PackageManager; | ||||
| import android.graphics.Rect; | ||||
| import android.os.Bundle; | ||||
| import android.os.Handler; | ||||
| import android.preference.PreferenceManager; | ||||
| @ -15,37 +16,31 @@ import android.view.Menu; | ||||
| import android.view.MenuItem; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.View; | ||||
| import android.widget.CheckBox; | ||||
| import android.widget.SeekBar; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import androidx.annotation.IntDef; | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.core.app.NotificationManagerCompat; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import androidx.fragment.app.FragmentActivity; | ||||
| import androidx.fragment.app.FragmentManager; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.cheats.ui.CheatsActivity; | ||||
| import org.citra.citra_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsActivity; | ||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||
| import org.citra.citra_emu.camera.StillImageCameraHelper; | ||||
| import org.citra.citra_emu.fragments.EmulationFragment; | ||||
| import org.citra.citra_emu.ui.main.MainActivity; | ||||
| import org.citra.citra_emu.utils.ControllerMappingHelper; | ||||
| import org.citra.citra_emu.utils.EmulationMenuSettings; | ||||
| import org.citra.citra_emu.utils.FileBrowserHelper; | ||||
| import org.citra.citra_emu.utils.FileUtil; | ||||
| import org.citra.citra_emu.utils.ForegroundService; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivity; | ||||
| import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile; | ||||
| import org.yuzu.yuzu_emu.fragments.EmulationFragment; | ||||
| import org.yuzu.yuzu_emu.fragments.MenuFragment; | ||||
| import org.yuzu.yuzu_emu.utils.ControllerMappingHelper; | ||||
| import org.yuzu.yuzu_emu.utils.EmulationMenuSettings; | ||||
| import org.yuzu.yuzu_emu.utils.ForegroundService; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.lang.annotation.Retention; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| 
 | ||||
| import static android.Manifest.permission.CAMERA; | ||||
| @ -53,6 +48,10 @@ import static android.Manifest.permission.RECORD_AUDIO; | ||||
| import static java.lang.annotation.RetentionPolicy.SOURCE; | ||||
| 
 | ||||
| public final class EmulationActivity extends AppCompatActivity { | ||||
|     private static final String BACKSTACK_NAME_MENU = "menu"; | ||||
| 
 | ||||
|     private static final String BACKSTACK_NAME_SUBMENU = "submenu"; | ||||
| 
 | ||||
|     public static final String EXTRA_SELECTED_GAME = "SelectedGame"; | ||||
|     public static final String EXTRA_SELECTED_TITLE = "SelectedTitle"; | ||||
|     public static final int MENU_ACTION_EDIT_CONTROLS_PLACEMENT = 0; | ||||
| @ -60,61 +59,10 @@ public final class EmulationActivity extends AppCompatActivity { | ||||
|     public static final int MENU_ACTION_ADJUST_SCALE = 2; | ||||
|     public static final int MENU_ACTION_EXIT = 3; | ||||
|     public static final int MENU_ACTION_SHOW_FPS = 4; | ||||
|     public static final int MENU_ACTION_SCREEN_LAYOUT_LANDSCAPE = 5; | ||||
|     public static final int MENU_ACTION_SCREEN_LAYOUT_PORTRAIT = 6; | ||||
|     public static final int MENU_ACTION_SCREEN_LAYOUT_SINGLE = 7; | ||||
|     public static final int MENU_ACTION_SCREEN_LAYOUT_SIDEBYSIDE = 8; | ||||
|     public static final int MENU_ACTION_SWAP_SCREENS = 9; | ||||
|     public static final int MENU_ACTION_RESET_OVERLAY = 10; | ||||
|     public static final int MENU_ACTION_SHOW_OVERLAY = 11; | ||||
|     public static final int MENU_ACTION_OPEN_SETTINGS = 12; | ||||
|     public static final int MENU_ACTION_LOAD_AMIIBO = 13; | ||||
|     public static final int MENU_ACTION_REMOVE_AMIIBO = 14; | ||||
|     public static final int MENU_ACTION_JOYSTICK_REL_CENTER = 15; | ||||
|     public static final int MENU_ACTION_DPAD_SLIDE_ENABLE = 16; | ||||
|     public static final int MENU_ACTION_OPEN_CHEATS = 17; | ||||
| 
 | ||||
|     public static final int REQUEST_SELECT_AMIIBO = 2; | ||||
|     public static final int MENU_ACTION_RESET_OVERLAY = 6; | ||||
|     public static final int MENU_ACTION_SHOW_OVERLAY = 7; | ||||
|     public static final int MENU_ACTION_OPEN_SETTINGS = 8; | ||||
|     private static final int EMULATION_RUNNING_NOTIFICATION = 0x1000; | ||||
|     private static SparseIntArray buttonsActionsMap = new SparseIntArray(); | ||||
| 
 | ||||
|     static { | ||||
|         buttonsActionsMap.append(R.id.menu_emulation_edit_layout, | ||||
|                 EmulationActivity.MENU_ACTION_EDIT_CONTROLS_PLACEMENT); | ||||
|         buttonsActionsMap.append(R.id.menu_emulation_toggle_controls, | ||||
|                 EmulationActivity.MENU_ACTION_TOGGLE_CONTROLS); | ||||
|         buttonsActionsMap | ||||
|                 .append(R.id.menu_emulation_adjust_scale, EmulationActivity.MENU_ACTION_ADJUST_SCALE); | ||||
|         buttonsActionsMap.append(R.id.menu_emulation_show_fps, | ||||
|                 EmulationActivity.MENU_ACTION_SHOW_FPS); | ||||
|         buttonsActionsMap.append(R.id.menu_screen_layout_landscape, | ||||
|                 EmulationActivity.MENU_ACTION_SCREEN_LAYOUT_LANDSCAPE); | ||||
|         buttonsActionsMap.append(R.id.menu_screen_layout_portrait, | ||||
|                 EmulationActivity.MENU_ACTION_SCREEN_LAYOUT_PORTRAIT); | ||||
|         buttonsActionsMap.append(R.id.menu_screen_layout_single, | ||||
|                 EmulationActivity.MENU_ACTION_SCREEN_LAYOUT_SINGLE); | ||||
|         buttonsActionsMap.append(R.id.menu_screen_layout_sidebyside, | ||||
|                 EmulationActivity.MENU_ACTION_SCREEN_LAYOUT_SIDEBYSIDE); | ||||
|         buttonsActionsMap.append(R.id.menu_emulation_swap_screens, | ||||
|                 EmulationActivity.MENU_ACTION_SWAP_SCREENS); | ||||
|         buttonsActionsMap | ||||
|                 .append(R.id.menu_emulation_reset_overlay, EmulationActivity.MENU_ACTION_RESET_OVERLAY); | ||||
|         buttonsActionsMap | ||||
|                 .append(R.id.menu_emulation_show_overlay, EmulationActivity.MENU_ACTION_SHOW_OVERLAY); | ||||
|         buttonsActionsMap | ||||
|                 .append(R.id.menu_emulation_open_settings, EmulationActivity.MENU_ACTION_OPEN_SETTINGS); | ||||
|         buttonsActionsMap | ||||
|                 .append(R.id.menu_emulation_amiibo_load, EmulationActivity.MENU_ACTION_LOAD_AMIIBO); | ||||
|         buttonsActionsMap | ||||
|                 .append(R.id.menu_emulation_amiibo_remove, EmulationActivity.MENU_ACTION_REMOVE_AMIIBO); | ||||
|         buttonsActionsMap.append(R.id.menu_emulation_joystick_rel_center, | ||||
|                 EmulationActivity.MENU_ACTION_JOYSTICK_REL_CENTER); | ||||
|         buttonsActionsMap.append(R.id.menu_emulation_dpad_slide_enable, | ||||
|                 EmulationActivity.MENU_ACTION_DPAD_SLIDE_ENABLE); | ||||
|         buttonsActionsMap | ||||
|                 .append(R.id.menu_emulation_open_cheats, EmulationActivity.MENU_ACTION_OPEN_CHEATS); | ||||
|     } | ||||
| 
 | ||||
|     private View mDecorView; | ||||
|     private EmulationFragment mEmulationFragment; | ||||
|     private SharedPreferences mPreferences; | ||||
| @ -124,6 +72,8 @@ public final class EmulationActivity extends AppCompatActivity { | ||||
|     private String mSelectedTitle; | ||||
|     private String mPath; | ||||
| 
 | ||||
|     private boolean mMenuVisible; | ||||
| 
 | ||||
|     public static void launch(FragmentActivity activity, String path, String title) { | ||||
|         Intent launcher = new Intent(activity, EmulationActivity.class); | ||||
| 
 | ||||
| @ -172,7 +122,7 @@ public final class EmulationActivity extends AppCompatActivity { | ||||
|         // Set these options now so that the SurfaceView the game renders into is the right size. | ||||
|         enableFullscreenImmersive(); | ||||
| 
 | ||||
|         setTheme(R.style.CitraEmulationBase); | ||||
|         setTheme(R.style.YuzuEmulationBase); | ||||
| 
 | ||||
|         setContentView(R.layout.activity_emulation); | ||||
| 
 | ||||
| @ -217,52 +167,7 @@ public final class EmulationActivity extends AppCompatActivity { | ||||
| 
 | ||||
|     @Override | ||||
|     public void onBackPressed() { | ||||
|         NativeLibrary.PauseEmulation(); | ||||
|         new AlertDialog.Builder(this) | ||||
|                 .setTitle(R.string.emulation_close_game) | ||||
|                 .setMessage(R.string.emulation_close_game_message) | ||||
|                 .setPositiveButton(android.R.string.yes, (dialogInterface, i) -> | ||||
|                 { | ||||
|                     mEmulationFragment.stopEmulation(); | ||||
|                     finish(); | ||||
|                 }) | ||||
|                 .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> | ||||
|                         NativeLibrary.UnPauseEmulation()) | ||||
|                 .setOnCancelListener(dialogInterface -> | ||||
|                         NativeLibrary.UnPauseEmulation()) | ||||
|                 .create() | ||||
|                 .show(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { | ||||
|         switch (requestCode) { | ||||
|             case NativeLibrary.REQUEST_CODE_NATIVE_CAMERA: | ||||
|                 if (grantResults[0] != PackageManager.PERMISSION_GRANTED && | ||||
|                         shouldShowRequestPermissionRationale(CAMERA)) { | ||||
|                     new AlertDialog.Builder(this) | ||||
|                             .setTitle(R.string.camera) | ||||
|                             .setMessage(R.string.camera_permission_needed) | ||||
|                             .setPositiveButton(android.R.string.ok, null) | ||||
|                             .show(); | ||||
|                 } | ||||
|                 NativeLibrary.CameraPermissionResult(grantResults[0] == PackageManager.PERMISSION_GRANTED); | ||||
|                 break; | ||||
|             case NativeLibrary.REQUEST_CODE_NATIVE_MIC: | ||||
|                 if (grantResults[0] != PackageManager.PERMISSION_GRANTED && | ||||
|                         shouldShowRequestPermissionRationale(RECORD_AUDIO)) { | ||||
|                     new AlertDialog.Builder(this) | ||||
|                             .setTitle(R.string.microphone) | ||||
|                             .setMessage(R.string.microphone_permission_needed) | ||||
|                             .setPositiveButton(android.R.string.ok, null) | ||||
|                             .show(); | ||||
|                 } | ||||
|                 NativeLibrary.MicPermissionResult(grantResults[0] == PackageManager.PERMISSION_GRANTED); | ||||
|                 break; | ||||
|             default: | ||||
|                 super.onRequestPermissionsResult(requestCode, permissions, grantResults); | ||||
|                 break; | ||||
|         } | ||||
|         toggleMenu(); | ||||
|     } | ||||
| 
 | ||||
|     private void enableFullscreenImmersive() { | ||||
| @ -276,179 +181,13 @@ public final class EmulationActivity extends AppCompatActivity { | ||||
|                         View.SYSTEM_UI_FLAG_IMMERSIVE); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onCreateOptionsMenu(Menu menu) { | ||||
|         // Inflate the menu; this adds items to the action bar if it is present. | ||||
|         getMenuInflater().inflate(R.menu.menu_emulation, menu); | ||||
| 
 | ||||
|         int layoutOptionMenuItem = R.id.menu_screen_layout_landscape; | ||||
|         switch (EmulationMenuSettings.getLandscapeScreenLayout()) { | ||||
|             case EmulationMenuSettings.LayoutOption_SingleScreen: | ||||
|                 layoutOptionMenuItem = R.id.menu_screen_layout_single; | ||||
|                 break; | ||||
|             case EmulationMenuSettings.LayoutOption_SideScreen: | ||||
|                 layoutOptionMenuItem = R.id.menu_screen_layout_sidebyside; | ||||
|                 break; | ||||
|             case EmulationMenuSettings.LayoutOption_MobilePortrait: | ||||
|                 layoutOptionMenuItem = R.id.menu_screen_layout_portrait; | ||||
|                 break; | ||||
|         } | ||||
| 
 | ||||
|         menu.findItem(layoutOptionMenuItem).setChecked(true); | ||||
|         menu.findItem(R.id.menu_emulation_joystick_rel_center).setChecked(EmulationMenuSettings.getJoystickRelCenter()); | ||||
|         menu.findItem(R.id.menu_emulation_dpad_slide_enable).setChecked(EmulationMenuSettings.getDpadSlideEnable()); | ||||
|         menu.findItem(R.id.menu_emulation_show_fps).setChecked(EmulationMenuSettings.getShowFps()); | ||||
|         menu.findItem(R.id.menu_emulation_swap_screens).setChecked(EmulationMenuSettings.getSwapScreens()); | ||||
|         menu.findItem(R.id.menu_emulation_show_overlay).setChecked(EmulationMenuSettings.getShowOverlay()); | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     private void DisplaySavestateWarning() { | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|         if (preferences.getBoolean("savestateWarningShown", false)) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         LayoutInflater inflater = mEmulationFragment.requireActivity().getLayoutInflater(); | ||||
|         View view = inflater.inflate(R.layout.dialog_checkbox, null); | ||||
|         CheckBox checkBox = view.findViewById(R.id.checkBox); | ||||
| 
 | ||||
|         new AlertDialog.Builder(this) | ||||
|                 .setTitle(R.string.savestate_warning_title) | ||||
|                 .setMessage(R.string.savestate_warning_message) | ||||
|                 .setView(view) | ||||
|                 .setPositiveButton(android.R.string.ok, (dialog, which) -> { | ||||
|                     preferences.edit().putBoolean("savestateWarningShown", checkBox.isChecked()).apply(); | ||||
|                 }) | ||||
|                 .show(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean onPrepareOptionsMenu(Menu menu) { | ||||
|         super.onPrepareOptionsMenu(menu); | ||||
|         menu.findItem(R.id.menu_emulation_save_state).setVisible(false); | ||||
|         menu.findItem(R.id.menu_emulation_load_state).setVisible(false); | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     @SuppressWarnings("WrongConstant") | ||||
|     @Override | ||||
|     public boolean onOptionsItemSelected(MenuItem item) { | ||||
|         int action = buttonsActionsMap.get(item.getItemId(), -1); | ||||
| 
 | ||||
|     public void handleMenuAction(int action) { | ||||
|         switch (action) { | ||||
|             // Edit the placement of the controls | ||||
|             case MENU_ACTION_EDIT_CONTROLS_PLACEMENT: | ||||
|                 editControlsPlacement(); | ||||
|                 break; | ||||
| 
 | ||||
|             // Enable/Disable specific buttons or the entire input overlay. | ||||
|             case MENU_ACTION_TOGGLE_CONTROLS: | ||||
|                 toggleControls(); | ||||
|                 break; | ||||
| 
 | ||||
|             // Adjust the scale of the overlay controls. | ||||
|             case MENU_ACTION_ADJUST_SCALE: | ||||
|                 adjustScale(); | ||||
|                 break; | ||||
| 
 | ||||
|             // Toggle the visibility of the Performance stats TextView | ||||
|             case MENU_ACTION_SHOW_FPS: { | ||||
|                 final boolean isEnabled = !EmulationMenuSettings.getShowFps(); | ||||
|                 EmulationMenuSettings.setShowFps(isEnabled); | ||||
|                 item.setChecked(isEnabled); | ||||
| 
 | ||||
|                 mEmulationFragment.updateShowFpsOverlay(); | ||||
|                 break; | ||||
|             } | ||||
|             // Sets the screen layout to Landscape | ||||
|             case MENU_ACTION_SCREEN_LAYOUT_LANDSCAPE: | ||||
|                 changeScreenOrientation(EmulationMenuSettings.LayoutOption_MobileLandscape, item); | ||||
|                 break; | ||||
| 
 | ||||
|             // Sets the screen layout to Portrait | ||||
|             case MENU_ACTION_SCREEN_LAYOUT_PORTRAIT: | ||||
|                 changeScreenOrientation(EmulationMenuSettings.LayoutOption_MobilePortrait, item); | ||||
|                 break; | ||||
| 
 | ||||
|             // Sets the screen layout to Single | ||||
|             case MENU_ACTION_SCREEN_LAYOUT_SINGLE: | ||||
|                 changeScreenOrientation(EmulationMenuSettings.LayoutOption_SingleScreen, item); | ||||
|                 break; | ||||
| 
 | ||||
|             // Sets the screen layout to Side by Side | ||||
|             case MENU_ACTION_SCREEN_LAYOUT_SIDEBYSIDE: | ||||
|                 changeScreenOrientation(EmulationMenuSettings.LayoutOption_SideScreen, item); | ||||
|                 break; | ||||
| 
 | ||||
|             // Swap the top and bottom screen locations | ||||
|             case MENU_ACTION_SWAP_SCREENS: { | ||||
|                 final boolean isEnabled = !EmulationMenuSettings.getSwapScreens(); | ||||
|                 EmulationMenuSettings.setSwapScreens(isEnabled); | ||||
|                 item.setChecked(isEnabled); | ||||
|                 break; | ||||
|             } | ||||
| 
 | ||||
|             // Reset overlay placement | ||||
|             case MENU_ACTION_RESET_OVERLAY: | ||||
|                 resetOverlay(); | ||||
|                 break; | ||||
| 
 | ||||
|             // Show or hide overlay | ||||
|             case MENU_ACTION_SHOW_OVERLAY: { | ||||
|                 final boolean isEnabled = !EmulationMenuSettings.getShowOverlay(); | ||||
|                 EmulationMenuSettings.setShowOverlay(isEnabled); | ||||
|                 item.setChecked(isEnabled); | ||||
| 
 | ||||
|                 mEmulationFragment.refreshInputOverlay(); | ||||
|                 break; | ||||
|             } | ||||
| 
 | ||||
|             case MENU_ACTION_EXIT: | ||||
|                 mEmulationFragment.stopEmulation(); | ||||
|                 finish(); | ||||
|                 break; | ||||
| 
 | ||||
|             case MENU_ACTION_OPEN_SETTINGS: | ||||
|                 SettingsActivity.launch(this, SettingsFile.FILE_NAME_CONFIG, ""); | ||||
|                 break; | ||||
| 
 | ||||
|             case MENU_ACTION_LOAD_AMIIBO: | ||||
|                 FileBrowserHelper.openFilePicker(this, REQUEST_SELECT_AMIIBO, | ||||
|                         R.string.select_amiibo, | ||||
|                         Collections.singletonList("bin"), false); | ||||
|                 break; | ||||
| 
 | ||||
|             case MENU_ACTION_REMOVE_AMIIBO: | ||||
|                 RemoveAmiibo(); | ||||
|                 break; | ||||
| 
 | ||||
|             case MENU_ACTION_JOYSTICK_REL_CENTER: | ||||
|                 final boolean isJoystickRelCenterEnabled = !EmulationMenuSettings.getJoystickRelCenter(); | ||||
|                 EmulationMenuSettings.setJoystickRelCenter(isJoystickRelCenterEnabled); | ||||
|                 item.setChecked(isJoystickRelCenterEnabled); | ||||
|                 break; | ||||
| 
 | ||||
|             case MENU_ACTION_DPAD_SLIDE_ENABLE: | ||||
|                 final boolean isDpadSlideEnabled = !EmulationMenuSettings.getDpadSlideEnable(); | ||||
|                 EmulationMenuSettings.setDpadSlideEnable(isDpadSlideEnabled); | ||||
|                 item.setChecked(isDpadSlideEnabled); | ||||
|                 break; | ||||
| 
 | ||||
|             case MENU_ACTION_OPEN_CHEATS: | ||||
|                 CheatsActivity.launch(this); | ||||
|                 break; | ||||
|         } | ||||
| 
 | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     private void changeScreenOrientation(int layoutOption, MenuItem item) { | ||||
|         item.setChecked(true); | ||||
|         NativeLibrary.NotifyOrientationChange(layoutOption, getWindowManager().getDefaultDisplay() | ||||
|                 .getRotation()); | ||||
|         EmulationMenuSettings.setLandscapeScreenLayout(layoutOption); | ||||
|     } | ||||
| 
 | ||||
|     private void editControlsPlacement() { | ||||
| @ -462,6 +201,11 @@ public final class EmulationActivity extends AppCompatActivity { | ||||
|     // Gets button presses | ||||
|     @Override | ||||
|     public boolean dispatchKeyEvent(KeyEvent event) { | ||||
|         if (mMenuVisible || event.getKeyCode() == KeyEvent.KEYCODE_BACK) | ||||
|         { | ||||
|             return super.dispatchKeyEvent(event); | ||||
|         } | ||||
| 
 | ||||
|         int action; | ||||
|         int button = mPreferences.getInt(InputBindingSetting.getInputButtonKey(event.getKeyCode()), event.getKeyCode()); | ||||
| 
 | ||||
| @ -492,49 +236,6 @@ public final class EmulationActivity extends AppCompatActivity { | ||||
|         return NativeLibrary.onGamePadEvent(input.getDescriptor(), button, action); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected void onActivityResult(int requestCode, int resultCode, Intent result) { | ||||
|         super.onActivityResult(requestCode, resultCode, result); | ||||
|         switch (requestCode) { | ||||
|             case StillImageCameraHelper.REQUEST_CAMERA_FILE_PICKER: | ||||
|                 StillImageCameraHelper.OnFilePickerResult(resultCode == RESULT_OK ? result : null); | ||||
|                 break; | ||||
|             case REQUEST_SELECT_AMIIBO: | ||||
|                 // If the user picked a file, as opposed to just backing out. | ||||
|                 if (resultCode == MainActivity.RESULT_OK) { | ||||
|                     String[] selectedFiles = FileBrowserHelper.getSelectedFiles(result); | ||||
|                     if (selectedFiles == null) | ||||
|                         return; | ||||
| 
 | ||||
|                     onAmiiboSelected(selectedFiles[0]); | ||||
|                 } | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void onAmiiboSelected(String selectedFile) { | ||||
|         File file = new File(selectedFile); | ||||
|         boolean success = false; | ||||
|         try { | ||||
|             byte[] bytes = FileUtil.getBytesFromFile(file); | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|         } | ||||
| 
 | ||||
|         if (!success) { | ||||
|             new AlertDialog.Builder(this) | ||||
|                     .setTitle(R.string.amiibo_load_error) | ||||
|                     .setMessage(R.string.amiibo_load_error_message) | ||||
|                     .setPositiveButton(android.R.string.ok, null) | ||||
|                     .create() | ||||
|                     .show(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void RemoveAmiibo() { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     private void toggleControls() { | ||||
|         final SharedPreferences.Editor editor = mPreferences.edit(); | ||||
|         boolean[] enabledButtons = new boolean[14]; | ||||
| @ -630,8 +331,59 @@ public final class EmulationActivity extends AppCompatActivity { | ||||
|                 .show(); | ||||
|     } | ||||
| 
 | ||||
|     private static boolean areCoordinatesOutside(@Nullable View view, float x, float y) | ||||
|     { | ||||
|         if (view == null) | ||||
|         { | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         Rect viewBounds = new Rect(); | ||||
|         view.getGlobalVisibleRect(viewBounds); | ||||
|         return !viewBounds.contains(Math.round(x), Math.round(y)); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean dispatchTouchEvent(MotionEvent event) | ||||
|     { | ||||
|         if (event.getActionMasked() == MotionEvent.ACTION_DOWN) | ||||
|         { | ||||
|             boolean anyMenuClosed = false; | ||||
| 
 | ||||
|             Fragment submenu = getSupportFragmentManager().findFragmentById(R.id.frame_submenu); | ||||
|             if (submenu != null && areCoordinatesOutside(submenu.getView(), event.getX(), event.getY())) | ||||
|             { | ||||
|                 closeSubmenu(); | ||||
|                 submenu = null; | ||||
|                 anyMenuClosed = true; | ||||
|             } | ||||
| 
 | ||||
|             if (submenu == null) | ||||
|             { | ||||
|                 Fragment menu = getSupportFragmentManager().findFragmentById(R.id.frame_menu); | ||||
|                 if (menu != null && areCoordinatesOutside(menu.getView(), event.getX(), event.getY())) | ||||
|                 { | ||||
|                     closeMenu(); | ||||
|                     anyMenuClosed = true; | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (anyMenuClosed) | ||||
|             { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return super.dispatchTouchEvent(event); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean dispatchGenericMotionEvent(MotionEvent event) { | ||||
|         if (mMenuVisible) | ||||
|         { | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         if (((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) == 0)) { | ||||
|             return super.dispatchGenericMotionEvent(event); | ||||
|         } | ||||
| @ -747,9 +499,39 @@ public final class EmulationActivity extends AppCompatActivity { | ||||
| 
 | ||||
|     @Retention(SOURCE) | ||||
|     @IntDef({MENU_ACTION_EDIT_CONTROLS_PLACEMENT, MENU_ACTION_TOGGLE_CONTROLS, MENU_ACTION_ADJUST_SCALE, | ||||
|             MENU_ACTION_EXIT, MENU_ACTION_SHOW_FPS, MENU_ACTION_SCREEN_LAYOUT_LANDSCAPE, | ||||
|             MENU_ACTION_SCREEN_LAYOUT_PORTRAIT, MENU_ACTION_SCREEN_LAYOUT_SINGLE, MENU_ACTION_SCREEN_LAYOUT_SIDEBYSIDE, | ||||
|             MENU_ACTION_SWAP_SCREENS, MENU_ACTION_RESET_OVERLAY, MENU_ACTION_SHOW_OVERLAY, MENU_ACTION_OPEN_SETTINGS}) | ||||
|             MENU_ACTION_EXIT, MENU_ACTION_SHOW_FPS, MENU_ACTION_RESET_OVERLAY, MENU_ACTION_SHOW_OVERLAY, MENU_ACTION_OPEN_SETTINGS}) | ||||
|     public @interface MenuAction { | ||||
|     } | ||||
| 
 | ||||
|     private boolean closeSubmenu() | ||||
|     { | ||||
|         return getSupportFragmentManager().popBackStackImmediate(BACKSTACK_NAME_SUBMENU, | ||||
|                 FragmentManager.POP_BACK_STACK_INCLUSIVE); | ||||
|     } | ||||
| 
 | ||||
|     private boolean closeMenu() | ||||
|     { | ||||
|         mMenuVisible = false; | ||||
|         return getSupportFragmentManager().popBackStackImmediate(BACKSTACK_NAME_MENU, | ||||
|                 FragmentManager.POP_BACK_STACK_INCLUSIVE); | ||||
|     } | ||||
| 
 | ||||
|     private void toggleMenu() | ||||
|     { | ||||
|         if (!closeMenu()) { | ||||
|             // Removing the menu failed, so that means it wasn't visible. Add it. | ||||
|             Fragment fragment = MenuFragment.newInstance(); | ||||
|             getSupportFragmentManager().beginTransaction() | ||||
|                     .setCustomAnimations( | ||||
|                             R.animator.menu_slide_in_from_start, | ||||
|                             R.animator.menu_slide_out_to_start, | ||||
|                             R.animator.menu_slide_in_from_start, | ||||
|                             R.animator.menu_slide_out_to_start) | ||||
|                     .add(R.id.frame_menu, fragment) | ||||
|                     .addToBackStack(BACKSTACK_NAME_MENU) | ||||
|                     .commit(); | ||||
|             mMenuVisible = true; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.adapters; | ||||
| package org.yuzu.yuzu_emu.adapters; | ||||
| 
 | ||||
| import android.database.Cursor; | ||||
| import android.database.DataSetObserver; | ||||
| @ -16,13 +16,13 @@ import androidx.core.content.ContextCompat; | ||||
| import androidx.fragment.app.FragmentActivity; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| 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.PicassoUtils; | ||||
| import org.citra.citra_emu.viewholders.GameViewHolder; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.activities.EmulationActivity; | ||||
| import org.yuzu.yuzu_emu.model.GameDatabase; | ||||
| import org.yuzu.yuzu_emu.ui.DividerItemDecoration; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.utils.PicassoUtils; | ||||
| import org.yuzu.yuzu_emu.viewholders.GameViewHolder; | ||||
| 
 | ||||
| import java.nio.file.Path; | ||||
| import java.nio.file.Paths; | ||||
| @ -99,7 +99,7 @@ public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> impl | ||||
|                 holder.regions = mCursor.getString(GameDatabase.GAME_COLUMN_REGIONS); | ||||
|                 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.color.view_background : R.color.view_disabled; | ||||
|                 View itemView = holder.getItemView(); | ||||
|                 itemView.setBackgroundColor(ContextCompat.getColor(itemView.getContext(), backgroundColorId)); | ||||
|             } else { | ||||
| @ -2,7 +2,7 @@ | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
| 
 | ||||
| package org.citra.citra_emu.applets; | ||||
| package org.yuzu.yuzu_emu.applets; | ||||
| 
 | ||||
| import android.app.Activity; | ||||
| import android.app.Dialog; | ||||
| @ -19,11 +19,11 @@ import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.fragment.app.DialogFragment; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.activities.EmulationActivity; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| @ -107,14 +107,14 @@ public final class SoftwareKeyboard { | ||||
|             FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( | ||||
|                     ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); | ||||
|             params.leftMargin = params.rightMargin = | ||||
|                     CitraApplication.getAppContext().getResources().getDimensionPixelSize( | ||||
|                     YuzuApplication.getAppContext().getResources().getDimensionPixelSize( | ||||
|                             R.dimen.dialog_margin); | ||||
| 
 | ||||
|             KeyboardConfig config = Objects.requireNonNull( | ||||
|                     (KeyboardConfig) Objects.requireNonNull(getArguments()).getSerializable("config")); | ||||
| 
 | ||||
|             // Set up the input | ||||
|             EditText editText = new EditText(CitraApplication.getAppContext()); | ||||
|             EditText editText = new EditText(YuzuApplication.getAppContext()); | ||||
|             editText.setHint(config.hint_text); | ||||
|             editText.setSingleLine(!config.multiline_mode); | ||||
|             editText.setLayoutParams(params); | ||||
| @ -254,7 +254,7 @@ public final class SoftwareKeyboard { | ||||
| 
 | ||||
|     public static void ShowError(String error) { | ||||
|         NativeLibrary.displayAlertMsg( | ||||
|                 CitraApplication.getAppContext().getResources().getString(R.string.software_keyboard), | ||||
|                 YuzuApplication.getAppContext().getResources().getString(R.string.software_keyboard), | ||||
|                 error, false); | ||||
|     } | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.dialogs; | ||||
| package org.yuzu.yuzu_emu.dialogs; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.view.InputDevice; | ||||
| @ -8,8 +8,8 @@ import android.view.MotionEvent; | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.model; | ||||
| package org.yuzu.yuzu_emu.features.settings.model; | ||||
| 
 | ||||
| public final class BooleanSetting extends Setting { | ||||
|     private boolean mValue; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.model; | ||||
| package org.yuzu.yuzu_emu.features.settings.model; | ||||
| 
 | ||||
| public final class FloatSetting extends Setting { | ||||
|     private float mValue; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.model; | ||||
| package org.yuzu.yuzu_emu.features.settings.model; | ||||
| 
 | ||||
| public final class IntSetting extends Setting { | ||||
|     private int mValue; | ||||
| @ -1,7 +1,7 @@ | ||||
| package org.citra.citra_emu.features.settings.model; | ||||
| package org.yuzu.yuzu_emu.features.settings.model; | ||||
| 
 | ||||
| /** | ||||
|  * Abstraction for a setting item as read from / written to Citra's configuration ini files. | ||||
|  * Abstraction for a setting item as read from / written to yuzu's configuration ini files. | ||||
|  * These files generally consist of a key/value pair, though the type of value is ambiguous and | ||||
|  * must be inferred at read-time. The type of value determines which child of this class is used | ||||
|  * to represent the Setting. | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.model; | ||||
| package org.yuzu.yuzu_emu.features.settings.model; | ||||
| 
 | ||||
| import java.util.HashMap; | ||||
| 
 | ||||
| @ -1,11 +1,11 @@ | ||||
| package org.citra.citra_emu.features.settings.model; | ||||
| package org.yuzu.yuzu_emu.features.settings.model; | ||||
| 
 | ||||
| import android.text.TextUtils; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsActivityView; | ||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivityView; | ||||
| import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile; | ||||
| 
 | ||||
| import java.util.Arrays; | ||||
| import java.util.HashMap; | ||||
| @ -17,7 +17,6 @@ public class Settings { | ||||
|     public static final String SECTION_PREMIUM = "Premium"; | ||||
|     public static final String SECTION_CORE = "Core"; | ||||
|     public static final String SECTION_SYSTEM = "System"; | ||||
|     public static final String SECTION_CAMERA = "Camera"; | ||||
|     public static final String SECTION_CONTROLS = "Controls"; | ||||
|     public static final String SECTION_RENDERER = "Renderer"; | ||||
|     public static final String SECTION_LAYOUT = "Layout"; | ||||
| @ -30,7 +29,7 @@ public class Settings { | ||||
|     private static final Map<String, List<String>> configFileSectionsMap = new HashMap<>(); | ||||
| 
 | ||||
|     static { | ||||
|         configFileSectionsMap.put(SettingsFile.FILE_NAME_CONFIG, Arrays.asList(SECTION_PREMIUM, SECTION_CORE, SECTION_SYSTEM, SECTION_CAMERA, SECTION_CONTROLS, SECTION_RENDERER, SECTION_LAYOUT, SECTION_UTILITY, SECTION_AUDIO, SECTION_DEBUG)); | ||||
|         configFileSectionsMap.put(SettingsFile.FILE_NAME_CONFIG, Arrays.asList(SECTION_PREMIUM, SECTION_CORE, SECTION_SYSTEM, SECTION_CONTROLS, SECTION_RENDERER, SECTION_LAYOUT, SECTION_UTILITY, SECTION_AUDIO, SECTION_DEBUG)); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -109,7 +108,7 @@ public class Settings { | ||||
| 
 | ||||
|     public void saveSettings(SettingsActivityView view) { | ||||
|         if (TextUtils.isEmpty(gameId)) { | ||||
|             view.showToastMessage(CitraApplication.getAppContext().getString(R.string.ini_saved), false); | ||||
|             view.showToastMessage(YuzuApplication.getAppContext().getString(R.string.ini_saved), false); | ||||
| 
 | ||||
|             for (Map.Entry<String, List<String>> entry : configFileSectionsMap.entrySet()) { | ||||
|                 String fileName = entry.getKey(); | ||||
| @ -123,7 +122,7 @@ public class Settings { | ||||
|             } | ||||
|         } else { | ||||
|             // custom game settings | ||||
|             view.showToastMessage(CitraApplication.getAppContext().getString(R.string.gameid_saved, gameId), false); | ||||
|             view.showToastMessage(YuzuApplication.getAppContext().getString(R.string.gameid_saved, gameId), false); | ||||
| 
 | ||||
|             SettingsFile.saveCustomGameSettings(gameId, sections); | ||||
|         } | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.model; | ||||
| package org.yuzu.yuzu_emu.features.settings.model; | ||||
| 
 | ||||
| public final class StringSetting extends Setting { | ||||
|     private String mValue; | ||||
| @ -1,11 +1,11 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.BooleanSetting; | ||||
| import org.citra.citra_emu.features.settings.model.IntSetting; | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsFragmentView; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.IntSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsFragmentView; | ||||
| 
 | ||||
| public final class CheckBoxSetting extends SettingsItem { | ||||
|     private boolean mDefaultValue; | ||||
| @ -59,7 +59,7 @@ public final class CheckBoxSetting extends SettingsItem { | ||||
|     public IntSetting setChecked(boolean checked) { | ||||
|         // Show a performance warning if the setting has been disabled | ||||
|         if (mShowPerformanceWarning && !checked) { | ||||
|             mView.showToastMessage(CitraApplication.getAppContext().getString(R.string.performance_warning), true); | ||||
|             mView.showToastMessage(YuzuApplication.getAppContext().getString(R.string.performance_warning), true); | ||||
|         } | ||||
| 
 | ||||
|         if (getSetting() == null) { | ||||
| @ -1,7 +1,7 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.model.StringSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.StringSetting; | ||||
| 
 | ||||
| public final class DateTimeSetting extends SettingsItem { | ||||
|     private String mDefaultValue; | ||||
| @ -1,6 +1,6 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| 
 | ||||
| public final class HeaderSetting extends SettingsItem { | ||||
|     public HeaderSetting(String key, Setting setting, int titleId, int descriptionId) { | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import android.content.SharedPreferences; | ||||
| import android.preference.PreferenceManager; | ||||
| @ -6,12 +6,12 @@ import android.view.InputDevice; | ||||
| import android.view.KeyEvent; | ||||
| import android.widget.Toast; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.model.StringSetting; | ||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.StringSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile; | ||||
| 
 | ||||
| public final class InputBindingSetting extends SettingsItem { | ||||
|     private static final String INPUT_MAPPING_PREFIX = "InputMapping"; | ||||
| @ -108,7 +108,7 @@ public final class InputBindingSetting extends SettingsItem { | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Returns the Citra button code for the settings key. | ||||
|      * Returns the yuzu button code for the settings key. | ||||
|      */ | ||||
|     private int getButtonCode() { | ||||
|         switch (getKey()) { | ||||
| @ -145,7 +145,7 @@ public final class InputBindingSetting extends SettingsItem { | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Returns the settings key for the specified Citra button code. | ||||
|      * Returns the settings key for the specified yuzu button code. | ||||
|      */ | ||||
|     private static String getButtonKey(int buttonCode) { | ||||
|         switch (buttonCode) { | ||||
| @ -201,7 +201,7 @@ public final class InputBindingSetting extends SettingsItem { | ||||
|      */ | ||||
|     public void removeOldMapping() { | ||||
|         // Get preferences editor | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | ||||
|         SharedPreferences.Editor editor = preferences.edit(); | ||||
| 
 | ||||
|         // Try remove all possible keys we wrote for this setting | ||||
| @ -250,7 +250,7 @@ public final class InputBindingSetting extends SettingsItem { | ||||
|      */ | ||||
|     private void WriteButtonMapping(String key) { | ||||
|         // Get preferences editor | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | ||||
|         SharedPreferences.Editor editor = preferences.edit(); | ||||
| 
 | ||||
|         // Remove mapping for another setting using this input | ||||
| @ -278,7 +278,7 @@ public final class InputBindingSetting extends SettingsItem { | ||||
|      */ | ||||
|     private void WriteAxisMapping(int axis, int value) { | ||||
|         // Get preferences editor | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | ||||
|         SharedPreferences.Editor editor = preferences.edit(); | ||||
| 
 | ||||
|         // Cleanup old mapping | ||||
| @ -302,7 +302,7 @@ public final class InputBindingSetting extends SettingsItem { | ||||
|      */ | ||||
|     public void onKeyInput(KeyEvent keyEvent) { | ||||
|         if (!IsButtonMappingSupported()) { | ||||
|             Toast.makeText(CitraApplication.getAppContext(), R.string.input_message_analog_only, Toast.LENGTH_LONG).show(); | ||||
|             Toast.makeText(YuzuApplication.getAppContext(), R.string.input_message_analog_only, Toast.LENGTH_LONG).show(); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
| @ -324,11 +324,11 @@ public final class InputBindingSetting extends SettingsItem { | ||||
|     public void onMotionInput(InputDevice device, InputDevice.MotionRange motionRange, | ||||
|                               char axisDir) { | ||||
|         if (!IsAxisMappingSupported()) { | ||||
|             Toast.makeText(CitraApplication.getAppContext(), R.string.input_message_button_only, Toast.LENGTH_LONG).show(); | ||||
|             Toast.makeText(YuzuApplication.getAppContext(), R.string.input_message_button_only, Toast.LENGTH_LONG).show(); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | ||||
|         SharedPreferences.Editor editor = preferences.edit(); | ||||
| 
 | ||||
|         int button; | ||||
| @ -354,7 +354,7 @@ public final class InputBindingSetting extends SettingsItem { | ||||
|      * Sets the string to use in the configuration UI for the gamepad input. | ||||
|      */ | ||||
|     private StringSetting setUiString(String ui) { | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | ||||
|         SharedPreferences.Editor editor = preferences.edit(); | ||||
| 
 | ||||
|         if (getSetting() == null) { | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| public final class PremiumHeader extends SettingsItem { | ||||
|     public PremiumHeader() { | ||||
| @ -1,12 +1,12 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import android.content.SharedPreferences; | ||||
| import android.preference.PreferenceManager; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsFragmentView; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsFragmentView; | ||||
| 
 | ||||
| public final class PremiumSingleChoiceSetting extends SettingsItem { | ||||
|     private int mDefaultValue; | ||||
| @ -15,7 +15,7 @@ public final class PremiumSingleChoiceSetting extends SettingsItem { | ||||
|     private int mValuesId; | ||||
|     private SettingsFragmentView mView; | ||||
| 
 | ||||
|     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | ||||
| 
 | ||||
|     public PremiumSingleChoiceSetting(String key, String section, int titleId, int descriptionId, | ||||
|                                       int choicesId, int valuesId, int defaultValue, Setting setting, SettingsFragmentView view) { | ||||
| @ -49,7 +49,7 @@ public final class PremiumSingleChoiceSetting extends SettingsItem { | ||||
|         final SharedPreferences.Editor editor = mPreferences.edit(); | ||||
|         editor.putInt(getKey(), selection); | ||||
|         editor.apply(); | ||||
|         mView.showToastMessage(CitraApplication.getAppContext().getString(R.string.design_updated), false); | ||||
|         mView.showToastMessage(YuzuApplication.getAppContext().getString(R.string.design_updated), false); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
| @ -1,8 +1,8 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.model.Settings; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Settings; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| 
 | ||||
| /** | ||||
|  * ViewModel abstraction for an Item in the RecyclerView powering SettingsFragments. | ||||
| @ -1,7 +1,7 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.IntSetting; | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.IntSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| 
 | ||||
| public final class SingleChoiceSetting extends SettingsItem { | ||||
|     private int mDefaultValue; | ||||
| @ -1,9 +1,9 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.FloatSetting; | ||||
| import org.citra.citra_emu.features.settings.model.IntSetting; | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.FloatSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.IntSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| public final class SliderSetting extends SettingsItem { | ||||
|     private int mMin; | ||||
| @ -1,7 +1,7 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.model.StringSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.StringSetting; | ||||
| 
 | ||||
| public class StringSingleChoiceSetting extends SettingsItem { | ||||
|     private String mDefaultValue; | ||||
| @ -1,6 +1,6 @@ | ||||
| package org.citra.citra_emu.features.settings.model.view; | ||||
| package org.yuzu.yuzu_emu.features.settings.model.view; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| 
 | ||||
| public final class SubmenuSetting extends SettingsItem { | ||||
|     private String mMenuKey; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.ui; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui; | ||||
| 
 | ||||
| import android.app.ProgressDialog; | ||||
| import android.content.Context; | ||||
| @ -15,11 +15,11 @@ import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.fragment.app.FragmentTransaction; | ||||
| import androidx.localbroadcastmanager.content.LocalBroadcastManager; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.utils.DirectoryInitialization; | ||||
| import org.citra.citra_emu.utils.DirectoryStateReceiver; | ||||
| import org.citra.citra_emu.utils.EmulationMenuSettings; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryInitialization; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryStateReceiver; | ||||
| import org.yuzu.yuzu_emu.utils.EmulationMenuSettings; | ||||
| 
 | ||||
| public final class SettingsActivity extends AppCompatActivity implements SettingsActivityView { | ||||
|     private static final String ARG_MENU_TAG = "menu_tag"; | ||||
| @ -172,17 +172,17 @@ public final class SettingsActivity extends AppCompatActivity implements Setting | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public org.citra.citra_emu.features.settings.model.Settings getSettings() { | ||||
|     public org.yuzu.yuzu_emu.features.settings.model.Settings getSettings() { | ||||
|         return mPresenter.getSettings(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void setSettings(org.citra.citra_emu.features.settings.model.Settings settings) { | ||||
|     public void setSettings(org.yuzu.yuzu_emu.features.settings.model.Settings settings) { | ||||
|         mPresenter.setSettings(settings); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onSettingsFileLoaded(org.citra.citra_emu.features.settings.model.Settings settings) { | ||||
|     public void onSettingsFileLoaded(org.yuzu.yuzu_emu.features.settings.model.Settings settings) { | ||||
|         SettingsFragmentView fragment = getFragment(); | ||||
| 
 | ||||
|         if (fragment != null) { | ||||
| @ -1,17 +1,17 @@ | ||||
| package org.citra.citra_emu.features.settings.ui; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui; | ||||
| 
 | ||||
| import android.content.IntentFilter; | ||||
| import android.os.Bundle; | ||||
| import android.text.TextUtils; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.features.settings.model.Settings; | ||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||
| import org.citra.citra_emu.utils.DirectoryInitialization; | ||||
| import org.citra.citra_emu.utils.DirectoryInitialization.DirectoryInitializationState; | ||||
| import org.citra.citra_emu.utils.DirectoryStateReceiver; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.citra.citra_emu.utils.ThemeUtil; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Settings; | ||||
| import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryInitialization; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryInitialization.DirectoryInitializationState; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryStateReceiver; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.utils.ThemeUtil; | ||||
| 
 | ||||
| import java.io.File; | ||||
| 
 | ||||
| @ -43,7 +43,7 @@ public final class SettingsActivityPresenter { | ||||
|     } | ||||
| 
 | ||||
|     public void onStart() { | ||||
|         prepareCitraDirectoriesIfNeeded(); | ||||
|         prepareDirectoriesIfNeeded(); | ||||
|     } | ||||
| 
 | ||||
|     void loadSettingsUI() { | ||||
| @ -59,12 +59,13 @@ public final class SettingsActivityPresenter { | ||||
|         mView.onSettingsFileLoaded(mSettings); | ||||
|     } | ||||
| 
 | ||||
|     private void prepareCitraDirectoriesIfNeeded() { | ||||
|     private void prepareDirectoriesIfNeeded() { | ||||
|         File configFile = new File(DirectoryInitialization.getUserDirectory() + "/config/" + SettingsFile.FILE_NAME_CONFIG + ".ini"); | ||||
|         if (!configFile.exists()) { | ||||
|             Log.error("Citra config file could not be found!"); | ||||
|             Log.error(DirectoryInitialization.getUserDirectory() + "/config/" + SettingsFile.FILE_NAME_CONFIG + ".ini"); | ||||
|             Log.error("yuzu config file could not be found!"); | ||||
|         } | ||||
|         if (DirectoryInitialization.areCitraDirectoriesReady()) { | ||||
|         if (DirectoryInitialization.areDirectoriesReady()) { | ||||
|             loadSettingsUI(); | ||||
|         } else { | ||||
|             mView.showLoading(); | ||||
| @ -74,7 +75,7 @@ public final class SettingsActivityPresenter { | ||||
|             directoryStateReceiver = | ||||
|                     new DirectoryStateReceiver(directoryInitializationState -> | ||||
|                     { | ||||
|                         if (directoryInitializationState == DirectoryInitializationState.CITRA_DIRECTORIES_INITIALIZED) { | ||||
|                         if (directoryInitializationState == DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED) { | ||||
|                             mView.hideLoading(); | ||||
|                             loadSettingsUI(); | ||||
|                         } else if (directoryInitializationState == DirectoryInitializationState.EXTERNAL_STORAGE_PERMISSION_NEEDED) { | ||||
| @ -1,9 +1,9 @@ | ||||
| package org.citra.citra_emu.features.settings.ui; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui; | ||||
| 
 | ||||
| import android.content.IntentFilter; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.Settings; | ||||
| import org.citra.citra_emu.utils.DirectoryStateReceiver; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Settings; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryStateReceiver; | ||||
| 
 | ||||
| /** | ||||
|  * Abstraction for the Activity that manages SettingsFragments. | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.ui; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.DialogInterface; | ||||
| @ -13,31 +13,31 @@ import android.widget.TimePicker; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.dialogs.MotionAlertDialog; | ||||
| import org.citra.citra_emu.features.settings.model.FloatSetting; | ||||
| import org.citra.citra_emu.features.settings.model.IntSetting; | ||||
| import org.citra.citra_emu.features.settings.model.StringSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.CheckBoxSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.DateTimeSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.PremiumSingleChoiceSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.model.view.SingleChoiceSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SliderSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.StringSingleChoiceSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SubmenuSetting; | ||||
| import org.citra.citra_emu.features.settings.ui.viewholder.CheckBoxSettingViewHolder; | ||||
| import org.citra.citra_emu.features.settings.ui.viewholder.DateTimeViewHolder; | ||||
| import org.citra.citra_emu.features.settings.ui.viewholder.HeaderViewHolder; | ||||
| import org.citra.citra_emu.features.settings.ui.viewholder.InputBindingSettingViewHolder; | ||||
| import org.citra.citra_emu.features.settings.ui.viewholder.PremiumViewHolder; | ||||
| import org.citra.citra_emu.features.settings.ui.viewholder.SettingViewHolder; | ||||
| import org.citra.citra_emu.features.settings.ui.viewholder.SingleChoiceViewHolder; | ||||
| import org.citra.citra_emu.features.settings.ui.viewholder.SliderViewHolder; | ||||
| import org.citra.citra_emu.features.settings.ui.viewholder.SubmenuViewHolder; | ||||
| import org.citra.citra_emu.ui.main.MainActivity; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.dialogs.MotionAlertDialog; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.FloatSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.IntSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.StringSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.CheckBoxSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.DateTimeSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.PremiumSingleChoiceSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SingleChoiceSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SliderSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.StringSingleChoiceSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SubmenuSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.viewholder.CheckBoxSettingViewHolder; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.viewholder.DateTimeViewHolder; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.viewholder.HeaderViewHolder; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.viewholder.InputBindingSettingViewHolder; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.viewholder.PremiumViewHolder; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.viewholder.SettingViewHolder; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.viewholder.SingleChoiceViewHolder; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.viewholder.SliderViewHolder; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.viewholder.SubmenuViewHolder; | ||||
| import org.yuzu.yuzu_emu.ui.main.MainActivity; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.ui; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.os.Bundle; | ||||
| @ -12,11 +12,11 @@ import androidx.fragment.app.Fragment; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.model.Settings; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.ui.DividerItemDecoration; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Settings; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.ui.DividerItemDecoration; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.ui; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui; | ||||
| 
 | ||||
| import android.app.Activity; | ||||
| import android.content.Context; | ||||
| @ -7,24 +7,24 @@ import android.hardware.camera2.CameraCharacteristics; | ||||
| import android.hardware.camera2.CameraManager; | ||||
| import android.text.TextUtils; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.model.SettingSection; | ||||
| import org.citra.citra_emu.features.settings.model.Settings; | ||||
| import org.citra.citra_emu.features.settings.model.StringSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.CheckBoxSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.DateTimeSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.HeaderSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.PremiumHeader; | ||||
| import org.citra.citra_emu.features.settings.model.view.PremiumSingleChoiceSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.model.view.SingleChoiceSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SliderSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.StringSingleChoiceSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SubmenuSetting; | ||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.SettingSection; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Settings; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.StringSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.CheckBoxSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.DateTimeSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.HeaderSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.PremiumHeader; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.PremiumSingleChoiceSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SingleChoiceSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SliderSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.StringSingleChoiceSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SubmenuSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| @ -115,9 +115,6 @@ public final class SettingsFragmentPresenter { | ||||
|             case Settings.SECTION_SYSTEM: | ||||
|                 addSystemSettings(sl); | ||||
|                 break; | ||||
|             case Settings.SECTION_CAMERA: | ||||
|                 addCameraSettings(sl); | ||||
|                 break; | ||||
|             case Settings.SECTION_CONTROLS: | ||||
|                 addInputSettings(sl); | ||||
|                 break; | ||||
| @ -145,7 +142,6 @@ public final class SettingsFragmentPresenter { | ||||
|         sl.add(new SubmenuSetting(null, null, R.string.preferences_premium, 0, Settings.SECTION_PREMIUM)); | ||||
|         sl.add(new SubmenuSetting(null, null, R.string.preferences_general, 0, Settings.SECTION_CORE)); | ||||
|         sl.add(new SubmenuSetting(null, null, R.string.preferences_system, 0, Settings.SECTION_SYSTEM)); | ||||
|         sl.add(new SubmenuSetting(null, null, R.string.preferences_camera, 0, Settings.SECTION_CAMERA)); | ||||
|         sl.add(new SubmenuSetting(null, null, R.string.preferences_controls, 0, Settings.SECTION_CONTROLS)); | ||||
|         sl.add(new SubmenuSetting(null, null, R.string.preferences_graphics, 0, Settings.SECTION_RENDERER)); | ||||
|         sl.add(new SubmenuSetting(null, null, R.string.preferences_audio, 0, Settings.SECTION_AUDIO)); | ||||
| @ -197,96 +193,6 @@ public final class SettingsFragmentPresenter { | ||||
|         sl.add(new DateTimeSetting(SettingsFile.KEY_INIT_TIME, Settings.SECTION_SYSTEM, R.string.init_time, R.string.init_time_description, "2000-01-01 00:00:01", dateTime)); | ||||
|     } | ||||
| 
 | ||||
|     private void addCameraSettings(ArrayList<SettingsItem> sl) { | ||||
|         final Activity activity = mView.getActivity(); | ||||
|         activity.setTitle(R.string.preferences_camera); | ||||
| 
 | ||||
|         // Get the camera IDs | ||||
|         CameraManager cameraManager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); | ||||
|         ArrayList<String> supportedCameraNameList = new ArrayList<>(); | ||||
|         ArrayList<String> supportedCameraIdList = new ArrayList<>(); | ||||
|         if (cameraManager != null) { | ||||
|             try { | ||||
|                 for (String id : cameraManager.getCameraIdList()) { | ||||
|                     final CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(id); | ||||
|                     if (Objects.requireNonNull(characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) { | ||||
|                         continue; // Legacy cameras cannot be used with the NDK | ||||
|                     } | ||||
| 
 | ||||
|                     supportedCameraIdList.add(id); | ||||
| 
 | ||||
|                     final int facing = Objects.requireNonNull(characteristics.get(CameraCharacteristics.LENS_FACING)); | ||||
|                     int stringId = R.string.camera_facing_external; | ||||
|                     switch (facing) { | ||||
|                         case CameraCharacteristics.LENS_FACING_FRONT: | ||||
|                             stringId = R.string.camera_facing_front; | ||||
|                             break; | ||||
|                         case CameraCharacteristics.LENS_FACING_BACK: | ||||
|                             stringId = R.string.camera_facing_back; | ||||
|                             break; | ||||
|                         case CameraCharacteristics.LENS_FACING_EXTERNAL: | ||||
|                             stringId = R.string.camera_facing_external; | ||||
|                             break; | ||||
|                     } | ||||
|                     supportedCameraNameList.add(String.format("%1$s (%2$s)", id, activity.getString(stringId))); | ||||
|                 } | ||||
|             } catch (CameraAccessException e) { | ||||
|                 Log.error("Couldn't retrieve camera list"); | ||||
|                 e.printStackTrace(); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // Create the names and values for display | ||||
|         ArrayList<String> cameraDeviceNameList = new ArrayList<>(Arrays.asList(activity.getResources().getStringArray(R.array.cameraDeviceNames))); | ||||
|         cameraDeviceNameList.addAll(supportedCameraNameList); | ||||
|         ArrayList<String> cameraDeviceValueList = new ArrayList<>(Arrays.asList(activity.getResources().getStringArray(R.array.cameraDeviceValues))); | ||||
|         cameraDeviceValueList.addAll(supportedCameraIdList); | ||||
| 
 | ||||
|         final String[] cameraDeviceNames = cameraDeviceNameList.toArray(new String[]{}); | ||||
|         final String[] cameraDeviceValues = cameraDeviceValueList.toArray(new String[]{}); | ||||
| 
 | ||||
|         final boolean haveCameraDevices = !supportedCameraIdList.isEmpty(); | ||||
| 
 | ||||
|         String[] imageSourceNames = activity.getResources().getStringArray(R.array.cameraImageSourceNames); | ||||
|         String[] imageSourceValues = activity.getResources().getStringArray(R.array.cameraImageSourceValues); | ||||
|         if (!haveCameraDevices) { | ||||
|             // Remove the last entry (ndk / Device Camera) | ||||
|             imageSourceNames = Arrays.copyOfRange(imageSourceNames, 0, imageSourceNames.length - 1); | ||||
|             imageSourceValues = Arrays.copyOfRange(imageSourceValues, 0, imageSourceValues.length - 1); | ||||
|         } | ||||
| 
 | ||||
|         final String defaultImageSource = haveCameraDevices ? "ndk" : "image"; | ||||
| 
 | ||||
|         SettingSection cameraSection = mSettings.getSection(Settings.SECTION_CAMERA); | ||||
| 
 | ||||
|         Setting innerCameraImageSource = cameraSection.getSetting(SettingsFile.KEY_CAMERA_INNER_NAME); | ||||
|         Setting innerCameraConfig = asStringSetting(cameraSection.getSetting(SettingsFile.KEY_CAMERA_INNER_CONFIG)); | ||||
|         Setting innerCameraFlip = cameraSection.getSetting(SettingsFile.KEY_CAMERA_INNER_FLIP); | ||||
|         sl.add(new HeaderSetting(null, null, R.string.inner_camera, 0)); | ||||
|         sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_CAMERA_INNER_NAME, Settings.SECTION_CAMERA, R.string.image_source, R.string.image_source_description, imageSourceNames, imageSourceValues, defaultImageSource, innerCameraImageSource)); | ||||
|         if (haveCameraDevices) | ||||
|             sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_CAMERA_INNER_CONFIG, Settings.SECTION_CAMERA, R.string.camera_device, R.string.camera_device_description, cameraDeviceNames, cameraDeviceValues, "_front", innerCameraConfig)); | ||||
|         sl.add(new SingleChoiceSetting(SettingsFile.KEY_CAMERA_INNER_FLIP, Settings.SECTION_CAMERA, R.string.image_flip, 0, R.array.cameraFlipNames, R.array.cameraFlipValues, 0, innerCameraFlip)); | ||||
| 
 | ||||
|         Setting outerLeftCameraImageSource = cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_NAME); | ||||
|         Setting outerLeftCameraConfig = asStringSetting(cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_CONFIG)); | ||||
|         Setting outerLeftCameraFlip = cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_FLIP); | ||||
|         sl.add(new HeaderSetting(null, null, R.string.outer_left_camera, 0)); | ||||
|         sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_NAME, Settings.SECTION_CAMERA, R.string.image_source, R.string.image_source_description, imageSourceNames, imageSourceValues, defaultImageSource, outerLeftCameraImageSource)); | ||||
|         if (haveCameraDevices) | ||||
|             sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_CONFIG, Settings.SECTION_CAMERA, R.string.camera_device, R.string.camera_device_description, cameraDeviceNames, cameraDeviceValues, "_back", outerLeftCameraConfig)); | ||||
|         sl.add(new SingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_FLIP, Settings.SECTION_CAMERA, R.string.image_flip, 0, R.array.cameraFlipNames, R.array.cameraFlipValues, 0, outerLeftCameraFlip)); | ||||
| 
 | ||||
|         Setting outerRightCameraImageSource = cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_NAME); | ||||
|         Setting outerRightCameraConfig = asStringSetting(cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_CONFIG)); | ||||
|         Setting outerRightCameraFlip = cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_FLIP); | ||||
|         sl.add(new HeaderSetting(null, null, R.string.outer_right_camera, 0)); | ||||
|         sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_NAME, Settings.SECTION_CAMERA, R.string.image_source, R.string.image_source_description, imageSourceNames, imageSourceValues, defaultImageSource, outerRightCameraImageSource)); | ||||
|         if (haveCameraDevices) | ||||
|             sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_CONFIG, Settings.SECTION_CAMERA, R.string.camera_device, R.string.camera_device_description, cameraDeviceNames, cameraDeviceValues, "_back", outerRightCameraConfig)); | ||||
|         sl.add(new SingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_FLIP, Settings.SECTION_CAMERA, R.string.image_flip, 0, R.array.cameraFlipNames, R.array.cameraFlipValues, 0, outerRightCameraFlip)); | ||||
|     } | ||||
| 
 | ||||
|     private void addInputSettings(ArrayList<SettingsItem> sl) { | ||||
|         mView.getActivity().setTitle(R.string.preferences_controls); | ||||
| 
 | ||||
| @ -382,7 +288,7 @@ public final class SettingsFragmentPresenter { | ||||
|         sl.add(new HeaderSetting(null, null, R.string.utility, 0)); | ||||
|         sl.add(new CheckBoxSetting(SettingsFile.KEY_DUMP_TEXTURES, Settings.SECTION_UTILITY, R.string.dump_textures, R.string.dump_textures_description, false, dumpTextures)); | ||||
|         sl.add(new CheckBoxSetting(SettingsFile.KEY_CUSTOM_TEXTURES, Settings.SECTION_UTILITY, R.string.custom_textures, R.string.custom_textures_description, false, customTextures)); | ||||
|         //Disabled until custom texture implementation gets rewrite, current one overloads RAM and crashes Citra. | ||||
|         //Disabled until custom texture implementation gets rewrite, current one overloads RAM and crashes yuzu. | ||||
|         //sl.add(new CheckBoxSetting(SettingsFile.KEY_PRELOAD_TEXTURES, Settings.SECTION_UTILITY, R.string.preload_textures, R.string.preload_textures_description, false, preloadTextures)); | ||||
|     } | ||||
| 
 | ||||
| @ -1,10 +1,10 @@ | ||||
| package org.citra.citra_emu.features.settings.ui; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui; | ||||
| 
 | ||||
| import androidx.fragment.app.FragmentActivity; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.model.Settings; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Settings; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.ui; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
| @ -1,13 +1,13 @@ | ||||
| package org.citra.citra_emu.features.settings.ui.viewholder; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui.viewholder; | ||||
| 
 | ||||
| import android.view.View; | ||||
| import android.widget.CheckBox; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.view.CheckBoxSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.CheckBoxSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| 
 | ||||
| public final class CheckBoxSettingViewHolder extends SettingViewHolder { | ||||
|     private CheckBoxSetting mItem; | ||||
| @ -1,13 +1,13 @@ | ||||
| package org.citra.citra_emu.features.settings.ui.viewholder; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui.viewholder; | ||||
| 
 | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.view.DateTimeSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.DateTimeSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| public final class DateTimeViewHolder extends SettingViewHolder { | ||||
|     private DateTimeSetting mItem; | ||||
| @ -1,11 +1,11 @@ | ||||
| package org.citra.citra_emu.features.settings.ui.viewholder; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui.viewholder; | ||||
| 
 | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| 
 | ||||
| public final class HeaderViewHolder extends SettingViewHolder { | ||||
|     private TextView mHeaderName; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.features.settings.ui.viewholder; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui.viewholder; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.SharedPreferences; | ||||
| @ -6,10 +6,10 @@ import android.preference.PreferenceManager; | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.InputBindingSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| 
 | ||||
| public final class InputBindingSettingViewHolder extends SettingViewHolder { | ||||
|     private InputBindingSetting mItem; | ||||
| @ -1,13 +1,13 @@ | ||||
| package org.citra.citra_emu.features.settings.ui.viewholder; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui.viewholder; | ||||
| 
 | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsFragmentView; | ||||
| import org.citra.citra_emu.ui.main.MainActivity; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsFragmentView; | ||||
| import org.yuzu.yuzu_emu.ui.main.MainActivity; | ||||
| 
 | ||||
| public final class PremiumViewHolder extends SettingViewHolder { | ||||
|     private TextView mHeaderName; | ||||
| @ -1,11 +1,11 @@ | ||||
| package org.citra.citra_emu.features.settings.ui.viewholder; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui.viewholder; | ||||
| 
 | ||||
| import android.view.View; | ||||
| 
 | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| 
 | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| 
 | ||||
| public abstract class SettingViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { | ||||
|     private SettingsAdapter mAdapter; | ||||
| @ -1,15 +1,15 @@ | ||||
| package org.citra.citra_emu.features.settings.ui.viewholder; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui.viewholder; | ||||
| 
 | ||||
| import android.content.res.Resources; | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.view.PremiumSingleChoiceSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.model.view.SingleChoiceSetting; | ||||
| import org.citra.citra_emu.features.settings.model.view.StringSingleChoiceSetting; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.PremiumSingleChoiceSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SingleChoiceSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.StringSingleChoiceSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| 
 | ||||
| public final class SingleChoiceViewHolder extends SettingViewHolder { | ||||
|     private SettingsItem mItem; | ||||
| @ -1,12 +1,12 @@ | ||||
| package org.citra.citra_emu.features.settings.ui.viewholder; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui.viewholder; | ||||
| 
 | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.model.view.SliderSetting; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SliderSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| 
 | ||||
| public final class SliderViewHolder extends SettingViewHolder { | ||||
|     private SliderSetting mItem; | ||||
| @ -1,12 +1,12 @@ | ||||
| package org.citra.citra_emu.features.settings.ui.viewholder; | ||||
| package org.yuzu.yuzu_emu.features.settings.ui.viewholder; | ||||
| 
 | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.view.SettingsItem; | ||||
| import org.citra.citra_emu.features.settings.model.view.SubmenuSetting; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsAdapter; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.view.SubmenuSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsAdapter; | ||||
| 
 | ||||
| public final class SubmenuViewHolder extends SettingViewHolder { | ||||
|     private SubmenuSetting mItem; | ||||
| @ -1,20 +1,20 @@ | ||||
| package org.citra.citra_emu.features.settings.utils; | ||||
| package org.yuzu.yuzu_emu.features.settings.utils; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.FloatSetting; | ||||
| import org.citra.citra_emu.features.settings.model.IntSetting; | ||||
| import org.citra.citra_emu.features.settings.model.Setting; | ||||
| import org.citra.citra_emu.features.settings.model.SettingSection; | ||||
| import org.citra.citra_emu.features.settings.model.Settings; | ||||
| import org.citra.citra_emu.features.settings.model.StringSetting; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsActivityView; | ||||
| import org.citra.citra_emu.utils.BiMap; | ||||
| import org.citra.citra_emu.utils.DirectoryInitialization; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.FloatSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.IntSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Setting; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.SettingSection; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Settings; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.StringSetting; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivityView; | ||||
| import org.yuzu.yuzu_emu.utils.BiMap; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryInitialization; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| import org.ini4j.Wini; | ||||
| 
 | ||||
| import java.io.BufferedReader; | ||||
| @ -164,11 +164,11 @@ public final class SettingsFile { | ||||
|                 } | ||||
|             } | ||||
|         } catch (FileNotFoundException e) { | ||||
|             Log.error("[SettingsFile] File not found: " + ini.getAbsolutePath() + e.getMessage()); | ||||
|             Log.error("[SettingsFile] File not found: " + e.getMessage()); | ||||
|             if (view != null) | ||||
|                 view.onSettingsFileNotFound(); | ||||
|         } catch (IOException e) { | ||||
|             Log.error("[SettingsFile] Error reading from: " + ini.getAbsolutePath() + e.getMessage()); | ||||
|             Log.error("[SettingsFile] Error reading from: " + e.getMessage()); | ||||
|             if (view != null) | ||||
|                 view.onSettingsFileNotFound(); | ||||
|         } finally { | ||||
| @ -176,7 +176,7 @@ public final class SettingsFile { | ||||
|                 try { | ||||
|                     reader.close(); | ||||
|                 } catch (IOException e) { | ||||
|                     Log.error("[SettingsFile] Error closing: " + ini.getAbsolutePath() + e.getMessage()); | ||||
|                     Log.error("[SettingsFile] Error closing: " +  e.getMessage()); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @ -223,7 +223,7 @@ public final class SettingsFile { | ||||
|             writer.store(); | ||||
|         } catch (IOException e) { | ||||
|             Log.error("[SettingsFile] File not found: " + fileName + ".ini: " + e.getMessage()); | ||||
|             view.showToastMessage(CitraApplication.getAppContext().getString(R.string.error_saving, fileName, e.getMessage()), false); | ||||
|             view.showToastMessage(YuzuApplication.getAppContext().getString(R.string.error_saving, fileName, e.getMessage()), false); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.fragments; | ||||
| package org.yuzu.yuzu_emu.fragments; | ||||
| 
 | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
| @ -14,7 +14,7 @@ import androidx.core.content.FileProvider; | ||||
| 
 | ||||
| import com.nononsenseapps.filepicker.FilePickerFragment; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.util.Arrays; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.fragments; | ||||
| package org.yuzu.yuzu_emu.fragments; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.IntentFilter; | ||||
| @ -22,15 +22,15 @@ import androidx.annotation.NonNull; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import androidx.localbroadcastmanager.content.LocalBroadcastManager; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| import org.citra.citra_emu.overlay.InputOverlay; | ||||
| import org.citra.citra_emu.utils.DirectoryInitialization; | ||||
| import org.citra.citra_emu.utils.DirectoryInitialization.DirectoryInitializationState; | ||||
| import org.citra.citra_emu.utils.DirectoryStateReceiver; | ||||
| import org.citra.citra_emu.utils.EmulationMenuSettings; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.activities.EmulationActivity; | ||||
| import org.yuzu.yuzu_emu.overlay.InputOverlay; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryInitialization; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryInitialization.DirectoryInitializationState; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryStateReceiver; | ||||
| import org.yuzu.yuzu_emu.utils.EmulationMenuSettings; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| public final class EmulationFragment extends Fragment implements SurfaceHolder.Callback, Choreographer.FrameCallback { | ||||
|     private static final String KEY_GAMEPATH = "gamepath"; | ||||
| @ -118,10 +118,10 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C | ||||
|     public void onResume() { | ||||
|         super.onResume(); | ||||
|         Choreographer.getInstance().postFrameCallback(this); | ||||
|         if (DirectoryInitialization.areCitraDirectoriesReady()) { | ||||
|         if (DirectoryInitialization.areDirectoriesReady()) { | ||||
|             mEmulationState.run(activity.isActivityRecreated()); | ||||
|         } else { | ||||
|             setupCitraDirectoriesThenStartEmulation(); | ||||
|             setupDirectoriesThenStartEmulation(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -146,7 +146,7 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C | ||||
|         super.onDetach(); | ||||
|     } | ||||
| 
 | ||||
|     private void setupCitraDirectoriesThenStartEmulation() { | ||||
|     private void setupDirectoriesThenStartEmulation() { | ||||
|         IntentFilter statusIntentFilter = new IntentFilter( | ||||
|                 DirectoryInitialization.BROADCAST_ACTION); | ||||
| 
 | ||||
| @ -154,7 +154,7 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C | ||||
|                 new DirectoryStateReceiver(directoryInitializationState -> | ||||
|                 { | ||||
|                     if (directoryInitializationState == | ||||
|                             DirectoryInitializationState.CITRA_DIRECTORIES_INITIALIZED) { | ||||
|                             DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED) { | ||||
|                         mEmulationState.run(activity.isActivityRecreated()); | ||||
|                     } else if (directoryInitializationState == | ||||
|                             DirectoryInitializationState.EXTERNAL_STORAGE_PERMISSION_NEEDED) { | ||||
| @ -0,0 +1,129 @@ | ||||
| package org.yuzu.yuzu_emu.fragments; | ||||
| 
 | ||||
| import android.content.pm.PackageManager; | ||||
| import android.graphics.Rect; | ||||
| import android.os.Bundle; | ||||
| import android.util.SparseIntArray; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.Button; | ||||
| import android.widget.LinearLayout; | ||||
| 
 | ||||
| import androidx.annotation.ColorInt; | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.core.graphics.Insets; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.view.WindowInsetsCompat; | ||||
| import androidx.fragment.app.Fragment; | ||||
| 
 | ||||
| import com.google.android.material.color.MaterialColors; | ||||
| import com.google.android.material.elevation.ElevationOverlayProvider; | ||||
| 
 | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.activities.EmulationActivity; | ||||
| 
 | ||||
| 
 | ||||
| public final class MenuFragment extends Fragment implements View.OnClickListener | ||||
| { | ||||
|     private static final String KEY_TITLE = "title"; | ||||
|     private static final String KEY_WII = "wii"; | ||||
|     private static SparseIntArray buttonsActionsMap = new SparseIntArray(); | ||||
| 
 | ||||
|     private int mCutInset = 0; | ||||
| 
 | ||||
|     static | ||||
|     { | ||||
|         buttonsActionsMap.append(R.id.menu_exit, EmulationActivity.MENU_ACTION_EXIT); | ||||
|     } | ||||
| 
 | ||||
|     public static MenuFragment newInstance() | ||||
|     { | ||||
|         MenuFragment fragment = new MenuFragment(); | ||||
| 
 | ||||
|         Bundle arguments = new Bundle(); | ||||
|         fragment.setArguments(arguments); | ||||
| 
 | ||||
|         return fragment; | ||||
|     } | ||||
| 
 | ||||
|     // This is primarily intended to account for any navigation bar at the bottom of the screen | ||||
|     private int getBottomPaddingRequired() | ||||
|     { | ||||
|         Rect visibleFrame = new Rect(); | ||||
|         requireActivity().getWindow().getDecorView().getWindowVisibleDisplayFrame(visibleFrame); | ||||
|         return visibleFrame.bottom - visibleFrame.top - getResources().getDisplayMetrics().heightPixels; | ||||
|     } | ||||
| 
 | ||||
|     @NonNull | ||||
|     @Override | ||||
|     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, | ||||
|                              Bundle savedInstanceState) | ||||
|     { | ||||
|         View rootView = inflater.inflate(R.layout.fragment_ingame_menu, container, false); | ||||
| 
 | ||||
|         LinearLayout options = rootView.findViewById(R.id.layout_options); | ||||
| 
 | ||||
| //        mPauseEmulation = options.findViewById(R.id.menu_pause_emulation); | ||||
| //        mUnpauseEmulation = options.findViewById(R.id.menu_unpause_emulation); | ||||
| // | ||||
| //        updatePauseUnpauseVisibility(); | ||||
| // | ||||
| //        if (!requireActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) | ||||
| //        { | ||||
| //            options.findViewById(R.id.menu_overlay_controls).setVisibility(View.GONE); | ||||
| //        } | ||||
| // | ||||
| //        if (!getArguments().getBoolean(KEY_WII, true)) | ||||
| //        { | ||||
| //            options.findViewById(R.id.menu_refresh_wiimotes).setVisibility(View.GONE); | ||||
| //        } | ||||
| 
 | ||||
|         int bottomPaddingRequired = getBottomPaddingRequired(); | ||||
| 
 | ||||
|         // Provide a safe zone between the navigation bar and Exit Emulation to avoid accidental touches | ||||
|         float density = getResources().getDisplayMetrics().density; | ||||
|         if (bottomPaddingRequired >= 32 * density) | ||||
|         { | ||||
|             bottomPaddingRequired += 32 * density; | ||||
|         } | ||||
| 
 | ||||
|         if (bottomPaddingRequired > rootView.getPaddingBottom()) | ||||
|         { | ||||
|             rootView.setPadding(rootView.getPaddingLeft(), rootView.getPaddingTop(), | ||||
|                     rootView.getPaddingRight(), bottomPaddingRequired); | ||||
|         } | ||||
| 
 | ||||
|         for (int childIndex = 0; childIndex < options.getChildCount(); childIndex++) | ||||
|         { | ||||
|             Button button = (Button) options.getChildAt(childIndex); | ||||
| 
 | ||||
|             button.setOnClickListener(this); | ||||
|         } | ||||
| 
 | ||||
|         rootView.findViewById(R.id.menu_exit).setOnClickListener(this); | ||||
| 
 | ||||
| //        mTitleText = rootView.findViewById(R.id.text_game_title); | ||||
| //        String title = getArguments().getString(KEY_TITLE, null); | ||||
| //        if (title != null) | ||||
| //        { | ||||
| //            mTitleText.setText(title); | ||||
| //        } | ||||
| 
 | ||||
|         if (getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_LTR) | ||||
|         { | ||||
| //            rootView.post(() -> NativeLibrary.SetObscuredPixelsLeft(rootView.getWidth())); | ||||
|         } | ||||
| 
 | ||||
|         return rootView; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onClick(View button) | ||||
|     { | ||||
|         int action = buttonsActionsMap.get(button.getId()); | ||||
|         EmulationActivity activity = (EmulationActivity) requireActivity(); | ||||
|         activity.handleMenuAction(action); | ||||
|     } | ||||
| } | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.model; | ||||
| package org.yuzu.yuzu_emu.model; | ||||
| 
 | ||||
| import android.content.ContentValues; | ||||
| import android.database.Cursor; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.model; | ||||
| package org.yuzu.yuzu_emu.model; | ||||
| 
 | ||||
| import android.content.ContentValues; | ||||
| import android.content.Context; | ||||
| @ -6,8 +6,8 @@ import android.database.Cursor; | ||||
| import android.database.sqlite.SQLiteDatabase; | ||||
| import android.database.sqlite.SQLiteOpenHelper; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.util.Arrays; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.model; | ||||
| package org.yuzu.yuzu_emu.model; | ||||
| 
 | ||||
| import android.content.ContentProvider; | ||||
| import android.content.ContentValues; | ||||
| @ -8,8 +8,8 @@ import android.net.Uri; | ||||
| 
 | ||||
| import androidx.annotation.NonNull; | ||||
| 
 | ||||
| import org.citra.citra_emu.BuildConfig; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.BuildConfig; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| /** | ||||
|  * Provides an interface allowing Activities to interact with the SQLite database. | ||||
| @ -4,7 +4,7 @@ | ||||
|  * Refer to the license.txt file included. | ||||
|  */ | ||||
| 
 | ||||
| package org.citra.citra_emu.overlay; | ||||
| package org.yuzu.yuzu_emu.overlay; | ||||
| 
 | ||||
| import android.app.Activity; | ||||
| import android.content.Context; | ||||
| @ -25,11 +25,11 @@ import android.view.SurfaceView; | ||||
| import android.view.View; | ||||
| import android.view.View.OnTouchListener; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.citra.citra_emu.NativeLibrary.ButtonState; | ||||
| import org.citra.citra_emu.NativeLibrary.ButtonType; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.utils.EmulationMenuSettings; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary.ButtonState; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary.ButtonType; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.utils.EmulationMenuSettings; | ||||
| 
 | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
| @ -117,7 +117,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener { | ||||
|      * within a SharedPreferences instance so that those values can be retrieved here. | ||||
|      * <p> | ||||
|      * This has a few benefits over the conventional way of storing the values | ||||
|      * (ie. within the Citra ini file). | ||||
|      * (ie. within the yuzu ini file). | ||||
|      * <ul> | ||||
|      * <li>No native calls</li> | ||||
|      * <li>Keeps Android-only values inside the Android environment</li> | ||||
| @ -4,7 +4,7 @@ | ||||
|  * Refer to the license.txt file included. | ||||
|  */ | ||||
| 
 | ||||
| package org.citra.citra_emu.overlay; | ||||
| package org.yuzu.yuzu_emu.overlay; | ||||
| 
 | ||||
| import android.content.res.Resources; | ||||
| import android.graphics.Bitmap; | ||||
| @ -4,7 +4,7 @@ | ||||
|  * Refer to the license.txt file included. | ||||
|  */ | ||||
| 
 | ||||
| package org.citra.citra_emu.overlay; | ||||
| package org.yuzu.yuzu_emu.overlay; | ||||
| 
 | ||||
| import android.content.res.Resources; | ||||
| import android.graphics.Bitmap; | ||||
| @ -4,7 +4,7 @@ | ||||
|  * Refer to the license.txt file included. | ||||
|  */ | ||||
| 
 | ||||
| package org.citra.citra_emu.overlay; | ||||
| package org.yuzu.yuzu_emu.overlay; | ||||
| 
 | ||||
| import android.content.res.Resources; | ||||
| import android.graphics.Bitmap; | ||||
| @ -13,8 +13,8 @@ import android.graphics.Rect; | ||||
| import android.graphics.drawable.BitmapDrawable; | ||||
| import android.view.MotionEvent; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary.ButtonType; | ||||
| import org.citra.citra_emu.utils.EmulationMenuSettings; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary.ButtonType; | ||||
| import org.yuzu.yuzu_emu.utils.EmulationMenuSettings; | ||||
| 
 | ||||
| /** | ||||
|  * Custom {@link BitmapDrawable} that is capable | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.ui; | ||||
| package org.yuzu.yuzu_emu.ui; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.ui; | ||||
| package org.yuzu.yuzu_emu.ui; | ||||
| 
 | ||||
| import android.view.View; | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.ui.main; | ||||
| package org.yuzu.yuzu_emu.ui.main; | ||||
| 
 | ||||
| import android.content.Intent; | ||||
| import android.content.pm.PackageManager; | ||||
| @ -12,19 +12,19 @@ import androidx.annotation.NonNull; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.appcompat.widget.Toolbar; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| import org.citra.citra_emu.features.settings.ui.SettingsActivity; | ||||
| import org.citra.citra_emu.model.GameProvider; | ||||
| import org.citra.citra_emu.ui.platform.PlatformGamesFragment; | ||||
| import org.citra.citra_emu.utils.AddDirectoryHelper; | ||||
| import org.citra.citra_emu.utils.BillingManager; | ||||
| import org.citra.citra_emu.utils.DirectoryInitialization; | ||||
| import org.citra.citra_emu.utils.FileBrowserHelper; | ||||
| import org.citra.citra_emu.utils.PermissionsHandler; | ||||
| import org.citra.citra_emu.utils.PicassoUtils; | ||||
| import org.citra.citra_emu.utils.StartupHandler; | ||||
| import org.citra.citra_emu.utils.ThemeUtil; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.activities.EmulationActivity; | ||||
| import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivity; | ||||
| import org.yuzu.yuzu_emu.model.GameProvider; | ||||
| import org.yuzu.yuzu_emu.ui.platform.PlatformGamesFragment; | ||||
| import org.yuzu.yuzu_emu.utils.AddDirectoryHelper; | ||||
| import org.yuzu.yuzu_emu.utils.BillingManager; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryInitialization; | ||||
| import org.yuzu.yuzu_emu.utils.FileBrowserHelper; | ||||
| import org.yuzu.yuzu_emu.utils.PermissionsHandler; | ||||
| import org.yuzu.yuzu_emu.utils.PicassoUtils; | ||||
| import org.yuzu.yuzu_emu.utils.StartupHandler; | ||||
| import org.yuzu.yuzu_emu.utils.ThemeUtil; | ||||
| 
 | ||||
| import java.util.Arrays; | ||||
| import java.util.Collections; | ||||
| @ -1,14 +1,14 @@ | ||||
| package org.citra.citra_emu.ui.main; | ||||
| package org.yuzu.yuzu_emu.ui.main; | ||||
| 
 | ||||
| import android.os.SystemClock; | ||||
| 
 | ||||
| import org.citra.citra_emu.BuildConfig; | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.model.Settings; | ||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||
| import org.citra.citra_emu.model.GameDatabase; | ||||
| import org.citra.citra_emu.utils.AddDirectoryHelper; | ||||
| import org.yuzu.yuzu_emu.BuildConfig; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.model.Settings; | ||||
| import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile; | ||||
| import org.yuzu.yuzu_emu.model.GameDatabase; | ||||
| import org.yuzu.yuzu_emu.utils.AddDirectoryHelper; | ||||
| 
 | ||||
| public final class MainPresenter { | ||||
|     public static final int REQUEST_ADD_DIRECTORY = 1; | ||||
| @ -75,7 +75,7 @@ public final class MainPresenter { | ||||
|     } | ||||
| 
 | ||||
|     public void refeshGameList() { | ||||
|         GameDatabase databaseHelper = CitraApplication.databaseHelper; | ||||
|         GameDatabase databaseHelper = YuzuApplication.databaseHelper; | ||||
|         databaseHelper.scanLibrary(databaseHelper.getWritableDatabase()); | ||||
|         mView.refresh(); | ||||
|     } | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.ui.main; | ||||
| package org.yuzu.yuzu_emu.ui.main; | ||||
| 
 | ||||
| /** | ||||
|  * Abstraction for the screen that shows on application launch. | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.ui.platform; | ||||
| package org.yuzu.yuzu_emu.ui.platform; | ||||
| 
 | ||||
| import android.database.Cursor; | ||||
| import android.os.Bundle; | ||||
| @ -13,10 +13,10 @@ import androidx.recyclerview.widget.GridLayoutManager; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.adapters.GameAdapter; | ||||
| import org.citra.citra_emu.model.GameDatabase; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.adapters.GameAdapter; | ||||
| import org.yuzu.yuzu_emu.model.GameDatabase; | ||||
| 
 | ||||
| public final class PlatformGamesFragment extends Fragment implements PlatformGamesView { | ||||
|     private PlatformGamesPresenter mPresenter = new PlatformGamesPresenter(this); | ||||
| @ -54,7 +54,7 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam | ||||
|         // Add swipe down to refresh gesture | ||||
|         final SwipeRefreshLayout pullToRefresh = view.findViewById(R.id.refresh_grid_games); | ||||
|         pullToRefresh.setOnRefreshListener(() -> { | ||||
|             GameDatabase databaseHelper = CitraApplication.databaseHelper; | ||||
|             GameDatabase databaseHelper = YuzuApplication.databaseHelper; | ||||
|             databaseHelper.scanLibrary(databaseHelper.getWritableDatabase()); | ||||
|             refresh(); | ||||
|             pullToRefresh.setRefreshing(false); | ||||
| @ -1,9 +1,9 @@ | ||||
| package org.citra.citra_emu.ui.platform; | ||||
| package org.yuzu.yuzu_emu.ui.platform; | ||||
| 
 | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.model.GameDatabase; | ||||
| import org.citra.citra_emu.utils.Log; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.model.GameDatabase; | ||||
| import org.yuzu.yuzu_emu.utils.Log; | ||||
| 
 | ||||
| import rx.android.schedulers.AndroidSchedulers; | ||||
| import rx.schedulers.Schedulers; | ||||
| @ -27,7 +27,7 @@ public final class PlatformGamesPresenter { | ||||
|     private void loadGames() { | ||||
|         Log.debug("[PlatformGamesPresenter] : Loading games..."); | ||||
| 
 | ||||
|         GameDatabase databaseHelper = CitraApplication.databaseHelper; | ||||
|         GameDatabase databaseHelper = YuzuApplication.databaseHelper; | ||||
| 
 | ||||
|         databaseHelper.getGames() | ||||
|                 .subscribeOn(Schedulers.io()) | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.ui.platform; | ||||
| package org.yuzu.yuzu_emu.ui.platform; | ||||
| 
 | ||||
| import android.database.Cursor; | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| public interface Action1<T> { | ||||
|     void call(T t); | ||||
| @ -1,12 +1,12 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.content.AsyncQueryHandler; | ||||
| import android.content.ContentValues; | ||||
| import android.content.Context; | ||||
| import android.net.Uri; | ||||
| 
 | ||||
| import org.citra.citra_emu.model.GameDatabase; | ||||
| import org.citra.citra_emu.model.GameProvider; | ||||
| import org.yuzu.yuzu_emu.model.GameDatabase; | ||||
| import org.yuzu.yuzu_emu.model.GameProvider; | ||||
| 
 | ||||
| public class AddDirectoryHelper { | ||||
|     private Context mContext; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.app.Activity; | ||||
| import android.content.SharedPreferences; | ||||
| @ -17,16 +17,16 @@ import com.android.billingclient.api.PurchasesUpdatedListener; | ||||
| import com.android.billingclient.api.SkuDetails; | ||||
| import com.android.billingclient.api.SkuDetailsParams; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||
| import org.citra.citra_emu.ui.main.MainActivity; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile; | ||||
| import org.yuzu.yuzu_emu.ui.main.MainActivity; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| 
 | ||||
| public class BillingManager implements PurchasesUpdatedListener { | ||||
|     private final String BILLING_SKU_PREMIUM = "citra.citra_emu.product_id.premium"; | ||||
|     private final String BILLING_SKU_PREMIUM = "yuzu.yuzu_emu.product_id.premium"; | ||||
| 
 | ||||
|     private final Activity mActivity; | ||||
|     private BillingClient mBillingClient; | ||||
| @ -35,7 +35,7 @@ public class BillingManager implements PurchasesUpdatedListener { | ||||
|     private boolean mIsServiceConnected = false; | ||||
|     private Runnable mUpdateBillingCallback; | ||||
| 
 | ||||
|     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | ||||
| 
 | ||||
|     public BillingManager(Activity activity) { | ||||
|         mActivity = activity; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.view.InputDevice; | ||||
| import android.view.KeyEvent; | ||||
| @ -4,7 +4,7 @@ | ||||
|  * Refer to the license.txt file included. | ||||
|  */ | ||||
| 
 | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| @ -14,7 +14,7 @@ import android.preference.PreferenceManager; | ||||
| 
 | ||||
| import androidx.localbroadcastmanager.content.LocalBroadcastManager; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.FileOutputStream; | ||||
| @ -25,15 +25,15 @@ import java.util.concurrent.atomic.AtomicBoolean; | ||||
| 
 | ||||
| /** | ||||
|  * A service that spawns its own thread in order to copy several binary and shader files | ||||
|  * from the Citra APK to the external file system. | ||||
|  * from the yuzu APK to the external file system. | ||||
|  */ | ||||
| public final class DirectoryInitialization { | ||||
|     public static final String BROADCAST_ACTION = "org.citra.citra_emu.BROADCAST"; | ||||
|     public static final String BROADCAST_ACTION = "org.yuzu.yuzu_emu.BROADCAST"; | ||||
| 
 | ||||
|     public static final String EXTRA_STATE = "directoryState"; | ||||
|     private static volatile DirectoryInitializationState directoryState = null; | ||||
|     private static String userPath; | ||||
|     private static AtomicBoolean isCitraDirectoryInitializationRunning = new AtomicBoolean(false); | ||||
|     private static AtomicBoolean isDirectoryInitializationRunning = new AtomicBoolean(false); | ||||
| 
 | ||||
|     public static void start(Context context) { | ||||
|         // Can take a few seconds to run, so don't block UI thread. | ||||
| @ -42,15 +42,15 @@ public final class DirectoryInitialization { | ||||
|     } | ||||
| 
 | ||||
|     private static void init(Context context) { | ||||
|         if (!isCitraDirectoryInitializationRunning.compareAndSet(false, true)) | ||||
|         if (!isDirectoryInitializationRunning.compareAndSet(false, true)) | ||||
|             return; | ||||
| 
 | ||||
|         if (directoryState != DirectoryInitializationState.CITRA_DIRECTORIES_INITIALIZED) { | ||||
|         if (directoryState != DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED) { | ||||
|             if (PermissionsHandler.hasWriteAccess(context)) { | ||||
|                 if (setCitraUserDirectory()) { | ||||
|                 if (setUserDirectory()) { | ||||
|                     initializeInternalStorage(context); | ||||
|                     NativeLibrary.CreateConfigFile(); | ||||
|                     directoryState = DirectoryInitializationState.CITRA_DIRECTORIES_INITIALIZED; | ||||
|                     directoryState = DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED; | ||||
|                 } else { | ||||
|                     directoryState = DirectoryInitializationState.CANT_FIND_EXTERNAL_STORAGE; | ||||
|                 } | ||||
| @ -59,7 +59,7 @@ public final class DirectoryInitialization { | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         isCitraDirectoryInitializationRunning.set(false); | ||||
|         isDirectoryInitializationRunning.set(false); | ||||
|         sendBroadcastState(directoryState, context); | ||||
|     } | ||||
| 
 | ||||
| @ -71,14 +71,14 @@ public final class DirectoryInitialization { | ||||
|         file.delete(); | ||||
|     } | ||||
| 
 | ||||
|     public static boolean areCitraDirectoriesReady() { | ||||
|         return directoryState == DirectoryInitializationState.CITRA_DIRECTORIES_INITIALIZED; | ||||
|     public static boolean areDirectoriesReady() { | ||||
|         return directoryState == DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED; | ||||
|     } | ||||
| 
 | ||||
|     public static String getUserDirectory() { | ||||
|         if (directoryState == null) { | ||||
|             throw new IllegalStateException("DirectoryInitialization has to run at least once!"); | ||||
|         } else if (isCitraDirectoryInitializationRunning.get()) { | ||||
|         } else if (isDirectoryInitializationRunning.get()) { | ||||
|             throw new IllegalStateException( | ||||
|                     "DirectoryInitialization has to finish running first!"); | ||||
|         } | ||||
| @ -87,11 +87,11 @@ public final class DirectoryInitialization { | ||||
| 
 | ||||
|     private static native void SetSysDirectory(String path); | ||||
| 
 | ||||
|     private static boolean setCitraUserDirectory() { | ||||
|     private static boolean setUserDirectory() { | ||||
|         if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { | ||||
|             File externalPath = Environment.getExternalStorageDirectory(); | ||||
|             if (externalPath != null) { | ||||
|                 userPath = externalPath.getAbsolutePath() + "/citra-emu"; | ||||
|                 userPath = externalPath.getAbsolutePath() + "/yuzu-emu"; | ||||
|                 Log.debug("[DirectoryInitialization] User Dir: " + userPath); | ||||
|                 // NativeLibrary.SetUserDirectory(userPath); | ||||
|                 return true; | ||||
| @ -109,7 +109,7 @@ public final class DirectoryInitialization { | ||||
|         String revision = NativeLibrary.GetGitRevision(); | ||||
|         if (!preferences.getString("sysDirectoryVersion", "").equals(revision)) { | ||||
|             // There is no extracted Sys directory, or there is a Sys directory from another | ||||
|             // version of Citra that might contain outdated files. Let's (re-)extract Sys. | ||||
|             // version of yuzu that might contain outdated files. Let's (re-)extract Sys. | ||||
|             deleteDirectoryRecursively(sysDirectory); | ||||
|             copyAssetFolder("Sys", sysDirectory, true, context); | ||||
| 
 | ||||
| @ -179,7 +179,7 @@ public final class DirectoryInitialization { | ||||
|     } | ||||
| 
 | ||||
|     public enum DirectoryInitializationState { | ||||
|         CITRA_DIRECTORIES_INITIALIZED, | ||||
|         YUZU_DIRECTORIES_INITIALIZED, | ||||
|         EXTERNAL_STORAGE_PERMISSION_NEEDED, | ||||
|         CANT_FIND_EXTERNAL_STORAGE | ||||
|     } | ||||
| @ -1,10 +1,10 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.content.BroadcastReceiver; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| 
 | ||||
| import org.citra.citra_emu.utils.DirectoryInitialization.DirectoryInitializationState; | ||||
| import org.yuzu.yuzu_emu.utils.DirectoryInitialization.DirectoryInitializationState; | ||||
| 
 | ||||
| public class DirectoryStateReceiver extends BroadcastReceiver { | ||||
|     Action1<DirectoryInitializationState> callback; | ||||
| @ -1,12 +1,12 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.content.SharedPreferences; | ||||
| import android.preference.PreferenceManager; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| 
 | ||||
| public class EmulationMenuSettings { | ||||
|     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | ||||
| 
 | ||||
|     // These must match what is defined in src/core/settings.h | ||||
|     public static final int LayoutOption_Default = 0; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.content.Intent; | ||||
| import android.net.Uri; | ||||
| @ -10,7 +10,7 @@ import androidx.fragment.app.FragmentActivity; | ||||
| import com.nononsenseapps.filepicker.FilePickerActivity; | ||||
| import com.nononsenseapps.filepicker.Utils; | ||||
| 
 | ||||
| import org.citra.citra_emu.activities.CustomFilePickerActivity; | ||||
| import org.yuzu.yuzu_emu.activities.CustomFilePickerActivity; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.util.List; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.FileInputStream; | ||||
| @ -4,7 +4,7 @@ | ||||
|  * Refer to the license.txt file included. | ||||
|  */ | ||||
| 
 | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.app.PendingIntent; | ||||
| import android.app.Service; | ||||
| @ -14,8 +14,8 @@ import android.os.IBinder; | ||||
| import androidx.core.app.NotificationCompat; | ||||
| import androidx.core.app.NotificationManagerCompat; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.activities.EmulationActivity; | ||||
| 
 | ||||
| /** | ||||
|  * A service that shows a permanent notification in the background to avoid the app getting | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.graphics.Bitmap; | ||||
| 
 | ||||
| @ -6,7 +6,7 @@ import com.squareup.picasso.Picasso; | ||||
| import com.squareup.picasso.Request; | ||||
| import com.squareup.picasso.RequestHandler; | ||||
| 
 | ||||
| import org.citra.citra_emu.NativeLibrary; | ||||
| import org.yuzu.yuzu_emu.NativeLibrary; | ||||
| 
 | ||||
| import java.nio.IntBuffer; | ||||
| 
 | ||||
| @ -1,6 +1,6 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import org.citra.citra_emu.BuildConfig; | ||||
| import org.yuzu.yuzu_emu.BuildConfig; | ||||
| 
 | ||||
| /** | ||||
|  * Contains methods that call through to {@link android.util.Log}, but | ||||
| @ -8,7 +8,7 @@ import org.citra.citra_emu.BuildConfig; | ||||
|  * levels in release builds. | ||||
|  */ | ||||
| public final class Log { | ||||
|     private static final String TAG = "Citra Frontend"; | ||||
|     private static final String TAG = "Yuzu Frontend"; | ||||
| 
 | ||||
|     private Log() { | ||||
|     } | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.annotation.TargetApi; | ||||
| import android.content.Context; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.graphics.Bitmap; | ||||
| import android.graphics.BitmapShader; | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.graphics.Bitmap; | ||||
| import android.net.Uri; | ||||
| @ -6,8 +6,8 @@ import android.widget.ImageView; | ||||
| 
 | ||||
| import com.squareup.picasso.Picasso; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.R; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| @ -20,7 +20,7 @@ public class PicassoUtils { | ||||
|         if (mPicassoInitialized) { | ||||
|             return; | ||||
|         } | ||||
|         Picasso picassoInstance = new Picasso.Builder(CitraApplication.getAppContext()) | ||||
|         Picasso picassoInstance = new Picasso.Builder(YuzuApplication.getAppContext()) | ||||
|                 .addRequestHandler(new GameIconRequestHandler()) | ||||
|                 .build(); | ||||
| 
 | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.content.Intent; | ||||
| import android.os.Bundle; | ||||
| @ -7,8 +7,8 @@ import android.text.TextUtils; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.fragment.app.FragmentActivity; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.citra.citra_emu.activities.EmulationActivity; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| import org.yuzu.yuzu_emu.activities.EmulationActivity; | ||||
| 
 | ||||
| public final class StartupHandler { | ||||
|     private static void handlePermissionsCheck(FragmentActivity parent) { | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.utils; | ||||
| package org.yuzu.yuzu_emu.utils; | ||||
| 
 | ||||
| import android.content.SharedPreferences; | ||||
| import android.os.Build; | ||||
| @ -6,11 +6,11 @@ import android.preference.PreferenceManager; | ||||
| 
 | ||||
| import androidx.appcompat.app.AppCompatDelegate; | ||||
| 
 | ||||
| import org.citra.citra_emu.CitraApplication; | ||||
| import org.citra.citra_emu.features.settings.utils.SettingsFile; | ||||
| import org.yuzu.yuzu_emu.YuzuApplication; | ||||
| import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile; | ||||
| 
 | ||||
| public class ThemeUtil { | ||||
|     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext()); | ||||
|     private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | ||||
| 
 | ||||
|     private static void applyTheme(int designValue) { | ||||
|         switch (designValue) { | ||||
| @ -1,4 +1,4 @@ | ||||
| package org.citra.citra_emu.viewholders; | ||||
| package org.yuzu.yuzu_emu.viewholders; | ||||
| 
 | ||||
| import android.view.View; | ||||
| import android.widget.ImageView; | ||||
| @ -6,7 +6,7 @@ import android.widget.TextView; | ||||
| 
 | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| 
 | ||||
| import org.citra.citra_emu.R; | ||||
| import org.yuzu.yuzu_emu.R; | ||||
| 
 | ||||
| /** | ||||
|  * A simple class that stores references to views so that the GameAdapter doesn't need to | ||||
| @ -110,7 +110,7 @@ static Core::SystemResultStatus RunEmulation(const std::string& filepath) { | ||||
| 
 | ||||
| extern "C" { | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, | ||||
|                                                             [[maybe_unused]] jclass clazz, | ||||
|                                                             jobject surf) { | ||||
|     s_surf = ANativeWindow_fromSurface(env, surf); | ||||
| @ -122,7 +122,7 @@ void Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, | ||||
|     LOG_INFO(Frontend, "surface changed"); | ||||
| } | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, | ||||
|                                                               [[maybe_unused]] jclass clazz) { | ||||
|     ANativeWindow_release(s_surf); | ||||
|     s_surf = nullptr; | ||||
| @ -131,32 +131,32 @@ void Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_DoFrame(JNIEnv* env, [[maybe_unused]] jclass clazz) {} | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_DoFrame(JNIEnv* env, [[maybe_unused]] jclass clazz) {} | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_NotifyOrientationChange(JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_NotifyOrientationChange(JNIEnv* env, | ||||
|                                                                      [[maybe_unused]] jclass clazz, | ||||
|                                                                      jint layout_option, | ||||
|                                                                      jint rotation) {} | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory( | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_SetUserDirectory( | ||||
|     [[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, | ||||
|     [[maybe_unused]] jstring j_directory) {} | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_UnPauseEmulation([[maybe_unused]] JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_UnPauseEmulation([[maybe_unused]] JNIEnv* env, | ||||
|                                                               [[maybe_unused]] jclass clazz) {} | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_PauseEmulation([[maybe_unused]] JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_PauseEmulation([[maybe_unused]] JNIEnv* env, | ||||
|                                                             [[maybe_unused]] jclass clazz) {} | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_StopEmulation([[maybe_unused]] JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_StopEmulation([[maybe_unused]] JNIEnv* env, | ||||
|                                                            [[maybe_unused]] jclass clazz) {} | ||||
| 
 | ||||
| jboolean Java_org_citra_citra_1emu_NativeLibrary_IsRunning([[maybe_unused]] JNIEnv* env, | ||||
| jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_IsRunning([[maybe_unused]] JNIEnv* env, | ||||
|                                                            [[maybe_unused]] jclass clazz) { | ||||
|     return static_cast<jboolean>(!stop_run); | ||||
| } | ||||
| 
 | ||||
| jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadEvent([[maybe_unused]] JNIEnv* env, | ||||
| jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_onGamePadEvent([[maybe_unused]] JNIEnv* env, | ||||
|                                                                 [[maybe_unused]] jclass clazz, | ||||
|                                                                 [[maybe_unused]] jstring j_device, | ||||
|                                                                 jint j_button, jint action) { | ||||
| @ -164,7 +164,7 @@ jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadEvent([[maybe_unused]] | ||||
|     return static_cast<jboolean>(true); | ||||
| } | ||||
| 
 | ||||
| jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadMoveEvent([[maybe_unused]] JNIEnv* env, | ||||
| jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_onGamePadMoveEvent([[maybe_unused]] JNIEnv* env, | ||||
|                                                                     [[maybe_unused]] jclass clazz, | ||||
|                                                                     jstring j_device, jint axis, | ||||
|                                                                     jfloat x, jfloat y) { | ||||
| @ -183,83 +183,83 @@ jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadMoveEvent([[maybe_unus | ||||
|     return static_cast<jboolean>(false); | ||||
| } | ||||
| 
 | ||||
| jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadAxisEvent([[maybe_unused]] JNIEnv* env, | ||||
| jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_onGamePadAxisEvent([[maybe_unused]] JNIEnv* env, | ||||
|                                                                     [[maybe_unused]] jclass clazz, | ||||
|                                                                     jstring j_device, jint axis_id, | ||||
|                                                                     jfloat axis_val) { | ||||
|     return {}; | ||||
| } | ||||
| 
 | ||||
| jboolean Java_org_citra_citra_1emu_NativeLibrary_onTouchEvent([[maybe_unused]] JNIEnv* env, | ||||
| jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_onTouchEvent([[maybe_unused]] JNIEnv* env, | ||||
|                                                               [[maybe_unused]] jclass clazz, | ||||
|                                                               jfloat x, jfloat y, | ||||
|                                                               jboolean pressed) { | ||||
|     return static_cast<jboolean>(emu_window->OnTouchEvent(x, y, pressed)); | ||||
| } | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_onTouchMoved([[maybe_unused]] JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_onTouchMoved([[maybe_unused]] JNIEnv* env, | ||||
|                                                           [[maybe_unused]] jclass clazz, jfloat x, | ||||
|                                                           jfloat y) { | ||||
|     emu_window->OnTouchMoved(x, y); | ||||
| } | ||||
| 
 | ||||
| jintArray Java_org_citra_citra_1emu_NativeLibrary_GetIcon([[maybe_unused]] JNIEnv* env, | ||||
| jintArray Java_org_yuzu_yuzu_1emu_NativeLibrary_GetIcon([[maybe_unused]] JNIEnv* env, | ||||
|                                                           [[maybe_unused]] jclass clazz, | ||||
|                                                           [[maybe_unused]] jstring j_file) { | ||||
|     return {}; | ||||
| } | ||||
| 
 | ||||
| jstring Java_org_citra_citra_1emu_NativeLibrary_GetTitle([[maybe_unused]] JNIEnv* env, | ||||
| jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_GetTitle([[maybe_unused]] JNIEnv* env, | ||||
|                                                          [[maybe_unused]] jclass clazz, | ||||
|                                                          [[maybe_unused]] jstring j_filename) { | ||||
|     return env->NewStringUTF(""); | ||||
| } | ||||
| 
 | ||||
| jstring Java_org_citra_citra_1emu_NativeLibrary_GetDescription([[maybe_unused]] JNIEnv* env, | ||||
| jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_GetDescription([[maybe_unused]] JNIEnv* env, | ||||
|                                                                [[maybe_unused]] jclass clazz, | ||||
|                                                                jstring j_filename) { | ||||
|     return j_filename; | ||||
| } | ||||
| 
 | ||||
| jstring Java_org_citra_citra_1emu_NativeLibrary_GetGameId([[maybe_unused]] JNIEnv* env, | ||||
| jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_GetGameId([[maybe_unused]] JNIEnv* env, | ||||
|                                                           [[maybe_unused]] jclass clazz, | ||||
|                                                           jstring j_filename) { | ||||
|     return j_filename; | ||||
| } | ||||
| 
 | ||||
| jstring Java_org_citra_citra_1emu_NativeLibrary_GetRegions([[maybe_unused]] JNIEnv* env, | ||||
| jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_GetRegions([[maybe_unused]] JNIEnv* env, | ||||
|                                                            [[maybe_unused]] jclass clazz, | ||||
|                                                            [[maybe_unused]] jstring j_filename) { | ||||
|     return env->NewStringUTF(""); | ||||
| } | ||||
| 
 | ||||
| jstring Java_org_citra_citra_1emu_NativeLibrary_GetCompany([[maybe_unused]] JNIEnv* env, | ||||
| jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_GetCompany([[maybe_unused]] JNIEnv* env, | ||||
|                                                            [[maybe_unused]] jclass clazz, | ||||
|                                                            [[maybe_unused]] jstring j_filename) { | ||||
|     return env->NewStringUTF(""); | ||||
| } | ||||
| 
 | ||||
| jstring Java_org_citra_citra_1emu_NativeLibrary_GetGitRevision([[maybe_unused]] JNIEnv* env, | ||||
| jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_GetGitRevision([[maybe_unused]] JNIEnv* env, | ||||
|                                                                [[maybe_unused]] jclass clazz) { | ||||
|     return {}; | ||||
| } | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_CreateConfigFile | ||||
|     [[maybe_unused]] (JNIEnv* env, [[maybe_unused]] jclass clazz) {} | ||||
| 
 | ||||
| jint Java_org_citra_citra_1emu_NativeLibrary_DefaultCPUCore([[maybe_unused]] JNIEnv* env, | ||||
| jint Java_org_yuzu_yuzu_1emu_NativeLibrary_DefaultCPUCore([[maybe_unused]] JNIEnv* env, | ||||
|                                                             [[maybe_unused]] jclass clazz) { | ||||
|     return {}; | ||||
| } | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2Ljava_lang_String_2Z( | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_Run__Ljava_lang_String_2Ljava_lang_String_2Z( | ||||
|     [[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, [[maybe_unused]] jstring j_file, | ||||
|     [[maybe_unused]] jstring j_savestate, [[maybe_unused]] jboolean j_delete_savestate) {} | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_ReloadSettings([[maybe_unused]] JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_ReloadSettings([[maybe_unused]] JNIEnv* env, | ||||
|                                                             [[maybe_unused]] jclass clazz) {} | ||||
| 
 | ||||
| jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting([[maybe_unused]] JNIEnv* env, | ||||
| jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_GetUserSetting([[maybe_unused]] JNIEnv* env, | ||||
|                                                                [[maybe_unused]] jclass clazz, | ||||
|                                                                jstring j_game_id, jstring j_section, | ||||
|                                                                jstring j_key) { | ||||
| @ -274,7 +274,7 @@ jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting([[maybe_unused]] | ||||
|     return env->NewStringUTF(""); | ||||
| } | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_SetUserSetting([[maybe_unused]] JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_SetUserSetting([[maybe_unused]] JNIEnv* env, | ||||
|                                                             [[maybe_unused]] jclass clazz, | ||||
|                                                             jstring j_game_id, jstring j_section, | ||||
|                                                             jstring j_key, jstring j_value) { | ||||
| @ -289,7 +289,7 @@ void Java_org_citra_citra_1emu_NativeLibrary_SetUserSetting([[maybe_unused]] JNI | ||||
|     env->ReleaseStringUTFChars(j_value, value.data()); | ||||
| } | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_InitGameIni([[maybe_unused]] JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_InitGameIni([[maybe_unused]] JNIEnv* env, | ||||
|                                                          [[maybe_unused]] jclass clazz, | ||||
|                                                          jstring j_game_id) { | ||||
|     std::string_view game_id = env->GetStringUTFChars(j_game_id, 0); | ||||
| @ -297,7 +297,7 @@ void Java_org_citra_citra_1emu_NativeLibrary_InitGameIni([[maybe_unused]] JNIEnv | ||||
|     env->ReleaseStringUTFChars(j_game_id, game_id.data()); | ||||
| } | ||||
| 
 | ||||
| jdoubleArray Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats([[maybe_unused]] JNIEnv* env, | ||||
| jdoubleArray Java_org_yuzu_yuzu_1emu_NativeLibrary_GetPerfStats([[maybe_unused]] JNIEnv* env, | ||||
|                                                                   [[maybe_unused]] jclass clazz) { | ||||
|     jdoubleArray j_stats = env->NewDoubleArray(4); | ||||
| 
 | ||||
| @ -314,10 +314,10 @@ jdoubleArray Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats([[maybe_unused | ||||
|     return j_stats; | ||||
| } | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_utils_DirectoryInitialization_SetSysDirectory( | ||||
| void Java_org_yuzu_yuzu_1emu_utils_DirectoryInitialization_SetSysDirectory( | ||||
|     [[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jstring j_path) {} | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2([[maybe_unused]] JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_Run__Ljava_lang_String_2([[maybe_unused]] JNIEnv* env, | ||||
|                                                                       [[maybe_unused]] jclass clazz, | ||||
|                                                                       jstring j_path) { | ||||
|     const std::string path = GetJString(env, j_path); | ||||
| @ -333,7 +333,7 @@ void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2([[maybe_un | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Java_org_citra_citra_1emu_NativeLibrary_LogDeviceInfo([[maybe_unused]] JNIEnv* env, | ||||
| void Java_org_yuzu_yuzu_1emu_NativeLibrary_LogDeviceInfo([[maybe_unused]] JNIEnv* env, | ||||
|                                                            [[maybe_unused]] jclass clazz) { | ||||
|     LOG_INFO(Frontend, "yuzu Version: {}-{}", Common::g_scm_branch, Common::g_scm_desc); | ||||
|     LOG_INFO(Frontend, "Host OS: Android API level {}", android_get_device_api_level()); | ||||
|  | ||||
| @ -7,119 +7,119 @@ | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_UnPauseEmulation(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_UnPauseEmulation(JNIEnv* env, | ||||
|                                                                                 jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_PauseEmulation(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_PauseEmulation(JNIEnv* env, | ||||
|                                                                               jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_StopEmulation(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_StopEmulation(JNIEnv* env, | ||||
|                                                                              jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_IsRunning(JNIEnv* env, | ||||
| JNIEXPORT jboolean JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_IsRunning(JNIEnv* env, | ||||
|                                                                              jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onGamePadEvent( | ||||
| JNIEXPORT jboolean JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_onGamePadEvent( | ||||
|     JNIEnv* env, jclass clazz, jstring j_device, jint j_button, jint action); | ||||
| 
 | ||||
| JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onGamePadMoveEvent( | ||||
| JNIEXPORT jboolean JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_onGamePadMoveEvent( | ||||
|     JNIEnv* env, jclass clazz, jstring j_device, jint axis, jfloat x, jfloat y); | ||||
| 
 | ||||
| JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onGamePadAxisEvent( | ||||
| JNIEXPORT jboolean JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_onGamePadAxisEvent( | ||||
|     JNIEnv* env, jclass clazz, jstring j_device, jint axis_id, jfloat axis_val); | ||||
| 
 | ||||
| JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onTouchEvent(JNIEnv* env, | ||||
| JNIEXPORT jboolean JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_onTouchEvent(JNIEnv* env, | ||||
|                                                                                 jclass clazz, | ||||
|                                                                                 jfloat x, jfloat y, | ||||
|                                                                                 jboolean pressed); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_onTouchMoved(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_onTouchMoved(JNIEnv* env, | ||||
|                                                                             jclass clazz, jfloat x, | ||||
|                                                                             jfloat y); | ||||
| 
 | ||||
| JNIEXPORT jintArray JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetIcon(JNIEnv* env, | ||||
| JNIEXPORT jintArray JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_GetIcon(JNIEnv* env, | ||||
|                                                                             jclass clazz, | ||||
|                                                                             jstring j_file); | ||||
| 
 | ||||
| JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetTitle(JNIEnv* env, | ||||
| JNIEXPORT jstring JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_GetTitle(JNIEnv* env, | ||||
|                                                                            jclass clazz, | ||||
|                                                                            jstring j_filename); | ||||
| 
 | ||||
| JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetDescription( | ||||
| JNIEXPORT jstring JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_GetDescription( | ||||
|     JNIEnv* env, jclass clazz, jstring j_filename); | ||||
| 
 | ||||
| JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetGameId(JNIEnv* env, | ||||
| JNIEXPORT jstring JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_GetGameId(JNIEnv* env, | ||||
|                                                                             jclass clazz, | ||||
|                                                                             jstring j_filename); | ||||
| 
 | ||||
| JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetRegions(JNIEnv* env, | ||||
| JNIEXPORT jstring JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_GetRegions(JNIEnv* env, | ||||
|                                                                              jclass clazz, | ||||
|                                                                              jstring j_filename); | ||||
| 
 | ||||
| JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetCompany(JNIEnv* env, | ||||
| JNIEXPORT jstring JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_GetCompany(JNIEnv* env, | ||||
|                                                                              jclass clazz, | ||||
|                                                                              jstring j_filename); | ||||
| 
 | ||||
| JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetGitRevision(JNIEnv* env, | ||||
| JNIEXPORT jstring JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_GetGitRevision(JNIEnv* env, | ||||
|                                                                                  jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory( | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_SetUserDirectory( | ||||
|     JNIEnv* env, jclass clazz, jstring j_directory); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_utils_DirectoryInitialization_SetSysDirectory( | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_utils_DirectoryInitialization_SetSysDirectory( | ||||
|     JNIEnv* env, jclass clazz, jstring path_); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetSysDirectory(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_SetSysDirectory(JNIEnv* env, | ||||
|                                                                                jclass clazz, | ||||
|                                                                                jstring path); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_CreateConfigFile(JNIEnv* env, | ||||
|                                                                                 jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT jint JNICALL Java_org_citra_citra_1emu_NativeLibrary_DefaultCPUCore(JNIEnv* env, | ||||
| JNIEXPORT jint JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_DefaultCPUCore(JNIEnv* env, | ||||
|                                                                               jclass clazz); | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetProfiling(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_SetProfiling(JNIEnv* env, | ||||
|                                                                             jclass clazz, | ||||
|                                                                             jboolean enable); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_WriteProfileResults(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_WriteProfileResults(JNIEnv* env, | ||||
|                                                                                    jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_NotifyOrientationChange( | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_NotifyOrientationChange( | ||||
|     JNIEnv* env, jclass clazz, jint layout_option, jint rotation); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2( | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_Run__Ljava_lang_String_2( | ||||
|     JNIEnv* env, jclass clazz, jstring j_path); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL | ||||
| Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2Ljava_lang_String_2Z( | ||||
| Java_org_yuzu_yuzu_1emu_NativeLibrary_Run__Ljava_lang_String_2Ljava_lang_String_2Z( | ||||
|     JNIEnv* env, jclass clazz, jstring j_file, jstring j_savestate, jboolean j_delete_savestate); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, | ||||
|                                                                               jclass clazz, | ||||
|                                                                               jobject surf); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, | ||||
|                                                                                 jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_InitGameIni(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_InitGameIni(JNIEnv* env, | ||||
|                                                                            jclass clazz, | ||||
|                                                                            jstring j_game_id); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_ReloadSettings(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_ReloadSettings(JNIEnv* env, | ||||
|                                                                               jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetUserSetting( | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_SetUserSetting( | ||||
|     JNIEnv* env, jclass clazz, jstring j_game_id, jstring j_section, jstring j_key, | ||||
|     jstring j_value); | ||||
| 
 | ||||
| JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting( | ||||
| JNIEXPORT jstring JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_GetUserSetting( | ||||
|     JNIEnv* env, jclass clazz, jstring game_id, jstring section, jstring key); | ||||
| 
 | ||||
| JNIEXPORT jdoubleArray JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, | ||||
| JNIEXPORT jdoubleArray JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, | ||||
|                                                                                     jclass clazz); | ||||
| 
 | ||||
| JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_LogDeviceInfo(JNIEnv* env, | ||||
| JNIEXPORT void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_LogDeviceInfo(JNIEnv* env, | ||||
|                                                                              jclass clazz); | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
|  | ||||
| @ -0,0 +1,20 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:propertyName="translationX" | ||||
|         android:valueType="floatType" | ||||
|         android:valueFrom="1280dp" | ||||
|         android:valueTo="0" | ||||
|         android:interpolator="@android:interpolator/decelerate_quad" | ||||
|         android:duration="300"/> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:propertyName="alpha" | ||||
|         android:valueType="floatType" | ||||
|         android:valueFrom="0" | ||||
|         android:valueTo="1" | ||||
|         android:interpolator="@android:interpolator/accelerate_quad" | ||||
|         android:duration="300"/> | ||||
| 
 | ||||
| </set> | ||||
| @ -0,0 +1,20 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:propertyName="translationX" | ||||
|         android:valueType="floatType" | ||||
|         android:valueFrom="-1280dp" | ||||
|         android:valueTo="0" | ||||
|         android:interpolator="@android:interpolator/decelerate_quad" | ||||
|         android:duration="300"/> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:propertyName="alpha" | ||||
|         android:valueType="floatType" | ||||
|         android:valueFrom="0" | ||||
|         android:valueTo="1" | ||||
|         android:interpolator="@android:interpolator/accelerate_quad" | ||||
|         android:duration="300"/> | ||||
| 
 | ||||
| </set> | ||||
| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <!-- This animation is used ONLY when a submenu is replaced. --> | ||||
|     <objectAnimator | ||||
|         android:propertyName="translationX" | ||||
|         android:valueType="floatType" | ||||
|         android:valueFrom="0" | ||||
|         android:valueTo="1280dp" | ||||
|         android:interpolator="@android:interpolator/decelerate_quad" | ||||
|         android:duration="200"/> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:propertyName="alpha" | ||||
|         android:valueType="floatType" | ||||
|         android:valueFrom="1" | ||||
|         android:valueTo="0" | ||||
|         android:interpolator="@android:interpolator/decelerate_quad" | ||||
|         android:duration="200"/> | ||||
| 
 | ||||
| </set> | ||||
| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <!-- This animation is used ONLY when a submenu is replaced. --> | ||||
|     <objectAnimator | ||||
|         android:propertyName="translationX" | ||||
|         android:valueType="floatType" | ||||
|         android:valueFrom="0" | ||||
|         android:valueTo="-1280dp" | ||||
|         android:interpolator="@android:interpolator/decelerate_quad" | ||||
|         android:duration="200"/> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:propertyName="alpha" | ||||
|         android:valueType="floatType" | ||||
|         android:valueFrom="1" | ||||
|         android:valueTo="0" | ||||
|         android:interpolator="@android:interpolator/decelerate_quad" | ||||
|         android:duration="200"/> | ||||
| 
 | ||||
| </set> | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user