implement menus, including adding crappy placeholder icons

This commit is contained in:
Eric House 2014-03-19 21:29:20 -07:00
parent aa6fbf8605
commit fd817a98da
6 changed files with 121 additions and 26 deletions

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata id="metadata90">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title>Gnome Symbolic Icon Theme</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<title id="title9167">Gnome Symbolic Icon Theme</title>
<g id="layer12" transform="translate(-201 -767)">
<path id="path36048" style="block-progression:tb;text-indent:0;color:#000000;enable-background:new;text-transform:none;fill:#bebebe" d="m211.88 767.06a1.0001 1.0001 0 0 0 -0.6875 0.5l-3.3125 5.625a1.0078 1.0078 0 1 0 1.75 1l3.3125-5.625a1.0001 1.0001 0 0 0 -1.0625 -1.5z"/>
<path id="path36050" style="color:#000000;enable-background:new;fill:#bebebe" d="m206.53 771.72 4.9474 3.0538c0.60355 0.31472 0.68739 0.89216 0.20883 1.5087l-0.625 0.8125-6.5938-3.875 0.55118-1.0614c0.28883-0.58524 0.75466-0.81586 1.5113-0.43864z"/>
<path id="path36052" style="color:#000000;enable-background:new;fill:#bebebe" d="m204.56 774.58s-2.8547 3.0362-1.3326 4.6991c1.6875 1.8438 4.758 1.7674 5.8628 1.7232h4.0087c-1.875-0.375-3.8371-1.8156-2.9027-3.2446z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata id="metadata90">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title>Gnome Symbolic Icon Theme</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<title id="title9167">Gnome Symbolic Icon Theme</title>
<g id="layer12" transform="translate(-241 -647)">
<path id="path4387-5" style="color:#bebebe;fill:#bebebe" d="m243.93 648c-0.50766 0.0395-0.94152 0.51729-0.93263 1.0269v12.945c-0.008 0.5398 0.48663 1.0348 1.0259 1.0269h9.948c0.53926 0.008 1.0337-0.48711 1.0259-1.0269v-9.958c-0.004-0.26704-0.1184-0.53079-0.31088-0.71573l-2.9844-2.9874c-0.18475-0.19267-0.44824-0.30734-0.71501-0.31119h-6.9636c-0.0311-0.00099-0.0622-0.00099-0.0933 0zm1.0881 2.0539h5.9688v1.9916h-5.9688zm0 3.9832h7.9584v1.9916h-7.9584zm0 3.9832h7.9584v1.9916h-7.9584z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,22 +1,26 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/select_all" <item android:id="@+id/slmenu_select_all"
android:title="@string/slmenu_select_all" android:title="@string/slmenu_select_all"
android:icon="@drawable/select_all__gen"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/deselect_all" <item android:id="@+id/slmenu_deselect_all"
android:title="@string/slmenu_deselect_all" android:title="@string/slmenu_deselect_all"
android:icon="@drawable/clear_all__gen"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/copy_all" <item android:id="@+id/slmenu_copy_sel"
android:title="@string/slmenu_copy_all" android:title="@string/slmenu_copy_sel"
android:icon="@drawable/content_copy__gen" android:icon="@drawable/content_copy__gen"
android:showAsAction="ifRoom" android:showAsAction="ifRoom"
/> />
<item android:id="@+id/clear_all" <item android:id="@+id/slmenu_clear_sel"
android:title="@string/slmenu_clear_all" android:title="@string/slmenu_clear_sel"
android:icon="@drawable/content_discard__gen" android:icon="@drawable/content_discard__gen"
android:showAsAction="ifRoom" android:showAsAction="ifRoom"
/> />

View file

@ -2207,10 +2207,10 @@
of words to remember</string> of words to remember</string>
<string name="gamel_menu_study">Studylist…</string> <string name="gamel_menu_study">Studylist…</string>
<string name="slmenu_copy_all">Copy to clipboard</string> <string name="slmenu_copy_sel">Copy to clipboard</string>
<string name="slmenu_clear_all">Delete</string> <string name="slmenu_clear_sel">Delete</string>
<string name="confirm_studylist_clear">Are you sure you want to <string name="confirm_studylist_clear">Are you sure you want to
delete this list?\n\n(This action cannot be undone.)</string> delete the selected words?\n\n(This action cannot be undone.)</string>
<string name="paste_donef">%d word[s] copied</string> <string name="paste_donef">%d word[s] copied</string>
<string name="add_donef">%s added to list</string> <string name="add_donef">%s added to list</string>
<string name="studylist_titlef">Studylist for %s</string> <string name="studylist_titlef">Studylist for %s</string>
@ -2222,7 +2222,7 @@
<string name="study_no_lists">You have not yet saved any words <string name="study_no_lists">You have not yet saved any words
into a studylist.</string> into a studylist.</string>
<string name="not_again_studycopy">The words in this list will be <string name="not_again_studycopy">The selected words will be
copied to the system clipboard. You can then paste them into any copied to the system clipboard. You can then paste them into any
app that supports pasting text, e.g. an email app.</string> app that supports pasting text, e.g. an email app.</string>

View file

