Android: Convert MotionAlertDialog to Kotlin
This commit is contained in:
parent
5171290bdb
commit
dfafa74ba1
|
@ -1,99 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
package org.dolphinemu.dolphinemu.features.input.ui;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.view.InputDevice;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import org.dolphinemu.dolphinemu.features.input.model.ControllerInterface;
|
||||
import org.dolphinemu.dolphinemu.features.input.model.MappingCommon;
|
||||
import org.dolphinemu.dolphinemu.features.input.model.view.InputMappingControlSetting;
|
||||
|
||||
/**
|
||||
* {@link AlertDialog} derivative that listens for
|
||||
* motion events from controllers and joysticks.
|
||||
*/
|
||||
public final class MotionAlertDialog extends AlertDialog
|
||||
{
|
||||
private final Activity mActivity;
|
||||
private final InputMappingControlSetting mSetting;
|
||||
private final boolean mAllDevices;
|
||||
private boolean mRunning = false;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param activity The current {@link Activity}.
|
||||
* @param setting The setting to show this dialog for.
|
||||
* @param allDevices Whether to detect inputs from devices other than the configured one.
|
||||
*/
|
||||
public MotionAlertDialog(Activity activity, InputMappingControlSetting setting,
|
||||
boolean allDevices)
|
||||
{
|
||||
super(activity);
|
||||
|
||||
mActivity = activity;
|
||||
mSetting = setting;
|
||||
mAllDevices = allDevices;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart()
|
||||
{
|
||||
super.onStart();
|
||||
|
||||
mRunning = true;
|
||||
new Thread(() ->
|
||||
{
|
||||
String result = MappingCommon.detectInput(mSetting.getController(), mAllDevices);
|
||||
mActivity.runOnUiThread(() ->
|
||||
{
|
||||
if (mRunning)
|
||||
{
|
||||
mSetting.setValue(result);
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
}).start();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop()
|
||||
{
|
||||
super.onStop();
|
||||
mRunning = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchKeyEvent(KeyEvent event)
|
||||
{
|
||||
ControllerInterface.dispatchKeyEvent(event);
|
||||
|
||||
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.isLongPress())
|
||||
{
|
||||
// Special case: Let the user cancel by long-pressing Back (intended for non-touch devices)
|
||||
mSetting.clearValue();
|
||||
dismiss();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchGenericMotionEvent(@NonNull MotionEvent event)
|
||||
{
|
||||
if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0)
|
||||
{
|
||||
// Special case: Let the user cancel by touching an on-screen button
|
||||
return super.dispatchGenericMotionEvent(event);
|
||||
}
|
||||
|
||||
ControllerInterface.dispatchGenericMotionEvent(event);
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
package org.dolphinemu.dolphinemu.features.input.ui
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.InputDevice
|
||||
import android.view.KeyEvent
|
||||
import android.view.MotionEvent
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import org.dolphinemu.dolphinemu.features.input.model.ControllerInterface
|
||||
import org.dolphinemu.dolphinemu.features.input.model.MappingCommon
|
||||
import org.dolphinemu.dolphinemu.features.input.model.view.InputMappingControlSetting
|
||||
|
||||
/**
|
||||
* [AlertDialog] derivative that listens for
|
||||
* motion events from controllers and joysticks.
|
||||
*
|
||||
* @param activity The current [Activity].
|
||||
* @param setting The setting to show this dialog for.
|
||||
* @param allDevices Whether to detect inputs from devices other than the configured one.
|
||||
*/
|
||||
class MotionAlertDialog(
|
||||
private val activity: Activity,
|
||||
private val setting: InputMappingControlSetting,
|
||||
private val allDevices: Boolean
|
||||
) : AlertDialog(activity) {
|
||||
private var running = false
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
|
||||
running = true
|
||||
Thread {
|
||||
val result = MappingCommon.detectInput(setting.controller, allDevices)
|
||||
activity.runOnUiThread {
|
||||
if (running) {
|
||||
setting.value = result
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
running = false
|
||||
}
|
||||
|
||||
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
|
||||
ControllerInterface.dispatchKeyEvent(event)
|
||||
if (event.keyCode == KeyEvent.KEYCODE_BACK && event.isLongPress) {
|
||||
// Special case: Let the user cancel by long-pressing Back (intended for non-touch devices)
|
||||
setting.clearValue()
|
||||
dismiss()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun dispatchGenericMotionEvent(event: MotionEvent): Boolean {
|
||||
if (event.source and InputDevice.SOURCE_CLASS_POINTER != 0) {
|
||||
// Special case: Let the user cancel by touching an on-screen button
|
||||
return super.dispatchGenericMotionEvent(event)
|
||||
}
|
||||
|
||||
ControllerInterface.dispatchGenericMotionEvent(event)
|
||||
return true
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue