summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2020-06-25 19:38:02 +0200
committerJosJuice <josjuice@gmail.com>2020-09-16 18:38:52 +0200
commitd9f3e382fe1b2f1c7d9de54cefa920b4f0502af6 (patch)
tree7903bb4afe8dc13c5e11da10e5565f2c199f443d /Source/Android/app/src/main/java
parent7d6debb90793dbd34df49d779ea2c34e432094d8 (diff)
Android: Add a progress dialog for disc image conversion
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java4
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/ConvertFragment.java102
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/CompressCallback.java6
3 files changed, 94 insertions, 18 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
index 238fb2a769..5655518a71 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
@@ -12,6 +12,7 @@ import android.view.Surface;
import androidx.appcompat.app.AlertDialog;
import org.dolphinemu.dolphinemu.activities.EmulationActivity;
+import org.dolphinemu.dolphinemu.utils.CompressCallback;
import org.dolphinemu.dolphinemu.utils.Log;
import org.dolphinemu.dolphinemu.utils.Rumble;
@@ -430,7 +431,8 @@ public final class NativeLibrary
public static native boolean InstallWAD(String file);
public static native boolean ConvertDiscImage(String inPath, String outPath, int platform,
- int format, int blockSize, int compression, int compressionLevel, boolean scrub);
+ int format, int blockSize, int compression, int compressionLevel, boolean scrub,
+ CompressCallback callback);
public static native String FormatSize(long bytes, int decimals);
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/ConvertFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/ConvertFragment.java
index a37a9d3874..389ef98f3e 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/ConvertFragment.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/ConvertFragment.java
@@ -1,5 +1,6 @@
package org.dolphinemu.dolphinemu.fragments;
+import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -108,6 +109,9 @@ public class ConvertFragment extends Fragment implements View.OnClickListener
private GameFile gameFile;
+ private volatile boolean mCanceled;
+ private volatile Thread mThread = null;
+
public static ConvertFragment newInstance(String gamePath)
{
Bundle args = new Bundle();
@@ -181,6 +185,15 @@ public class ConvertFragment extends Fragment implements View.OnClickListener
valueWrapper.setPosition(i);
}
+ @Override
+ public void onStop()
+ {
+ super.onStop();
+
+ mCanceled = true;
+ joinThread();
+ }
+
private Spinner populateSpinner(int spinnerId, int entriesId, int valuesId,
SpinnerValue valueWrapper)
{
@@ -339,33 +352,88 @@ public class ConvertFragment extends Fragment implements View.OnClickListener
private void convert()
{
+ final int PROGRESS_RESOLUTION = 1000;
+
Context context = requireContext();
// TODO: Let the user select a path
String outPath = gameFile.getPath() + ".converted";
- boolean success = NativeLibrary.ConvertDiscImage(gameFile.getPath(), outPath,
- gameFile.getPlatform(), mFormat.getValue(context), mBlockSize.getValueOr(context,0),
- mCompression.getValueOr(context,0), mCompressionLevel.getValueOr(context,0),
- getRemoveJunkData());
+ joinThread();
+
+ mCanceled = false;
+
+ ProgressDialog progressDialog = new ProgressDialog(context, R.style.DolphinDialogBase);
+
+ progressDialog.setTitle(R.string.convert_converting);
+
+ progressDialog.setIndeterminate(false);
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setMax(PROGRESS_RESOLUTION);
- AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.DolphinDialogBase);
- if (success)
+ progressDialog.setCancelable(true);
+ progressDialog.setOnCancelListener((dialog) -> mCanceled = true);
+
+ progressDialog.show();
+
+ mThread = new Thread(() ->
{
- builder.setMessage(R.string.convert_success_message)
- .setCancelable(false)
- .setPositiveButton(R.string.ok, (dialog, i) ->
+ boolean success = NativeLibrary.ConvertDiscImage(gameFile.getPath(), outPath,
+ gameFile.getPlatform(), mFormat.getValue(context), mBlockSize.getValueOr(context, 0),
+ mCompression.getValueOr(context, 0), mCompressionLevel.getValueOr(context, 0),
+ getRemoveJunkData(), (text, completion) ->
{
- dialog.dismiss();
- requireActivity().finish();
+ requireActivity().runOnUiThread(() ->
+ {
+ progressDialog.setMessage(text);
+ progressDialog.setProgress((int) (completion * PROGRESS_RESOLUTION));
+ });
+
+ return !mCanceled;
});
- }
- else
+
+ if (!mCanceled)
+ {
+ requireActivity().runOnUiThread(() ->
+ {
+ progressDialog.dismiss();
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.DolphinDialogBase);
+ if (success)
+ {
+ builder.setMessage(R.string.convert_success_message)
+ .setCancelable(false)
+ .setPositiveButton(R.string.ok, (dialog, i) ->
+ {
+ dialog.dismiss();
+ requireActivity().finish();
+ });
+ }
+ else
+ {
+ builder.setMessage(R.string.convert_failure_message)
+ .setPositiveButton(R.string.ok, (dialog, i) -> dialog.dismiss());
+ }
+ AlertDialog alert = builder.create();
+ alert.show();
+ });
+ }
+ });
+
+ mThread.start();
+ }
+
+ private void joinThread()
+ {
+ if (mThread != null)
{
- builder.setMessage(R.string.convert_failure_message)
- .setPositiveButton(R.string.ok, (dialog, i) -> dialog.dismiss());
+ try
+ {
+ mThread.join();
+ }
+ catch (InterruptedException ignored)
+ {
+ }
}
- AlertDialog alert = builder.create();
- alert.show();
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/CompressCallback.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/CompressCallback.java
new file mode 100644
index 0000000000..83aa8d7919
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/CompressCallback.java
@@ -0,0 +1,6 @@
+package org.dolphinemu.dolphinemu.utils;
+
+public interface CompressCallback
+{
+ boolean run(String text, float completion);
+}