mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-14 07:25:46 -04:00
CDImagePBP: Add multi-disc support
This commit is contained in:
@ -1662,19 +1662,28 @@ DEFINE_JNI_ARGS_METHOD(jstring, AndroidHostInterface_importBIOSImage, jobject ob
|
||||
return env->NewStringUTF(hash.ToString().c_str());
|
||||
}
|
||||
|
||||
DEFINE_JNI_ARGS_METHOD(jobjectArray, AndroidHostInterface_getMediaPlaylistPaths, jobject obj)
|
||||
|
||||
DEFINE_JNI_ARGS_METHOD(jboolean, AndroidHostInterface_hasMediaSubImages, jobject obj)
|
||||
{
|
||||
if (!System::IsValid())
|
||||
return false;
|
||||
|
||||
return System::HasMediaSubImages();
|
||||
}
|
||||
|
||||
DEFINE_JNI_ARGS_METHOD(jobjectArray, AndroidHostInterface_getMediaSubImageTitles, jobject obj)
|
||||
{
|
||||
if (!System::IsValid())
|
||||
return nullptr;
|
||||
|
||||
const u32 count = System::GetMediaPlaylistCount();
|
||||
const u32 count = System::GetMediaSubImageCount();
|
||||
if (count == 0)
|
||||
return nullptr;
|
||||
|
||||
jobjectArray arr = env->NewObjectArray(static_cast<jsize>(count), s_String_class, nullptr);
|
||||
for (u32 i = 0; i < count; i++)
|
||||
{
|
||||
jstring str = env->NewStringUTF(System::GetMediaPlaylistPath(i).c_str());
|
||||
jstring str = env->NewStringUTF(System::GetMediaSubImageTitle(i).c_str());
|
||||
env->SetObjectArrayElement(arr, static_cast<jsize>(i), str);
|
||||
env->DeleteLocalRef(str);
|
||||
}
|
||||
@ -1682,24 +1691,24 @@ DEFINE_JNI_ARGS_METHOD(jobjectArray, AndroidHostInterface_getMediaPlaylistPaths,
|
||||
return arr;
|
||||
}
|
||||
|
||||
DEFINE_JNI_ARGS_METHOD(jint, AndroidHostInterface_getMediaPlaylistIndex, jobject obj)
|
||||
DEFINE_JNI_ARGS_METHOD(jint, AndroidHostInterface_getMediaSubImageIndex, jobject obj)
|
||||
{
|
||||
if (!System::IsValid())
|
||||
return -1;
|
||||
|
||||
return System::GetMediaPlaylistIndex();
|
||||
return System::GetMediaSubImageIndex();
|
||||
}
|
||||
|
||||
DEFINE_JNI_ARGS_METHOD(jboolean, AndroidHostInterface_setMediaPlaylistIndex, jobject obj, jint index)
|
||||
DEFINE_JNI_ARGS_METHOD(jboolean, AndroidHostInterface_switchMediaSubImage, jobject obj, jint index)
|
||||
{
|
||||
if (!System::IsValid() || index < 0 || static_cast<u32>(index) >= System::GetMediaPlaylistCount())
|
||||
if (!System::IsValid() || index < 0 || static_cast<u32>(index) >= System::GetMediaSubImageCount())
|
||||
return false;
|
||||
|
||||
AndroidHostInterface* hi = AndroidHelpers::GetNativeClass(env, obj);
|
||||
hi->RunOnEmulationThread([index, hi]() {
|
||||
if (System::IsValid())
|
||||
{
|
||||
if (!System::SwitchMediaFromPlaylist(index))
|
||||
if (!System::SwitchMediaSubImage(static_cast<u32>(index)))
|
||||
hi->AddOSDMessage("Disc switch failed. Please make sure the file exists.");
|
||||
}
|
||||
});
|
||||
|
@ -139,11 +139,13 @@ public class AndroidHostInterface {
|
||||
|
||||
public native void setFastForwardEnabled(boolean enabled);
|
||||
|
||||
public native String[] getMediaPlaylistPaths();
|
||||
public native boolean hasMediaSubImages();
|
||||
|
||||
public native int getMediaPlaylistIndex();
|
||||
public native String[] getMediaSubImageTitles();
|
||||
|
||||
public native boolean setMediaPlaylistIndex(int index);
|
||||
public native int getMediaSubImageIndex();
|
||||
|
||||
public native boolean switchMediaSubImage(int index);
|
||||
|
||||
public native boolean setMediaFilename(String filename);
|
||||
|
||||
|
@ -690,9 +690,23 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
||||
}
|
||||
}
|
||||
|
||||
private void startDiscChangeFromFile() {
|
||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
intent.setType("*/*");
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
startActivityForResult(Intent.createChooser(intent, getString(R.string.main_activity_choose_disc_image)), REQUEST_CHANGE_DISC_FILE);
|
||||
}
|
||||
|
||||
private void showDiscChangeMenu() {
|
||||
final String[] paths = AndroidHostInterface.getInstance().getMediaPlaylistPaths();
|
||||
final int currentPath = AndroidHostInterface.getInstance().getMediaPlaylistIndex();
|
||||
final AndroidHostInterface hi = AndroidHostInterface.getInstance();
|
||||
|
||||
if (!hi.hasMediaSubImages()) {
|
||||
startDiscChangeFromFile();
|
||||
return;
|
||||
}
|
||||
|
||||
final String[] paths = AndroidHostInterface.getInstance().getMediaSubImageTitles();
|
||||
final int currentPath = AndroidHostInterface.getInstance().getMediaSubImageIndex();
|
||||
final int numPaths = (paths != null) ? paths.length : 0;
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
@ -707,12 +721,9 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
|
||||
onMenuClosed();
|
||||
|
||||
if (i < numPaths) {
|
||||
AndroidHostInterface.getInstance().setMediaPlaylistIndex(i);
|
||||
AndroidHostInterface.getInstance().switchMediaSubImage(i);
|
||||
} else {
|
||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
intent.setType("*/*");
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
startActivityForResult(Intent.createChooser(intent, getString(R.string.main_activity_choose_disc_image)), REQUEST_CHANGE_DISC_FILE);
|
||||
startDiscChangeFromFile();
|
||||
}
|
||||
});
|
||||
builder.setOnCancelListener(dialogInterface -> onMenuClosed());
|
||||
|
Reference in New Issue
Block a user