@ -1665,9 +1665,18 @@ public class DBUtils {
return result; return result;
} }
public static void studyListClear( Context context, int lang ) public static void studyListClear( Context context, int lang, String[] words )
{ {
String selection = String.format( "%s = %d", DBHelper.LANGUAGE, lang ); String selection = String.format( "%s = %d", DBHelper.LANGUAGE, lang );
if ( null != words ) {
String[] inQuotes = new String[words.length];
for ( int ii = 0; ii < inQuotes.length; ++ii ) {
inQuotes[ii] = String.format( "'%s'", words[ii] );
}
String wordsTest = String.format( " AND %s in (%s)", DBHelper.WORD,
TextUtils.join(",", inQuotes) );
selection += wordsTest;
}
initDB( context ); initDB( context );
synchronized( s_dbHelper ) { synchronized( s_dbHelper ) {
@ -1677,6 +1686,11 @@ public class DBUtils {
} }
} }
public static void studyListClear( Context context, int lang )
{
studyListClear( context, lang, null );
}
private static void copyGameDB( Context context, boolean toSDCard ) private static void copyGameDB( Context context, boolean toSDCard )
{ {
String name = DBHelper.getDBName(); String name = DBHelper.getDBName();

View file

@ -37,6 +37,7 @@ import android.widget.ArrayAdapter;
import android.widget.Spinner; import android.widget.Spinner;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import junit.framework.Assert; import junit.framework.Assert;
@ -74,6 +75,15 @@ public class StudyList extends XWListActivity
initOrFinish( getIntent() ); initOrFinish( getIntent() );
} }
@Override
public void onBackPressed() {
if ( 0 == m_checkeds.size() ) {
super.onBackPressed();
} else {
clearSels();
}
}
@Override @Override
public boolean onCreateOptionsMenu( Menu menu ) public boolean onCreateOptionsMenu( Menu menu )
{ {
@ -81,37 +91,40 @@ public class StudyList extends XWListActivity
return true; return true;
} }
// @Override @Override
// public boolean onPrepareOptionsMenu( Menu menu ) public boolean onPrepareOptionsMenu( Menu menu )
// { {
// return true; int nSel = m_checkeds.size();
// } Utils.setItemVisible( menu, R.id.slmenu_copy_sel, 0 < nSel );
Utils.setItemVisible( menu, R.id.slmenu_clear_sel, 0 < nSel );
Utils.setItemVisible( menu, R.id.slmenu_select_all, m_words.length > nSel );
Utils.setItemVisible( menu, R.id.slmenu_deselect_all, 0 < nSel );
return super.onPrepareOptionsMenu( menu );
}
public boolean onOptionsItemSelected( MenuItem item ) public boolean onOptionsItemSelected( MenuItem item )
{ {
boolean handled = true; boolean handled = true;
switch ( item.getItemId() ) { switch ( item.getItemId() ) {
case R.id.copy_all: case R.id.slmenu_copy_sel:
showNotAgainDlgThen( R.string.not_again_studycopy, showNotAgainDlgThen( R.string.not_again_studycopy,
R.string.key_na_studycopy, R.string.key_na_studycopy,
Action.SL_COPY_ACTION ); Action.SL_COPY_ACTION );
break; break;
case R.id.clear_all: case R.id.slmenu_clear_sel:
showConfirmThen( R.string.confirm_studylist_clear, showConfirmThen( R.string.confirm_studylist_clear,
Action.SL_CLEAR_ACTION ); Action.SL_CLEAR_ACTION );
break; break;
case R.id.select_all: case R.id.slmenu_select_all:
for ( int ii = 0; ii < m_words.length; ++ii ) { for ( int ii = 0; ii < m_words.length; ++ii ) {
m_checkeds.add( ii ); m_checkeds.add( ii );
} }
makeAdapter(); makeAdapter();
setTitleBar(); setTitleBar();
break; break;
case R.id.deselect_all: case R.id.slmenu_deselect_all:
m_checkeds.clear(); clearSels();
makeAdapter();
setTitleBar();
break; break;
default: default:
@ -129,15 +142,20 @@ public class StudyList extends XWListActivity
if ( AlertDialog.BUTTON_POSITIVE == which ) { if ( AlertDialog.BUTTON_POSITIVE == which ) {
switch ( action ) { switch ( action ) {
case SL_CLEAR_ACTION: case SL_CLEAR_ACTION:
DBUtils.studyListClear( this, m_langCodes[m_langPosition] ); String[] selWords = getSelWords();
if ( selWords.length == m_words.length ) {
selWords = null; // all: easier on DB :-)
}
DBUtils.studyListClear( this, m_langCodes[m_langPosition], selWords );
initOrFinish( null ); initOrFinish( null );
break; break;
case SL_COPY_ACTION: case SL_COPY_ACTION:
selWords = getSelWords();
ClipboardManager clipboard = (ClipboardManager) ClipboardManager clipboard = (ClipboardManager)
getSystemService( Context.CLIPBOARD_SERVICE ); getSystemService( Context.CLIPBOARD_SERVICE );
clipboard.setText( TextUtils.join( "\n", m_words ) ); clipboard.setText( TextUtils.join( "\n", selWords ) );
String msg = getString( R.string.paste_donef, m_words.length ); String msg = getString( R.string.paste_donef, selWords.length );
Utils.showToast( this, msg ); Utils.showToast( this, msg );
break; break;
default: default:
@ -269,6 +287,29 @@ public class StudyList extends XWListActivity
setTitle( newTitle ); setTitle( newTitle );
} }
private String[] getSelWords()
{
String[] result;
int nSels = m_checkeds.size();
if ( nSels == m_words.length ) {
result = m_words;
} else {
result = new String[nSels];
Iterator<Integer> iter = m_checkeds.iterator();
for ( int ii = 0; iter.hasNext(); ++ii ) {
result[ii] = m_words[iter.next()];
}
}
return result;
}
private void clearSels()
{
m_checkeds.clear();
makeAdapter();
setTitleBar();
}
public static void launchOrAlert( Context context, int lang, public static void launchOrAlert( Context context, int lang,
DlgDelegate.HasDlgDelegate dlg ) DlgDelegate.HasDlgDelegate dlg )
{ {