Merge branch 'android_branch' into android_translate
|
@ -6,7 +6,7 @@
|
|||
to come from a domain that you own or have control over. -->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.eehouse.android.xw4dbg"
|
||||
android:versionCode="100"
|
||||
android:versionCode="104"
|
||||
android:versionName="@string/app_version"
|
||||
>
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
to come from a domain that you own or have control over. -->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.eehouse.android.xw4"
|
||||
android:versionCode="103"
|
||||
android:versionCode="104"
|
||||
android:versionName="@string/app_version"
|
||||
>
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@ public final class R {
|
|||
public static final int button_rescan=0x7f0c000a;
|
||||
public static final int button_study=0x7f0c0065;
|
||||
public static final int change_connection=0x7f0c003f;
|
||||
public static final int chat_button=0x7f0c0084;
|
||||
public static final int chat_button=0x7f0c0081;
|
||||
public static final int chat_edit=0x7f0c0011;
|
||||
public static final int chat_history=0x7f0c0010;
|
||||
public static final int chat_menu_clear=0x7f0c00a5;
|
||||
|
@ -148,7 +148,7 @@ public final class R {
|
|||
public static final int details=0x7f0c0076;
|
||||
public static final int dict_label=0x7f0c006d;
|
||||
public static final int dict_spinner=0x7f0c0031;
|
||||
public static final int dictlist_button=0x7f0c0083;
|
||||
public static final int dictlist_button=0x7f0c0084;
|
||||
public static final int dicts_delete=0x7f0c00a8;
|
||||
public static final int dicts_deselect_all=0x7f0c00a7;
|
||||
public static final int dicts_download=0x7f0c00a6;
|
||||
|
@ -268,7 +268,7 @@ public final class R {
|
|||
public static final int seek_green=0x7f0c0019;
|
||||
public static final int seek_red=0x7f0c0017;
|
||||
public static final int show_remote=0x7f0c0021;
|
||||
public static final int shuffle_button=0x7f0c0081;
|
||||
public static final int shuffle_button=0x7f0c0082;
|
||||
public static final int slmenu_clear_sel=0x7f0c00d1;
|
||||
public static final int slmenu_copy_sel=0x7f0c00d0;
|
||||
public static final int slmenu_deselect_all=0x7f0c00cf;
|
||||
|
@ -285,7 +285,7 @@ public final class R {
|
|||
public static final int timer_minutes_edit=0x7f0c0043;
|
||||
public static final int timer_set=0x7f0c0042;
|
||||
public static final int toolbar=0x7f0c007e;
|
||||
public static final int undo_button=0x7f0c0082;
|
||||
public static final int undo_button=0x7f0c0083;
|
||||
public static final int use_timer=0x7f0c0041;
|
||||
public static final int values_button=0x7f0c0085;
|
||||
public static final int version_string=0x7f0c0000;
|
||||
|
@ -2010,6 +2010,7 @@ XLATE-ME
|
|||
/** <string name="data_gsm_only">SMS Data is only available on GSM phones.</string>
|
||||
*/
|
||||
public static final int data_gsm_only=0x7f05029b;
|
||||
public static final int db_enabled_toast=0x7f050351;
|
||||
/** <string name="db_store_done">SD card write complete.</string>
|
||||
*/
|
||||
public static final int db_store_done=0x7f05032d;
|
||||
|
|
|
@ -13,10 +13,10 @@
|
|||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Crosswords 4.4.108 release</h2>
|
||||
<h2>Crosswords 4.4.109 release</h2>
|
||||
|
||||
<p>This release fixes a nasty bug in invitations on older Android
|
||||
and improves in-game chat functionality.</p>
|
||||
<p>This release adds experimental support for side-by-side views on
|
||||
tablets.</p>
|
||||
|
||||
<div id="survey">
|
||||
<p>Please <a href="https://www.surveymonkey.com/s/GX3XLHR">take
|
||||
|
@ -26,18 +26,19 @@
|
|||
|
||||
<h3>New with this release</h3>
|
||||
<ul>
|
||||
<li>Fix problem with invitations on older Android versions
|
||||
(e.g. 4.2 and 4.3)</li>
|
||||
<li>Add side-by-side mode for tablets. For now, it's an option
|
||||
you'll be encouraged to enable. Later it'll always be on.</li>
|
||||
|
||||
<li>Chat fixes: send without closing the window, expand for
|
||||
longer messages, smart editing, etc.</li>
|
||||
<li>For small screens, make alerts' content scrollable</li>
|
||||
|
||||
<li>Fix so Bluetooth finds tablets as well as phones</li>
|
||||
<li>Modern phones have multi-touch screens, so remove old ways
|
||||
of zooming board</li>
|
||||
|
||||
<li>Add ability to disable relay play (to save battery for users
|
||||
who play standalone only)</li>
|
||||
<li>Improve generation of board snapshots</li>
|
||||
|
||||
<li>Improvements to French and Japanese translations</li>
|
||||
<li>Move "Play sound" preference</li>
|
||||
|
||||
<li>Fix problem with invitations and unclosable games</li>
|
||||
</ul>
|
||||
|
||||
<p>(The full changelog
|
||||
|
@ -45,10 +46,9 @@
|
|||
|
||||
<h3>Next up</h3>
|
||||
<ul>
|
||||
<li>Working on dual-pane mode (so e.g. board and chat can be
|
||||
side-by-side on tablets)</li>
|
||||
<li>Take advantage of Marshmallow's new permissions model (where
|
||||
the app only asks for them when it needs them.)
|
||||
the app only asks for permission, e.g. to send SMS, when it
|
||||
needs it.)
|
||||
</ul>
|
||||
|
||||
<p>Please let me know
|
||||
|
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 3.8 KiB |
|
@ -11,6 +11,7 @@
|
|||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
>
|
||||
|
||||
<org.eehouse.android.xw4.BoardView
|
||||
android:id="@+id/board_view"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -40,7 +41,7 @@
|
|||
/>
|
||||
</LinearLayout>
|
||||
|
||||
<!-- toolbar goes inside one of these -->
|
||||
<!-- Toolbar goes inside one of these. One will always be GONE. -->
|
||||
<ScrollView android:id="@+id/tbar_parent_vert"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -48,7 +49,6 @@
|
|||
android:visibility="gone"
|
||||
/>
|
||||
<HorizontalScrollView android:id="@+id/tbar_parent_hor"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
|
|
|
@ -6,18 +6,26 @@
|
|||
android:layout_height="fill_parent"
|
||||
>
|
||||
|
||||
<TextView android:id="@+id/msg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:padding="8dp"
|
||||
/>
|
||||
<!-- Container derives from ScrollView, so this LinearLayout must be
|
||||
the only child. -->
|
||||
<LinearLayout android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
>
|
||||
|
||||
<CheckBox android:id="@+id/not_again_check"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/button_notagain"
|
||||
android:layout_marginLeft="20dip"
|
||||
/>
|
||||
<TextView android:id="@+id/msg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:padding="8dp"
|
||||
/>
|
||||
|
||||
<CheckBox android:id="@+id/not_again_check"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/button_notagain"
|
||||
android:layout_marginLeft="20dip"
|
||||
/>
|
||||
</LinearLayout>
|
||||
|
||||
</org.eehouse.android.xw4.NotAgainView>
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/toolbar"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
>
|
||||
|
@ -14,6 +13,10 @@
|
|||
style="@style/toolbar_button"
|
||||
android:src="@drawable/next_hint"
|
||||
/>
|
||||
<ImageButton android:id="@+id/chat_button"
|
||||
style="@style/toolbar_button"
|
||||
android:src="@drawable/stat_notify_chat"
|
||||
/>
|
||||
<ImageButton android:id="@+id/shuffle_button"
|
||||
style="@style/toolbar_button"
|
||||
android:src="@drawable/shuffle"
|
||||
|
@ -26,10 +29,6 @@
|
|||
style="@style/toolbar_button"
|
||||
android:src="@drawable/dicticon"
|
||||
/>
|
||||
<ImageButton android:id="@+id/chat_button"
|
||||
style="@style/toolbar_button"
|
||||
android:src="@drawable/stat_notify_chat"
|
||||
/>
|
||||
<ImageButton android:id="@+id/values_button"
|
||||
style="@style/toolbar_button"
|
||||
android:src="@drawable/values"
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="toolbar_button">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_weight">1</item>
|
||||
</style>
|
||||
<style name="toolbar_button">
|
||||
<item name="android:layout_width">64dp</item>
|
||||
<item name="android:layout_height">64dp</item>
|
||||
<item name="android:layout_weight">1</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
|
|
8
xwords4/android/XWords4/res/values-xlarge/styles.xml
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="toolbar_button">
|
||||
<item name="android:layout_width">72dp</item>
|
||||
<item name="android:layout_height">72dp</item>
|
||||
<item name="android:layout_weight">1</item>
|
||||
</style>
|
||||
</resources>
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<resources>
|
||||
<string name="app_version">4.4.108</string>
|
||||
<string name="app_version">4.4.109</string>
|
||||
</resources>
|
||||
|
|
|
@ -2694,4 +2694,5 @@
|
|||
<string name="dualpane_restart">Exiting app…</string>
|
||||
<string name="after_restart">This change will not take effect until
|
||||
you restart Crosswords.</string>
|
||||
<string name="db_enabled_toast">Side-by-side mode ENABLED</string>
|
||||
</resources>
|
||||
|
|
|
@ -38,9 +38,10 @@
|
|||
</style>
|
||||
|
||||
<style name="toolbar_button">
|
||||
<item name="android:layout_width">@dimen/tb_button_width</item>
|
||||
<item name="android:layout_height">@dimen/tb_button_height</item>
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">match_parent</item>
|
||||
<item name="android:layout_weight">1</item>
|
||||
<item name="android:scaleType">fitCenter</item>
|
||||
</style>
|
||||
|
||||
<style name="about_items">
|
||||
|
|
|
@ -2302,4 +2302,5 @@
|
|||
<string name="dualpane_restart">Gnitixe ppa…</string>
|
||||
<string name="after_restart">Siht egnahc lliw ton ekat tceffe litnu
|
||||
uoy tratser Sdrowssorc.</string>
|
||||
<string name="db_enabled_toast">Edis-yb-edis edom DELBANE</string>
|
||||
</resources>
|
||||
|
|
|
@ -2302,4 +2302,5 @@
|
|||
<string name="dualpane_restart">EXITING APP…</string>
|
||||
<string name="after_restart">THIS CHANGE WILL NOT TAKE EFFECT UNTIL
|
||||
YOU RESTART CROSSWORDS.</string>
|
||||
<string name="db_enabled_toast">SIDE-BY-SIDE MODE ENABLED</string>
|
||||
</resources>
|
||||
|
|
|
@ -69,7 +69,9 @@ public class ABUtils {
|
|||
|
||||
public static boolean haveActionBar()
|
||||
{
|
||||
return null != s_safeInval;
|
||||
boolean result = null != s_safeInval;
|
||||
// DbgUtils.logf( "haveActionBar() => %b", result );
|
||||
return result;
|
||||
}
|
||||
|
||||
// http://stackoverflow.com/questions/10929579/how-to-check-if-android-phone-has-hardware-menu-button-in-android-2-1:
|
||||
|
|
|
@ -26,17 +26,30 @@ import android.util.AttributeSet;
|
|||
import android.widget.LinearLayout;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.View;
|
||||
import android.view.View.MeasureSpec;
|
||||
import android.graphics.Rect;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
public class BoardContainer extends ViewGroup {
|
||||
private static final int TBAR_PCT_HOR = 90;
|
||||
private static final int TBAR_PCT_VERT = 85;
|
||||
// If the ratio of height/width exceeds this, use portrait layout
|
||||
private static final int PORTRAIT_THRESHHOLD = 105;
|
||||
|
||||
private static final int BOARD_PCT_VERT = 90;
|
||||
private static final int BOARD_PCT_HOR = 85;
|
||||
|
||||
private static final int BOARD_INDX = 0;
|
||||
private static final int EXCH_INDX = 1;
|
||||
private static final int VBAR_INDX = 2;
|
||||
private static final int HBAR_INDX = 3;
|
||||
|
||||
private static boolean s_isPortrait = true; // initial assumption
|
||||
private static int s_width = 0;
|
||||
private static int s_height = 0;
|
||||
|
||||
private Rect m_boardBounds;
|
||||
private Rect m_toolsBounds;
|
||||
|
||||
interface SizeChangeListener {
|
||||
void sizeChanged( int width, int height, boolean isPortrait );
|
||||
}
|
||||
|
@ -59,23 +72,36 @@ public class BoardContainer extends ViewGroup {
|
|||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
|
||||
{
|
||||
final int childCount = getChildCount();
|
||||
Assert.assertTrue( 4 == childCount );
|
||||
|
||||
int width = View.MeasureSpec.getSize( widthMeasureSpec );
|
||||
int height = View.MeasureSpec.getSize( heightMeasureSpec );
|
||||
int width = MeasureSpec.getSize( widthMeasureSpec );
|
||||
int height = MeasureSpec.getSize( heightMeasureSpec );
|
||||
if ( 0 != width || 0 != height ) {
|
||||
setForPortrait( width, height );
|
||||
}
|
||||
|
||||
for ( int ii = 0; ii < childCount; ii++ ) {
|
||||
final View child = getChildAt( ii );
|
||||
if ( GONE != child.getVisibility() ) {
|
||||
// Measure the child.
|
||||
measureChild( child, widthMeasureSpec, heightMeasureSpec );
|
||||
figureBounds( 0, 0, width, height );
|
||||
|
||||
// Measure any toolbar first so we can take extra space for the
|
||||
// board
|
||||
int childCount = getChildCount();
|
||||
if ( 1 < childCount ) {
|
||||
Assert.assertTrue( 4 == childCount );
|
||||
|
||||
// Measure the toolbar
|
||||
measureChild( s_isPortrait ? HBAR_INDX : VBAR_INDX, m_toolsBounds );
|
||||
adjustBounds();
|
||||
View child = getChildAt( s_isPortrait ? HBAR_INDX : VBAR_INDX );
|
||||
DbgUtils.logf( "measured %s; passed ht: %d; got back ht: %d",
|
||||
child.toString(), m_toolsBounds.height(),
|
||||
child.getMeasuredHeight() );
|
||||
|
||||
if ( haveTradeBar() ) {
|
||||
// Measure the exchange buttons bar
|
||||
measureChild( EXCH_INDX, m_toolsBounds );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Measure the board
|
||||
measureChild( BOARD_INDX, m_boardBounds );
|
||||
}
|
||||
setMeasuredDimension( width, height );
|
||||
}
|
||||
|
||||
|
@ -85,37 +111,39 @@ public class BoardContainer extends ViewGroup {
|
|||
protected void onLayout( boolean changed, int left, int top,
|
||||
int right, int bottom)
|
||||
{
|
||||
boolean haveTradeBar
|
||||
= GONE != findViewById(R.id.exchange_buttons).getVisibility();
|
||||
int boardHt = bottom - top;
|
||||
if ( haveTradeBar || s_isPortrait ) {
|
||||
boardHt = boardHt * TBAR_PCT_HOR / 100;
|
||||
}
|
||||
int boardWidth = right - left;
|
||||
if ( !s_isPortrait ) {
|
||||
boardWidth = boardWidth * TBAR_PCT_VERT / 100;
|
||||
}
|
||||
// If this isn't true, need to refigure the rects
|
||||
// Assert.assertTrue( 0 == left && 0 == top );
|
||||
|
||||
// layout the board
|
||||
BoardView board = (BoardView)getChildAt( 0 );
|
||||
board.layout( left, top, left + boardWidth, top + boardHt );
|
||||
layoutChild( BOARD_INDX, m_boardBounds );
|
||||
|
||||
// The trade bar
|
||||
if ( haveTradeBar ) {
|
||||
LinearLayout exchButtons = (LinearLayout)getChildAt( 1 );
|
||||
Assert.assertTrue( exchButtons.getId() == R.id.exchange_buttons );
|
||||
exchButtons.layout( left, top + boardHt, right, bottom );
|
||||
}
|
||||
if ( 1 < getChildCount() ) {
|
||||
// The trade bar
|
||||
if ( haveTradeBar() ) {
|
||||
layoutChild( EXCH_INDX, m_toolsBounds );
|
||||
}
|
||||
|
||||
// Now one of the toolbars
|
||||
View scrollView = getChildAt( s_isPortrait ? 3 : 2 );
|
||||
Assert.assertTrue( GONE != scrollView.getVisibility() );
|
||||
if ( s_isPortrait ) {
|
||||
top += boardHt;
|
||||
} else {
|
||||
left += boardWidth;
|
||||
// Now one of the toolbars
|
||||
layoutChild( s_isPortrait ? HBAR_INDX : VBAR_INDX, m_toolsBounds );
|
||||
}
|
||||
}
|
||||
|
||||
private void measureChild( int index, Rect rect )
|
||||
{
|
||||
int childWidthSpec = MeasureSpec.makeMeasureSpec(rect.width(),
|
||||
MeasureSpec.AT_MOST );
|
||||
int childHeightSpec = MeasureSpec.makeMeasureSpec(rect.height(),
|
||||
MeasureSpec.AT_MOST );
|
||||
View view = getChildAt( index );
|
||||
measureChild( view, childWidthSpec, childHeightSpec );
|
||||
}
|
||||
|
||||
private void layoutChild( int index, Rect rect )
|
||||
{
|
||||
View child = getChildAt( index );
|
||||
if ( GONE != child.getVisibility() ) {
|
||||
child.layout( rect.left, rect.top, rect.right, rect.bottom );
|
||||
}
|
||||
scrollView.layout( left, top, right, bottom );
|
||||
}
|
||||
|
||||
private void setForPortrait( final int width, final int height )
|
||||
|
@ -123,7 +151,7 @@ public class BoardContainer extends ViewGroup {
|
|||
if ( height != s_height || width != s_width ) {
|
||||
s_height = height;
|
||||
s_width = width;
|
||||
s_isPortrait = height > width;
|
||||
s_isPortrait = PORTRAIT_THRESHHOLD < (height*100) / width;
|
||||
findViewById( R.id.tbar_parent_hor )
|
||||
.setVisibility( s_isPortrait ? VISIBLE : GONE );
|
||||
findViewById( R.id.tbar_parent_vert )
|
||||
|
@ -133,6 +161,54 @@ public class BoardContainer extends ViewGroup {
|
|||
}
|
||||
}
|
||||
|
||||
private void figureBounds( int left, int top, int width, int height )
|
||||
{
|
||||
int boardHeight = ( haveTradeBar() || s_isPortrait)
|
||||
? height * (BOARD_PCT_VERT) / 100 : height;
|
||||
int boardWidth = s_isPortrait ? width : (width * BOARD_PCT_HOR) / 100;
|
||||
|
||||
// board
|
||||
m_boardBounds = new Rect( left, top, left + boardWidth,
|
||||
top + boardHeight );
|
||||
// DbgUtils.logf( "BoardContainer: boardBounds: %s", boardBounds.toString() );
|
||||
// toolbar
|
||||
if ( s_isPortrait ) {
|
||||
top += boardHeight;
|
||||
height -= boardHeight;
|
||||
} else {
|
||||
left += boardWidth;
|
||||
width -= boardWidth;
|
||||
}
|
||||
m_toolsBounds = new Rect( left, top, left + width, top + height );
|
||||
}
|
||||
|
||||
private void adjustBounds()
|
||||
{
|
||||
if ( s_isPortrait ) {
|
||||
int curHeight = m_toolsBounds.height();
|
||||
int newHeight = getChildAt( HBAR_INDX ).getMeasuredHeight();
|
||||
int diff = curHeight - newHeight;
|
||||
m_boardBounds.bottom += diff;
|
||||
m_toolsBounds.top += diff;
|
||||
} else {
|
||||
int curWidth = m_toolsBounds.width();
|
||||
int newWidth = getChildAt( VBAR_INDX ).getMeasuredWidth();
|
||||
int diff = curWidth - newWidth;
|
||||
m_boardBounds.right += diff;
|
||||
m_toolsBounds.left += diff;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean haveTradeBar()
|
||||
{
|
||||
boolean result = false;
|
||||
if ( s_isPortrait && 1 < getChildCount() ) {
|
||||
View bar = getChildAt( 1 );
|
||||
result = null != bar && GONE != bar.getVisibility();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void callSCL()
|
||||
{
|
||||
if ( 0 != s_width || 0 != s_height ) {
|
||||
|
|
|
@ -160,7 +160,9 @@ public class DelegateBase implements DlgClickNotify,
|
|||
if ( null != ref ) {
|
||||
result = ref.get();
|
||||
}
|
||||
// DbgUtils.logdf( "%s.curThis() => " + result, this.toString() );
|
||||
if ( this != result ) {
|
||||
DbgUtils.logdf( "%s.curThis() => " + result, this.toString() );
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -65,12 +65,12 @@ public class FirstRunDialog {
|
|||
view.getSettings().setJavaScriptEnabled( true ); // for surveymonkey
|
||||
view.loadUrl("file:///android_asset/changes.html");
|
||||
|
||||
AlertDialog dialog = LocUtils.makeAlertBuilder( context )
|
||||
LocUtils.makeAlertBuilder( context )
|
||||
.setIcon(android.R.drawable.ic_menu_info_details)
|
||||
.setTitle( R.string.changes_title )
|
||||
.setView( view )
|
||||
.setPositiveButton( android.R.string.ok, null)
|
||||
.create();
|
||||
dialog.show();
|
||||
.create()
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -954,19 +954,14 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
FirstRunDialog.show( m_activity );
|
||||
}
|
||||
s_firstShown = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Combine with above when "true" removed
|
||||
if ( true || isUpgrade ) {
|
||||
if ( !XWPrefs.getPrefsBoolean( m_activity,
|
||||
R.string.key_enable_dualpane, false )
|
||||
&& XWPrefs.getIsTablet( m_activity ) ) {
|
||||
|
||||
} else if ( !XWPrefs.getPrefsBoolean( m_activity,
|
||||
R.string.key_enable_dualpane,
|
||||
false )
|
||||
&& XWPrefs.getIsTablet( m_activity ) ) {
|
||||
makeConfirmThenBuilder(R.string.invite_dualpane, Action.ENABLE_DUALPANE)
|
||||
.setNAKey(R.string.key_notagain_dualpane)
|
||||
.setPosButton(R.string.enable_dualpane)
|
||||
.setNegButton(R.string.button_later)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
@ -989,6 +984,7 @@ public class GamesListDelegate extends ListDelegateBase
|
|||
}
|
||||
} );
|
||||
|
||||
updateField();
|
||||
} // init
|
||||
|
||||
@Override
|
||||
|
|
|
@ -62,8 +62,8 @@ public class MainActivity extends XWActivity
|
|||
protected void onCreate( Bundle savedInstanceState )
|
||||
{
|
||||
m_dpEnabled = XWPrefs.dualpaneEnabled( this );
|
||||
if ( BuildConfig.DEBUG && m_dpEnabled ) {
|
||||
Utils.showToast( this, "Side-by-side mode ENABLED" );
|
||||
if ( m_dpEnabled ) {
|
||||
Utils.showToast( this, R.string.db_enabled_toast );
|
||||
}
|
||||
|
||||
m_dlgt = m_dpEnabled ? new DualpaneDelegate( this, savedInstanceState )
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* -*- compile-command: "find-and-ant.sh debug install"; -*- */
|
||||
/*
|
||||
* Copyright 2009 - 2012 by Eric House (xwords@eehouse.org). All
|
||||
* Copyright 2009 - 2016 by Eric House (xwords@eehouse.org). All
|
||||
* rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -24,10 +24,10 @@ import android.content.Context;
|
|||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class NotAgainView extends LinearLayout {
|
||||
public class NotAgainView extends ScrollView {
|
||||
|
||||
public NotAgainView( Context cx, AttributeSet as ) {
|
||||
super( cx, as );
|
||||
|
|
|
@ -81,7 +81,7 @@ public class Toolbar implements BoardContainer.SizeChangeListener {
|
|||
{
|
||||
if ( m_visible != visible ) {
|
||||
m_visible = visible;
|
||||
doShowHide( null );
|
||||
doShowHide();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,10 +134,9 @@ public class Toolbar implements BoardContainer.SizeChangeListener {
|
|||
// SizeChangeListener
|
||||
public void sizeChanged( int width, int height, boolean isPortrait )
|
||||
{
|
||||
DbgUtils.logf( "Toolbar.sizeChanged(isPortrait=%b)", isPortrait );
|
||||
tryAddListeners( m_onClickListeners );
|
||||
tryAddListeners( m_onLongClickListeners );
|
||||
doShowHide( new Boolean(isPortrait) );
|
||||
doShowHide();
|
||||
}
|
||||
|
||||
private void tryAddListeners( Map<Buttons, Object> map )
|
||||
|
@ -168,14 +167,10 @@ public class Toolbar implements BoardContainer.SizeChangeListener {
|
|||
return success;
|
||||
}
|
||||
|
||||
private void doShowHide( Boolean shouldBePortrait )
|
||||
private void doShowHide()
|
||||
{
|
||||
// BoardContainer owns which scroller we'll use, and signals its
|
||||
// choice by setting their visibility. We use the one that's visible.
|
||||
boolean isPortrait = View.GONE != m_scrollHor.getVisibility();
|
||||
DbgUtils.logf( "Toolbar.doShowHide(): isPortrait: %b", isPortrait );
|
||||
Assert.assertTrue( null == shouldBePortrait
|
||||
|| shouldBePortrait.equals(isPortrait) );
|
||||
boolean isPortrait = BoardContainer.getIsPortrait();
|
||||
DbgUtils.logdf( "Toolbar.doShowHide(): isPortrait: %b", isPortrait );
|
||||
|
||||
if ( null == m_layout ) {
|
||||
m_layout = (LinearLayout)LocUtils.inflate( m_activity, R.layout.toolbar );
|
||||
|
@ -186,13 +181,12 @@ public class Toolbar implements BoardContainer.SizeChangeListener {
|
|||
LinearLayout.HORIZONTAL : LinearLayout.VERTICAL );
|
||||
|
||||
ViewGroup scroller = isPortrait ? m_scrollHor : m_scrollVert;
|
||||
Assert.assertNotNull( scroller );
|
||||
if ( null != scroller ) {
|
||||
// Google's had reports of a crash adding second view
|
||||
scroller.removeAllViews();
|
||||
scroller.addView( m_layout );
|
||||
}
|
||||
|
||||
m_layout.setVisibility( m_visible? View.VISIBLE : View.GONE );
|
||||
scroller.setVisibility( m_visible? View.VISIBLE : View.GONE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -568,6 +568,11 @@ public class LocUtils {
|
|||
}
|
||||
if ( null == lang ) {
|
||||
lang = Locale.getDefault().getLanguage();
|
||||
// sometimes I get "en-us" in this case, i.e. the locale's
|
||||
// there too. Strip it.
|
||||
if ( lang.contains( "-" ) ) {
|
||||
lang = TextUtils.split(lang, "-")[0];
|
||||
}
|
||||
}
|
||||
s_curLang = lang;
|
||||
}
|
||||
|
|
38
xwords4/android/scripts/test-small.sh
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e -u
|
||||
|
||||
usage() {
|
||||
[ $# -ge 1 ] && echo "ERROR: $1"
|
||||
echo "usage: $0" >&2
|
||||
echo "Move small-device resources around so they build for normal ones" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
checkFile() {
|
||||
FILE=$1
|
||||
[ -z "$(git ls-files -m $FILE)" ] || usage "$FILE is modified"
|
||||
}
|
||||
|
||||
swapFiles() {
|
||||
SRC_FILE=$1
|
||||
DEST_DIR=$2
|
||||
|
||||
NAME=$(basename $SRC_FILE)
|
||||
mv $DEST_DIR/$NAME /tmp/
|
||||
mv $SRC_FILE $DEST_DIR
|
||||
mv /tmp/$NAME $SRC_FILE
|
||||
}
|
||||
|
||||
for DIR in layout menu ; do
|
||||
for FILE in res/${DIR}-small/*.xml; do
|
||||
checkFile $FILE
|
||||
checkFile res/$DIR/$(basename $FILE)
|
||||
done
|
||||
done
|
||||
|
||||
for DIR in layout menu ; do
|
||||
for FILE in res/${DIR}-small/*.xml; do
|
||||
swapFiles $FILE res/$DIR
|
||||
done
|
||||
done
|