mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-04 20:46:28 +01:00
when user tries to turn on the preference disabling relay play and has
relay games in play, warn, and only disable if confirmed.
This commit is contained in:
parent
aab779f258
commit
372b0c2f1e
14 changed files with 495 additions and 306 deletions
File diff suppressed because it is too large
Load diff
|
@ -2108,9 +2108,18 @@
|
|||
relay.\n\nYou can enable relay play now, or later.
|
||||
</string>
|
||||
|
||||
<string name="warn_relay_havegames">Are you sure you want to
|
||||
disable play using the relay?</string>
|
||||
|
||||
<plurals name="warn_relay_games_fmt">
|
||||
<item quantity="one">\n\n(You have one game using it.)</item>
|
||||
<item quantity="other">\n\n(You have %1$d games using it.)</item>
|
||||
</plurals>
|
||||
|
||||
<string name="button_enable_sms">Enable SMS</string>
|
||||
<string name="button_enable_bt">Enable Bluetooth</string>
|
||||
<string name="button_enable_relay">Enable Relay play</string>
|
||||
<string name="button_disable_relay">Disable Relay play</string>
|
||||
<string name="button_later">Later</string>
|
||||
|
||||
<!-- -->
|
||||
|
|
|
@ -305,11 +305,13 @@
|
|||
android:entryValues="@array/connect_frequencies_values"
|
||||
android:defaultValue="900"
|
||||
/>
|
||||
<CheckBoxPreference android:key="@string/key_disable_relay"
|
||||
android:title="@string/disable_relay"
|
||||
android:summary="@string/disable_relay_summary"
|
||||
android:defaultValue="false"
|
||||
/>
|
||||
|
||||
<org.eehouse.android.xw4.RelayCheckBoxPreference
|
||||
android:key="@string/key_disable_relay"
|
||||
android:title="@string/disable_relay"
|
||||
android:summary="@string/disable_relay_summary"
|
||||
android:defaultValue="false"
|
||||
/>
|
||||
</PreferenceScreen>
|
||||
|
||||
<CheckBoxPreference android:key="@string/key_notify_sound"
|
||||
|
|
|
@ -1826,9 +1826,16 @@
|
|||
siht ecived. On sevom lliw eb tnes ro deviecer aiv eht
|
||||
yaler.\n\nUoy nac elbane yaler yalp ,won ro retal.
|
||||
</string>
|
||||
<string name="warn_relay_havegames">Era uoy erus uoy tnaw ot
|
||||
elbasid yalp gnisu eht ?yaler</string>
|
||||
<plurals name="warn_relay_games_fmt">
|
||||
<item quantity="one">\n\nuOy( evah eno emag gnisu ti.)</item>
|
||||
<item quantity="other">\n\nuOy( evah %1$d semag gnisu ti.)</item>
|
||||
</plurals>
|
||||
<string name="button_enable_sms">Elbane SMS</string>
|
||||
<string name="button_enable_bt">Elbane Htooteulb</string>
|
||||
<string name="button_enable_relay">Elbane Yaler yalp</string>
|
||||
<string name="button_disable_relay">Elbasid Yaler yalp</string>
|
||||
<string name="button_later">Retal</string>
|
||||
<!-- -->
|
||||
<string name="gamel_menu_checkupdates">Kcehc rof setadpu</string>
|
||||
|
|
|
@ -1826,9 +1826,16 @@
|
|||
THIS DEVICE. NO MOVES WILL BE SENT OR RECEIVED VIA THE
|
||||
RELAY.\n\nYOU CAN ENABLE RELAY PLAY NOW, OR LATER.
|
||||
</string>
|
||||
<string name="warn_relay_havegames">ARE YOU SURE YOU WANT TO
|
||||
DISABLE PLAY USING THE RELAY?</string>
|
||||
<plurals name="warn_relay_games_fmt">
|
||||
<item quantity="one">\n\n(YOU HAVE ONE GAME USING IT.)</item>
|
||||
<item quantity="other">\n\n(YOU HAVE %1$d GAMES USING IT.)</item>
|
||||
</plurals>
|
||||
<string name="button_enable_sms">ENABLE SMS</string>
|
||||
<string name="button_enable_bt">ENABLE BLUETOOTH</string>
|
||||
<string name="button_enable_relay">ENABLE RELAY PLAY</string>
|
||||
<string name="button_disable_relay">DISABLE RELAY PLAY</string>
|
||||
<string name="button_later">LATER</string>
|
||||
<!-- -->
|
||||
<string name="gamel_menu_checkupdates">CHECK FOR UPDATES</string>
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
/* -*- compile-command: "find-and-ant.sh debug install"; -*- */
|
||||
/*
|
||||
* Copyright 2009 - 2016 by Eric House (xwords@eehouse.org). All
|
||||
* rights reserved.
|
||||
*
|
||||
* 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 program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
package org.eehouse.android.xw4;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import org.eehouse.android.xw4.DlgDelegate.Action;
|
||||
|
||||
public abstract class ConfirmingCheckBoxPreference extends CheckBoxPreference {
|
||||
private boolean m_attached = false;
|
||||
|
||||
public ConfirmingCheckBoxPreference( Context context, AttributeSet attrs )
|
||||
{
|
||||
super( context, attrs );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToActivity() {
|
||||
super.onAttachedToActivity();
|
||||
m_attached = true;
|
||||
}
|
||||
|
||||
abstract void checkIfConfirmed();
|
||||
|
||||
@Override
|
||||
public void setChecked( boolean checked )
|
||||
{
|
||||
if ( checked && m_attached && getContext() instanceof PrefsActivity ) {
|
||||
checkIfConfirmed();
|
||||
} else {
|
||||
super.setChecked( checked );
|
||||
}
|
||||
}
|
||||
|
||||
// Because s_this.super.setChecked() isn't allowed...
|
||||
protected void super_setChecked( boolean checked )
|
||||
{
|
||||
super.setChecked( checked );
|
||||
}
|
||||
}
|
|
@ -752,6 +752,28 @@ public class DBUtils {
|
|||
return result;
|
||||
}
|
||||
|
||||
public static int getRelayGameCount( Context context ) {
|
||||
int result = 0;
|
||||
String[] columns = { DBHelper.CONTYPE };
|
||||
String selection = String.format( "%s = 0", DBHelper.GAME_OVER );
|
||||
initDB( context );
|
||||
synchronized( s_dbHelper ) {
|
||||
SQLiteDatabase db = s_dbHelper.getReadableDatabase();
|
||||
Cursor cursor = db.query( DBHelper.TABLE_NAME_SUM, columns,
|
||||
selection, null, null, null, null );
|
||||
int indx = cursor.getColumnIndex( DBHelper.CONTYPE );
|
||||
while ( cursor.moveToNext() ) {
|
||||
CommsConnTypeSet typs = new CommsConnTypeSet( cursor.getInt(indx) );
|
||||
if ( typs.contains(CommsConnType.COMMS_CONN_RELAY) ) {
|
||||
++result;
|
||||
}
|
||||
}
|
||||
cursor.close();
|
||||
db.close();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static long[] getRowIDsFor( Context context, String relayID )
|
||||
{
|
||||
long[] result = null;
|
||||
|
|
|
@ -480,6 +480,11 @@ public class DelegateBase implements DlgClickNotify,
|
|||
m_dlgDelegate.showConfirmThen( msg, posButton, negButton, action );
|
||||
}
|
||||
|
||||
protected void showConfirmThen( String msg, int posButton, int negButton, Action action )
|
||||
{
|
||||
m_dlgDelegate.showConfirmThen( msg, posButton, negButton, action );
|
||||
}
|
||||
|
||||
protected void showConfirmThen( int msg, int posButton, int negButton,
|
||||
Action action, Object... params )
|
||||
{
|
||||
|
@ -639,6 +644,7 @@ public class DelegateBase implements DlgClickNotify,
|
|||
break;
|
||||
case ENABLE_RELAY_DO:
|
||||
RelayService.setEnabled( m_activity, true );
|
||||
handled = true;
|
||||
break;
|
||||
default:
|
||||
Assert.fail();
|
||||
|
|
|
@ -122,6 +122,7 @@ public class DlgDelegate {
|
|||
ENABLE_SMS_DO,
|
||||
ENABLE_BT_DO,
|
||||
ENABLE_RELAY_DO,
|
||||
DISABLE_RELAY_DO,
|
||||
}
|
||||
|
||||
public static class ActionPair {
|
||||
|
@ -377,6 +378,11 @@ public class DlgDelegate {
|
|||
showConfirmThen( null, getString(msg), posButton, negButton, action, null );
|
||||
}
|
||||
|
||||
public void showConfirmThen( String msg, int posButton, int negButton, Action action )
|
||||
{
|
||||
showConfirmThen( null, msg, posButton, negButton, action, null );
|
||||
}
|
||||
|
||||
public void showConfirmThen( int msg, int posButton, int negButton, Action action,
|
||||
Object... params )
|
||||
{
|
||||
|
|
|
@ -106,13 +106,19 @@ public class PrefsActivity extends PreferenceActivity
|
|||
m_dlgt.showOKOnlyDialog( msg );
|
||||
}
|
||||
|
||||
public void showNotAgainDlgThen( int msgID, int prefsKey,
|
||||
public void showNotAgainDlgThen( int msgID, int prefsKey,
|
||||
DlgDelegate.Action action )
|
||||
{
|
||||
m_dlgt.showNotAgainDlgThen( msgID, prefsKey, action );
|
||||
}
|
||||
|
||||
protected void showConfirmThen( int msg, int posButton, int negButton,
|
||||
protected void showConfirmThen( int msg, int posButton, int negButton,
|
||||
Action action )
|
||||
{
|
||||
m_dlgt.showConfirmThen( msg, posButton, negButton, action );
|
||||
}
|
||||
|
||||
protected void showConfirmThen( String msg, int posButton, int negButton,
|
||||
Action action )
|
||||
{
|
||||
m_dlgt.showConfirmThen( msg, posButton, negButton, action );
|
||||
|
|
|
@ -240,11 +240,24 @@ public class PrefsDelegate extends DelegateBase
|
|||
@Override
|
||||
public void dlgButtonClicked( Action action, int button, Object[] params )
|
||||
{
|
||||
if ( AlertDialog.BUTTON_POSITIVE == button
|
||||
&& action == Action.ENABLE_SMS_DO ) {
|
||||
XWPrefs.setSMSEnabled( m_activity, true );
|
||||
SMSCheckBoxPreference.setChecked();
|
||||
} else {
|
||||
DbgUtils.logf( "PrefsDelegate.dlgButtonClicked(%s)", action.toString() );
|
||||
boolean handled = AlertDialog.BUTTON_POSITIVE == button;
|
||||
if ( handled ) {
|
||||
switch ( action ) {
|
||||
case ENABLE_SMS_DO:
|
||||
XWPrefs.setSMSEnabled( m_activity, true );
|
||||
SMSCheckBoxPreference.setChecked();
|
||||
break;
|
||||
case DISABLE_RELAY_DO:
|
||||
RelayService.setEnabled( m_activity, false );
|
||||
RelayCheckBoxPreference.setChecked();
|
||||
break;
|
||||
default:
|
||||
handled = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !handled ) {
|
||||
super.dlgButtonClicked( action, button, params );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
/* -*- compile-command: "find-and-ant.sh debug install"; -*- */
|
||||
/*
|
||||
* Copyright 2009 - 2012 by Eric House (xwords@eehouse.org). All
|
||||
* rights reserved.
|
||||
*
|
||||
* 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 program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
package org.eehouse.android.xw4;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import org.eehouse.android.xw4.DlgDelegate.Action;
|
||||
import org.eehouse.android.xw4.loc.LocUtils;
|
||||
|
||||
public class RelayCheckBoxPreference extends ConfirmingCheckBoxPreference {
|
||||
private static ConfirmingCheckBoxPreference s_this = null;
|
||||
|
||||
public RelayCheckBoxPreference( Context context, AttributeSet attrs )
|
||||
{
|
||||
super( context, attrs );
|
||||
s_this = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void checkIfConfirmed() {
|
||||
PrefsActivity activity = (PrefsActivity)getContext();
|
||||
int count = DBUtils.getRelayGameCount( activity );
|
||||
if ( 0 < count ) {
|
||||
String msg = LocUtils.getString( activity,
|
||||
R.string.warn_relay_havegames );
|
||||
msg += LocUtils.getQuantityString( activity, R.plurals.warn_relay_games_fmt,
|
||||
count, count );
|
||||
activity.showConfirmThen( msg, R.string.button_disable_relay,
|
||||
android.R.string.cancel,
|
||||
Action.DISABLE_RELAY_DO );
|
||||
}
|
||||
}
|
||||
|
||||
protected static void setChecked()
|
||||
{
|
||||
if ( null != s_this ) {
|
||||
s_this.super_setChecked( true );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1360,7 +1360,7 @@ public class RelayService extends XWService
|
|||
|
||||
private boolean shouldMaintainConnection()
|
||||
{
|
||||
boolean result = !relayEnabled( this )
|
||||
boolean result = relayEnabled( this )
|
||||
&& (XWApp.GCM_IGNORED || !s_gcmWorking);
|
||||
if ( result ) {
|
||||
long interval = Utils.getCurSeconds() - m_lastGamePacketReceived;
|
||||
|
|
|
@ -28,16 +28,12 @@ import android.view.View;
|
|||
|
||||
import org.eehouse.android.xw4.DlgDelegate.Action;
|
||||
|
||||
public class SMSCheckBoxPreference extends CheckBoxPreference {
|
||||
|
||||
private Context m_context;
|
||||
private boolean m_attached = false;
|
||||
private static SMSCheckBoxPreference s_this = null;
|
||||
public class SMSCheckBoxPreference extends ConfirmingCheckBoxPreference {
|
||||
private static ConfirmingCheckBoxPreference s_this = null;
|
||||
|
||||
public SMSCheckBoxPreference( Context context, AttributeSet attrs )
|
||||
{
|
||||
super( context, attrs );
|
||||
m_context = context;
|
||||
s_this = this;
|
||||
}
|
||||
|
||||
|
@ -45,21 +41,15 @@ public class SMSCheckBoxPreference extends CheckBoxPreference {
|
|||
protected void onAttachedToActivity()
|
||||
{
|
||||
super.onAttachedToActivity();
|
||||
if ( !XWApp.SMSSUPPORTED || !Utils.deviceSupportsSMS( m_context ) ) {
|
||||
if ( !XWApp.SMSSUPPORTED || !Utils.deviceSupportsSMS( getContext() ) ) {
|
||||
setEnabled( false );
|
||||
}
|
||||
m_attached = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChecked( boolean checked )
|
||||
{
|
||||
if ( checked && m_attached && m_context instanceof PrefsActivity ) {
|
||||
PrefsActivity activity = (PrefsActivity)m_context;
|
||||
activity.showSMSEnableDialog( Action.ENABLE_SMS_DO );
|
||||
} else {
|
||||
super.setChecked( checked );
|
||||
}
|
||||
protected void checkIfConfirmed() {
|
||||
PrefsActivity activity = (PrefsActivity)getContext();
|
||||
activity.showSMSEnableDialog( Action.ENABLE_SMS_DO );
|
||||
}
|
||||
|
||||
protected static void setChecked()
|
||||
|
@ -68,10 +58,4 @@ public class SMSCheckBoxPreference extends CheckBoxPreference {
|
|||
s_this.super_setChecked( true );
|
||||
}
|
||||
}
|
||||
|
||||
// Because s_this.super.setChecked() isn't allowed...
|
||||
private void super_setChecked( boolean checked )
|
||||
{
|
||||
super.setChecked( checked );
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue