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 a00004404..ad50178f8 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 @@ -2804,8 +2804,10 @@ public class BoardDelegate extends DelegateBase DBUtils.recordInviteSent( m_activity, m_rowid, means, dev ); if ( !invitesSent ) { - m_inviteAlert.dismiss(); - m_inviteAlert = null; + if ( null != m_inviteAlert ) { + m_inviteAlert.dismiss(); + m_inviteAlert = null; + } Log.d( TAG, "recordInviteSent(): redoing invite alert" ); showInviteAlertIf(); } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBAlert.java index dadc9f79d..94ad546a7 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBAlert.java @@ -72,6 +72,13 @@ public class DBAlert extends XWDialogFragment { return mDlgID; } + @Override + public boolean belongsOnBackStack() + { + boolean result = getDlgID().belongsOnBackStack(); + return result; + } + @Override public String getFragTag() { diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegateAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegateAlert.java index e5bb31839..f30ad2f1a 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegateAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegateAlert.java @@ -88,6 +88,13 @@ abstract class DlgDelegateAlert extends XWDialogFragment { return getState(null).m_id.toString(); } + @Override + public boolean belongsOnBackStack() + { + boolean result = getState(null).m_id.belongsOnBackStack(); + return result; + } + protected void checkNotAgainCheck( DlgState state, NotAgainView naView ) { if ( null != naView && naView.getChecked() ) { diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgID.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgID.java index 6c758a3d3..c6290118c 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgID.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgID.java @@ -32,7 +32,7 @@ public enum DlgID { , DICT_OR_DECLINE , DLG_CONNSTAT , DLG_DELETED - , DLG_INVITE + , DLG_INVITE(true) , DLG_OKONLY , ENABLE_NFC , FORCE_REMOTE @@ -68,4 +68,10 @@ public enum DlgID { , GAMES_LIST_NEWGAME , CHANGE_CONN , GAMES_LIST_NAME_REMATCH + ; + + private boolean m_addToStack; + private DlgID(boolean addToStack) { m_addToStack = addToStack; } + private DlgID() { m_addToStack = false; } + boolean belongsOnBackStack() { return m_addToStack; } } 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 e1e91920e..42f494ec3 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 @@ -51,7 +51,8 @@ public class XWActivity extends FragmentActivity protected void onCreate( Bundle savedInstanceState, DelegateBase dlgt ) { if ( XWApp.LOG_LIFECYLE ) { - Log.i( TAG, "onCreate(this=%H)", this ); + Log.i( TAG, "%s.onCreate(this=%H,sis=%s)", getClass().getSimpleName(), + this, savedInstanceState ); } super.onCreate( savedInstanceState ); m_dlgt = dlgt; @@ -285,25 +286,18 @@ public class XWActivity extends FragmentActivity { FragmentManager fm = getSupportFragmentManager(); String tag = df.getFragTag(); - if ( true ) { - df.show( fm, tag ); - } else { - Log.d( TAG, "%s.show(%s) called; tag: %s", getClass().getSimpleName(), - df.getClass().getSimpleName(), tag ); + // Log.d( TAG, "show(%s); tag: %s", df.getClass().getSimpleName(), tag ); + if ( df.belongsOnBackStack() ) { FragmentTransaction trans = fm.beginTransaction(); Fragment prev = fm.findFragmentByTag( tag ); if ( null != prev && prev instanceof DialogFragment ) { - Log.d( TAG, "show(): removing %s (tag %s)", - prev.getClass().getSimpleName(), tag ); ((DialogFragment)prev).dismiss(); - } else { - Log.d( TAG, "show(): NOT removing or didn't find for tag %s)", tag ); } trans.addToBackStack( tag ); - - // Create and show the dialog. show() commits the transaction df.show( trans, tag ); + } else { + df.show( fm, tag ); } } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWDialogFragment.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWDialogFragment.java index b694487a4..7e0ce8654 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWDialogFragment.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWDialogFragment.java @@ -46,6 +46,8 @@ abstract class XWDialogFragment extends DialogFragment { void onCancelled( XWDialogFragment frag ); } + abstract String getFragTag(); + @Override public void onResume() { @@ -90,7 +92,7 @@ abstract class XWDialogFragment extends DialogFragment { } } - abstract String getFragTag(); + public boolean belongsOnBackStack() { return false; } protected void setOnDismissListener( OnDismissListener lstnr ) {