summaryrefslogtreecommitdiff
path: root/src/android/app
diff options
context:
space:
mode:
authorGravatar bunnei2023-02-04 00:55:02 -0800
committerGravatar bunnei2023-06-03 00:05:29 -0700
commit93cf8c3090889e1228b94df4d171601d8f7dd7f0 (patch)
tree50dea0d1b7e2c9ecd668ad3e33c912df5b3e5f0a /src/android/app
parentandroid: jni: Add function to reload keys. (diff)
downloadyuzu-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.java30
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainPresenter.java5
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileBrowserHelper.java9
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.java37
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/StartupHandler.java24
-rw-r--r--src/android/app/src/main/jni/native.cpp2
-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)bin514 -> 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)bin364 -> 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)bin556 -> 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)bin405 -> 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)bin729 -> 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)bin1168 -> 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)bin1433 -> 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)bin656 -> 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)bin967 -> 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)bin1244 -> 1244 bytes
-rw-r--r--src/android/app/src/main/res/menu/menu_game_grid.xml6
-rw-r--r--src/android/app/src/main/res/values/strings.xml6
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;
6import android.view.Menu; 6import android.view.Menu;
7import android.view.MenuInflater; 7import android.view.MenuInflater;
8import android.view.MenuItem; 8import android.view.MenuItem;
9import android.widget.Toast;
9 10
10import androidx.annotation.NonNull; 11import androidx.annotation.NonNull;
11import androidx.appcompat.app.AppCompatActivity; 12import androidx.appcompat.app.AppCompatActivity;
12import androidx.appcompat.widget.Toolbar; 13import androidx.appcompat.widget.Toolbar;
13 14
15import org.yuzu.yuzu_emu.NativeLibrary;
14import org.yuzu.yuzu_emu.R; 16import org.yuzu.yuzu_emu.R;
15import org.yuzu.yuzu_emu.activities.EmulationActivity; 17import org.yuzu.yuzu_emu.activities.EmulationActivity;
16import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivity; 18import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivity;
17import org.yuzu.yuzu_emu.model.GameProvider; 19import org.yuzu.yuzu_emu.model.GameProvider;
18import org.yuzu.yuzu_emu.ui.platform.PlatformGamesFragment; 20import org.yuzu.yuzu_emu.ui.platform.PlatformGamesFragment;
19import org.yuzu.yuzu_emu.utils.AddDirectoryHelper; 21import org.yuzu.yuzu_emu.utils.AddDirectoryHelper;
22import org.yuzu.yuzu_emu.utils.DirectoryInitialization;
20import org.yuzu.yuzu_emu.utils.FileBrowserHelper; 23import org.yuzu.yuzu_emu.utils.FileBrowserHelper;
24import org.yuzu.yuzu_emu.utils.FileUtil;
21import org.yuzu.yuzu_emu.utils.PicassoUtils; 25import org.yuzu.yuzu_emu.utils.PicassoUtils;
22import org.yuzu.yuzu_emu.utils.StartupHandler; 26import org.yuzu.yuzu_emu.utils.StartupHandler;
23import org.yuzu.yuzu_emu.utils.ThemeUtil; 27import 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
12public final class MainPresenter { 12public 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
13import org.yuzu.yuzu_emu.model.MinimalDocumentFile; 13import org.yuzu.yuzu_emu.model.MinimalDocumentFile;
14 14
15import java.io.FileOutputStream;
16import java.io.IOException;
15import java.io.InputStream; 17import java.io.InputStream;
16import java.io.OutputStream;
17import java.net.URLDecoder; 18import java.net.URLDecoder;
18import java.util.ArrayList; 19import java.util.ArrayList;
19import java.util.List; 20import 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
3import android.content.SharedPreferences; 3import android.content.SharedPreferences;
4import android.preference.PreferenceManager; 4import android.preference.PreferenceManager;
5import android.text.Html;
6import android.text.method.LinkMovementMethod;
7import android.widget.TextView;
8
5import androidx.appcompat.app.AlertDialog; 9import androidx.appcompat.app.AlertDialog;
6 10
7import org.yuzu.yuzu_emu.R; 11import 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,
271jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_ReloadKeys(JNIEnv* env, 271jboolean 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
277void Java_org_yuzu_yuzu_1emu_NativeLibrary_UnPauseEmulation([[maybe_unused]] JNIEnv* env, 277void 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.&lt;br /&gt;&lt;br /&gt;Before you begin, please locate your <![CDATA[<b> prod.keys </b>]]> file on your device storage.&lt;br /&gt;&lt;br /&gt;<![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>