diff --git a/xwords4/android/XWords4/res/values/common_rsrc.xml b/xwords4/android/XWords4/res/values/common_rsrc.xml index d0271a566..529248ac1 100644 --- a/xwords4/android/XWords4/res/values/common_rsrc.xml +++ b/xwords4/android/XWords4/res/values/common_rsrc.xml @@ -25,8 +25,7 @@ key_clr_tile_back key_clr_empty key_clr_crosshairs - key_clr_frames - key_hilite_whiteonblack + key_board_theme key_relay_host key_relay_port2 key_proxy_port @@ -83,6 +82,11 @@ @string/robot_smart + + @string/black_on_white + @string/white_on_black + + @string/connect_thirty_seconds @string/connect_five_mins diff --git a/xwords4/android/XWords4/res/values/strings.xml b/xwords4/android/XWords4/res/values/strings.xml index 5a86c102c..9b964e1c1 100644 --- a/xwords4/android/XWords4/res/values/strings.xml +++ b/xwords4/android/XWords4/res/values/strings.xml @@ -268,7 +268,7 @@ Choose - Colors + Individual colors Edit colors used on the board First player Second player @@ -287,10 +287,9 @@ Tile background Empty cell/background Crosshairs color - Border color - Last play white-on-black - Toggle recent move - contrast colors + Board color schemes + Dark background + Light background Advanced You may never need these... diff --git a/xwords4/android/XWords4/res/xml/xwprefs.xml b/xwords4/android/XWords4/res/xml/xwprefs.xml index 260f0713e..d0872209d 100644 --- a/xwords4/android/XWords4/res/xml/xwprefs.xml +++ b/xwords4/android/XWords4/res/xml/xwprefs.xml @@ -49,11 +49,11 @@ - + + + + + + + - - + >= 8; - } - boolean blackArrow = sum > (127 * 3); - - if ( m_blackArrow != blackArrow ) { - m_blackArrow = blackArrow; - m_downArrow = m_rightArrow = null; - } + boolean useDark = darkOnLight(); + if ( m_blackArrow != useDark ) { + m_blackArrow = useDark; + m_downArrow = m_rightArrow = null; } + Drawable arrow; if ( vert ) { if ( null == m_downArrow ) { - m_downArrow = loadAndRecolor( R.drawable.downarrow ); + m_downArrow = loadAndRecolor( R.drawable.downarrow, useDark ); } arrow = m_downArrow; } else { if ( null == m_rightArrow ) { - m_rightArrow = loadAndRecolor( R.drawable.rightarrow ); + m_rightArrow = loadAndRecolor( R.drawable.rightarrow, useDark ); } arrow = m_rightArrow; } @@ -940,12 +931,28 @@ public class BoardView extends View implements DrawCtx, BoardHandler, } } - private Drawable loadAndRecolor( int resID ) + private boolean darkOnLight() + { + int background = m_otherColors[ CommonPrefs.COLOR_BKGND ]; + if ( background != m_backgroundUsed ) { + m_backgroundUsed = background; + + int sum = 0; + for ( int ii = 0; ii < 3; ++ii ) { + sum += background & 0xFF; + background >>= 8; + } + m_darkOnLight = sum > (127*3); + } + return m_darkOnLight; + } + + private Drawable loadAndRecolor( int resID, boolean useDark ) { Resources res = getResources(); Drawable arrow = res.getDrawable( resID ); - if ( ! m_blackArrow ) { + if ( !useDark ) { Bitmap src = ((BitmapDrawable)arrow).getBitmap(); Bitmap bitmap = src.copy( Bitmap.Config.ARGB_8888, true ); for ( int xx = 0; xx < bitmap.getWidth(); ++xx ) { diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/PrefsActivity.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/PrefsActivity.java index ab6965b2b..ddfaa1064 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/PrefsActivity.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/PrefsActivity.java @@ -39,6 +39,10 @@ public class PrefsActivity extends PreferenceActivity private static final int REVERT_ALL = 2; private String[] m_keys; + private String m_boardThemeKey; + private String m_keyEmpty; + private String m_whiteOnBlack; + private String m_blackOnWhite; @Override protected Dialog onCreateDialog( int id ) @@ -118,6 +122,7 @@ public class PrefsActivity extends PreferenceActivity R.string.key_initial_player_minutes, R.string.key_default_dict, R.string.key_default_phonies, + R.string.key_board_theme, }; SharedPreferences sp @@ -129,6 +134,10 @@ public class PrefsActivity extends PreferenceActivity setSummary( sp, key ); m_keys[ii] = key; } + m_boardThemeKey = getString( R.string.key_board_theme ); + m_keyEmpty = getString( R.string.key_empty ); + m_whiteOnBlack = getString( R.string.white_on_black ); + m_blackOnWhite = getString( R.string.black_on_white ); } @Override @@ -149,12 +158,33 @@ public class PrefsActivity extends PreferenceActivity public void onSharedPreferenceChanged( SharedPreferences sp, String key ) { + // This would search faster if it were a hash set... for ( String akey : m_keys ) { if ( akey.equals( key ) ) { setSummary( sp, key ); break; } } + + // Change those color elements that follow the "themes" -- + // currently only key_empty + while ( m_boardThemeKey.equals( key ) ) { // while allows break + String newValue = sp.getString( key, "" ); + + int color; + if ( m_whiteOnBlack.equals( newValue ) ) { + color = 0xFF000000; + } else if ( m_blackOnWhite.equals( newValue ) ) { + color = 0xFFFFFFFF; + } else { + break; + } + + SharedPreferences.Editor editor = sp.edit(); + editor.putInt( m_keyEmpty, color ); + editor.commit(); + break; + } } @Override diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/CommonPrefs.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/CommonPrefs.java index a337c045f..1d1d7feb4 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/CommonPrefs.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/CommonPrefs.java @@ -35,8 +35,7 @@ public class CommonPrefs { public static final int COLOR_TILE_BACK = 0; public static final int COLOR_BKGND = 1; public static final int COLOR_FOCUS = 2; - public static final int COLOR_FRAMES = 3; - public static final int COLOR_LAST = 4; + public static final int COLOR_LAST = 3; private static CommonPrefs s_cp = null; @@ -104,7 +103,6 @@ public class CommonPrefs { int idsOther[] = { R.string.key_tile_back, R.string.key_empty, R.string.key_clr_crosshairs, - R.string.key_clr_frames, }; for ( int ii = 0; ii < idsOther.length; ++ii ) { otherColors[ii] = prefToColor( context, sp, idsOther[ii] ); @@ -255,12 +253,6 @@ public class CommonPrefs { return getPrefsBoolean( context, R.string.key_show_bonussum, false ); } - public static boolean getHiliteWhiteOnBlack( Context context ) - { - return getPrefsBoolean( context, R.string.key_hilite_whiteonblack, - true ); - } - public static boolean getPrefsBoolean( Context context, int keyID, boolean defaultValue ) {