mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-16 15:41:16 +01:00
Add dark- and light-mode themes for board
Allow user to choose a new dark-mode color scheme for the board, with colors editable same as the old mode. Support exporting a URL encapsulating those colors to clipboard and importing from the URL when it's tapped e.g. in email.
This commit is contained in:
parent
1776638467
commit
bfd7963ea6
22 changed files with 508 additions and 106 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -15,3 +15,5 @@ nohup.out
|
||||||
/xwords4/android/obj-debug-xw4d
|
/xwords4/android/obj-debug-xw4d
|
||||||
/xwords4/android/app/build
|
/xwords4/android/app/build
|
||||||
/xwords4/android/app/src/main/java/org/eehouse/android/xw4/loc/LocIDsData.java
|
/xwords4/android/app/src/main/java/org/eehouse/android/xw4/loc/LocIDsData.java
|
||||||
|
/xwords4/android/app/src/main/java/org/eehouse/android/xw4/gen/*
|
||||||
|
/xwords4/dawg/*/*.bin*
|
||||||
|
|
|
@ -102,6 +102,7 @@ android {
|
||||||
buildConfigField "String", "BUILD_INFO_NAME", "\"${BUILD_INFO_NAME}\""
|
buildConfigField "String", "BUILD_INFO_NAME", "\"${BUILD_INFO_NAME}\""
|
||||||
buildConfigField "boolean", "IS_TAGGED_BUILD", "${CURTAG}" == '' ? "false" : "true"
|
buildConfigField "boolean", "IS_TAGGED_BUILD", "${CURTAG}" == '' ? "false" : "true"
|
||||||
resValue "string", "invite_prefix", "/and/"
|
resValue "string", "invite_prefix", "/and/"
|
||||||
|
resValue "string", "conf_prefix", "/cnf/"
|
||||||
resValue "string", "newgame_scheme", "newxwgame"
|
resValue "string", "newgame_scheme", "newxwgame"
|
||||||
buildConfigField "boolean", "UDP_ENABLED", "true"
|
buildConfigField "boolean", "UDP_ENABLED", "true"
|
||||||
buildConfigField "boolean", "REPORT_LOCKS", "false"
|
buildConfigField "boolean", "REPORT_LOCKS", "false"
|
||||||
|
@ -155,6 +156,7 @@ android {
|
||||||
resValue "string", "app_name", "CrossDbg"
|
resValue "string", "app_name", "CrossDbg"
|
||||||
resValue "string", "nbs_port", "3345"
|
resValue "string", "nbs_port", "3345"
|
||||||
resValue "string", "invite_prefix", "/andd/"
|
resValue "string", "invite_prefix", "/andd/"
|
||||||
|
resValue "string", "conf_prefix", "/cnfd/"
|
||||||
resValue "string", "newgame_scheme", "newxwgamed"
|
resValue "string", "newgame_scheme", "newxwgamed"
|
||||||
buildConfigField "boolean", "WIDIR_ENABLED", "true"
|
buildConfigField "boolean", "WIDIR_ENABLED", "true"
|
||||||
buildConfigField "String", "VARIANT_NAME", "\"Dev/Debug\""
|
buildConfigField "String", "VARIANT_NAME", "\"Dev/Debug\""
|
||||||
|
@ -175,6 +177,7 @@ android {
|
||||||
resValue "string", "app_name", "CrossDbg"
|
resValue "string", "app_name", "CrossDbg"
|
||||||
resValue "string", "nbs_port", "3345"
|
resValue "string", "nbs_port", "3345"
|
||||||
resValue "string", "invite_prefix", "/andd/"
|
resValue "string", "invite_prefix", "/andd/"
|
||||||
|
resValue "string", "conf_prefix", "/cnfd/"
|
||||||
resValue "string", "newgame_scheme", "newxwgamed"
|
resValue "string", "newgame_scheme", "newxwgamed"
|
||||||
buildConfigField "boolean", "WIDIR_ENABLED", "true"
|
buildConfigField "boolean", "WIDIR_ENABLED", "true"
|
||||||
buildConfigField "String", "VARIANT_NAME", "\"Dev/Debug GPlay\""
|
buildConfigField "String", "VARIANT_NAME", "\"Dev/Debug GPlay\""
|
||||||
|
|
|
@ -83,6 +83,10 @@
|
||||||
android:host="@string/invite_host"
|
android:host="@string/invite_host"
|
||||||
android:pathPrefix="@string/invite_prefix"
|
android:pathPrefix="@string/invite_prefix"
|
||||||
/>
|
/>
|
||||||
|
<data android:scheme="http"
|
||||||
|
android:host="@string/invite_host"
|
||||||
|
android:pathPrefix="@string/conf_prefix"
|
||||||
|
/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* -*- compile-command: "find-and-gradle.sh inXw4dDeb"; -*- */
|
/* -*- compile-command: "find-and-gradle.sh inXw4dDeb"; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright 2009 - 2019 by Eric House (xwords@eehouse.org). All rights
|
* Copyright 2009 - 2021 by Eric House (xwords@eehouse.org). All rights
|
||||||
* reserved.
|
* reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
|
|
|
@ -54,6 +54,7 @@ public class DlgDelegate {
|
||||||
CLEAR_LOG_DB,
|
CLEAR_LOG_DB,
|
||||||
QUARANTINE_CLEAR,
|
QUARANTINE_CLEAR,
|
||||||
QUARANTINE_DELETE,
|
QUARANTINE_DELETE,
|
||||||
|
APPLY_CONFIG,
|
||||||
|
|
||||||
// BoardDelegate
|
// BoardDelegate
|
||||||
UNDO_LAST_ACTION,
|
UNDO_LAST_ACTION,
|
||||||
|
@ -129,6 +130,7 @@ public class DlgDelegate {
|
||||||
PERMS_QUERY,
|
PERMS_QUERY,
|
||||||
PERMS_BANNED_INFO,
|
PERMS_BANNED_INFO,
|
||||||
SHOW_FAQ,
|
SHOW_FAQ,
|
||||||
|
EXPORT_THEME,
|
||||||
} // Action enum
|
} // Action enum
|
||||||
|
|
||||||
public static class ActionPair implements Serializable {
|
public static class ActionPair implements Serializable {
|
||||||
|
|
|
@ -1562,6 +1562,11 @@ public class GamesListDelegate extends ListDelegateBase
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case APPLY_CONFIG:
|
||||||
|
Uri data = Uri.parse( (String)params[0] );
|
||||||
|
CommonPrefs.loadColorPrefs( m_activity, data );
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
handled = super.onPosButton( action, params );
|
handled = super.onPosButton( action, params );
|
||||||
}
|
}
|
||||||
|
@ -2471,6 +2476,28 @@ public class GamesListDelegate extends ListDelegateBase
|
||||||
return handled;
|
return handled;
|
||||||
} // startNewNetGame
|
} // startNewNetGame
|
||||||
|
|
||||||
|
private boolean loadConfig( Intent intent )
|
||||||
|
{
|
||||||
|
boolean success = false;
|
||||||
|
try {
|
||||||
|
Uri data = intent.getData();
|
||||||
|
String path = data.getPath();
|
||||||
|
String prefix = LocUtils.getString( m_activity, R.string.conf_prefix );
|
||||||
|
if ( path.startsWith( prefix ) ) {
|
||||||
|
makeConfirmThenBuilder( R.string.apply_config, Action.APPLY_CONFIG )
|
||||||
|
.setPosButton( R.string.button_apply_config )
|
||||||
|
.setNegButton( android.R.string.cancel )
|
||||||
|
.setParams( data.toString() )
|
||||||
|
.show();
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
|
} catch ( Exception ex ) {
|
||||||
|
Log.ex( TAG, ex );
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean startHasGameID( int gameID )
|
private boolean startHasGameID( int gameID )
|
||||||
{
|
{
|
||||||
boolean handled = false;
|
boolean handled = false;
|
||||||
|
@ -2847,6 +2874,7 @@ public class GamesListDelegate extends ListDelegateBase
|
||||||
boolean handled = startFirstHasDict( intent )
|
boolean handled = startFirstHasDict( intent )
|
||||||
|| startWithInvitee( intent )
|
|| startWithInvitee( intent )
|
||||||
|| postWordlistURL( intent )
|
|| postWordlistURL( intent )
|
||||||
|
|| loadConfig( intent )
|
||||||
|| startNewNetGame( intent )
|
|| startNewNetGame( intent )
|
||||||
|| startHasGameID( intent )
|
|| startHasGameID( intent )
|
||||||
|| startRematch( intent )
|
|| startRematch( intent )
|
||||||
|
|
|
@ -21,21 +21,18 @@
|
||||||
package org.eehouse.android.xw4;
|
package org.eehouse.android.xw4;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.preference.ListPreference;
|
import android.view.MenuItem;
|
||||||
import androidx.preference.Preference;
|
import android.view.View;
|
||||||
|
import android.widget.PopupMenu;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
import androidx.preference.PreferenceFragmentCompat;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.preference.PreferenceScreen;
|
|
||||||
import androidx.preference.PreferenceCategory;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.Button;
|
|
||||||
|
|
||||||
import org.eehouse.android.xw4.DlgDelegate.Action;
|
import org.eehouse.android.xw4.DlgDelegate.Action;
|
||||||
import org.eehouse.android.xw4.gen.PrefsWrappers;
|
import org.eehouse.android.xw4.gen.PrefsWrappers;
|
||||||
|
@ -48,7 +45,7 @@ import java.util.Map;
|
||||||
|
|
||||||
public class PrefsDelegate extends DelegateBase
|
public class PrefsDelegate extends DelegateBase
|
||||||
implements SharedPreferences.OnSharedPreferenceChangeListener,
|
implements SharedPreferences.OnSharedPreferenceChangeListener,
|
||||||
View.OnClickListener {
|
View.OnClickListener, PopupMenu.OnMenuItemClickListener {
|
||||||
private static final String TAG = PrefsDelegate.class.getSimpleName();
|
private static final String TAG = PrefsDelegate.class.getSimpleName();
|
||||||
|
|
||||||
private XWActivity mActivity;
|
private XWActivity mActivity;
|
||||||
|
@ -76,12 +73,12 @@ public class PrefsDelegate extends DelegateBase
|
||||||
public PrefsDelegate( XWActivity activity, Delegator delegator,
|
public PrefsDelegate( XWActivity activity, Delegator delegator,
|
||||||
Bundle savedInstanceState )
|
Bundle savedInstanceState )
|
||||||
{
|
{
|
||||||
super( delegator, savedInstanceState, R.layout.prefs_w_buttons );
|
super( delegator, savedInstanceState, R.layout.prefs );
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Dialog makeDialog( DBAlert alert, Object[] params )
|
protected Dialog makeDialog( final DBAlert alert, Object[] params )
|
||||||
{
|
{
|
||||||
final DlgID dlgID = alert.getDlgID();
|
final DlgID dlgID = alert.getDlgID();
|
||||||
DialogInterface.OnClickListener lstnr = null;
|
DialogInterface.OnClickListener lstnr = null;
|
||||||
|
@ -94,26 +91,17 @@ public class PrefsDelegate extends DelegateBase
|
||||||
@Override
|
@Override
|
||||||
public void onClick( DialogInterface dlg, int item ) {
|
public void onClick( DialogInterface dlg, int item ) {
|
||||||
PrefsDelegate self = (PrefsDelegate)curThis();
|
PrefsDelegate self = (PrefsDelegate)curThis();
|
||||||
SharedPreferences sp = self.getSharedPreferences();
|
Resources res = alert.getContext().getResources();
|
||||||
SharedPreferences.Editor editor = sp.edit();
|
SharedPreferences.Editor editor =
|
||||||
int[] colorKeys = {
|
self.getSharedPreferences().edit();
|
||||||
R.string.key_player0,
|
int[] themeKeys = { R.array.color_ids_light,
|
||||||
R.string.key_player1,
|
R.array.color_ids_dark,
|
||||||
R.string.key_player2,
|
|
||||||
R.string.key_player3,
|
|
||||||
R.string.key_bonus_l2x,
|
|
||||||
R.string.key_bonus_l3x,
|
|
||||||
R.string.key_bonus_w2x,
|
|
||||||
R.string.key_bonus_w3x,
|
|
||||||
R.string.key_tile_back,
|
|
||||||
R.string.key_clr_crosshairs,
|
|
||||||
R.string.key_empty,
|
|
||||||
R.string.key_background,
|
|
||||||
R.string.key_clr_bonushint,
|
|
||||||
R.string.key_cellline,
|
|
||||||
};
|
};
|
||||||
for ( int colorKey : colorKeys ) {
|
for ( int themeKey : themeKeys ) {
|
||||||
editor.remove( getString(colorKey) );
|
String[] colorKeys = res.getStringArray( themeKey );
|
||||||
|
for ( String colorKey : colorKeys ) {
|
||||||
|
editor.remove( colorKey );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
editor.commit();
|
editor.commit();
|
||||||
self.relaunch();
|
self.relaunch();
|
||||||
|
@ -174,8 +162,7 @@ public class PrefsDelegate extends DelegateBase
|
||||||
getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
|
getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
|
||||||
|
|
||||||
// It's too early somehow to do this in init() above
|
// It's too early somehow to do this in init() above
|
||||||
findViewById( R.id.revert_colors ).setOnClickListener(this);
|
findViewById( R.id.prefs_menu ).setOnClickListener(this);
|
||||||
findViewById( R.id.revert_all ).setOnClickListener(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -192,11 +179,11 @@ public class PrefsDelegate extends DelegateBase
|
||||||
DlgID dlgID = null;
|
DlgID dlgID = null;
|
||||||
int id = view.getId();
|
int id = view.getId();
|
||||||
switch ( id ) {
|
switch ( id ) {
|
||||||
case R.id.revert_all:
|
case R.id.prefs_menu:
|
||||||
dlgID = DlgID.REVERT_ALL;
|
PopupMenu popup = new PopupMenu( mActivity, view );
|
||||||
break;
|
popup.inflate( R.menu.prefs_popup );
|
||||||
case R.id.revert_colors:
|
popup.setOnMenuItemClickListener( this );
|
||||||
dlgID = DlgID.REVERT_COLORS;
|
popup.show();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Assert.failDbg();
|
Assert.failDbg();
|
||||||
|
@ -207,6 +194,44 @@ public class PrefsDelegate extends DelegateBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onMenuItemClick( MenuItem item )
|
||||||
|
{
|
||||||
|
boolean handled = true;
|
||||||
|
Log.d( TAG, "item: %s", item );
|
||||||
|
DlgID dlgID = null;
|
||||||
|
CommonPrefs.ColorTheme theme = null;
|
||||||
|
switch ( item.getItemId() ) {
|
||||||
|
case R.id.prefs_revert_colors:
|
||||||
|
dlgID = DlgID.REVERT_COLORS;
|
||||||
|
break;
|
||||||
|
case R.id.prefs_revert_all:
|
||||||
|
dlgID = DlgID.REVERT_ALL;
|
||||||
|
break;
|
||||||
|
case R.id.prefs_copy_light:
|
||||||
|
theme = CommonPrefs.ColorTheme.LIGHT;
|
||||||
|
break;
|
||||||
|
case R.id.prefs_copy_dark:
|
||||||
|
theme = CommonPrefs.ColorTheme.DARK;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Assert.failDbg();
|
||||||
|
handled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( null != dlgID ) {
|
||||||
|
showDialogFragment( dlgID );
|
||||||
|
} else if ( null != theme ) {
|
||||||
|
makeNotAgainBuilder( R.string.not_again_copytheme,
|
||||||
|
R.string.key_na_copytheme,
|
||||||
|
Action.EXPORT_THEME )
|
||||||
|
.setParams( theme )
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
return handled;
|
||||||
|
}
|
||||||
|
|
||||||
// interface SharedPreferences.OnSharedPreferenceChangeListener
|
// interface SharedPreferences.OnSharedPreferenceChangeListener
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged( SharedPreferences sp, String key )
|
public void onSharedPreferenceChanged( SharedPreferences sp, String key )
|
||||||
|
@ -296,6 +321,11 @@ public class PrefsDelegate extends DelegateBase
|
||||||
BTUtils.setEnabled( mActivity, false );
|
BTUtils.setEnabled( mActivity, false );
|
||||||
BTCheckBoxPreference.setChecked();
|
BTCheckBoxPreference.setChecked();
|
||||||
break;
|
break;
|
||||||
|
case EXPORT_THEME:
|
||||||
|
CommonPrefs.ColorTheme theme = (CommonPrefs.ColorTheme)params[0];
|
||||||
|
CommonPrefs.colorPrefsToClip( mActivity, theme );
|
||||||
|
DbgUtils.showf( mActivity, R.string.theme_data_success );
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
handled = super.onPosButton( action, params );
|
handled = super.onPosButton( action, params );
|
||||||
}
|
}
|
||||||
|
|
|
@ -241,7 +241,7 @@ public class Utils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void stringToClip( Context context, String str )
|
public static void stringToClip( Context context, String str )
|
||||||
{
|
{
|
||||||
ClipboardManager clipboard = (ClipboardManager)
|
ClipboardManager clipboard = (ClipboardManager)
|
||||||
context.getSystemService(Context.CLIPBOARD_SERVICE);
|
context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
|
|
|
@ -22,13 +22,18 @@ package org.eehouse.android.xw4.jni;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
|
import org.eehouse.android.xw4.Assert;
|
||||||
import org.eehouse.android.xw4.DictUtils;
|
import org.eehouse.android.xw4.DictUtils;
|
||||||
import org.eehouse.android.xw4.Log;
|
import org.eehouse.android.xw4.Log;
|
||||||
|
import org.eehouse.android.xw4.NetUtils;
|
||||||
import org.eehouse.android.xw4.R;
|
import org.eehouse.android.xw4.R;
|
||||||
|
import org.eehouse.android.xw4.Utils;
|
||||||
import org.eehouse.android.xw4.XWPrefs;
|
import org.eehouse.android.xw4.XWPrefs;
|
||||||
import org.eehouse.android.xw4.loc.LocUtils;
|
import org.eehouse.android.xw4.loc.LocUtils;
|
||||||
|
|
||||||
|
@ -100,39 +105,47 @@ public class CommonPrefs extends XWPrefs {
|
||||||
int ord = getInt(context, sp, R.string.key_tile_valuetype, 0);
|
int ord = getInt(context, sp, R.string.key_tile_valuetype, 0);
|
||||||
tvType = TileValueType.values()[ord];
|
tvType = TileValueType.values()[ord];
|
||||||
|
|
||||||
int ids[] = { R.string.key_player0,
|
Resources res = context.getResources();
|
||||||
R.string.key_player1,
|
int strsID = R.array.color_ids_light;
|
||||||
R.string.key_player2,
|
String which = LocUtils.getString( context, R.string.key_theme_which );
|
||||||
R.string.key_player3,
|
which = sp.getString( which, null );
|
||||||
};
|
if ( null == which ) {
|
||||||
|
// do nothing
|
||||||
for ( int ii = 0; ii < ids.length; ++ii ) {
|
} else if ( which.equals( LocUtils.getString( context,
|
||||||
playerColors[ii] = prefToColor( context, sp, ids[ii] );
|
R.string.color_use_theme_light ) ) ) {
|
||||||
|
// do nothing
|
||||||
|
} else if ( which.equals( LocUtils.getString( context,
|
||||||
|
R.string.color_use_theme_dark ) ) ) {
|
||||||
|
strsID = R.array.color_ids_dark;
|
||||||
|
} else {
|
||||||
|
int uiMode = res.getConfiguration().uiMode;
|
||||||
|
if ( Configuration.UI_MODE_NIGHT_YES
|
||||||
|
== (uiMode & Configuration.UI_MODE_NIGHT_MASK) ) {
|
||||||
|
strsID = R.array.color_ids_dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ids2[] = { R.string.key_bonus_l2x,
|
|
||||||
R.string.key_bonus_w2x,
|
|
||||||
R.string.key_bonus_l3x,
|
|
||||||
R.string.key_bonus_w3x,
|
|
||||||
};
|
|
||||||
for ( int ii = 0; ii < ids2.length; ++ii ) {
|
|
||||||
bonusColors[ii+1] = prefToColor( context, sp, ids2[ii] );
|
|
||||||
}
|
}
|
||||||
|
String[] colorStrIds = res.getStringArray( strsID );
|
||||||
|
|
||||||
int idsOther[] = { R.string.key_tile_back,
|
int offset = copyColors( sp, colorStrIds, 0, playerColors, 0 );
|
||||||
R.string.key_empty,
|
offset += copyColors( sp, colorStrIds, offset, bonusColors, 1 );
|
||||||
R.string.key_clr_crosshairs,
|
offset += copyColors( sp, colorStrIds, offset, otherColors, 0 );
|
||||||
R.string.key_background,
|
|
||||||
R.string.key_clr_bonushint,
|
|
||||||
R.string.key_cellline,
|
|
||||||
};
|
|
||||||
for ( int ii = 0; ii < idsOther.length; ++ii ) {
|
|
||||||
otherColors[ii] = prefToColor( context, sp, idsOther[ii] );
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int copyColors( SharedPreferences sp, String[] colorStrIds,
|
||||||
|
int idsStart, int[] colors, int colorsStart )
|
||||||
|
{
|
||||||
|
int nUsed = 0;
|
||||||
|
while ( colorsStart < colors.length ) {
|
||||||
|
String key = colorStrIds[idsStart + nUsed++];
|
||||||
|
int color = 0xFF000000 | sp.getInt( key, 0 );
|
||||||
|
colors[colorsStart++] = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nUsed;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean getBoolean( Context context, SharedPreferences sp,
|
private boolean getBoolean( Context context, SharedPreferences sp,
|
||||||
int id, boolean dflt )
|
int id, boolean dflt )
|
||||||
{
|
{
|
||||||
|
@ -147,12 +160,6 @@ public class CommonPrefs extends XWPrefs {
|
||||||
return sp.getInt( key, dflt );
|
return sp.getInt( key, dflt );
|
||||||
}
|
}
|
||||||
|
|
||||||
private int prefToColor( Context context, SharedPreferences sp, int id )
|
|
||||||
{
|
|
||||||
String key = LocUtils.getString( context, id );
|
|
||||||
return 0xFF000000 | sp.getInt( key, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* static methods
|
* static methods
|
||||||
*/
|
*/
|
||||||
|
@ -303,4 +310,74 @@ public class CommonPrefs extends XWPrefs {
|
||||||
return getPrefsString( context, R.string.key_summary_field );
|
return getPrefsString( context, R.string.key_summary_field );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum ColorTheme {
|
||||||
|
LIGHT(R.array.color_ids_light),
|
||||||
|
DARK(R.array.color_ids_dark);
|
||||||
|
|
||||||
|
private int mArrayID;
|
||||||
|
private ColorTheme(int arrayID) {
|
||||||
|
mArrayID = arrayID;
|
||||||
|
}
|
||||||
|
int getArrayID() { return mArrayID; }
|
||||||
|
};
|
||||||
|
private static final String THEME_KEY = "theme";
|
||||||
|
|
||||||
|
public static void colorPrefsToClip( Context context, ColorTheme theme )
|
||||||
|
{
|
||||||
|
String host = LocUtils.getString( context, R.string.invite_host );
|
||||||
|
Uri.Builder ub = new Uri.Builder()
|
||||||
|
.scheme( "http" ) // PENDING: should be https soon
|
||||||
|
.path( String.format( "//%s%s", NetUtils.forceHost( host ),
|
||||||
|
LocUtils.getString(context, R.string.conf_prefix) ) )
|
||||||
|
.appendQueryParameter( THEME_KEY, theme.toString() );
|
||||||
|
|
||||||
|
Resources res = context.getResources();
|
||||||
|
String[] urlKeys = res.getStringArray( R.array.color_url_keys );
|
||||||
|
String[] dataKeys = res.getStringArray( theme.getArrayID() );
|
||||||
|
Assert.assertTrue( urlKeys.length == dataKeys.length );
|
||||||
|
SharedPreferences sp = PreferenceManager
|
||||||
|
.getDefaultSharedPreferences( context );
|
||||||
|
|
||||||
|
for ( int ii = 0; ii < urlKeys.length; ++ii ) {
|
||||||
|
int val = sp.getInt( dataKeys[ii], 0 );
|
||||||
|
ub.appendQueryParameter( urlKeys[ii], String.format("%X", val ) );
|
||||||
|
}
|
||||||
|
String data = ub.build().toString();
|
||||||
|
|
||||||
|
Utils.stringToClip( context, data );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void loadColorPrefs( Context context, Uri uri )
|
||||||
|
{
|
||||||
|
String themeName = uri.getQueryParameter( THEME_KEY );
|
||||||
|
int arrayID = 0;
|
||||||
|
for ( ColorTheme theme : ColorTheme.values() ) {
|
||||||
|
if ( theme.toString().equals(themeName) ) {
|
||||||
|
arrayID = theme.getArrayID();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Assert.assertTrueNR( 0 != arrayID );
|
||||||
|
if ( 0 != arrayID ) {
|
||||||
|
Resources res = context.getResources();
|
||||||
|
String[] urlKeys = res.getStringArray( R.array.color_url_keys );
|
||||||
|
String[] dataKeys = res.getStringArray( arrayID );
|
||||||
|
SharedPreferences sp = PreferenceManager
|
||||||
|
.getDefaultSharedPreferences( context );
|
||||||
|
SharedPreferences.Editor editor = sp.edit();
|
||||||
|
|
||||||
|
for ( int ii = 0; ii < urlKeys.length; ++ii ) {
|
||||||
|
String urlKey = urlKeys[ii];
|
||||||
|
try {
|
||||||
|
String val = uri.getQueryParameter( urlKey );
|
||||||
|
editor.putInt( dataKeys[ii], Integer.parseInt( val, 16 ) );
|
||||||
|
Log.d( TAG, "set %s => %s", dataKeys[ii], val ); // here
|
||||||
|
} catch ( Exception ex ) {
|
||||||
|
Log.ex( TAG, ex );
|
||||||
|
Log.d( TAG, "bad/missing data for url key: %s", urlKey );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
editor.commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
10
xwords4/android/app/src/main/res/drawable/ic_hamburger.xml
Normal file
10
xwords4/android/app/src/main/res/drawable/ic_hamburger.xml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<vector android:height="18dp"
|
||||||
|
android:viewportHeight="32"
|
||||||
|
android:viewportWidth="32"
|
||||||
|
android:width="18dp"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
>
|
||||||
|
<path android:fillColor="#FF000000"
|
||||||
|
android:pathData="M4,10h24c1.104,0 2,-0.896 2,-2s-0.896,-2 -2,-2H4C2.896,6 2,6.896 2,8S2.896,10 4,10zM28,14H4c-1.104,0 -2,0.896 -2,2s0.896,2 2,2h24c1.104,0 2,-0.896 2,-2S29.104,14 28,14zM28,22H4c-1.104,0 -2,0.896 -2,2s0.896,2 2,2h24c1.104,0 2,-0.896 2,-2S29.104,22 28,22z"
|
||||||
|
/>
|
||||||
|
</vector>
|
21
xwords4/android/app/src/main/res/layout/prefs.xml
Normal file
21
xwords4/android/app/src/main/res/layout/prefs.xml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
>
|
||||||
|
<ImageButton android:id="@+id/prefs_menu"
|
||||||
|
android:src="@drawable/ic_hamburger"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0"
|
||||||
|
android:layout_gravity="right"
|
||||||
|
/>
|
||||||
|
<LinearLayout android:id="@+id/main_container"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
/>
|
||||||
|
</LinearLayout>
|
|
@ -1,30 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
>
|
|
||||||
|
|
||||||
<LinearLayout android:id="@+id/main_container"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<LinearLayout android:orientation="horizontal"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="0"
|
|
||||||
>
|
|
||||||
<Button android:id="@+id/revert_colors"
|
|
||||||
android:text="@string/button_revert_colors"
|
|
||||||
style="@style/evenly_spaced_horizontal"
|
|
||||||
/>
|
|
||||||
<Button android:id="@+id/revert_all"
|
|
||||||
android:text="@string/button_revert_all"
|
|
||||||
style="@style/evenly_spaced_horizontal"
|
|
||||||
/>
|
|
||||||
</LinearLayout>
|
|
||||||
</LinearLayout>
|
|
17
xwords4/android/app/src/main/res/menu/prefs_popup.xml
Normal file
17
xwords4/android/app/src/main/res/menu/prefs_popup.xml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item android:id="@+id/prefs_revert_colors"
|
||||||
|
android:title="@string/button_revert_colors"
|
||||||
|
/>
|
||||||
|
<item android:id="@+id/prefs_revert_all"
|
||||||
|
android:title="@string/button_revert_all"
|
||||||
|
/>
|
||||||
|
<item android:id="@+id/prefs_copy_light"
|
||||||
|
android:title="@string/prefs_copy_light"
|
||||||
|
/>
|
||||||
|
<item android:id="@+id/prefs_copy_dark"
|
||||||
|
android:title="@string/prefs_copy_dark"
|
||||||
|
/>
|
||||||
|
</menu>
|
|
@ -37,6 +37,22 @@
|
||||||
<string name="key_clr_bonushint">key_clr_bonushint</string>
|
<string name="key_clr_bonushint">key_clr_bonushint</string>
|
||||||
<string name="key_board_line_width">key_board_line_width</string>
|
<string name="key_board_line_width">key_board_line_width</string>
|
||||||
|
|
||||||
|
<string name="key_player0_dark">key_clr_player0_dark</string>
|
||||||
|
<string name="key_player1_dark">key_clr_player1_dark</string>
|
||||||
|
<string name="key_player2_dark">key_clr_player2_dark</string>
|
||||||
|
<string name="key_player3_dark">key_clr_player3_dark</string>
|
||||||
|
<string name="key_bonus_l2x_dark">key_clr_bonus_l2x_dark</string>
|
||||||
|
<string name="key_bonus_l3x_dark">key_clr_bonus_l3x_dark</string>
|
||||||
|
<string name="key_bonus_w2x_dark">key_clr_bonus_w2x_dark</string>
|
||||||
|
<string name="key_bonus_w3x_dark">key_clr_bonus_w3x_dark</string>
|
||||||
|
<string name="key_tile_back_dark">key_clr_tile_back_dark</string>
|
||||||
|
<string name="key_empty_dark">key_clr_empty_dark</string>
|
||||||
|
<string name="key_background_dark">key_clr_background_dark</string>
|
||||||
|
<string name="key_cellline_dark">key_cellline_dark</string>
|
||||||
|
<string name="key_clr_crosshairs_dark">key_clr_crosshairs_dark</string>
|
||||||
|
<string name="key_clr_bonushint_dark">key_clr_bonushint_dark</string>
|
||||||
|
<string name="key_board_line_width_dark">key_board_line_width_dark</string>
|
||||||
|
|
||||||
<string name="key_relay_host">key_relay_host</string>
|
<string name="key_relay_host">key_relay_host</string>
|
||||||
<string name="key_relay_port">key_relay_port2</string>
|
<string name="key_relay_port">key_relay_port2</string>
|
||||||
<string name="key_relay_via_http_first">key_relay_via_http_first</string>
|
<string name="key_relay_via_http_first">key_relay_via_http_first</string>
|
||||||
|
@ -147,6 +163,7 @@
|
||||||
<string name="key_na_rematch_two_only">key_notagain_rematch_two_only</string>
|
<string name="key_na_rematch_two_only">key_notagain_rematch_two_only</string>
|
||||||
<string name="key_notagain_dfltname">key_notagain_dfltname</string>
|
<string name="key_notagain_dfltname">key_notagain_dfltname</string>
|
||||||
<string name="key_notagain_nbsGamesOnUpgrade">key_notagain_nbsGamesOnUpgrade</string>
|
<string name="key_notagain_nbsGamesOnUpgrade">key_notagain_nbsGamesOnUpgrade</string>
|
||||||
|
<string name="key_na_copytheme">key_na_copytheme</string>
|
||||||
<string name="key_na_comms_bt">key_na_comms_bt</string>
|
<string name="key_na_comms_bt">key_na_comms_bt</string>
|
||||||
<string name="key_na_comms_p2p">key_na_comms_p2p</string>
|
<string name="key_na_comms_p2p">key_na_comms_p2p</string>
|
||||||
<string name="key_na_comms_mqtt">key_na_comms_mqtt</string>
|
<string name="key_na_comms_mqtt">key_na_comms_mqtt</string>
|
||||||
|
@ -164,6 +181,8 @@
|
||||||
<string name="key_na_dupstatus_guest">key_na_dupstatus_guest</string>
|
<string name="key_na_dupstatus_guest">key_na_dupstatus_guest</string>
|
||||||
<string name="key_na_quicknetgame">key_na_quicknetgame</string>
|
<string name="key_na_quicknetgame">key_na_quicknetgame</string>
|
||||||
|
|
||||||
|
<string name="key_theme_which">key_theme_which</string>
|
||||||
|
|
||||||
<!-- Nor is my email address -->
|
<!-- Nor is my email address -->
|
||||||
<string name="email_author_email">xwords@eehouse.org</string>
|
<string name="email_author_email">xwords@eehouse.org</string>
|
||||||
|
|
||||||
|
@ -364,4 +383,68 @@
|
||||||
<item>@string/loc_filters_modified</item>
|
<item>@string/loc_filters_modified</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="color_themes">
|
||||||
|
<item>@string/color_use_theme_light</item>
|
||||||
|
<item>@string/color_use_theme_dark</item>
|
||||||
|
<item>@string/color_use_theme_os</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<!-- Keep in sync with the color_ids_{light,dark} below -->
|
||||||
|
<string-array name="color_url_keys">
|
||||||
|
<item>p1</item>
|
||||||
|
<item>p2</item>
|
||||||
|
<item>p3</item>
|
||||||
|
<item>p4</item>
|
||||||
|
|
||||||
|
<item>l2</item>
|
||||||
|
<item>w2</item>
|
||||||
|
<item>l3</item>
|
||||||
|
<item>w3</item>
|
||||||
|
|
||||||
|
<item>tb</item>
|
||||||
|
<item>em</item>
|
||||||
|
<item>xh</item>
|
||||||
|
<item>bk</item>
|
||||||
|
<item>bh</item>
|
||||||
|
<item>cl</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="color_ids_light">
|
||||||
|
<item>@string/key_player0</item>
|
||||||
|
<item>@string/key_player1</item>
|
||||||
|
<item>@string/key_player2</item>
|
||||||
|
<item>@string/key_player3</item>
|
||||||
|
|
||||||
|
<item>@string/key_bonus_l2x</item>
|
||||||
|
<item>@string/key_bonus_w2x</item>
|
||||||
|
<item>@string/key_bonus_l3x</item>
|
||||||
|
<item>@string/key_bonus_w3x</item>
|
||||||
|
|
||||||
|
<item>@string/key_tile_back</item>
|
||||||
|
<item>@string/key_empty</item>
|
||||||
|
<item>@string/key_clr_crosshairs</item>
|
||||||
|
<item>@string/key_background</item>
|
||||||
|
<item>@string/key_clr_bonushint</item>
|
||||||
|
<item>@string/key_cellline</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="color_ids_dark">
|
||||||
|
<item>@string/key_player0_dark</item>
|
||||||
|
<item>@string/key_player1_dark</item>
|
||||||
|
<item>@string/key_player2_dark</item>
|
||||||
|
<item>@string/key_player3_dark</item>
|
||||||
|
|
||||||
|
<item>@string/key_bonus_l2x_dark</item>
|
||||||
|
<item>@string/key_bonus_w2x_dark</item>
|
||||||
|
<item>@string/key_bonus_l3x_dark</item>
|
||||||
|
<item>@string/key_bonus_w3x_dark</item>
|
||||||
|
|
||||||
|
<item>@string/key_tile_back_dark</item>
|
||||||
|
<item>@string/key_empty_dark</item>
|
||||||
|
<item>@string/key_clr_crosshairs_dark</item>
|
||||||
|
<item>@string/key_background_dark</item>
|
||||||
|
<item>@string/key_clr_bonushint_dark</item>
|
||||||
|
<item>@string/key_cellline_dark</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -2740,4 +2740,36 @@
|
||||||
<string name="values_values">Values only</string>
|
<string name="values_values">Values only</string>
|
||||||
<string name="values_both">Letters and Values</string>
|
<string name="values_both">Letters and Values</string>
|
||||||
|
|
||||||
|
<!-- For color "themes", currently light and dark
|
||||||
|
supported. Custom may follow. -->
|
||||||
|
<string name="prefs_themes">Board color themes</string>
|
||||||
|
<string name="theme_which">Board color theme</string>
|
||||||
|
<string name="color_use_theme_light">Use Light theme</string>
|
||||||
|
<string name="color_use_theme_dark">Use Dark theme</string>
|
||||||
|
<string name="color_use_theme_os">Use Theme from Android Settings</string>
|
||||||
|
<string name="color_theme_edit_light">Edit Light theme</string>
|
||||||
|
<string name="color_theme_edit_dark">Edit Dark theme</string>
|
||||||
|
|
||||||
|
<!-- Menus in Prefs for copying color config data to clipboard -->
|
||||||
|
<string name="prefs_copy_light">Copy Light theme</string>
|
||||||
|
<string name="prefs_copy_dark">Copy Dark theme</string>
|
||||||
|
|
||||||
|
<!-- Hint about what copying theme data does -->
|
||||||
|
<string name="not_again_copytheme">Copying a theme puts a URL in
|
||||||
|
your clipboard. The URL encodes your settings for that theme. Send
|
||||||
|
the URL to another CrossWords user to share your settings: when
|
||||||
|
they tap on the URL on a device with the latest version of
|
||||||
|
CrossWords installed they’ll be able to import your
|
||||||
|
settings.</string>
|
||||||
|
|
||||||
|
<!-- Posted when copy data completes -->
|
||||||
|
<string name="theme_data_success">Theme copied to Clipboard</string>
|
||||||
|
<!-- Confirmation query when you launch with a url containing color config changes -->
|
||||||
|
<string name="apply_config">Would you like to import theme
|
||||||
|
settings from the URL you opened? They will replace any local
|
||||||
|
changes you have made.
|
||||||
|
|
||||||
|
\n\nThis action cannot be undone, but you can always restore the
|
||||||
|
default colors for this theme.</string>
|
||||||
|
<string name="button_apply_config">Import</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<style name="AppTheme" parent="android:Theme"/>
|
||||||
|
|
||||||
<style name="config_separator">
|
<style name="config_separator">
|
||||||
<item name="android:layout_height">wrap_content</item>
|
<item name="android:layout_height">wrap_content</item>
|
||||||
<item name="android:layout_width">fill_parent</item>
|
<item name="android:layout_width">fill_parent</item>
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<style name="AppTheme" parent="android:Theme"/>
|
|
||||||
</resources>
|
|
|
@ -58,7 +58,7 @@
|
||||||
|
|
||||||
<Preference app:title="@string/prefs_colors"
|
<Preference app:title="@string/prefs_colors"
|
||||||
app:summary="@string/prefs_colors_summary"
|
app:summary="@string/prefs_colors_summary"
|
||||||
app:fragment="org.eehouse.android.xw4.gen.PrefsWrappers$prefs_appear_colors"
|
app:fragment="org.eehouse.android.xw4.gen.PrefsWrappers$prefs_appear_themes"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
>
|
||||||
|
|
||||||
|
<PreferenceCategory android:title="@string/prefs_colors"
|
||||||
|
android:summary="@string/prefs_colors_summary"
|
||||||
|
>
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_player0_dark"
|
||||||
|
android:title="@string/pref_player1_name"
|
||||||
|
android:defaultValue="0xF0F0F0"
|
||||||
|
/>
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_player1_dark"
|
||||||
|
android:title="@string/pref_player2_name"
|
||||||
|
android:defaultValue="0xFFB0B0"
|
||||||
|
/>
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_player2_dark"
|
||||||
|
android:title="@string/pref_player3_name"
|
||||||
|
android:defaultValue="0xB0B0FF"
|
||||||
|
/>
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_player3_dark"
|
||||||
|
android:title="@string/pref_player4_name"
|
||||||
|
android:defaultValue="0xB0FFB0"
|
||||||
|
/>
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_bonus_l2x_dark"
|
||||||
|
android:title="@string/bonus_l2x"
|
||||||
|
android:defaultValue="0x3F3F00"
|
||||||
|
/>
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_bonus_l3x_dark"
|
||||||
|
android:title="@string/bonus_l3x"
|
||||||
|
android:defaultValue="0x003F3F"
|
||||||
|
/>
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_bonus_w2x_dark"
|
||||||
|
android:title="@string/bonus_w2x"
|
||||||
|
android:defaultValue="0x3F003F"
|
||||||
|
/>
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_bonus_w3x_dark"
|
||||||
|
android:title="@string/bonus_w3x"
|
||||||
|
android:defaultValue="0x3F3F3F"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_clr_bonushint_dark"
|
||||||
|
android:title="@string/key_bonushint"
|
||||||
|
android:defaultValue="0x7F7F7F"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_clr_crosshairs_dark"
|
||||||
|
android:title="@string/clr_crosshairs"
|
||||||
|
android:defaultValue="0x7070FF"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_tile_back_dark"
|
||||||
|
android:title="@string/tile_back"
|
||||||
|
android:defaultValue="0x585858"
|
||||||
|
/>
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_empty_dark"
|
||||||
|
android:title="@string/empty"
|
||||||
|
android:defaultValue="0x080808"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_background_dark"
|
||||||
|
android:title="@string/background"
|
||||||
|
android:defaultValue="0x1E2327"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<org.eehouse.android.xw4.EditColorPreference
|
||||||
|
android:key="@string/key_cellline_dark"
|
||||||
|
android:title="@string/cellline"
|
||||||
|
android:defaultValue="0x202020"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<org.eehouse.android.xw4.XWListPreference
|
||||||
|
android:key="@string/key_board_line_width_dark"
|
||||||
|
android:title="@string/cellline_width"
|
||||||
|
android:entries="@array/cellline_widths"
|
||||||
|
android:entryValues="@array/cellline_widths"
|
||||||
|
android:defaultValue="2"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
</PreferenceScreen>
|
||||||
|
|
25
xwords4/android/app/src/main/res/xml/prefs_appear_themes.xml
Normal file
25
xwords4/android/app/src/main/res/xml/prefs_appear_themes.xml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
>
|
||||||
|
|
||||||
|
<PreferenceCategory android:title="@string/prefs_themes"
|
||||||
|
>
|
||||||
|
|
||||||
|
<org.eehouse.android.xw4.XWListPreference
|
||||||
|
android:key="@string/key_theme_which"
|
||||||
|
android:title="@string/theme_which"
|
||||||
|
android:entries="@array/color_themes"
|
||||||
|
android:entryValues="@array/color_themes"
|
||||||
|
android:defaultValue="@string/color_use_theme_os"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Preference app:title="@string/color_theme_edit_light"
|
||||||
|
app:fragment="org.eehouse.android.xw4.gen.PrefsWrappers$prefs_appear_colors_light"
|
||||||
|
/>
|
||||||
|
<Preference app:title="@string/color_theme_edit_dark"
|
||||||
|
app:fragment="org.eehouse.android.xw4.gen.PrefsWrappers$prefs_appear_colors_dark"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
</PreferenceScreen>
|
5
xwords4/android/img_src/hamburger.svg
Normal file
5
xwords4/android/img_src/hamburger.svg
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="32px" id="Layer_1" style="enable-background:new 0 0 32 32;" version="1.1" viewBox="0 0 32 32" width="32px" xml:space="preserve">
|
||||||
|
<path d="M4,10h24c1.104,0,2-0.896,2-2s-0.896-2-2-2H4C2.896,6,2,6.896,2,8S2.896,10,4,10z M28,14H4c-1.104,0-2,0.896-2,2 s0.896,2,2,2h24c1.104,0,2-0.896,2-2S29.104,14,28,14z M28,22H4c-1.104,0-2,0.896-2,2s0.896,2,2,2h24c1.104,0,2-0.896,2-2 S29.104,22,28,22z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 609 B |
Loading…
Reference in a new issue