From 939688e3cd629be0940c7ef1591dc0e37323cb2d Mon Sep 17 00:00:00 2001 From: Eric House Date: Thu, 9 Feb 2017 06:23:41 -0800 Subject: [PATCH] change DlgClickNotify methods to return boolean So dispatching over possible targets can stop when one has handled it. --- .../eehouse/android/xw4/BTInviteDelegate.java | 6 +++-- .../eehouse/android/xw4/BoardDelegate.java | 19 +++++++++++---- .../org/eehouse/android/xw4/ChatDelegate.java | 6 +++-- .../org/eehouse/android/xw4/DelegateBase.java | 13 +++++++--- .../android/xw4/DictBrowseDelegate.java | 3 ++- .../eehouse/android/xw4/DictsDelegate.java | 6 +++-- .../org/eehouse/android/xw4/DlgDelegate.java | 6 ++--- .../eehouse/android/xw4/DualpaneDelegate.java | 24 +++++++++++++++++-- .../eehouse/android/xw4/DwnldDelegate.java | 12 ++++++---- .../android/xw4/GameConfigDelegate.java | 12 ++++++---- .../android/xw4/GamesListDelegate.java | 18 +++++++++----- .../eehouse/android/xw4/PrefsDelegate.java | 6 +++-- .../android/xw4/RelayInviteDelegate.java | 12 +++++++--- .../android/xw4/SMSInviteDelegate.java | 12 ++++++---- .../android/xw4/StudyListDelegate.java | 6 +++-- .../org/eehouse/android/xw4/XWActivity.java | 12 +++++----- 16 files changed, 122 insertions(+), 51 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BTInviteDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BTInviteDelegate.java index 6cdbbab7c..d60464a73 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BTInviteDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BTInviteDelegate.java @@ -168,14 +168,16 @@ public class BTInviteDelegate extends InviteDelegate { // DlgDelegate.DlgClickNotify interface @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; switch( action ) { case OPEN_BT_PREFS_ACTION: BTService.openBTSettings( m_activity ); break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } + return handled; } } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardDelegate.java index f26a1de21..991b0ed26 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardDelegate.java @@ -1007,8 +1007,9 @@ public class BoardDelegate extends DelegateBase ////////////////////////////////////////////////// @Override - public void onPosButton( Action action, final Object[] params ) + public boolean onPosButton( Action action, final Object[] params ) { + boolean handled = true; JNICmd cmd = JNICmd.CMD_NONE; switch ( action ) { case ENABLE_RELAY_DO_OR: @@ -1100,17 +1101,20 @@ public class BoardDelegate extends DelegateBase } ); // FALLTHRU: so super gets called, before default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } if ( JNICmd.CMD_NONE != cmd ) { handleViaThread( cmd ); } + + return handled; } @Override - public void onNegButton( Action action, Object[] params ) + public boolean onNegButton( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case ENABLE_RELAY_DO_OR: m_dropOnDismiss = true; @@ -1125,13 +1129,15 @@ public class BoardDelegate extends DelegateBase showInviteChoicesThen( params ); break; default: - super.onNegButton( action, params ); + handled = super.onNegButton( action, params ); } + return handled; } @Override - public void onDismissed( Action action, Object[] params ) + public boolean onDismissed( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case ENABLE_RELAY_DO_OR: if ( m_dropOnDismiss ) { @@ -1145,7 +1151,10 @@ public class BoardDelegate extends DelegateBase case DELETE_AND_EXIT: finish(); break; + default: + handled = false; } + return handled; } public void inviteChoiceMade( Action action, InviteMeans means, diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java index df9dd9892..500c0ffa5 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java @@ -226,8 +226,9 @@ public class ChatDelegate extends DelegateBase { } @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case CLEAR_ACTION: DBUtils.clearChatHistory( m_activity, m_rowid ); @@ -236,8 +237,9 @@ public class ChatDelegate extends DelegateBase { layout.removeAllViews(); break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } + return handled; } public static boolean append( long rowid, String msg, int fromIndx ) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java index cae033cc5..76c777494 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java @@ -641,8 +641,9 @@ public class DelegateBase implements DlgClickNotify, ////////////////////////////////////////////////////////////////////// // DlgDelegate.DlgClickNotify interface ////////////////////////////////////////////////////////////////////// - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; DbgUtils.logd( TAG, "%s.posButtonClicked(%s)", getClass().getSimpleName(), action.toString() ); switch( action ) { @@ -664,12 +665,15 @@ public class DelegateBase implements DlgClickNotify, default: DbgUtils.logd( TAG, "unhandled action %s", action.toString() ); // Assert.assertTrue( !BuildConfig.DEBUG ); + handled = false; break; } + return handled; } - public void onNegButton( Action action, Object[] params ) + public boolean onNegButton( Action action, Object[] params ) { + boolean handled = true; // DbgUtils.logd( TAG, "%s.negButtonClicked(%s)", getClass().getSimpleName(), // action.toString() ); switch ( action ) { @@ -678,14 +682,17 @@ public class DelegateBase implements DlgClickNotify, break; default: DbgUtils.logd( TAG, "onNegButton: unhandled action %s", action.toString() ); + handled = false; break; } + return handled; } - public void onDismissed( Action action, Object[] params ) + public boolean onDismissed( Action action, Object[] params ) { DbgUtils.logd( TAG, "%s.dlgDismissed(%s)", getClass().getSimpleName(), action.toString() ); + return false; } public void inviteChoiceMade( Action action, DlgClickNotify.InviteMeans means, Object[] params ) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java index 1aac7b22b..56acabda7 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java @@ -300,10 +300,11 @@ public class DictBrowseDelegate extends DelegateBase // DlgDelegate.DlgClickNotify interface ////////////////////////////////////////////////// @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { Assert.assertTrue( !BuildConfig.DEBUG || Action.FINISH_ACTION==action ); finish(); + return true; } private void findButtonClicked() diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictsDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictsDelegate.java index c3d4390c1..8356584ed 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictsDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictsDelegate.java @@ -923,8 +923,9 @@ public class DictsDelegate extends ListDelegateBase // DlgDelegate.DlgClickNotify interface ////////////////////////////////////////////////////////////////////// @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; switch( action ) { case DELETE_DICT_ACTION: String[] names = (String[])params[0]; @@ -956,8 +957,9 @@ public class DictsDelegate extends ListDelegateBase mkListAdapter(); break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } + return handled; } private DictLoc itemToRealLoc( int item ) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegate.java index 48c58ea8d..8704b93c8 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegate.java @@ -308,9 +308,9 @@ public class DlgDelegate { public static enum InviteMeans { SMS, EMAIL, NFC, BLUETOOTH, CLIPBOARD, RELAY, WIFIDIRECT, }; - void onPosButton( Action action, Object[] params ); - void onNegButton( Action action, Object[] params ); - void onDismissed( Action action, Object[] params ); + boolean onPosButton( Action action, Object[] params ); + boolean onNegButton( Action action, Object[] params ); + boolean onDismissed( Action action, Object[] params ); void inviteChoiceMade( Action action, InviteMeans means, Object[] params ); } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DualpaneDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DualpaneDelegate.java index 54424b027..c382117cf 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DualpaneDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DualpaneDelegate.java @@ -98,12 +98,32 @@ public class DualpaneDelegate extends DelegateBase { } @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = false; MainActivity main = (MainActivity)m_activity; XWFragment[] frags = main.getVisibleFragments(); for ( XWFragment frag : frags ) { - frag.getDelegate().onPosButton( action, params ); + handled = frag.getDelegate().onPosButton( action, params ); + if ( handled ) { + break; + } } + return handled; + } + + @Override + public boolean onNegButton( Action action, Object[] params ) + { + boolean handled = false; + MainActivity main = (MainActivity)m_activity; + XWFragment[] frags = main.getVisibleFragments(); + for ( XWFragment frag : frags ) { + handled = frag.getDelegate().onNegButton( action, params ); + if ( handled ) { + break; + } + } + return handled; } } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DwnldDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DwnldDelegate.java index 580e26073..c90644419 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DwnldDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DwnldDelegate.java @@ -346,27 +346,31 @@ public class DwnldDelegate extends ListDelegateBase { } @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case STORAGE_CONFIRMED: doWithPermissions( (Uri[])params[0] ); break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } + return handled; } @Override - public void onNegButton( Action action, Object[] params ) + public boolean onNegButton( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case STORAGE_CONFIRMED: finish(); break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } + return handled; } private void mkListAdapter() diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameConfigDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameConfigDelegate.java index f67aeb575..5887f71cf 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameConfigDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameConfigDelegate.java @@ -680,8 +680,9 @@ public class GameConfigDelegate extends DelegateBase } @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; Assert.assertTrue( curThis() == this ); switch( action ) { case LOCKED_CHANGE_ACTION: @@ -707,13 +708,15 @@ public class GameConfigDelegate extends DelegateBase break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } + return handled; } @Override - public void onNegButton( Action action, Object[] params ) + public boolean onNegButton( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case DELETE_AND_EXIT: showConnAfterCheck(); @@ -722,9 +725,10 @@ public class GameConfigDelegate extends DelegateBase showDialog( DlgID.CHANGE_CONN ); break; default: - super.onNegButton( action, params ); + handled = super.onNegButton( action, params ); break; } + return handled; } public void onClick( View view ) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GamesListDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GamesListDelegate.java index 175290ada..2b858f92b 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GamesListDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GamesListDelegate.java @@ -1269,8 +1269,9 @@ public class GamesListDelegate extends ListDelegateBase // DlgDelegate.DlgClickNotify interface @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; switch( action ) { case NEW_NET_GAME: m_netLaunchInfo = (NetLaunchInfo)params[0]; @@ -1377,13 +1378,15 @@ public class GamesListDelegate extends ListDelegateBase break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } + return handled; } @Override - public void onNegButton( Action action, Object[] params ) + public boolean onNegButton( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case NEW_GAME_DFLT_NAME: m_newGameParams = params; @@ -1395,20 +1398,23 @@ public class GamesListDelegate extends ListDelegateBase break; default: - super.onNegButton( action, params ); + handled = super.onNegButton( action, params ); } + return handled; } @Override - public void onDismissed( Action action, Object[] params ) + public boolean onDismissed( Action action, Object[] params ) { + boolean handled = true; switch( action ) { case ENABLE_DUALPANE_EXIT: setDualpaneAndFinish( true ); break; default: - super.onDismissed( action, params ); + handled = super.onDismissed( action, params ); } + return handled; } @Override diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PrefsDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PrefsDelegate.java index 6f6066f72..a8afbbe4f 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PrefsDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PrefsDelegate.java @@ -242,8 +242,9 @@ public class PrefsDelegate extends DelegateBase } @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case ENABLE_SMS_DO: XWPrefs.setSMSEnabled( m_activity, true ); @@ -254,8 +255,9 @@ public class PrefsDelegate extends DelegateBase RelayCheckBoxPreference.setChecked(); break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } + return handled; } private void relaunch() diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/RelayInviteDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/RelayInviteDelegate.java index ba5430c6a..8e27a2393 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/RelayInviteDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/RelayInviteDelegate.java @@ -278,8 +278,9 @@ public class RelayInviteDelegate extends InviteDelegate { // DlgDelegate.DlgClickNotify interface @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; switch( action ) { case CLEAR_ACTION: clearSelectedImpl(); @@ -288,20 +289,25 @@ public class RelayInviteDelegate extends InviteDelegate { m_immobileConfirmed = true; break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); break; } + return handled; } @Override - public void onDismissed( Action action, Object[] params ) + public boolean onDismissed( Action action, Object[] params ) { + boolean handled = true; if ( Action.USE_IMMOBILE_ACTION == action && m_immobileConfirmed ) { makeConfirmThenBuilder( R.string.warn_unlimited, Action.POST_WARNING_ACTION ) .setPosButton( R.string.button_yes ) .show(); + } else { + handled = false; } + return handled; } // private int countChecks() diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/SMSInviteDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/SMSInviteDelegate.java index d59e2ab80..bb0c7b7a3 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/SMSInviteDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/SMSInviteDelegate.java @@ -187,8 +187,9 @@ public class SMSInviteDelegate extends InviteDelegate { // DlgDelegate.DlgClickNotify interface @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case CLEAR_ACTION: clearSelectedImpl(); @@ -205,13 +206,15 @@ public class SMSInviteDelegate extends InviteDelegate { saveAndRebuild(); break; default: - super.onPosButton( action, params ); + handled = super.onPosButton( action, params ); } + return handled; } @Override - public void onNegButton( Action action, final Object[] params ) + public boolean onNegButton( Action action, final Object[] params ) { + boolean handled = true; switch ( action ) { case USE_IMMOBILE_ACTION: if ( m_immobileConfirmed ) { @@ -230,8 +233,9 @@ public class SMSInviteDelegate extends InviteDelegate { } break; default: - super.onNegButton( action, params ); + handled = super.onNegButton( action, params ); } + return handled; } private void addPhoneNumbers( Intent intent ) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/StudyListDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/StudyListDelegate.java index 5096b1b48..aeeecc061 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/StudyListDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/StudyListDelegate.java @@ -196,8 +196,9 @@ public class StudyListDelegate extends ListDelegateBase // DlgDelegate.DlgClickNotify interface ////////////////////////////////////////////////// @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { + boolean handled = true; switch ( action ) { case SL_CLEAR_ACTION: String[] selWords = getSelWords(); @@ -219,9 +220,10 @@ public class StudyListDelegate extends ListDelegateBase showToast( msg ); break; default: - Assert.fail(); + Assert.assertFalse( BuildConfig.DEBUG ); break; } + return handled; } ////////////////////////////////////////////////// diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWActivity.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWActivity.java index 7de17805a..2e73dd16a 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWActivity.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWActivity.java @@ -265,21 +265,21 @@ public class XWActivity extends FragmentActivity // DlgClickNotify interface //////////////////////////////////////////////////////////// @Override - public void onPosButton( Action action, Object[] params ) + public boolean onPosButton( Action action, Object[] params ) { - m_dlgt.onPosButton( action, params ); + return m_dlgt.onPosButton( action, params ); } @Override - public void onNegButton( Action action, Object[] params ) + public boolean onNegButton( Action action, Object[] params ) { - m_dlgt.onNegButton( action, params ); + return m_dlgt.onNegButton( action, params ); } @Override - public void onDismissed( Action action, Object[] params ) + public boolean onDismissed( Action action, Object[] params ) { - m_dlgt.onDismissed( action, params ); + return m_dlgt.onDismissed( action, params ); } @Override