1
0
Fork 0
forked from len0rd/rockbox
foxbox/android/src/org/rockbox/RockboxYesno.java
Thomas Martitz ef38221602 android: Hopefully fix a rare hang of the UI.
Sometimes (and perhaps only on some devices) Android's YesNo dialog
loses focus and is put to the background. Since the native code waits on the
result (which is then impossible to happen) it would become impossible
to further control Rockbox. This is an attempt to fix as I cannot reproduce
the problem on my device(s).

Change-Id: Iff849ff4be5e8f41922fb7d36491d860486c6441
2013-01-18 09:49:46 +01:00

79 lines
2.7 KiB
Java

/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2010 Jonathan Gordon
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
package org.rockbox;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
public class RockboxYesno
{
private class Listener implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener
{
/* default to "No" if onClick isn't called at all */
private boolean result = false;
/* called when the user presses the Yes or the No button */
@Override
public void onClick(DialogInterface dialog, int which)
{
result = (which == DialogInterface.BUTTON_POSITIVE);
}
/* onDismiss is (hopefully) also called when the dialog is closed
* for any reason other than clicking yes or no. This should
* avoid the native code waiting for the result indefinitely in
* case the dialog just disappears */
@Override
public void onDismiss(DialogInterface dialog)
{
put_result(result);
}
}
private void yesno_display(final String text, final String yes, final String no)
{
final Activity c = RockboxService.getInstance().getActivity();
c.runOnUiThread(new Runnable() {
public void run()
{
Listener l = new Listener();
new AlertDialog.Builder(c)
.setTitle(R.string.KbdInputTitle)
.setIcon(R.drawable.icon)
.setMessage(text)
.setPositiveButton(yes, l)
.setNegativeButton(no, l)
.show()
.setOnDismissListener(l);
}
});
}
private boolean is_usable()
{
return RockboxService.getInstance().getActivity() != null;
}
private native void put_result(boolean result);
}