summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/HomeSettingAdapter.kt4
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/ImportExportSavesFragment.kt4
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LongMessageDialogFragment.kt62
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/MessageDialogFragment.kt32
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt188
6 files changed, 118 insertions, 174 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/HomeSettingAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/HomeSettingAdapter.kt
index 9f859b442..8d87d3bd7 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/HomeSettingAdapter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/HomeSettingAdapter.kt
@@ -45,8 +45,8 @@ class HomeSettingAdapter(
45 holder.option.onClick.invoke() 45 holder.option.onClick.invoke()
46 } else { 46 } else {
47 MessageDialogFragment.newInstance( 47 MessageDialogFragment.newInstance(
48 holder.option.disabledTitleId, 48 titleId = holder.option.disabledTitleId,
49 holder.option.disabledMessageId 49 descriptionId = holder.option.disabledMessageId
50 ).show(activity.supportFragmentManager, MessageDialogFragment.TAG) 50 ).show(activity.supportFragmentManager, MessageDialogFragment.TAG)
51 } 51 }
52 } 52 }
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/ImportExportSavesFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/ImportExportSavesFragment.kt
index e1495ee8c..f38aeea53 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/ImportExportSavesFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/ImportExportSavesFragment.kt
@@ -187,8 +187,8 @@ class ImportExportSavesFragment : DialogFragment() {
187 withContext(Dispatchers.Main) { 187 withContext(Dispatchers.Main) {
188 if (!validZip) { 188 if (!validZip) {
189 MessageDialogFragment.newInstance( 189 MessageDialogFragment.newInstance(
190 R.string.save_file_invalid_zip_structure, 190 titleId = R.string.save_file_invalid_zip_structure,
191 R.string.save_file_invalid_zip_structure_description 191 descriptionId = R.string.save_file_invalid_zip_structure_description
192 ).show(activity.supportFragmentManager, MessageDialogFragment.TAG) 192 ).show(activity.supportFragmentManager, MessageDialogFragment.TAG)
193 return@withContext 193 return@withContext
194 } 194 }
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt
index 739b26f99..181bd983a 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/IndeterminateProgressDialogFragment.kt
@@ -34,7 +34,7 @@ class IndeterminateProgressDialogFragment : DialogFragment() {
34 when (val result = taskViewModel.result.value) { 34 when (val result = taskViewModel.result.value) {
35 is String -> Toast.makeText(requireContext(), result, Toast.LENGTH_LONG).show() 35 is String -> Toast.makeText(requireContext(), result, Toast.LENGTH_LONG).show()
36 is MessageDialogFragment -> result.show( 36 is MessageDialogFragment -> result.show(
37 parentFragmentManager, 37 requireActivity().supportFragmentManager,
38 MessageDialogFragment.TAG 38 MessageDialogFragment.TAG
39 ) 39 )
40 } 40 }
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LongMessageDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LongMessageDialogFragment.kt
deleted file mode 100644
index b29b627e9..000000000
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/LongMessageDialogFragment.kt
+++ /dev/null
@@ -1,62 +0,0 @@
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 LongMessageDialogFragment : DialogFragment() {
15 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
16 val titleId = requireArguments().getInt(TITLE)
17 val description = requireArguments().getString(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(description)
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 = "LongMessageDialogFragment"
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 description: String,
49 helpLinkId: Int = 0
50 ): LongMessageDialogFragment {
51 val dialog = LongMessageDialogFragment()
52 val bundle = Bundle()
53 bundle.apply {
54 putInt(TITLE, titleId)
55 putString(DESCRIPTION, description)
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/fragments/MessageDialogFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/MessageDialogFragment.kt
index 2db38fdc2..7d1c2c8dd 100644
--- 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
@@ -13,14 +13,20 @@ import org.yuzu.yuzu_emu.R
13 13
14class MessageDialogFragment : DialogFragment() { 14class MessageDialogFragment : DialogFragment() {
15 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 15 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
16 val titleId = requireArguments().getInt(TITLE) 16 val titleId = requireArguments().getInt(TITLE_ID)
17 val descriptionId = requireArguments().getInt(DESCRIPTION) 17 val titleString = requireArguments().getString(TITLE_STRING)!!
18 val descriptionId = requireArguments().getInt(DESCRIPTION_ID)
19 val descriptionString = requireArguments().getString(DESCRIPTION_STRING)!!
18 val helpLinkId = requireArguments().getInt(HELP_LINK) 20 val helpLinkId = requireArguments().getInt(HELP_LINK)
19 21
20 val dialog = MaterialAlertDialogBuilder(requireContext()) 22 val dialog = MaterialAlertDialogBuilder(requireContext())
21 .setPositiveButton(R.string.close, null) 23 .setPositiveButton(R.string.close, null)
22 .setTitle(titleId) 24
23 .setMessage(descriptionId) 25 if (titleId != 0) dialog.setTitle(titleId)
26 if (titleString.isNotEmpty()) dialog.setTitle(titleString)
27
28 if (descriptionId != 0) dialog.setMessage(descriptionId)
29 if (descriptionString.isNotEmpty()) dialog.setMessage(descriptionString)
24 30
25 if (helpLinkId != 0) { 31 if (helpLinkId != 0) {
26 dialog.setNeutralButton(R.string.learn_more) { _, _ -> 32 dialog.setNeutralButton(R.string.learn_more) { _, _ ->
@@ -39,20 +45,26 @@ class MessageDialogFragment : DialogFragment() {
39 companion object { 45 companion object {
40 const val TAG = "MessageDialogFragment" 46 const val TAG = "MessageDialogFragment"
41 47
42 private const val TITLE = "Title" 48 private const val TITLE_ID = "Title"
43 private const val DESCRIPTION = "Description" 49 private const val TITLE_STRING = "TitleString"
50 private const val DESCRIPTION_ID = "DescriptionId"
51 private const val DESCRIPTION_STRING = "DescriptionString"
44 private const val HELP_LINK = "Link" 52 private const val HELP_LINK = "Link"
45 53
46 fun newInstance( 54 fun newInstance(
47 titleId: Int, 55 titleId: Int = 0,
48 descriptionId: Int, 56 titleString: String = "",
57 descriptionId: Int = 0,
58 descriptionString: String = "",
49 helpLinkId: Int = 0 59 helpLinkId: Int = 0
50 ): MessageDialogFragment { 60 ): MessageDialogFragment {
51 val dialog = MessageDialogFragment() 61 val dialog = MessageDialogFragment()
52 val bundle = Bundle() 62 val bundle = Bundle()
53 bundle.apply { 63 bundle.apply {
54 putInt(TITLE, titleId) 64 putInt(TITLE_ID, titleId)
55 putInt(DESCRIPTION, descriptionId) 65 putString(TITLE_STRING, titleString)
66 putInt(DESCRIPTION_ID, descriptionId)
67 putString(DESCRIPTION_STRING, descriptionString)
56 putInt(HELP_LINK, helpLinkId) 68 putInt(HELP_LINK, helpLinkId)
57 } 69 }
58 dialog.arguments = bundle 70 dialog.arguments = bundle
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 7735452e5..7d8e06ad8 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
@@ -42,7 +42,6 @@ import org.yuzu.yuzu_emu.databinding.DialogProgressBarBinding
42import org.yuzu.yuzu_emu.features.settings.model.Settings 42import org.yuzu.yuzu_emu.features.settings.model.Settings
43import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile 43import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
44import org.yuzu.yuzu_emu.fragments.IndeterminateProgressDialogFragment 44import org.yuzu.yuzu_emu.fragments.IndeterminateProgressDialogFragment
45import org.yuzu.yuzu_emu.fragments.LongMessageDialogFragment
46import org.yuzu.yuzu_emu.fragments.MessageDialogFragment 45import org.yuzu.yuzu_emu.fragments.MessageDialogFragment
47import org.yuzu.yuzu_emu.model.GamesViewModel 46import org.yuzu.yuzu_emu.model.GamesViewModel
48import org.yuzu.yuzu_emu.model.HomeViewModel 47import org.yuzu.yuzu_emu.model.HomeViewModel
@@ -301,8 +300,8 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
301 fun processKey(result: Uri): Boolean { 300 fun processKey(result: Uri): Boolean {
302 if (FileUtil.getExtension(result) != "keys") { 301 if (FileUtil.getExtension(result) != "keys") {
303 MessageDialogFragment.newInstance( 302 MessageDialogFragment.newInstance(
304 R.string.reading_keys_failure, 303 titleId = R.string.reading_keys_failure,
305 R.string.install_prod_keys_failure_extension_description 304 descriptionId = R.string.install_prod_keys_failure_extension_description
306 ).show(supportFragmentManager, MessageDialogFragment.TAG) 305 ).show(supportFragmentManager, MessageDialogFragment.TAG)
307 return false 306 return false
308 } 307 }
@@ -330,9 +329,9 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
330 return true 329 return true
331 } else { 330 } else {
332 MessageDialogFragment.newInstance( 331 MessageDialogFragment.newInstance(
333 R.string.invalid_keys_error, 332 titleId = R.string.invalid_keys_error,
334 R.string.install_keys_failure_description, 333 descriptionId = R.string.install_keys_failure_description,
335 R.string.dumping_keys_quickstart_link 334 helpLinkId = R.string.dumping_keys_quickstart_link
336 ).show(supportFragmentManager, MessageDialogFragment.TAG) 335 ).show(supportFragmentManager, MessageDialogFragment.TAG)
337 return false 336 return false
338 } 337 }
@@ -370,8 +369,8 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
370 val filteredNumOfFiles = cacheFirmwareDir.list(filterNCA)?.size ?: -2 369 val filteredNumOfFiles = cacheFirmwareDir.list(filterNCA)?.size ?: -2
371 messageToShow = if (unfilteredNumOfFiles != filteredNumOfFiles) { 370 messageToShow = if (unfilteredNumOfFiles != filteredNumOfFiles) {
372 MessageDialogFragment.newInstance( 371 MessageDialogFragment.newInstance(
373 R.string.firmware_installed_failure, 372 titleId = R.string.firmware_installed_failure,
374 R.string.firmware_installed_failure_description 373 descriptionId = R.string.firmware_installed_failure_description
375 ) 374 )
376 } else { 375 } else {
377 firmwarePath.deleteRecursively() 376 firmwarePath.deleteRecursively()
@@ -401,8 +400,8 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
401 400
402 if (FileUtil.getExtension(result) != "bin") { 401 if (FileUtil.getExtension(result) != "bin") {
403 MessageDialogFragment.newInstance( 402 MessageDialogFragment.newInstance(
404 R.string.reading_keys_failure, 403 titleId = R.string.reading_keys_failure,
405 R.string.install_amiibo_keys_failure_extension_description 404 descriptionId = R.string.install_amiibo_keys_failure_extension_description
406 ).show(supportFragmentManager, MessageDialogFragment.TAG) 405 ).show(supportFragmentManager, MessageDialogFragment.TAG)
407 return@registerForActivityResult 406 return@registerForActivityResult
408 } 407 }
@@ -428,9 +427,9 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
428 ).show() 427 ).show()
429 } else { 428 } else {
430 MessageDialogFragment.newInstance( 429 MessageDialogFragment.newInstance(
431 R.string.invalid_keys_error, 430 titleId = R.string.invalid_keys_error,
432 R.string.install_keys_failure_description, 431 descriptionId = R.string.install_keys_failure_description,
433 R.string.dumping_keys_quickstart_link 432 helpLinkId = R.string.dumping_keys_quickstart_link
434 ).show(supportFragmentManager, MessageDialogFragment.TAG) 433 ).show(supportFragmentManager, MessageDialogFragment.TAG)
435 } 434 }
436 } 435 }
@@ -502,96 +501,91 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
502 var errorBaseGame = 0 501 var errorBaseGame = 0
503 var errorExtension = 0 502 var errorExtension = 0
504 var errorOther = 0 503 var errorOther = 0
505 var errorTotal = 0 504 documents.forEach {
506 lifecycleScope.launch { 505 when (NativeLibrary.installFileToNand(it.toString())) {
507 documents.forEach { 506 NativeLibrary.InstallFileToNandResult.Success -> {
508 when (NativeLibrary.installFileToNand(it.toString())) { 507 installSuccess += 1
509 NativeLibrary.InstallFileToNandResult.Success -> {
510 installSuccess += 1
511 }
512
513 NativeLibrary.InstallFileToNandResult.SuccessFileOverwritten -> {
514 installOverwrite += 1
515 }
516
517 NativeLibrary.InstallFileToNandResult.ErrorBaseGame -> {
518 errorBaseGame += 1
519 }
520
521 NativeLibrary.InstallFileToNandResult.ErrorFilenameExtension -> {
522 errorExtension += 1
523 }
524
525 else -> {
526 errorOther += 1
527 }
528 } 508 }
529 } 509
530 withContext(Dispatchers.Main) { 510 NativeLibrary.InstallFileToNandResult.SuccessFileOverwritten -> {
531 val separator = System.getProperty("line.separator") ?: "\n" 511 installOverwrite += 1
532 val installResult = StringBuilder()
533 if (installSuccess > 0) {
534 installResult.append(
535 getString(
536 R.string.install_game_content_success_install,
537 installSuccess
538 )
539 )
540 installResult.append(separator)
541 } 512 }
542 if (installOverwrite > 0) { 513
543 installResult.append( 514 NativeLibrary.InstallFileToNandResult.ErrorBaseGame -> {
544 getString( 515 errorBaseGame += 1
545 R.string.install_game_content_success_overwrite,
546 installOverwrite
547 )
548 )
549 installResult.append(separator)
550 } 516 }
551 errorTotal = errorBaseGame + errorExtension + errorOther 517
552 if (errorTotal > 0) { 518 NativeLibrary.InstallFileToNandResult.ErrorFilenameExtension -> {
553 installResult.append(separator) 519 errorExtension += 1
554 installResult.append( 520 }
555 getString( 521
556 R.string.install_game_content_failed_count, 522 else -> {
557 errorTotal 523 errorOther += 1
558 )
559 )
560 installResult.append(separator)
561 if (errorBaseGame > 0) {
562 installResult.append(separator)
563 installResult.append(
564 getString(R.string.install_game_content_failure_base)
565 )
566 installResult.append(separator)
567 }
568 if (errorExtension > 0) {
569 installResult.append(separator)
570 installResult.append(
571 getString(R.string.install_game_content_failure_file_extension)
572 )
573 installResult.append(separator)
574 }
575 if (errorOther > 0) {
576 installResult.append(
577 getString(R.string.install_game_content_failure_description)
578 )
579 installResult.append(separator)
580 }
581 LongMessageDialogFragment.newInstance(
582 R.string.install_game_content_failure,
583 installResult.toString().trim(),
584 R.string.install_game_content_help_link
585 ).show(supportFragmentManager, LongMessageDialogFragment.TAG)
586 } else {
587 LongMessageDialogFragment.newInstance(
588 R.string.install_game_content_success,
589 installResult.toString().trim()
590 ).show(supportFragmentManager, LongMessageDialogFragment.TAG)
591 } 524 }
592 } 525 }
593 } 526 }
594 return@newInstance installSuccess + installOverwrite + errorTotal 527
528 val separator = System.getProperty("line.separator") ?: "\n"
529 val installResult = StringBuilder()
530 if (installSuccess > 0) {
531 installResult.append(
532 getString(
533 R.string.install_game_content_success_install,
534 installSuccess
535 )
536 )
537 installResult.append(separator)
538 }
539 if (installOverwrite > 0) {
540 installResult.append(
541 getString(
542 R.string.install_game_content_success_overwrite,
543 installOverwrite
544 )
545 )
546 installResult.append(separator)
547 }
548 val errorTotal: Int = errorBaseGame + errorExtension + errorOther
549 if (errorTotal > 0) {
550 installResult.append(separator)
551 installResult.append(
552 getString(
553 R.string.install_game_content_failed_count,
554 errorTotal
555 )
556 )
557 installResult.append(separator)
558 if (errorBaseGame > 0) {
559 installResult.append(separator)
560 installResult.append(
561 getString(R.string.install_game_content_failure_base)
562 )
563 installResult.append(separator)
564 }
565 if (errorExtension > 0) {
566 installResult.append(separator)
567 installResult.append(
568 getString(R.string.install_game_content_failure_file_extension)
569 )
570 installResult.append(separator)
571 }
572 if (errorOther > 0) {
573 installResult.append(
574 getString(R.string.install_game_content_failure_description)
575 )
576 installResult.append(separator)
577 }
578 return@newInstance MessageDialogFragment.newInstance(
579 titleId = R.string.install_game_content_failure,
580 descriptionString = installResult.toString().trim(),
581 helpLinkId = R.string.install_game_content_help_link
582 )
583 } else {
584 return@newInstance MessageDialogFragment.newInstance(
585 titleId = R.string.install_game_content_success,
586 descriptionString = installResult.toString().trim()
587 )
588 }
595 }.show(supportFragmentManager, IndeterminateProgressDialogFragment.TAG) 589 }.show(supportFragmentManager, IndeterminateProgressDialogFragment.TAG)
596 } 590 }
597 } 591 }