From 57733ddc706dc72f018f46129a30fd6a3a475942 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 3 Apr 2022 11:04:40 +0200 Subject: Android: Implement installing system update from disc image --- .../dolphinemu/dialogs/GamePropertiesDialog.java | 7 ++ .../ui/OnlineUpdateProgressBarDialogFragment.java | 112 --------------------- .../ui/OnlineUpdateRegionSelectDialogFragment.java | 4 +- .../sysupdate/ui/OnlineUpdateResultFragment.java | 107 -------------------- .../ui/SystemUpdateProgressBarDialogFragment.java | 91 +++++++++++++++++ .../sysupdate/ui/SystemUpdateResultFragment.java | 107 ++++++++++++++++++++ .../sysupdate/ui/SystemUpdateViewModel.java | 76 ++++++++++++-- .../dolphinemu/ui/main/MainPresenter.java | 25 +++-- .../org/dolphinemu/dolphinemu/utils/WiiUtils.java | 2 + 9 files changed, 296 insertions(+), 235 deletions(-) delete mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateProgressBarDialogFragment.java delete mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateResultFragment.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateProgressBarDialogFragment.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateResultFragment.java (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java index 0bdccda214..00d98643b8 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java @@ -21,6 +21,7 @@ import org.dolphinemu.dolphinemu.features.settings.model.StringSetting; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; import org.dolphinemu.dolphinemu.model.GameFile; +import org.dolphinemu.dolphinemu.ui.main.MainPresenter; import org.dolphinemu.dolphinemu.ui.platform.Platform; import org.dolphinemu.dolphinemu.utils.AlertDialogItemsBuilder; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; @@ -101,6 +102,12 @@ public class GamePropertiesDialog extends DialogFragment ConvertActivity.launch(getContext(), path)); } + if (isDisc && isWii) + { + itemsBuilder.add(R.string.properties_system_update, (dialog, i) -> + MainPresenter.launchDiscUpdate(path, requireActivity())); + } + itemsBuilder.add(R.string.properties_edit_game_settings, (dialog, i) -> SettingsActivity.launch(getContext(), MenuTag.SETTINGS, gameId, revision, isWii)); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateProgressBarDialogFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateProgressBarDialogFragment.java deleted file mode 100644 index adcdc8a419..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateProgressBarDialogFragment.java +++ /dev/null @@ -1,112 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.features.sysupdate.ui; - -import android.app.Dialog; -import android.app.ProgressDialog; -import android.content.pm.ActivityInfo; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import androidx.lifecycle.ViewModelProvider; - -import org.dolphinemu.dolphinemu.R; - -public class OnlineUpdateProgressBarDialogFragment extends DialogFragment -{ - @NonNull - @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) - { - // Store the current orientation to be restored later - final int orientation = getActivity().getRequestedOrientation(); - // Rotating the device while the update is running can result in a title failing to import. - getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); - - SystemUpdateViewModel viewModel = - new ViewModelProvider(requireActivity()).get(SystemUpdateViewModel.class); - - ProgressDialog progressDialog = new ProgressDialog(requireContext()); - progressDialog.setTitle(getString(R.string.updating)); - // We need to set the message to something here, otherwise the text will not appear when we set it later. - progressDialog.setMessage(""); - progressDialog.setButton(Dialog.BUTTON_NEGATIVE, getString(R.string.cancel), (dialog, i) -> - { - }); - progressDialog.setOnShowListener((dialogInterface) -> - { - // By default, the ProgressDialog will immediately dismiss itself upon a button being pressed. - // Setting the OnClickListener again after the dialog is shown overrides this behavior. - progressDialog.getButton(Dialog.BUTTON_NEGATIVE).setOnClickListener((view) -> - { - viewModel.setCanceled(); - }); - }); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - - viewModel.getProgressData().observe(this, (@Nullable Integer progress) -> - { - progressDialog.setProgress(progress.intValue()); - }); - - viewModel.getTotalData().observe(this, (@Nullable Integer total) -> - { - if (total == 0) - { - return; - } - - progressDialog.setMax(total.intValue()); - }); - - viewModel.getTitleIdData().observe(this, (@Nullable Long titleId) -> - { - progressDialog.setMessage(getString(R.string.updating_message, titleId)); - }); - - viewModel.getResultData().observe(this, (@Nullable Integer result) -> - { - if (result == -1) - { - // This is the default value, ignore - return; - } - - OnlineUpdateResultFragment progressBarFragment = new OnlineUpdateResultFragment(); - progressBarFragment.show(getParentFragmentManager(), "OnlineUpdateResultFragment"); - - getActivity().setRequestedOrientation(orientation); - - dismiss(); - }); - - if (savedInstanceState == null) - { - final String region; - int selectedItem = viewModel.getRegion(); - - switch (selectedItem) - { - case 0: - region = "EUR"; - break; - case 1: - region = "JPN"; - break; - case 2: - region = "KOR"; - break; - case 3: - region = "USA"; - break; - default: - region = ""; - break; - } - viewModel.startUpdate(region); - } - return progressDialog; - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateRegionSelectDialogFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateRegionSelectDialogFragment.java index fc915e5422..dddcd204f8 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateRegionSelectDialogFragment.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateRegionSelectDialogFragment.java @@ -31,8 +31,8 @@ public class OnlineUpdateRegionSelectDialogFragment extends DialogFragment new ViewModelProvider(requireActivity()).get(SystemUpdateViewModel.class); viewModel.setRegion(which); - OnlineUpdateProgressBarDialogFragment progressBarFragment = - new OnlineUpdateProgressBarDialogFragment(); + SystemUpdateProgressBarDialogFragment progressBarFragment = + new SystemUpdateProgressBarDialogFragment(); progressBarFragment .show(getParentFragmentManager(), "OnlineUpdateProgressBarDialogFragment"); progressBarFragment.setCancelable(false); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateResultFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateResultFragment.java deleted file mode 100644 index 15a546a276..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/OnlineUpdateResultFragment.java +++ /dev/null @@ -1,107 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.features.sysupdate.ui; - -import android.app.Dialog; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.DialogFragment; -import androidx.lifecycle.ViewModelProvider; - -import org.dolphinemu.dolphinemu.R; -import org.dolphinemu.dolphinemu.utils.WiiUtils; - -public class OnlineUpdateResultFragment extends DialogFragment -{ - private int mResult; - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) - { - SystemUpdateViewModel viewModel = - new ViewModelProvider(requireActivity()).get(SystemUpdateViewModel.class); - if (savedInstanceState == null) - { - mResult = viewModel.getResultData().getValue().intValue(); - viewModel.clear(); - } - else - { - mResult = savedInstanceState.getInt("result"); - } - - String message; - switch (mResult) - { - case WiiUtils.UPDATE_RESULT_SUCCESS: - message = getString(R.string.update_success); - break; - case WiiUtils.UPDATE_RESULT_ALREADY_UP_TO_DATE: - message = getString(R.string.already_up_to_date); - break; - case WiiUtils.UPDATE_RESULT_REGION_MISMATCH: - message = getString(R.string.region_mismatch); - break; - case WiiUtils.UPDATE_RESULT_MISSING_UPDATE_PARTITION: - message = getString(R.string.missing_update_partition); - break; - case WiiUtils.UPDATE_RESULT_DISC_READ_FAILED: - message = getString(R.string.disc_read_failed); - break; - case WiiUtils.UPDATE_RESULT_SERVER_FAILED: - message = getString(R.string.server_failed); - break; - case WiiUtils.UPDATE_RESULT_DOWNLOAD_FAILED: - message = getString(R.string.download_failed); - break; - case WiiUtils.UPDATE_RESULT_IMPORT_FAILED: - message = getString(R.string.import_failed); - break; - case WiiUtils.UPDATE_RESULT_CANCELLED: - message = getString(R.string.update_cancelled); - break; - default: - throw new IllegalStateException("Unexpected value: " + mResult); - } - - String title; - switch (mResult) - { - case WiiUtils.UPDATE_RESULT_SUCCESS: - case WiiUtils.UPDATE_RESULT_ALREADY_UP_TO_DATE: - title = getString(R.string.update_success_title); - break; - case WiiUtils.UPDATE_RESULT_REGION_MISMATCH: - case WiiUtils.UPDATE_RESULT_MISSING_UPDATE_PARTITION: - case WiiUtils.UPDATE_RESULT_DISC_READ_FAILED: - case WiiUtils.UPDATE_RESULT_SERVER_FAILED: - case WiiUtils.UPDATE_RESULT_DOWNLOAD_FAILED: - case WiiUtils.UPDATE_RESULT_IMPORT_FAILED: - title = getString(R.string.update_failed_title); - break; - case WiiUtils.UPDATE_RESULT_CANCELLED: - title = getString(R.string.update_cancelled_title); - break; - default: - throw new IllegalStateException("Unexpected value: " + mResult); - } - - return new AlertDialog.Builder(requireContext(), R.style.DolphinDialogBase) - .setTitle(title) - .setMessage(message) - .setPositiveButton(R.string.ok, (dialog, which) -> - { - dismiss(); - }) - .create(); - } - - @Override - public void onSaveInstanceState(@NonNull Bundle outState) - { - super.onSaveInstanceState(outState); - outState.putInt("result", mResult); - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateProgressBarDialogFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateProgressBarDialogFragment.java new file mode 100644 index 0000000000..2cb520552a --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateProgressBarDialogFragment.java @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.sysupdate.ui; + +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.pm.ActivityInfo; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.lifecycle.ViewModelProvider; + +import org.dolphinemu.dolphinemu.R; + +public class SystemUpdateProgressBarDialogFragment extends DialogFragment +{ + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) + { + // Store the current orientation to be restored later + final int orientation = getActivity().getRequestedOrientation(); + // Rotating the device while the update is running can result in a title failing to import. + getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); + + SystemUpdateViewModel viewModel = + new ViewModelProvider(requireActivity()).get(SystemUpdateViewModel.class); + + ProgressDialog progressDialog = new ProgressDialog(requireContext()); + progressDialog.setTitle(getString(R.string.updating)); + // We need to set the message to something here, otherwise the text will not appear when we set it later. + progressDialog.setMessage(""); + progressDialog.setButton(Dialog.BUTTON_NEGATIVE, getString(R.string.cancel), (dialog, i) -> + { + }); + progressDialog.setOnShowListener((dialogInterface) -> + { + // By default, the ProgressDialog will immediately dismiss itself upon a button being pressed. + // Setting the OnClickListener again after the dialog is shown overrides this behavior. + progressDialog.getButton(Dialog.BUTTON_NEGATIVE).setOnClickListener((view) -> + { + viewModel.setCanceled(); + }); + }); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + + viewModel.getProgressData().observe(this, (@Nullable Integer progress) -> + { + progressDialog.setProgress(progress.intValue()); + }); + + viewModel.getTotalData().observe(this, (@Nullable Integer total) -> + { + if (total == 0) + { + return; + } + + progressDialog.setMax(total.intValue()); + }); + + viewModel.getTitleIdData().observe(this, (@Nullable Long titleId) -> + { + progressDialog.setMessage(getString(R.string.updating_message, titleId)); + }); + + viewModel.getResultData().observe(this, (@Nullable Integer result) -> + { + if (result == -1) + { + // This is the default value, ignore + return; + } + + SystemUpdateResultFragment progressBarFragment = new SystemUpdateResultFragment(); + progressBarFragment.show(getParentFragmentManager(), "OnlineUpdateResultFragment"); + + getActivity().setRequestedOrientation(orientation); + + dismiss(); + }); + + if (savedInstanceState == null) + { + viewModel.startUpdate(); + } + return progressDialog; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateResultFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateResultFragment.java new file mode 100644 index 0000000000..298b4ac0ed --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateResultFragment.java @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.sysupdate.ui; + +import android.app.Dialog; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; +import androidx.lifecycle.ViewModelProvider; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.utils.WiiUtils; + +public class SystemUpdateResultFragment extends DialogFragment +{ + private int mResult; + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) + { + SystemUpdateViewModel viewModel = + new ViewModelProvider(requireActivity()).get(SystemUpdateViewModel.class); + if (savedInstanceState == null) + { + mResult = viewModel.getResultData().getValue().intValue(); + viewModel.clear(); + } + else + { + mResult = savedInstanceState.getInt("result"); + } + + String message; + switch (mResult) + { + case WiiUtils.UPDATE_RESULT_SUCCESS: + message = getString(R.string.update_success); + break; + case WiiUtils.UPDATE_RESULT_ALREADY_UP_TO_DATE: + message = getString(R.string.already_up_to_date); + break; + case WiiUtils.UPDATE_RESULT_REGION_MISMATCH: + message = getString(R.string.region_mismatch); + break; + case WiiUtils.UPDATE_RESULT_MISSING_UPDATE_PARTITION: + message = getString(R.string.missing_update_partition); + break; + case WiiUtils.UPDATE_RESULT_DISC_READ_FAILED: + message = getString(R.string.disc_read_failed); + break; + case WiiUtils.UPDATE_RESULT_SERVER_FAILED: + message = getString(R.string.server_failed); + break; + case WiiUtils.UPDATE_RESULT_DOWNLOAD_FAILED: + message = getString(R.string.download_failed); + break; + case WiiUtils.UPDATE_RESULT_IMPORT_FAILED: + message = getString(R.string.import_failed); + break; + case WiiUtils.UPDATE_RESULT_CANCELLED: + message = getString(R.string.update_cancelled); + break; + default: + throw new IllegalStateException("Unexpected value: " + mResult); + } + + String title; + switch (mResult) + { + case WiiUtils.UPDATE_RESULT_SUCCESS: + case WiiUtils.UPDATE_RESULT_ALREADY_UP_TO_DATE: + title = getString(R.string.update_success_title); + break; + case WiiUtils.UPDATE_RESULT_REGION_MISMATCH: + case WiiUtils.UPDATE_RESULT_MISSING_UPDATE_PARTITION: + case WiiUtils.UPDATE_RESULT_DISC_READ_FAILED: + case WiiUtils.UPDATE_RESULT_SERVER_FAILED: + case WiiUtils.UPDATE_RESULT_DOWNLOAD_FAILED: + case WiiUtils.UPDATE_RESULT_IMPORT_FAILED: + title = getString(R.string.update_failed_title); + break; + case WiiUtils.UPDATE_RESULT_CANCELLED: + title = getString(R.string.update_cancelled_title); + break; + default: + throw new IllegalStateException("Unexpected value: " + mResult); + } + + return new AlertDialog.Builder(requireContext(), R.style.DolphinDialogBase) + .setTitle(title) + .setMessage(message) + .setPositiveButton(R.string.ok, (dialog, which) -> + { + dismiss(); + }) + .create(); + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) + { + super.onSaveInstanceState(outState); + outState.putInt("result", mResult); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateViewModel.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateViewModel.java index 3c9b13fbc7..a249b01ee7 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateViewModel.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateViewModel.java @@ -5,6 +5,7 @@ package org.dolphinemu.dolphinemu.features.sysupdate.ui; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import org.dolphinemu.dolphinemu.utils.WiiUpdateCallback; import org.dolphinemu.dolphinemu.utils.WiiUtils; import java.util.concurrent.ExecutorService; @@ -21,6 +22,7 @@ public class SystemUpdateViewModel extends ViewModel private boolean mCanceled = false; private int mRegion; + private String mDiscPath; public SystemUpdateViewModel() { @@ -37,6 +39,16 @@ public class SystemUpdateViewModel extends ViewModel return mRegion; } + public void setDiscPath(String discPath) + { + mDiscPath = discPath; + } + + public String getDiscPath() + { + return mDiscPath; + } + public MutableLiveData getProgressData() { return mProgressData; @@ -62,21 +74,55 @@ public class SystemUpdateViewModel extends ViewModel mCanceled = true; } - public void startUpdate(String region) + public void startUpdate() + { + if (!mDiscPath.isEmpty()) + { + startDiscUpdate(mDiscPath); + } + else + { + final String region; + switch (mRegion) + { + case 0: + region = "EUR"; + break; + case 1: + region = "JPN"; + break; + case 2: + region = "KOR"; + break; + case 3: + region = "USA"; + break; + default: + region = ""; + break; + } + startOnlineUpdate(region); + } + } + + public void startOnlineUpdate(String region) { mCanceled = false; executor.execute(() -> { - int result = WiiUtils.doOnlineUpdate(region, ((processed, total, titleId) -> - { - mProgressData.postValue(processed); - mTotalData.postValue(total); - mTitleIdData.postValue(titleId); + int result = WiiUtils.doOnlineUpdate(region, constructCallback()); + mResultData.postValue(result); + }); + } - return !mCanceled; - })); + public void startDiscUpdate(String path) + { + mCanceled = false; + executor.execute(() -> + { + int result = WiiUtils.doDiscUpdate(path, constructCallback()); mResultData.postValue(result); }); } @@ -88,5 +134,19 @@ public class SystemUpdateViewModel extends ViewModel mTitleIdData.setValue(0l); mResultData.setValue(-1); mCanceled = false; + mRegion = -1; + mDiscPath = ""; + } + + private WiiUpdateCallback constructCallback() + { + return (processed, total, titleId) -> + { + mProgressData.postValue(processed); + mTotalData.postValue(total); + mTitleIdData.postValue(titleId); + + return !mCanceled; + }; } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java index 7ec06868f3..ecc69fbaf1 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java @@ -17,7 +17,7 @@ import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.EmulationActivity; import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; -import org.dolphinemu.dolphinemu.features.sysupdate.ui.OnlineUpdateProgressBarDialogFragment; +import org.dolphinemu.dolphinemu.features.sysupdate.ui.SystemUpdateProgressBarDialogFragment; import org.dolphinemu.dolphinemu.features.sysupdate.ui.SystemMenuNotInstalledDialogFragment; import org.dolphinemu.dolphinemu.features.sysupdate.ui.SystemUpdateViewModel; import org.dolphinemu.dolphinemu.model.GameFileCache; @@ -280,11 +280,7 @@ public final class MainPresenter SystemUpdateViewModel viewModel = new ViewModelProvider(mActivity).get(SystemUpdateViewModel.class); viewModel.setRegion(-1); - OnlineUpdateProgressBarDialogFragment progressBarFragment = - new OnlineUpdateProgressBarDialogFragment(); - progressBarFragment - .show(mActivity.getSupportFragmentManager(), "OnlineUpdateProgressBarDialogFragment"); - progressBarFragment.setCancelable(false); + launchUpdateProgressBarFragment(mActivity); } else { @@ -295,6 +291,23 @@ public final class MainPresenter } } + public static void launchDiscUpdate(String path, FragmentActivity activity) + { + SystemUpdateViewModel viewModel = + new ViewModelProvider(activity).get(SystemUpdateViewModel.class); + viewModel.setDiscPath(path); + launchUpdateProgressBarFragment(activity); + } + + private static void launchUpdateProgressBarFragment(FragmentActivity activity) + { + SystemUpdateProgressBarDialogFragment progressBarFragment = + new SystemUpdateProgressBarDialogFragment(); + progressBarFragment + .show(activity.getSupportFragmentManager(), "SystemUpdateProgressBarDialogFragment"); + progressBarFragment.setCancelable(false); + } + private void launchWiiSystemMenu() { WiiUtils.isSystemMenuInstalled(); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java index 42e11a67c0..44103f7483 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java @@ -28,6 +28,8 @@ public final class WiiUtils public static native int doOnlineUpdate(String region, WiiUpdateCallback callback); + public static native int doDiscUpdate(String path, WiiUpdateCallback callback); + public static native boolean isSystemMenuInstalled(); public static native String getSystemMenuVersion(); -- cgit v1.2.3