diff --git a/xwords4/android/XWords4/res/menu/games_list_group_menu.xml b/xwords4/android/XWords4/res/menu/games_list_group_menu.xml
deleted file mode 100644
index abd12fcd0..000000000
--- a/xwords4/android/XWords4/res/menu/games_list_group_menu.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
diff --git a/xwords4/android/XWords4/res/menu/games_list_item_menu.xml b/xwords4/android/XWords4/res/menu/games_list_item_menu.xml
deleted file mode 100644
index 23c59e58d..000000000
--- a/xwords4/android/XWords4/res/menu/games_list_item_menu.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
diff --git a/xwords4/android/XWords4/res/menu/games_list_menu.xml b/xwords4/android/XWords4/res/menu/games_list_menu.xml
index 98eaa3b55..7f1ac84dc 100644
--- a/xwords4/android/XWords4/res/menu/games_list_menu.xml
+++ b/xwords4/android/XWords4/res/menu/games_list_menu.xml
@@ -11,6 +11,13 @@
android:icon="@drawable/ic_action_delete"
android:showAsAction="ifRoom"
/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/ExpiringTextView.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/ExpiringTextView.java
index a122ee817..cee016a6d 100644
--- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/ExpiringTextView.java
+++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/ExpiringTextView.java
@@ -21,6 +21,7 @@ package org.eehouse.android.xw4;
import android.content.Context;
import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.AttributeSet;
import android.widget.TextView;
@@ -28,6 +29,8 @@ import android.widget.TextView;
class ExpiringTextView extends TextView {
private ExpiringDelegate m_delegate = null;
private Context m_context;
+ private Drawable m_origDrawable;
+ protected boolean m_selected = false;
public ExpiringTextView( Context context, AttributeSet attrs )
{
@@ -52,6 +55,17 @@ class ExpiringTextView extends TextView {
}
}
+ protected void toggleSelected()
+ {
+ m_selected = !m_selected;
+ if ( m_selected ) {
+ m_origDrawable = getBackground();
+ setBackgroundColor( XWApp.SEL_COLOR );
+ } else {
+ setBackgroundDrawable( m_origDrawable );
+ }
+ }
+
@Override
protected void onDraw( Canvas canvas )
{
diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListAdapter.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListAdapter.java
index ebca22600..c301fb25e 100644
--- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListAdapter.java
+++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListAdapter.java
@@ -49,11 +49,15 @@ public class GameListAdapter implements ExpandableListAdapter {
private long[] m_positions;
public interface LoadItemCB {
- public void itemClicked( long rowid, GameSummary summary );
- public void itemToggled( long rowid, boolean selected );
+ public void itemClicked( Object clicked, GameSummary summary );
+ public void itemToggled( Object toggled, boolean selected );
public boolean getSelected( long rowid );
}
+ public interface ClickHandler {
+ public void longClicked();
+ }
+
public GameListAdapter( Context context, ExpandableListView list,
Handler handler, LoadItemCB cb, long[] positions,
String fieldName )
@@ -152,9 +156,14 @@ public class GameListAdapter implements ExpandableListAdapter {
return ggi.m_name;
}
- public void clearSelected( Set rowids )
+ public void clearSelectedRows( Set rowids )
{
- deselect( rowids );
+ deselectRows( rowids );
+ }
+
+ public void clearSelectedGroups( HashSet groups )
+ {
+ deselectGroups( groups );
}
//////////////////////////////////////////////////////////////////////////
@@ -182,7 +191,7 @@ public class GameListAdapter implements ExpandableListAdapter {
for ( long rowid : rowids ) {
asSet.add( rowid );
}
- deselect( asSet );
+ deselectRows( asSet );
}
public void onGroupExpanded( int groupPosition )
@@ -232,9 +241,8 @@ public class GameListAdapter implements ExpandableListAdapter {
// if ( null != convertView ) {
// DbgUtils.logf( "getGroupView gave non-null convertView" );
// }
- GameListGroup view = (GameListGroup)
- Utils.inflate(m_context, R.layout.game_list_group );
- view.setGroupPosition( groupPosition );
+ GameListGroup view =
+ GameListGroup.makeForPosition( m_context, groupPosition, m_cb );
if ( !isExpanded ) {
GameGroupInfo ggi = getInfoForGroup( groupPosition );
@@ -364,7 +372,7 @@ public class GameListAdapter implements ExpandableListAdapter {
return gameInfo().get( getPositions()[groupPosition] );
}
- private void deselect( Set rowids )
+ private void deselectRows( Set rowids )
{
GameListItem[] items = new GameListItem[rowids.size()];
getGameItemsFor( rowids, items );
@@ -375,6 +383,16 @@ public class GameListAdapter implements ExpandableListAdapter {
}
}
+ private void deselectGroups( HashSet groups )
+ {
+ groups = (HashSet)groups.clone();
+ for ( Iteratoriter = groups.iterator();
+ iter.hasNext(); ) {
+ GameListGroup group = getGroupItemFor( iter.next() );
+ group.setSelected( false );
+ }
+ }
+
private void getGameItemsFor( Set rowids, GameListItem[] items )
{
int next = 0;
diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListGroup.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListGroup.java
index 90b5827a2..1ce963098 100644
--- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListGroup.java
+++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListGroup.java
@@ -23,11 +23,27 @@ package org.eehouse.android.xw4;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
+import android.view.View;
import org.eehouse.android.xw4.DBUtils.GameGroupInfo;
-public class GameListGroup extends ExpiringTextView {
+public class GameListGroup extends ExpiringTextView
+ implements GameListAdapter.ClickHandler
+{
private int m_groupPosition;
+ private boolean m_expanded;
+ private GameListAdapter.LoadItemCB m_cb;
+
+ public static GameListGroup makeForPosition( Context context,
+ int groupPosition,
+ GameListAdapter.LoadItemCB cb )
+ {
+ GameListGroup result =
+ (GameListGroup)Utils.inflate( context, R.layout.game_list_group );
+ result.m_cb = cb;
+ result.m_groupPosition = groupPosition;
+ return result;
+ }
public GameListGroup( Context cx, AttributeSet as )
{
@@ -43,4 +59,25 @@ public class GameListGroup extends ExpiringTextView {
{
return m_groupPosition;
}
+
+ public void setSelected( boolean selected )
+ {
+ // If new value and state not in sync, force change in state
+ if ( selected != m_selected ) {
+ toggleSelected();
+ }
+ }
+
+ // GameListAdapter.ClickHandler interface
+ public void longClicked()
+ {
+ toggleSelected();
+ }
+
+ protected void toggleSelected()
+ {
+ super.toggleSelected();
+ m_cb.itemToggled( this, m_selected );
+ }
+
}
diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListItem.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListItem.java
index 34a710ea8..5a59909b0 100644
--- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListItem.java
+++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameListItem.java
@@ -43,7 +43,7 @@ import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnType;
import org.eehouse.android.xw4.jni.GameSummary;
public class GameListItem extends LinearLayout
- implements View.OnClickListener {
+ implements View.OnClickListener, GameListAdapter.ClickHandler {
private static HashSet s_invalRows = new HashSet();
@@ -62,6 +62,7 @@ public class GameListItem extends LinearLayout
private int m_loadingCount;
private int m_groupPosition;
private Drawable m_origDrawable;
+ private boolean m_selected = false;
public GameListItem( Context cx, AttributeSet as )
{
@@ -71,6 +72,18 @@ public class GameListItem extends LinearLayout
m_rowid = DBUtils.ROWID_NOTFOUND;
m_lastMoveTime = 0;
m_loadingCount = 0;
+
+ setOnClickListener( new View.OnClickListener() {
+ @Override
+ public void onClick( View v ) {
+ // if selected, just un-select
+ if ( m_selected ) {
+ toggleSelected();
+ } else if ( null != m_summary ) {
+ m_cb.itemClicked( this, m_summary );
+ }
+ }
+ } );
}
private void init( Handler handler, long rowid, int groupPosition,
@@ -105,7 +118,7 @@ public class GameListItem extends LinearLayout
public void setSelected( boolean selected )
{
// If new value and state not in sync, force change in state
- if ( selected != (null != m_origDrawable) ) {
+ if ( selected != m_selected ) {
toggleSelected();
}
}
@@ -214,24 +227,12 @@ public class GameListItem extends LinearLayout
return state;
}
- private void setData( final GameSummary summary )
+ private void setData( GameSummary summary )
{
if ( null != summary ) {
TextView tview;
String state = setName();
- setOnClickListener( new View.OnClickListener() {
- @Override
- public void onClick( View v ) {
- // if selected, just un-select
- if ( null != m_origDrawable ) {
- toggleSelected();
- } else {
- m_cb.itemClicked( m_rowid, summary );
- }
- }
- } );
-
LinearLayout list =
(LinearLayout)findViewById( R.id.player_list );
list.removeAllViews();
@@ -305,14 +306,14 @@ public class GameListItem extends LinearLayout
private void toggleSelected()
{
- if ( null == m_origDrawable ) {
+ m_selected = !m_selected;
+ if ( m_selected ) {
m_origDrawable = getBackground();
setBackgroundColor( XWApp.SEL_COLOR );
} else {
setBackgroundDrawable( m_origDrawable );
- m_origDrawable = null;
}
- m_cb.itemToggled( m_rowid, null != m_origDrawable );
+ m_cb.itemToggled( this, m_selected );
}
private class LoadItemTask extends AsyncTask {
@@ -334,7 +335,7 @@ public class GameListItem extends LinearLayout
}
}
- if ( m_cb.getSelected( m_rowid ) && null != m_origDrawable ) {
+ if ( m_cb.getSelected( m_rowid ) && m_selected ) {
toggleSelected();
}
}
@@ -372,5 +373,11 @@ public class GameListItem extends LinearLayout
// }
// return TextUtils.join(",", strs );
// }
+ // GameListAdapter.ClickHandler interface
+
+ public void longClicked()
+ {
+ toggleSelected();
+ }
}
diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesList.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesList.java
index 4db3ffd6f..cc4a09eec 100644
--- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesList.java
+++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GamesList.java
@@ -32,16 +32,15 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
-import android.view.ContextMenu.ContextMenuInfo;
-import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
+import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
-import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
+// import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
import android.widget.ExpandableListView;
import android.widget.LinearLayout;
import android.widget.ListView;
@@ -59,7 +58,8 @@ import junit.framework.Assert;
import org.eehouse.android.xw4.jni.*;
public class GamesList extends XWExpandableListActivity
- implements DBUtils.DBChangeListener,
+ implements OnItemLongClickListener,
+ DBUtils.DBChangeListener,
GameListAdapter.LoadItemCB,
DictImportActivity.DownloadFinishedListener {
@@ -91,9 +91,32 @@ public class GamesList extends XWExpandableListActivity
DELETE_SELGAMES,
OPEN_GAME
};
- private static final int[] DEBUGITEMS = { R.id.gamel_menu_loaddb
- , R.id.gamel_menu_storedb
- , R.id.gamel_menu_checkupdates
+ private static final int[] DEBUGITEMS = {
+ R.id.gamel_menu_loaddb
+ , R.id.gamel_menu_storedb
+ , R.id.gamel_menu_checkupdates
+ };
+ private static final int[] NOSEL_ITEMS = {
+ R.id.gamel_menu_newgame
+ ,R.id.gamel_menu_newgroup
+ ,R.id.gamel_menu_prefs
+ ,R.id.gamel_menu_dicts
+ ,R.id.gamel_menu_about
+ ,R.id.gamel_menu_email
+ ,R.id.gamel_menu_checkmoves
+ };
+ private static final int[] ONEGAME_ITEMS = {
+ R.id.listl_item_config
+ ,R.id.list_item_rename
+ ,R.id.list_item_new_from
+ ,R.id.list_item_copy
+ };
+
+ private static final int[] ONEGROUP_ITEMS = {
+ R.id.list_group_default
+ ,R.id.list_group_rename
+ ,R.id.list_group_moveup
+ ,R.id.list_group_movedown
};
private static boolean s_firstShown = false;
@@ -110,7 +133,8 @@ public class GamesList extends XWExpandableListActivity
private NetLaunchInfo m_netLaunchInfo;
private GameNamer m_namer;
private boolean m_gameLaunched = false;
- private HashSet m_selected;
+ private HashSet m_selectedRows;
+ private HashSet m_selectedGroups;
@Override
protected Dialog onCreateDialog( int id )
@@ -339,10 +363,11 @@ public class GamesList extends XWExpandableListActivity
getBundledData( savedInstanceState );
- m_selected = new HashSet();
+ m_selectedRows = new HashSet();
+ m_selectedGroups = new HashSet();
setContentView(R.layout.game_list);
- registerForContextMenu( getExpandableListView() );
+ ExpandableListView listview = getExpandableListView();
DBUtils.setDBChangeListener( this );
boolean isUpgrade = Utils.firstBootThisVersion( this );
@@ -354,11 +379,12 @@ public class GamesList extends XWExpandableListActivity
String field = CommonPrefs.getSummaryField( this );
long[] positions = XWPrefs.getGroupPositions( this );
- m_adapter = new GameListAdapter( this, getExpandableListView(),
- new Handler(), this, positions,
- field );
+ m_adapter = new GameListAdapter( this, listview, new Handler(),
+ this, positions, field );
setListAdapter( m_adapter );
- m_adapter.expandGroups( getExpandableListView() );
+ listview.setOnItemLongClickListener( this );
+
+ m_adapter.expandGroups( listview );
NetUtils.informOfDeaths( this );
@@ -431,6 +457,16 @@ public class GamesList extends XWExpandableListActivity
}
}
+ // OnItemLongClickListener interface
+ public boolean onItemLongClick( AdapterView> parent, View view,
+ int position, long id ) {
+ boolean success = view instanceof GameListAdapter.ClickHandler;
+ if ( success ) {
+ ((GameListAdapter.ClickHandler)view).longClicked();
+ }
+ return success;
+ }
+
// DBUtils.DBChangeListener interface
public void gameSaved( final long rowid, final boolean countChanged )
{
@@ -446,33 +482,47 @@ public class GamesList extends XWExpandableListActivity
}
// GameListAdapter.LoadItemCB interface
- public void itemClicked( long rowid, GameSummary summary )
+ public void itemClicked( Object clicked, GameSummary summary )
{
// We need a way to let the user get back to the basic-config
// dialog in case it was dismissed. That way it to check for
// an empty room name.
- if ( !m_gameLaunched ) {
- showNotAgainDlgThen( R.string.not_again_newselect,
- R.string.key_notagain_newselect,
- GamesActions.OPEN_GAME.ordinal(),
- rowid, summary );
+ if ( clicked instanceof GameListItem ) {
+ if ( !m_gameLaunched ) {
+ long rowid = ((GameListItem)clicked).getRowID();
+ showNotAgainDlgThen( R.string.not_again_newselect,
+ R.string.key_notagain_newselect,
+ GamesActions.OPEN_GAME.ordinal(),
+ rowid, summary );
+ }
}
}
- public void itemToggled( long rowid, boolean selected )
+ public void itemToggled( Object toggled, boolean selected )
{
- int countBefore = m_selected.size();
- if ( selected ) {
- m_selected.add( rowid );
- } else {
- m_selected.remove( rowid );
+ if ( toggled instanceof GameListItem ) {
+ long rowid = ((GameListItem)toggled).getRowID();
+ if ( selected ) {
+ m_selectedRows.add( rowid );
+ clearSelectedGroups();
+ } else {
+ m_selectedRows.remove( rowid );
+ }
+ } else if ( toggled instanceof GameListGroup ) {
+ int position = ((GameListGroup)toggled).getGroupPosition();
+ if ( selected ) {
+ m_selectedGroups.add( position );
+ clearSelectedRows();
+ } else {
+ m_selectedGroups.remove( position );
+ }
}
Utils.invalidateOptionsMenuIf( this );
}
public boolean getSelected( long rowid )
{
- return m_selected.contains( rowid );
+ return m_selectedRows.contains( rowid );
}
// BTService.MultiEventListener interface
@@ -548,77 +598,13 @@ public class GamesList extends XWExpandableListActivity
@Override
public void onBackPressed() {
- if ( 0 == m_selected.size() ) {
+ if ( 0 == m_selectedRows.size() ) {
super.onBackPressed();
} else {
- clearSelected();
+ clearSelectedRows();
}
}
- @Override
- public void onCreateContextMenu( ContextMenu menu, View view,
- ContextMenuInfo menuInfo )
- {
- ExpandableListView.ExpandableListContextMenuInfo info
- = (ExpandableListView.ExpandableListContextMenuInfo)menuInfo;
- long packedPos = info.packedPosition;
- int childPos = ExpandableListView.getPackedPositionChild( packedPos );
-
- String name;
- if ( 0 <= childPos ) { // game case
- MenuInflater inflater = getMenuInflater();
- inflater.inflate( R.menu.games_list_item_menu, menu );
-
- long rowid = m_adapter.getRowIDFor( packedPos );
- name = GameUtils.getName( this, rowid );
- } else { // group case
- MenuInflater inflater = getMenuInflater();
- inflater.inflate( R.menu.games_list_group_menu, menu );
-
- int pos = ExpandableListView.getPackedPositionGroup( packedPos );
- name = m_adapter.groupNames()[pos];
-
- if ( 0 == pos ) {
- Utils.setItemEnabled( menu, R.id.list_group_moveup, false );
- }
- if ( pos + 1 == m_adapter.getGroupCount() ) {
- Utils.setItemEnabled( menu, R.id.list_group_movedown, false );
- }
- if ( XWPrefs.getDefaultNewGameGroup( this )
- == m_adapter.getGroupIDFor( pos ) ) {
- Utils.setItemEnabled( menu, R.id.list_group_default, false );
- Utils.setItemEnabled( menu, R.id.list_group_delete, false );
- }
- }
- menu.setHeaderTitle( getString( R.string.game_item_menu_titlef,
- name ) );
- }
-
- @Override
- public boolean onContextItemSelected( MenuItem item )
- {
- ExpandableListContextMenuInfo info;
- try {
- info = (ExpandableListContextMenuInfo)item.getMenuInfo();
- } catch (ClassCastException cce) {
- DbgUtils.loge( cce );
- return false;
- }
-
- long packedPos = info.packedPosition;
- int childPos = ExpandableListView.getPackedPositionChild( packedPos );
- int groupPos = ExpandableListView.getPackedPositionGroup(packedPos);
- int menuID = item.getItemId();
- boolean handled;
- if ( 0 <= childPos ) {
- long rowid = m_adapter.getRowIDFor( groupPos, childPos );
- handled = handleGameMenuItem( menuID, rowid );
- } else {
- handled = handleGroupMenuItem( menuID, groupPos );
- }
- return handled;
- } // onContextItemSelected
-
@Override
public boolean onCreateOptionsMenu( Menu menu )
{
@@ -631,22 +617,38 @@ public class GamesList extends XWExpandableListActivity
@Override
public boolean onPrepareOptionsMenu( Menu menu )
{
+ int nGamesSelected = m_selectedRows.size();
+ int nGroupsSelected = m_selectedGroups.size();
+ boolean nothingSelected = 0 == (nGroupsSelected + nGamesSelected);
+ Assert.assertTrue( 0 == nGamesSelected || 0 == nGroupsSelected );
+
boolean visible = XWPrefs.getDebugEnabled( this );
for ( int id : DEBUGITEMS ) {
- MenuItem item = menu.findItem( id );
- item.setVisible( visible );
+ Utils.setItemVisible( menu, id, nothingSelected && visible );
}
if ( visible && !DBUtils.gameDBExists( this ) ) {
- MenuItem item = menu.findItem( R.id.gamel_menu_loaddb );
- item.setVisible( false );
+ Utils.setItemVisible( menu, R.id.gamel_menu_loaddb, false );
}
- int nSelected = m_selected.size();
+ for ( int id : NOSEL_ITEMS ) {
+ Utils.setItemVisible( menu, id, nothingSelected );
+ }
+ for ( int id : ONEGAME_ITEMS ) {
+ Utils.setItemVisible( menu, id, 1 == nGamesSelected );
+ }
+ for ( int id : ONEGROUP_ITEMS ) {
+ Utils.setItemVisible( menu, id, 1 == nGroupsSelected );
+ }
- Utils.setItemVisible( menu, R.id.gamel_menu_newgame, 0 == nSelected );
- Utils.setItemVisible( menu, R.id.gamel_menu_delete, 0 < nSelected );
- Utils.setItemVisible( menu, R.id.listl_item_config, 1 == nSelected );
+ // Multiples can be deleted
+ Utils.setItemVisible( menu, R.id.gamel_menu_delete,
+ 0 < nGamesSelected );
+ Utils.setItemVisible( menu, R.id.list_group_delete,
+ 0 < nGroupsSelected );
+ // multiple games can be regrouped/reset
+ Utils.setItemVisible( menu, R.id.list_item_move, 0 < nGroupsSelected );
+ Utils.setItemVisible( menu, R.id.list_item_reset, 0 < nGroupsSelected );
return super.onPrepareOptionsMenu( menu );
}
@@ -665,13 +667,13 @@ public class GamesList extends XWExpandableListActivity
break;
case R.id.listl_item_config:
- long rowid = m_selected.iterator().next();
+ long rowid = m_selectedRows.iterator().next();
GameUtils.doConfig( this, rowid, GameConfig.class );
break;
case R.id.gamel_menu_delete:
String msg = Utils.format( this, R.string.confirm_seldeletesf,
- m_selected.size() );
+ m_selectedRows.size() );
showConfirmThen( msg, R.string.button_delete,
GamesActions.DELETE_SELGAMES.ordinal() );
break;
@@ -745,61 +747,53 @@ public class GamesList extends XWExpandableListActivity
m_rowid = rowid;
- if ( R.id.list_item_delete == menuID
- || R.id.list_item_config == menuID ) {
- showOKOnlyDialog( "This menu item is going away soon. Please select"
- + " games by tapping the left icons then use"
- + " action bar icons or the screen menu to operate"
- + " on the selection." );
- } else {
- if ( checkWarnNoDict( m_rowid ) ) {
- switch ( menuID ) {
- case R.id.list_item_reset:
- showConfirmThen( R.string.confirm_reset,
- R.string.button_reset,
- GamesActions.RESET_GAME.ordinal() );
- break;
- case R.id.list_item_rename:
- showDialog( RENAME_GAME );
- break;
- case R.id.list_item_move:
- if ( 1 >= m_adapter.getGroupCount() ) {
- showOKOnlyDialog( R.string.no_move_onegroup );
- } else {
- showDialog( CHANGE_GROUP );
- }
- break;
- case R.id.list_item_new_from:
- showNotAgainDlgThen( R.string.not_again_newfrom,
- R.string.key_notagain_newfrom,
- GamesActions.NEW_FROM.ordinal() );
- break;
-
- case R.id.list_item_copy:
- GameSummary summary = DBUtils.getSummary( this, m_rowid );
- if ( summary.inNetworkGame() ) {
- showOKOnlyDialog( R.string.no_copy_network );
- } else {
- byte[] stream = GameUtils.savedGame( this, m_rowid );
- GameLock lock = GameUtils.saveNewGame( this, stream );
- DBUtils.saveSummary( this, lock, summary );
- lock.unlock();
- }
- break;
-
- // These require some notion of predictable sort order.
- // Maybe put off until I'm using a db?
- // case R.id.list_item_hide:
- // case R.id.list_item_move_up:
- // case R.id.list_item_move_down:
- // case R.id.list_item_move_to_top:
- // case R.id.list_item_move_to_bottom:
- // Utils.notImpl( this );
- // break;
- default:
- handled = false;
- break;
+ if ( checkWarnNoDict( m_rowid ) ) {
+ switch ( menuID ) {
+ case R.id.list_item_reset:
+ showConfirmThen( R.string.confirm_reset,
+ R.string.button_reset,
+ GamesActions.RESET_GAME.ordinal() );
+ break;
+ case R.id.list_item_rename:
+ showDialog( RENAME_GAME );
+ break;
+ case R.id.list_item_move:
+ if ( 1 >= m_adapter.getGroupCount() ) {
+ showOKOnlyDialog( R.string.no_move_onegroup );
+ } else {
+ showDialog( CHANGE_GROUP );
}
+ break;
+ case R.id.list_item_new_from:
+ showNotAgainDlgThen( R.string.not_again_newfrom,
+ R.string.key_notagain_newfrom,
+ GamesActions.NEW_FROM.ordinal() );
+ break;
+
+ case R.id.list_item_copy:
+ GameSummary summary = DBUtils.getSummary( this, m_rowid );
+ if ( summary.inNetworkGame() ) {
+ showOKOnlyDialog( R.string.no_copy_network );
+ } else {
+ byte[] stream = GameUtils.savedGame( this, m_rowid );
+ GameLock lock = GameUtils.saveNewGame( this, stream );
+ DBUtils.saveSummary( this, lock, summary );
+ lock.unlock();
+ }
+ break;
+
+ // These require some notion of predictable sort order.
+ // Maybe put off until I'm using a db?
+ // case R.id.list_item_hide:
+ // case R.id.list_item_move_up:
+ // case R.id.list_item_move_down:
+ // case R.id.list_item_move_to_top:
+ // case R.id.list_item_move_to_bottom:
+ // Utils.notImpl( this );
+ // break;
+ default:
+ handled = false;
+ break;
}
}
@@ -1076,11 +1070,11 @@ public class GamesList extends XWExpandableListActivity
private void deleteSelected()
{
- for ( Iterator iter = m_selected.iterator(); iter.hasNext(); ) {
+ for ( Iterator iter = m_selectedRows.iterator(); iter.hasNext(); ) {
long rowid = iter.next();
GameUtils.deleteGame( this, rowid, false );
}
- m_selected.clear();
+ m_selectedRows.clear();
Utils.invalidateOptionsMenuIf( this );
NetUtils.informOfDeaths( this );
}
@@ -1095,12 +1089,21 @@ public class GamesList extends XWExpandableListActivity
return madeGame;
}
- private void clearSelected()
+ private void clearSelectedRows()
{
// clear any selection
- if ( 0 < m_selected.size() ) {
- m_adapter.clearSelected( m_selected );
- m_selected.clear();
+ if ( 0 < m_selectedRows.size() ) {
+ m_adapter.clearSelectedRows( m_selectedRows );
+ m_selectedRows.clear();
+ }
+ }
+
+ private void clearSelectedGroups()
+ {
+ // clear any selection
+ if ( 0 < m_selectedGroups.size() ) {
+ m_adapter.clearSelectedGroups( m_selectedGroups );
+ m_selectedGroups.clear();
}
}
@@ -1119,7 +1122,7 @@ public class GamesList extends XWExpandableListActivity
if ( !m_gameLaunched ) {
m_gameLaunched = true;
GameUtils.launchGame( this, rowid, invited );
- clearSelected();
+ clearSelectedRows();
}
}