diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java index 8d6fed4e2..35c0d3139 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java @@ -2495,6 +2495,14 @@ public class BoardDelegate extends DelegateBase Action.ENABLE_SMS_ASK ); } } + if ( m_connTypes.contains( CommsConnType.COMMS_CONN_RELAY ) ) { + if ( !RelayService.relayEnabled( m_activity ) ) { + showConfirmThen( R.string.warn_relay_disabled, + R.string.button_enable_relay, + R.string.button_later, + Action.ENABLE_RELAY_DO ); + } + } } private void trySendChats() diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DelegateBase.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DelegateBase.java index f602a2987..e812b5475 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DelegateBase.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DelegateBase.java @@ -638,7 +638,7 @@ public class DelegateBase implements DlgClickNotify, BTService.enable(); break; case ENABLE_RELAY_DO: - RelayService.enable( m_activity ); + RelayService.setEnabled( m_activity, true ); break; default: Assert.fail(); diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DlgDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DlgDelegate.java index 33a922946..9d206ea1d 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/DlgDelegate.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/DlgDelegate.java @@ -122,7 +122,6 @@ public class DlgDelegate { ENABLE_SMS_DO, ENABLE_BT_DO, ENABLE_RELAY_DO, - __LAST } public static class ActionPair { diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/PrefsDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/PrefsDelegate.java index 3a09e1cc6..e11a3ab5e 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/PrefsDelegate.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/PrefsDelegate.java @@ -59,6 +59,7 @@ public class PrefsDelegate extends DelegateBase R.string.key_force_radio, R.string.key_disable_nag, R.string.key_disable_nag_solo, + R.string.key_disable_relay, }; private static Map s_keysHash = null; @@ -226,6 +227,9 @@ public class PrefsDelegate extends DelegateBase case R.string.key_disable_nag_solo: NagTurnReceiver.resetNagsDisabled( m_activity ); break; + case R.string.key_disable_relay: + RelayService.enabledChanged( m_activity ); + break; default: Assert.fail(); break; diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/RelayService.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/RelayService.java index 4a1cb9b79..446a04b40 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/RelayService.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/RelayService.java @@ -80,6 +80,7 @@ public class RelayService extends XWService UPGRADE, INVITE, GOT_INVITE, + STOP, } private static final String MSGS_ARR = "MSGS_ARR"; @@ -162,8 +163,18 @@ public class RelayService extends XWService return enabled; } - public static void enable( Context context ) { - XWPrefs.setPrefsBoolean( context, R.string.key_disable_relay, false ); + public static void enabledChanged( Context context ) { + boolean enabled = relayEnabled( context ); + if ( enabled ) { + startService( context ); + } else { + stopService( context ); + } + } + + public static void setEnabled( Context context, boolean enabled ) { + XWPrefs.setPrefsBoolean( context, R.string.key_disable_relay, enabled ); + enabledChanged( context ); } public static void startService( Context context ) @@ -173,6 +184,12 @@ public class RelayService extends XWService context.startService( intent ); } + private static void stopService( Context context ) + { + Intent intent = getIntentTo( context, MsgCmds.STOP ); + context.startService( intent ); + } + public static void inviteRemote( Context context, int destDevID, String relayID, NetLaunchInfo nli ) { @@ -439,6 +456,10 @@ public class RelayService extends XWService } RelayReceiver.setTimer( this ); break; + case STOP: + stopThreads(); + stopSelf(); + break; default: Assert.fail(); } @@ -489,19 +510,10 @@ public class RelayService extends XWService } } - // private void setupNotification( long rowid ) - // { - // Intent intent = GamesListDelegate.makeRowidIntent( this, rowid ); - // String msg = LocUtils.getString( this, R.string.notify_body_fmt, - // GameUtils.getName( this, rowid ) ); - // Utils.postNotification( this, intent, R.string.notify_title, - // msg, (int)rowid ); - // } - private boolean startFetchThreadIf() { // DbgUtils.logf( "startFetchThreadIf()" ); - boolean handled = !XWApp.UDP_ENABLED; + boolean handled = relayEnabled( this ) && !XWApp.UDP_ENABLED; if ( handled && null == m_fetchThread ) { m_fetchThread = new Thread( null, new Runnable() { public void run() {