summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Charles Lombardo2023-06-01 14:16:57 -0400
committerGravatar bunnei2023-06-03 00:06:08 -0700
commit20abd49a21e977d0ca3f2175b5ae9ce4a5ea4bff (patch)
treebeada6d5fe0cbeabad11e1ca396201ed07fbb546
parentandroid: vk_turbo_mode: Remove unnecessary device recreation. (diff)
downloadyuzu-20abd49a21e977d0ca3f2175b5ae9ce4a5ea4bff.tar.gz
yuzu-20abd49a21e977d0ca3f2175b5ae9ce4a5ea4bff.tar.xz
yuzu-20abd49a21e977d0ca3f2175b5ae9ce4a5ea4bff.zip
android: Warning dialogs for key errors
Diffstat (limited to '')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/MessageDialogFragment.kt62
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt51
-rw-r--r--src/android/app/src/main/res/values/strings.xml13
3 files changed, 95 insertions, 31 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/MessageDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/MessageDialogFragment.kt
new file mode 100644
index 000000000..2db38fdc2
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/MessageDialogFragment.kt
@@ -0,0 +1,62 @@
1// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4package org.yuzu.yuzu_emu.fragments
5
6import android.app.Dialog
7import android.content.Intent
8import android.net.Uri
9import android.os.Bundle
10import androidx.fragment.app.DialogFragment
11import com.google.android.material.dialog.MaterialAlertDialogBuilder
12import org.yuzu.yuzu_emu.R
13
14class MessageDialogFragment : DialogFragment() {
15 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
16 val titleId = requireArguments().getInt(TITLE)
17 val descriptionId = requireArguments().getInt(DESCRIPTION)
18 val helpLinkId = requireArguments().getInt(HELP_LINK)
19
20 val dialog = MaterialAlertDialogBuilder(requireContext())
21 .setPositiveButton(R.string.close, null)
22 .setTitle(titleId)
23 .setMessage(descriptionId)
24
25 if (helpLinkId != 0) {
26 dialog.setNeutralButton(R.string.learn_more) { _, _ ->
27 openLink(getString(helpLinkId))
28 }
29 }
30
31 return dialog.show()
32 }
33
34 private fun openLink(link: String) {
35 val intent = Intent(Intent.ACTION_VIEW, Uri.parse(link))
36 startActivity(intent)
37 }
38
39 companion object {
40 const val TAG = "MessageDialogFragment"
41
42 private const val TITLE = "Title"
43 private const val DESCRIPTION = "Description"
44 private const val HELP_LINK = "Link"
45
46 fun newInstance(
47 titleId: Int,
48 descriptionId: Int,
49 helpLinkId: Int = 0
50 ): MessageDialogFragment {
51 val dialog = MessageDialogFragment()
52 val bundle = Bundle()
53 bundle.apply {
54 putInt(TITLE, titleId)
55 putInt(DESCRIPTION, descriptionId)
56 putInt(HELP_LINK, helpLinkId)
57 }
58 dialog.arguments = bundle
59 return dialog
60 }
61 }
62}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
index b1329db74..f8bca11bb 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
@@ -37,6 +37,7 @@ import org.yuzu.yuzu_emu.databinding.DialogProgressBarBinding
37import org.yuzu.yuzu_emu.features.settings.model.Settings 37import org.yuzu.yuzu_emu.features.settings.model.Settings
38import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivity 38import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivity
39import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile 39import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
40import org.yuzu.yuzu_emu.fragments.MessageDialogFragment
40import org.yuzu.yuzu_emu.model.GamesViewModel 41import org.yuzu.yuzu_emu.model.GamesViewModel
41import org.yuzu.yuzu_emu.model.HomeViewModel 42import org.yuzu.yuzu_emu.model.HomeViewModel
42import org.yuzu.yuzu_emu.utils.* 43import org.yuzu.yuzu_emu.utils.*
@@ -251,11 +252,9 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
251 if (result == null) 252 if (result == null)
252 return@registerForActivityResult 253 return@registerForActivityResult
253 254
254 val takeFlags =
255 Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION
256 contentResolver.takePersistableUriPermission( 255 contentResolver.takePersistableUriPermission(
257 result, 256 result,
258 takeFlags 257 Intent.FLAG_GRANT_READ_URI_PERMISSION
259 ) 258 )
260 259
261 // When a new directory is picked, we currently will reset the existing games 260 // When a new directory is picked, we currently will reset the existing games
@@ -279,19 +278,16 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
279 return@registerForActivityResult 278 return@registerForActivityResult
280 279
281 if (!FileUtil.hasExtension(result.toString(), "keys")) { 280 if (!FileUtil.hasExtension(result.toString(), "keys")) {
282 Toast.makeText( 281 MessageDialogFragment.newInstance(
283 applicationContext, 282 R.string.reading_keys_failure,
284 R.string.invalid_keys_file, 283 R.string.install_keys_failure_extension_description
285 Toast.LENGTH_SHORT 284 ).show(supportFragmentManager, MessageDialogFragment.TAG)
286 ).show()
287 return@registerForActivityResult 285 return@registerForActivityResult
288 } 286 }
289 287
290 val takeFlags =
291 Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION
292 contentResolver.takePersistableUriPermission( 288 contentResolver.takePersistableUriPermission(
293 result, 289 result,
294 takeFlags 290 Intent.FLAG_GRANT_READ_URI_PERMISSION
295 ) 291 )
296 292
297 val dstPath = DirectoryInitialization.userDirectory + "/keys/" 293 val dstPath = DirectoryInitialization.userDirectory + "/keys/"
@@ -310,11 +306,11 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
310 ).show() 306 ).show()
311 gamesViewModel.reloadGames(true) 307 gamesViewModel.reloadGames(true)
312 } else { 308 } else {
313 Toast.makeText( 309 MessageDialogFragment.newInstance(
314 applicationContext, 310 R.string.invalid_keys_error,
315 R.string.install_keys_failure, 311 R.string.install_keys_failure_description,
316 Toast.LENGTH_LONG 312 R.string.dumping_keys_quickstart_link
317 ).show() 313 ).show(supportFragmentManager, MessageDialogFragment.TAG)
318 } 314 }
319 } 315 }
320 } 316 }
@@ -325,19 +321,16 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
325 return@registerForActivityResult 321 return@registerForActivityResult
326 322
327 if (!FileUtil.hasExtension(result.toString(), "bin")) { 323 if (!FileUtil.hasExtension(result.toString(), "bin")) {
328 Toast.makeText( 324 MessageDialogFragment.newInstance(
329 applicationContext, 325 R.string.reading_keys_failure,
330 R.string.invalid_keys_file, 326 R.string.install_keys_failure_extension_description
331 Toast.LENGTH_SHORT 327 ).show(supportFragmentManager, MessageDialogFragment.TAG)
332 ).show()
333 return@registerForActivityResult 328 return@registerForActivityResult
334 } 329 }
335 330
336 val takeFlags =
337 Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION
338 contentResolver.takePersistableUriPermission( 331 contentResolver.takePersistableUriPermission(
339 result, 332 result,
340 takeFlags 333 Intent.FLAG_GRANT_READ_URI_PERMISSION
341 ) 334 )
342 335
343 val dstPath = DirectoryInitialization.userDirectory + "/keys/" 336 val dstPath = DirectoryInitialization.userDirectory + "/keys/"
@@ -355,11 +348,11 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
355 Toast.LENGTH_SHORT 348 Toast.LENGTH_SHORT
356 ).show() 349 ).show()
357 } else { 350 } else {
358 Toast.makeText( 351 MessageDialogFragment.newInstance(
359 applicationContext, 352 R.string.invalid_keys_error,
360 R.string.install_amiibo_keys_failure, 353 R.string.install_keys_failure_description,
361 Toast.LENGTH_LONG 354 R.string.dumping_keys_quickstart_link
362 ).show() 355 ).show(supportFragmentManager, MessageDialogFragment.TAG)
363 } 356 }
364 } 357 }
365 } 358 }
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 5e44551ad..afc681fed 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -64,8 +64,15 @@
64 <string name="install_amiibo_keys_description">Required to use Amiibo in game</string> 64 <string name="install_amiibo_keys_description">Required to use Amiibo in game</string>
65 <string name="invalid_keys_file">Invalid keys file selected</string> 65 <string name="invalid_keys_file">Invalid keys file selected</string>
66 <string name="install_keys_success">Keys successfully installed</string> 66 <string name="install_keys_success">Keys successfully installed</string>
67 <string name="install_keys_failure">Keys file (prod.keys) is invalid</string> 67 <string name="reading_keys_failure">Error reading encryption keys</string>
68 <string name="install_amiibo_keys_failure">Keys file (key_retail.bin) is invalid</string> 68 <string name="install_keys_failure_extension_description">
69 1. Verify your keys have the .keys extension.\n\n
70 2. Keys must not be stored in the Downloads folder.\n\n
71 Resolve the issue(s) and try again.
72 </string>
73 <string name="invalid_keys_error">Invalid encryption keys</string>
74 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
75 <string name="install_keys_failure_description">The selected file is incorrect or corrupt. Please redump your keys.</string>
69 <string name="install_gpu_driver">Install GPU driver</string> 76 <string name="install_gpu_driver">Install GPU driver</string>
70 <string name="install_gpu_driver_description">Install alternative drivers for potentially better performance or accuracy</string> 77 <string name="install_gpu_driver_description">Install alternative drivers for potentially better performance or accuracy</string>
71 <string name="advanced_settings">Advanced settings</string> 78 <string name="advanced_settings">Advanced settings</string>
@@ -164,6 +171,8 @@
164 <string name="reset_all_settings">Reset all settings?</string> 171 <string name="reset_all_settings">Reset all settings?</string>
165 <string name="reset_all_settings_description">All Advanced Settings will be reset to their default configuration. This can not be undone.</string> 172 <string name="reset_all_settings_description">All Advanced Settings will be reset to their default configuration. This can not be undone.</string>
166 <string name="settings_reset">Settings reset</string> 173 <string name="settings_reset">Settings reset</string>
174 <string name="close">Close</string>
175 <string name="learn_more">Learn More</string>
167 176
168 <!-- GPU driver installation --> 177 <!-- GPU driver installation -->
169 <string name="select_gpu_driver">Select GPU driver</string> 178 <string name="select_gpu_driver">Select GPU driver</string>