| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| package org.dolphinemu.dolphinemu.utils; | ||
|
|
||
| import androidx.appcompat.app.AlertDialog; | ||
|
|
||
| import android.content.Context; | ||
| import android.content.DialogInterface.OnClickListener; | ||
|
|
||
| import java.util.ArrayList; | ||
|
|
||
| public class AlertDialogItemsBuilder | ||
| { | ||
| private Context mContext; | ||
|
|
||
| private ArrayList<CharSequence> mLabels = new ArrayList<>(); | ||
| private ArrayList<OnClickListener> mListeners = new ArrayList<>(); | ||
|
|
||
| public AlertDialogItemsBuilder(Context context) | ||
| { | ||
| mContext = context; | ||
| } | ||
|
|
||
| public void add(int stringId, OnClickListener listener) | ||
| { | ||
| mLabels.add(mContext.getResources().getString(stringId)); | ||
| mListeners.add(listener); | ||
| } | ||
|
|
||
| public void add(CharSequence label, OnClickListener listener) | ||
| { | ||
| mLabels.add(label); | ||
| mListeners.add(listener); | ||
| } | ||
|
|
||
| public void applyToBuilder(AlertDialog.Builder builder) | ||
| { | ||
| CharSequence[] labels = new CharSequence[mLabels.size()]; | ||
| labels = mLabels.toArray(labels); | ||
| builder.setItems(labels, (dialog, i) -> mListeners.get(i).onClick(dialog, i)); | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| package org.dolphinemu.dolphinemu.utils; | ||
|
|
||
| public interface CompressCallback | ||
| { | ||
| boolean run(String text, float completion); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| package org.dolphinemu.dolphinemu.utils; | ||
|
|
||
| import android.content.ContentResolver; | ||
| import android.net.Uri; | ||
| import android.provider.DocumentsContract; | ||
|
|
||
| import org.dolphinemu.dolphinemu.DolphinApplication; | ||
|
|
||
| import java.io.FileNotFoundException; | ||
|
|
||
| public class ContentHandler | ||
| { | ||
| public static int openFd(String uri, String mode) | ||
| { | ||
| try | ||
| { | ||
| return DolphinApplication.getAppContext().getContentResolver() | ||
| .openFileDescriptor(Uri.parse(uri), mode).detachFd(); | ||
| } | ||
| catch (FileNotFoundException | NullPointerException e) | ||
| { | ||
| return -1; | ||
| } | ||
| } | ||
|
|
||
| public static boolean delete(String uri) | ||
| { | ||
| try | ||
| { | ||
| ContentResolver resolver = DolphinApplication.getAppContext().getContentResolver(); | ||
| return DocumentsContract.deleteDocument(resolver, Uri.parse(uri)); | ||
| } | ||
| catch (FileNotFoundException e) | ||
| { | ||
| // Return true because we care about the file not being there, not the actual delete. | ||
| return true; | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" | ||
| android:layout_width="match_parent" | ||
| android:layout_height="match_parent" | ||
| android:fillViewport="true" | ||
| xmlns:app="http://schemas.android.com/apk/res-auto"> | ||
|
|
||
| <androidx.constraintlayout.widget.ConstraintLayout | ||
| android:layout_width="match_parent" | ||
| android:layout_height="wrap_content" | ||
| android:padding="16dp"> | ||
|
|
||
| <TextView | ||
| android:id="@+id/label_format_info" | ||
| android:layout_width="0dp" | ||
| android:layout_height="wrap_content" | ||
| android:text="@string/convert_format_info" | ||
| app:layout_constraintWidth_max="400dp" | ||
| app:layout_constraintHorizontal_bias="1.0" | ||
| app:layout_constraintTop_toTopOf="parent" | ||
| app:layout_constraintBottom_toBottomOf="parent" | ||
| app:layout_constraintStart_toStartOf="parent" | ||
| app:layout_constraintEnd_toStartOf="@id/divider" /> | ||
|
|
||
| <View | ||
| android:id="@+id/divider" | ||
| android:layout_width="1dp" | ||
| android:layout_height="0dp" | ||
| android:background="#1F000000" | ||
| android:layout_marginStart="24dp" | ||
| app:layout_constraintTop_toTopOf="parent" | ||
| app:layout_constraintBottom_toBottomOf="parent" | ||
| app:layout_constraintStart_toEndOf="@id/label_format_info" | ||
| app:layout_constraintEnd_toStartOf="@id/fragment_convert" /> | ||
|
|
||
| <FrameLayout | ||
| android:id="@+id/fragment_convert" | ||
| android:layout_width="0dp" | ||
| android:layout_height="wrap_content" | ||
| android:layout_marginStart="24dp" | ||
| app:layout_constraintWidth_max="400dp" | ||
| app:layout_constraintHorizontal_bias="0.0" | ||
| app:layout_constraintTop_toTopOf="parent" | ||
| app:layout_constraintBottom_toBottomOf="parent" | ||
| app:layout_constraintStart_toEndOf="@id/divider" | ||
| app:layout_constraintEnd_toEndOf="parent" /> | ||
|
|
||
| </androidx.constraintlayout.widget.ConstraintLayout> | ||
|
|
||
| </ScrollView> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" | ||
| android:layout_width="match_parent" | ||
| android:layout_height="match_parent" | ||
| android:fillViewport="true" | ||
| xmlns:app="http://schemas.android.com/apk/res-auto"> | ||
|
|
||
| <androidx.constraintlayout.widget.ConstraintLayout | ||
| android:layout_width="match_parent" | ||
| android:layout_height="wrap_content" | ||
| android:padding="16dp"> | ||
|
|
||
| <FrameLayout | ||
| android:id="@+id/fragment_convert" | ||
| android:layout_width="0dp" | ||
| android:layout_height="wrap_content" | ||
| app:layout_constraintWidth_max="400dp" | ||
| app:layout_constraintStart_toStartOf="parent" | ||
| app:layout_constraintEnd_toEndOf="parent" | ||
| app:layout_constraintTop_toTopOf="parent" | ||
| app:layout_constraintBottom_toTopOf="@id/divider" /> | ||
|
|
||
| <View | ||
| android:id="@+id/divider" | ||
| android:layout_width="0dp" | ||
| android:layout_height="1dp" | ||
| android:background="#1F000000" | ||
| android:layout_marginTop="24dp" | ||
| app:layout_constraintStart_toStartOf="parent" | ||
| app:layout_constraintEnd_toEndOf="parent" | ||
| app:layout_constraintTop_toBottomOf="@id/fragment_convert" | ||
| app:layout_constraintBottom_toTopOf="@id/label_format_info" /> | ||
|
|
||
| <TextView | ||
| android:id="@+id/label_format_info" | ||
| android:layout_width="0dp" | ||
| android:layout_height="wrap_content" | ||
| android:layout_marginTop="24dp" | ||
| android:text="@string/convert_format_info" | ||
| app:layout_constraintWidth_max="400dp" | ||
| app:layout_constraintStart_toStartOf="parent" | ||
| app:layout_constraintEnd_toEndOf="parent" | ||
| app:layout_constraintTop_toBottomOf="@id/divider" | ||
| app:layout_constraintBottom_toBottomOf="parent" /> | ||
|
|
||
| </androidx.constraintlayout.widget.ConstraintLayout> | ||
|
|
||
| </ScrollView> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,123 @@ | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| android:layout_width="match_parent" | ||
| android:layout_height="match_parent" | ||
| xmlns:app="http://schemas.android.com/apk/res-auto"> | ||
|
|
||
| <TextView | ||
| android:id="@+id/label_format" | ||
| android:layout_width="wrap_content" | ||
| android:layout_height="0dp" | ||
| android:text="@string/convert_format" | ||
| app:layout_constraintTop_toTopOf="@id/spinner_format" | ||
| app:layout_constraintBottom_toBottomOf="@id/spinner_format" | ||
| app:layout_constraintStart_toStartOf="parent" /> | ||
|
|
||
| <TextView | ||
| android:id="@+id/label_block_size" | ||
| android:layout_width="wrap_content" | ||
| android:layout_height="0dp" | ||
| android:text="@string/convert_block_size" | ||
| app:layout_constraintTop_toTopOf="@id/spinner_block_size" | ||
| app:layout_constraintBottom_toBottomOf="@id/spinner_block_size" | ||
| app:layout_constraintStart_toStartOf="parent" /> | ||
|
|
||
| <TextView | ||
| android:id="@+id/label_compression" | ||
| android:layout_width="wrap_content" | ||
| android:layout_height="0dp" | ||
| android:text="@string/convert_compression" | ||
| app:layout_constraintTop_toTopOf="@id/spinner_compression" | ||
| app:layout_constraintBottom_toBottomOf="@id/spinner_compression" | ||
| app:layout_constraintStart_toStartOf="parent" /> | ||
|
|
||
| <TextView | ||
| android:id="@+id/label_compression_level" | ||
| android:layout_width="wrap_content" | ||
| android:layout_height="0dp" | ||
| android:text="@string/convert_compression_level" | ||
| app:layout_constraintTop_toTopOf="@id/spinner_compression_level" | ||
| app:layout_constraintBottom_toBottomOf="@id/spinner_compression_level" | ||
| app:layout_constraintStart_toStartOf="parent" /> | ||
|
|
||
| <TextView | ||
| android:id="@+id/label_remove_junk_data" | ||
| android:layout_width="wrap_content" | ||
| android:layout_height="0dp" | ||
| android:text="@string/convert_remove_junk_data" | ||
| app:layout_constraintTop_toTopOf="@id/checkbox_remove_junk_data" | ||
| app:layout_constraintBottom_toBottomOf="@id/checkbox_remove_junk_data" | ||
| app:layout_constraintStart_toStartOf="parent" /> | ||
|
|
||
| <androidx.constraintlayout.widget.Barrier | ||
| android:id="@+id/label_barrier" | ||
| android:layout_width="wrap_content" | ||
| android:layout_height="wrap_content" | ||
| app:barrierDirection="end" | ||
| app:constraint_referenced_ids="label_format,label_block_size,label_compression,label_compression_level" /> | ||
|
|
||
| <Spinner | ||
| android:id="@+id/spinner_format" | ||
| android:layout_width="0dp" | ||
| android:layout_height="wrap_content" | ||
| android:layout_marginStart="16dp" | ||
| android:layout_marginTop="16dp" | ||
| app:layout_constraintStart_toEndOf="@id/label_barrier" | ||
| app:layout_constraintEnd_toEndOf="parent" | ||
| app:layout_constraintTop_toTopOf="parent" /> | ||
|
|
||
| <Spinner | ||
| android:id="@+id/spinner_block_size" | ||
| android:layout_width="0dp" | ||
| android:layout_height="wrap_content" | ||
| android:layout_marginStart="16dp" | ||
| android:layout_marginTop="16dp" | ||
| android:gravity="end" | ||
| app:layout_constraintStart_toEndOf="@id/label_barrier" | ||
| app:layout_constraintEnd_toEndOf="parent" | ||
| app:layout_constraintTop_toBottomOf="@id/spinner_format" /> | ||
|
|
||
| <Spinner | ||
| android:id="@+id/spinner_compression" | ||
| android:layout_width="0dp" | ||
| android:layout_height="wrap_content" | ||
| android:layout_marginStart="16dp" | ||
| android:layout_marginTop="16dp" | ||
| android:gravity="end" | ||
| app:layout_constraintStart_toEndOf="@id/label_barrier" | ||
| app:layout_constraintEnd_toEndOf="parent" | ||
| app:layout_constraintTop_toBottomOf="@id/spinner_block_size" /> | ||
|
|
||
| <Spinner | ||
| android:id="@+id/spinner_compression_level" | ||
| android:layout_width="0dp" | ||
| android:layout_height="wrap_content" | ||
| android:layout_marginStart="16dp" | ||
| android:layout_marginTop="16dp" | ||
| android:gravity="end" | ||
| app:layout_constraintStart_toEndOf="@id/label_barrier" | ||
| app:layout_constraintEnd_toEndOf="parent" | ||
| app:layout_constraintTop_toBottomOf="@id/spinner_compression" /> | ||
|
|
||
| <CheckBox | ||
| android:id="@+id/checkbox_remove_junk_data" | ||
| android:layout_width="wrap_content" | ||
| android:layout_height="wrap_content" | ||
| android:layout_marginStart="16dp" | ||
| android:layout_marginEnd="8dp" | ||
| android:layout_marginTop="16dp" | ||
| app:layout_constraintHorizontal_bias="1.0" | ||
| app:layout_constraintStart_toEndOf="@id/label_remove_junk_data" | ||
| app:layout_constraintEnd_toEndOf="parent" | ||
| app:layout_constraintTop_toBottomOf="@id/spinner_compression_level" /> | ||
|
|
||
| <Button | ||
| android:id="@+id/button_convert" | ||
| android:layout_width="0dp" | ||
| android:layout_height="wrap_content" | ||
| android:text="@string/convert_convert" | ||
| app:layout_constraintStart_toStartOf="parent" | ||
| app:layout_constraintEnd_toEndOf="parent" | ||
| app:layout_constraintTop_toBottomOf="@id/checkbox_remove_junk_data" /> | ||
|
|
||
| </androidx.constraintlayout.widget.ConstraintLayout> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| add_library(androidcommon STATIC | ||
| AndroidCommon.cpp | ||
| AndroidCommon.h | ||
| IDCache.cpp | ||
| IDCache.h | ||
| ) | ||
|
|
||
| target_link_libraries(androidcommon | ||
| PRIVATE | ||
| android | ||
| log | ||
| "-Wl,--no-warn-mismatch" | ||
| "-Wl,--whole-archive" | ||
| "-Wl,--no-whole-archive" | ||
| ) |