diff options
| author | 2023-02-04 00:55:02 -0800 | |
|---|---|---|
| committer | 2023-06-03 00:05:29 -0700 | |
| commit | 93cf8c3090889e1228b94df4d171601d8f7dd7f0 (patch) | |
| tree | 50dea0d1b7e2c9ecd668ad3e33c912df5b3e5f0a /src/android/app | |
| parent | android: jni: Add function to reload keys. (diff) | |
| download | yuzu-93cf8c3090889e1228b94df4d171601d8f7dd7f0.tar.gz yuzu-93cf8c3090889e1228b94df4d171601d8f7dd7f0.tar.xz yuzu-93cf8c3090889e1228b94df4d171601d8f7dd7f0.zip | |
android: frontend: Integrate key installation for SAF.
Diffstat (limited to 'src/android/app')
| -rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.java | 30 | ||||
| -rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainPresenter.java | 5 | ||||
| -rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileBrowserHelper.java | 9 | ||||
| -rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.java | 37 | ||||
| -rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/StartupHandler.java | 24 | ||||
| -rw-r--r-- | src/android/app/src/main/jni/native.cpp | 2 | ||||
| -rw-r--r-- | src/android/app/src/main/res/drawable-hdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-hdpi/ic_cia_install.png) | bin | 514 -> 514 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/drawable-mdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-mdpi/ic_cia_install.png) | bin | 364 -> 364 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/drawable-night-hdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-night-hdpi/ic_cia_install.png) | bin | 556 -> 556 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/drawable-night-mdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-night-mdpi/ic_cia_install.png) | bin | 405 -> 405 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/drawable-night-xhdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-night-xhdpi/ic_cia_install.png) | bin | 729 -> 729 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/drawable-night-xxhdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-night-xxhdpi/ic_cia_install.png) | bin | 1168 -> 1168 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/drawable-night-xxxhdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-night-xxxhdpi/ic_cia_install.png) | bin | 1433 -> 1433 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/drawable-xhdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-xhdpi/ic_cia_install.png) | bin | 656 -> 656 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/drawable-xxhdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-xxhdpi/ic_cia_install.png) | bin | 967 -> 967 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/drawable-xxxhdpi/ic_install.png (renamed from src/android/app/src/main/res/drawable-xxxhdpi/ic_cia_install.png) | bin | 1244 -> 1244 bytes | |||
| -rw-r--r-- | src/android/app/src/main/res/menu/menu_game_grid.xml | 6 | ||||
| -rw-r--r-- | src/android/app/src/main/res/values/strings.xml | 6 |
18 files changed, 100 insertions, 19 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.java index 26ff14914..7fdd692c2 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.java +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.java | |||
| @@ -6,18 +6,22 @@ import android.os.Bundle; | |||
| 6 | import android.view.Menu; | 6 | import android.view.Menu; |
| 7 | import android.view.MenuInflater; | 7 | import android.view.MenuInflater; |
| 8 | import android.view.MenuItem; | 8 | import android.view.MenuItem; |
| 9 | import android.widget.Toast; | ||
| 9 | 10 | ||
| 10 | import androidx.annotation.NonNull; | 11 | import androidx.annotation.NonNull; |
| 11 | import androidx.appcompat.app.AppCompatActivity; | 12 | import androidx.appcompat.app.AppCompatActivity; |
| 12 | import androidx.appcompat.widget.Toolbar; | 13 | import androidx.appcompat.widget.Toolbar; |
| 13 | 14 | ||
| 15 | import org.yuzu.yuzu_emu.NativeLibrary; | ||
| 14 | import org.yuzu.yuzu_emu.R; | 16 | import org.yuzu.yuzu_emu.R; |
| 15 | import org.yuzu.yuzu_emu.activities.EmulationActivity; | 17 | import org.yuzu.yuzu_emu.activities.EmulationActivity; |
| 16 | import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivity; | 18 | import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivity; |
| 17 | import org.yuzu.yuzu_emu.model.GameProvider; | 19 | import org.yuzu.yuzu_emu.model.GameProvider; |
| 18 | import org.yuzu.yuzu_emu.ui.platform.PlatformGamesFragment; | 20 | import org.yuzu.yuzu_emu.ui.platform.PlatformGamesFragment; |
| 19 | import org.yuzu.yuzu_emu.utils.AddDirectoryHelper; | 21 | import org.yuzu.yuzu_emu.utils.AddDirectoryHelper; |
| 22 | import org.yuzu.yuzu_emu.utils.DirectoryInitialization; | ||
| 20 | import org.yuzu.yuzu_emu.utils.FileBrowserHelper; | 23 | import org.yuzu.yuzu_emu.utils.FileBrowserHelper; |
| 24 | import org.yuzu.yuzu_emu.utils.FileUtil; | ||
| 21 | import org.yuzu.yuzu_emu.utils.PicassoUtils; | 25 | import org.yuzu.yuzu_emu.utils.PicassoUtils; |
| 22 | import org.yuzu.yuzu_emu.utils.StartupHandler; | 26 | import org.yuzu.yuzu_emu.utils.StartupHandler; |
| 23 | import org.yuzu.yuzu_emu.utils.ThemeUtil; | 27 | import org.yuzu.yuzu_emu.utils.ThemeUtil; |
| @@ -116,8 +120,13 @@ public final class MainActivity extends AppCompatActivity implements MainView { | |||
| 116 | switch (request) { | 120 | switch (request) { |
| 117 | case MainPresenter.REQUEST_ADD_DIRECTORY: | 121 | case MainPresenter.REQUEST_ADD_DIRECTORY: |
| 118 | FileBrowserHelper.openDirectoryPicker(this, | 122 | FileBrowserHelper.openDirectoryPicker(this, |
| 119 | MainPresenter.REQUEST_ADD_DIRECTORY, | 123 | MainPresenter.REQUEST_ADD_DIRECTORY, |
| 120 | R.string.select_game_folder); | 124 | R.string.select_game_folder); |
| 125 | break; | ||
| 126 | case MainPresenter.REQUEST_INSTALL_KEYS: | ||
| 127 | FileBrowserHelper.openFilePicker(this, | ||
| 128 | MainPresenter.REQUEST_INSTALL_KEYS, | ||
| 129 | R.string.install_keys); | ||
| 121 | break; | 130 | break; |
| 122 | } | 131 | } |
| 123 | } | 132 | } |
| @@ -132,7 +141,6 @@ public final class MainActivity extends AppCompatActivity implements MainView { | |||
| 132 | super.onActivityResult(requestCode, resultCode, result); | 141 | super.onActivityResult(requestCode, resultCode, result); |
| 133 | switch (requestCode) { | 142 | switch (requestCode) { |
| 134 | case MainPresenter.REQUEST_ADD_DIRECTORY: | 143 | case MainPresenter.REQUEST_ADD_DIRECTORY: |
| 135 | // If the user picked a file, as opposed to just backing out. | ||
| 136 | if (resultCode == MainActivity.RESULT_OK) { | 144 | if (resultCode == MainActivity.RESULT_OK) { |
| 137 | int takeFlags = (Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); | 145 | int takeFlags = (Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); |
| 138 | getContentResolver().takePersistableUriPermission(Uri.parse(result.getDataString()), takeFlags); | 146 | getContentResolver().takePersistableUriPermission(Uri.parse(result.getDataString()), takeFlags); |
| @@ -144,6 +152,22 @@ public final class MainActivity extends AppCompatActivity implements MainView { | |||
| 144 | mPresenter.onDirectorySelected(FileBrowserHelper.getSelectedDirectory(result)); | 152 | mPresenter.onDirectorySelected(FileBrowserHelper.getSelectedDirectory(result)); |
| 145 | } | 153 | } |
| 146 | break; | 154 | break; |
| 155 | |||
| 156 | case MainPresenter.REQUEST_INSTALL_KEYS: | ||
| 157 | if (resultCode == MainActivity.RESULT_OK) { | ||
| 158 | int takeFlags = (Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); | ||
| 159 | getContentResolver().takePersistableUriPermission(Uri.parse(result.getDataString()), takeFlags); | ||
| 160 | String dstPath = DirectoryInitialization.getUserDirectory() + "/keys/"; | ||
| 161 | if (FileUtil.copyUriToInternalStorage(this, result.getData(), dstPath, "prod.keys")) { | ||
| 162 | if (NativeLibrary.ReloadKeys()) { | ||
| 163 | Toast.makeText(this, R.string.install_keys_success, Toast.LENGTH_SHORT).show(); | ||
| 164 | } else { | ||
| 165 | Toast.makeText(this, R.string.install_keys_failure, Toast.LENGTH_SHORT).show(); | ||
| 166 | launchFileListActivity(MainPresenter.REQUEST_INSTALL_KEYS); | ||
| 167 | } | ||
| 168 | } | ||
| 169 | } | ||
| 170 | break; | ||
| 147 | } | 171 | } |
| 148 | } | 172 | } |
| 149 | 173 | ||
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainPresenter.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainPresenter.java index 01f577600..82667a98f 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainPresenter.java +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainPresenter.java | |||
| @@ -11,6 +11,7 @@ import org.yuzu.yuzu_emu.utils.AddDirectoryHelper; | |||
| 11 | 11 | ||
| 12 | public final class MainPresenter { | 12 | public final class MainPresenter { |
| 13 | public static final int REQUEST_ADD_DIRECTORY = 1; | 13 | public static final int REQUEST_ADD_DIRECTORY = 1; |
| 14 | public static final int REQUEST_INSTALL_KEYS = 2; | ||
| 14 | private final MainView mView; | 15 | private final MainView mView; |
| 15 | private String mDirToAdd; | 16 | private String mDirToAdd; |
| 16 | private long mLastClickTime = 0; | 17 | private long mLastClickTime = 0; |
| @@ -46,6 +47,10 @@ public final class MainPresenter { | |||
| 46 | case R.id.button_add_directory: | 47 | case R.id.button_add_directory: |
| 47 | launchFileListActivity(REQUEST_ADD_DIRECTORY); | 48 | launchFileListActivity(REQUEST_ADD_DIRECTORY); |
| 48 | return true; | 49 | return true; |
| 50 | |||
| 51 | case R.id.button_install_keys: | ||
| 52 | launchFileListActivity(REQUEST_INSTALL_KEYS); | ||
| 53 | return true; | ||
| 49 | } | 54 | } |
| 50 | 55 | ||
| 51 | return false; | 56 | return false; |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileBrowserHelper.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileBrowserHelper.java index 6175f39c4..4dab914c7 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileBrowserHelper.java +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileBrowserHelper.java | |||
| @@ -10,6 +10,15 @@ public final class FileBrowserHelper { | |||
| 10 | activity.startActivityForResult(i, requestCode); | 10 | activity.startActivityForResult(i, requestCode); |
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | public static void openFilePicker(FragmentActivity activity, int requestCode, int title) { | ||
| 14 | Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); | ||
| 15 | intent.addCategory(Intent.CATEGORY_OPENABLE); | ||
| 16 | intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); | ||
| 17 | intent.putExtra(Intent.EXTRA_TITLE, title); | ||
| 18 | intent.setType("*/*"); | ||
| 19 | activity.startActivityForResult(intent, requestCode); | ||
| 20 | } | ||
| 21 | |||
| 13 | public static String getSelectedDirectory(Intent result) { | 22 | public static String getSelectedDirectory(Intent result) { |
| 14 | return result.getDataString(); | 23 | return result.getDataString(); |
| 15 | } | 24 | } |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.java index 624fd4a88..8665704cc 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.java +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.java | |||
| @@ -12,8 +12,9 @@ import androidx.documentfile.provider.DocumentFile; | |||
| 12 | 12 | ||
| 13 | import org.yuzu.yuzu_emu.model.MinimalDocumentFile; | 13 | import org.yuzu.yuzu_emu.model.MinimalDocumentFile; |
| 14 | 14 | ||
| 15 | import java.io.FileOutputStream; | ||
| 16 | import java.io.IOException; | ||
| 15 | import java.io.InputStream; | 17 | import java.io.InputStream; |
| 16 | import java.io.OutputStream; | ||
| 17 | import java.net.URLDecoder; | 18 | import java.net.URLDecoder; |
| 18 | import java.util.ArrayList; | 19 | import java.util.ArrayList; |
| 19 | import java.util.List; | 20 | import java.util.List; |
| @@ -243,6 +244,40 @@ public class FileUtil { | |||
| 243 | return size; | 244 | return size; |
| 244 | } | 245 | } |
| 245 | 246 | ||
| 247 | public static boolean copyUriToInternalStorage(Context context, Uri sourceUri, String destinationParentPath, String destinationFilename) { | ||
| 248 | InputStream input = null; | ||
| 249 | FileOutputStream output = null; | ||
| 250 | try { | ||
| 251 | input = context.getContentResolver().openInputStream(sourceUri); | ||
| 252 | output = new FileOutputStream(destinationParentPath + "/" + destinationFilename); | ||
| 253 | byte[] buffer = new byte[1024]; | ||
| 254 | int len; | ||
| 255 | while ((len = input.read(buffer)) != -1) { | ||
| 256 | output.write(buffer, 0, len); | ||
| 257 | } | ||
| 258 | output.flush(); | ||
| 259 | return true; | ||
| 260 | } catch (Exception e) { | ||
| 261 | Log.error("[FileUtil]: Cannot copy file, error: " + e.getMessage()); | ||
| 262 | } finally { | ||
| 263 | if (input != null) { | ||
| 264 | try { | ||
| 265 | input.close(); | ||
| 266 | } catch (IOException e) { | ||
| 267 | Log.error("[FileUtil]: Cannot close input file, error: " + e.getMessage()); | ||
| 268 | } | ||
| 269 | } | ||
| 270 | if (output != null) { | ||
| 271 | try { | ||
| 272 | output.close(); | ||
| 273 | } catch (IOException e) { | ||
| 274 | Log.error("[FileUtil]: Cannot close output file, error: " + e.getMessage()); | ||
| 275 | } | ||
| 276 | } | ||
| 277 | } | ||
| 278 | return false; | ||
| 279 | } | ||
| 280 | |||
| 246 | public static boolean isRootTreeUri(Uri uri) { | 281 | public static boolean isRootTreeUri(Uri uri) { |
| 247 | final List<String> paths = uri.getPathSegments(); | 282 | final List<String> paths = uri.getPathSegments(); |
| 248 | return paths.size() == 2 && PATH_TREE.equals(paths.get(0)); | 283 | return paths.size() == 2 && PATH_TREE.equals(paths.get(0)); |
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/StartupHandler.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/StartupHandler.java index 6d3e58e18..749a06b32 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/StartupHandler.java +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/StartupHandler.java | |||
| @@ -2,6 +2,10 @@ package org.yuzu.yuzu_emu.utils; | |||
| 2 | 2 | ||
| 3 | import android.content.SharedPreferences; | 3 | import android.content.SharedPreferences; |
| 4 | import android.preference.PreferenceManager; | 4 | import android.preference.PreferenceManager; |
| 5 | import android.text.Html; | ||
| 6 | import android.text.method.LinkMovementMethod; | ||
| 7 | import android.widget.TextView; | ||
| 8 | |||
| 5 | import androidx.appcompat.app.AlertDialog; | 9 | import androidx.appcompat.app.AlertDialog; |
| 6 | 10 | ||
| 7 | import org.yuzu.yuzu_emu.R; | 11 | import org.yuzu.yuzu_emu.R; |
| @@ -13,7 +17,7 @@ public final class StartupHandler { | |||
| 13 | private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); | 17 | private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.getAppContext()); |
| 14 | 18 | ||
| 15 | private static void handleStartupPromptDismiss(MainActivity parent) { | 19 | private static void handleStartupPromptDismiss(MainActivity parent) { |
| 16 | parent.launchFileListActivity(MainPresenter.REQUEST_ADD_DIRECTORY); | 20 | parent.launchFileListActivity(MainPresenter.REQUEST_INSTALL_KEYS); |
| 17 | } | 21 | } |
| 18 | 22 | ||
| 19 | private static void markFirstBoot() { | 23 | private static void markFirstBoot() { |
| @@ -26,14 +30,16 @@ public final class StartupHandler { | |||
| 26 | if (mPreferences.getBoolean("FirstApplicationLaunch", true)) { | 30 | if (mPreferences.getBoolean("FirstApplicationLaunch", true)) { |
| 27 | markFirstBoot(); | 31 | markFirstBoot(); |
| 28 | 32 | ||
| 29 | // Prompt user with standard first boot disclaimer | 33 | AlertDialog.Builder builder = new AlertDialog.Builder(parent); |
| 30 | new AlertDialog.Builder(parent) | 34 | builder.setMessage(Html.fromHtml(parent.getResources().getString(R.string.app_disclaimer))); |
| 31 | .setTitle(R.string.app_name) | 35 | builder.setTitle(R.string.app_name); |
| 32 | .setIcon(R.mipmap.ic_launcher) | 36 | builder.setIcon(R.mipmap.ic_launcher); |
| 33 | .setMessage(parent.getResources().getString(R.string.app_disclaimer)) | 37 | builder.setPositiveButton(android.R.string.ok, null); |
| 34 | .setPositiveButton(android.R.string.ok, null) | 38 | builder.setOnDismissListener(dialogInterface -> handleStartupPromptDismiss(parent)); |
| 35 | .setOnDismissListener(dialogInterface -> handleStartupPromptDismiss(parent)) | 39 | |
| 36 | .show(); | 40 | AlertDialog alert = builder.create(); |
| 41 | alert.show(); | ||
| 42 | ((TextView) alert.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); | ||
| 37 | } | 43 | } |
| 38 | } | 44 | } |
| 39 | } | 45 | } |
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 358316c48..6d1e75c40 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp | |||
| @@ -271,7 +271,7 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_SetAppDirectory(JNIEnv* env, | |||
| 271 | jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_ReloadKeys(JNIEnv* env, | 271 | jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_ReloadKeys(JNIEnv* env, |
| 272 | [[maybe_unused]] jclass clazz) { | 272 | [[maybe_unused]] jclass clazz) { |
| 273 | Core::Crypto::KeyManager::Instance().ReloadKeys(); | 273 | Core::Crypto::KeyManager::Instance().ReloadKeys(); |
| 274 | return static_cast<jboolean>(Core::Crypto::KeyManager::Instance().IsKeysLoaded()); | 274 | return static_cast<jboolean>(Core::Crypto::KeyManager::Instance().AreKeysLoaded()); |
| 275 | } | 275 | } |
| 276 | 276 | ||
| 277 | void Java_org_yuzu_yuzu_1emu_NativeLibrary_UnPauseEmulation([[maybe_unused]] JNIEnv* env, | 277 | void Java_org_yuzu_yuzu_1emu_NativeLibrary_UnPauseEmulation([[maybe_unused]] JNIEnv* env, |
diff --git a/src/android/app/src/main/res/drawable-hdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-hdpi/ic_install.png index 8c00d8c34..8c00d8c34 100644 --- a/src/android/app/src/main/res/drawable-hdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-hdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/drawable-mdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-mdpi/ic_install.png index c6dc232b4..c6dc232b4 100644 --- a/src/android/app/src/main/res/drawable-mdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-mdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/drawable-night-hdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-night-hdpi/ic_install.png index cc986c8ac..cc986c8ac 100644 --- a/src/android/app/src/main/res/drawable-night-hdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-night-hdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/drawable-night-mdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-night-mdpi/ic_install.png index f61d84961..f61d84961 100644 --- a/src/android/app/src/main/res/drawable-night-mdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-night-mdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/drawable-night-xhdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-night-xhdpi/ic_install.png index 1eccbe68d..1eccbe68d 100644 --- a/src/android/app/src/main/res/drawable-night-xhdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-night-xhdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/drawable-night-xxhdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-night-xxhdpi/ic_install.png index fc3c434b0..fc3c434b0 100644 --- a/src/android/app/src/main/res/drawable-night-xxhdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-night-xxhdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/drawable-night-xxxhdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-night-xxxhdpi/ic_install.png index b4d1b92b7..b4d1b92b7 100644 --- a/src/android/app/src/main/res/drawable-night-xxxhdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-night-xxxhdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/drawable-xhdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-xhdpi/ic_install.png index 839869401..839869401 100644 --- a/src/android/app/src/main/res/drawable-xhdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-xhdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/drawable-xxhdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-xxhdpi/ic_install.png index e6812f0d4..e6812f0d4 100644 --- a/src/android/app/src/main/res/drawable-xxhdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-xxhdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/ic_cia_install.png b/src/android/app/src/main/res/drawable-xxxhdpi/ic_install.png index 69ae32dc3..69ae32dc3 100644 --- a/src/android/app/src/main/res/drawable-xxxhdpi/ic_cia_install.png +++ b/src/android/app/src/main/res/drawable-xxxhdpi/ic_install.png | |||
| Binary files differ | |||
diff --git a/src/android/app/src/main/res/menu/menu_game_grid.xml b/src/android/app/src/main/res/menu/menu_game_grid.xml index cd515afbf..3eb8cf817 100644 --- a/src/android/app/src/main/res/menu/menu_game_grid.xml +++ b/src/android/app/src/main/res/menu/menu_game_grid.xml | |||
| @@ -14,9 +14,9 @@ | |||
| 14 | android:title="@string/select_game_folder" | 14 | android:title="@string/select_game_folder" |
| 15 | app:showAsAction="ifRoom" /> | 15 | app:showAsAction="ifRoom" /> |
| 16 | <item | 16 | <item |
| 17 | android:id="@+id/button_install_cia" | 17 | android:id="@+id/button_install_keys" |
| 18 | android:icon="@drawable/ic_cia_install" | 18 | android:icon="@drawable/ic_install" |
| 19 | android:title="@string/install_cia_title" | 19 | android:title="@string/install_keys" |
| 20 | app:showAsAction="ifRoom" /> | 20 | app:showAsAction="ifRoom" /> |
| 21 | </menu> | 21 | </menu> |
| 22 | </item> | 22 | </item> |
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 893f6aa1a..1c6858a60 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | <!-- General application strings --> | 4 | <!-- General application strings --> |
| 5 | <string name="app_name" translatable="false">yuzu</string> | 5 | <string name="app_name" translatable="false">yuzu</string> |
| 6 | <string name="app_disclaimer">This software will run games for the Nintendo Switch game console. No game titles are included.\n\nBefore you run, please place your rightfully owned Switch game files onto your device storage.</string> | 6 | <string name="app_disclaimer">This software will run games for the Nintendo Switch game console. No game titles or keys are included.<br /><br />Before you begin, please locate your <![CDATA[<b> prod.keys </b>]]> file on your device storage.<br /><br /><![CDATA[<a href="https://yuzu-emu.org/wiki/dumping-decryption-keys-from-a-switch-console/">Learn more</a>]]></string> |
| 7 | <string name="app_notification_channel_name" translatable="false">yuzu</string> | 7 | <string name="app_notification_channel_name" translatable="false">yuzu</string> |
| 8 | <string name="app_notification_channel_id" translatable="false">yuzu</string> | 8 | <string name="app_notification_channel_id" translatable="false">yuzu</string> |
| 9 | <string name="app_notification_channel_description">yuzu Switch emulator notifications</string> | 9 | <string name="app_notification_channel_description">yuzu Switch emulator notifications</string> |
| @@ -49,7 +49,9 @@ | |||
| 49 | 49 | ||
| 50 | <!-- Add Directory Screen--> | 50 | <!-- Add Directory Screen--> |
| 51 | <string name="select_game_folder">Select game folder</string> | 51 | <string name="select_game_folder">Select game folder</string> |
| 52 | <string name="install_cia_title">Install CIA</string> | 52 | <string name="install_keys">Install keys</string> |
| 53 | <string name="install_keys_success">Keys successfully installed</string> | ||
| 54 | <string name="install_keys_failure">Keys file (prod.keys) is invalid</string> | ||
| 53 | 55 | ||
| 54 | <!-- Preferences Screen --> | 56 | <!-- Preferences Screen --> |
| 55 | <string name="preferences_settings">Settings</string> | 57 | <string name="preferences_settings">Settings</string> |