diff --git a/xwords4/android/app/build.gradle b/xwords4/android/app/build.gradle index 730d3986f..ee9b3270d 100644 --- a/xwords4/android/app/build.gradle +++ b/xwords4/android/app/build.gradle @@ -1,6 +1,6 @@ def INITIAL_CLIENT_VERS = 9 -def VERSION_CODE_BASE = 151 -def VERSION_NAME = '4.4.155' +def VERSION_CODE_BASE = 152 +def VERSION_NAME = '4.4.156' def FABRIC_API_KEY = System.getenv("FABRIC_API_KEY") def BUILD_INFO_NAME = "build-info.txt" @@ -8,19 +8,6 @@ def BUILD_INFO_NAME = "build-info.txt" // each other def XW_UUID = '"7be0d084-ff89-4d6d-9c78-594773a6f963"' // from comms.h def XWD_UUID = '"b079b640-35fe-11e5-a432-0002a5d5c51b"' // from comms.h -def BT_UUIDS = [ - 'xw4fdroidDebug' : XW_UUID, - 'xw4fdroidRelease' : XW_UUID, - 'xw4NoSMSDebug' : XW_UUID, - 'xw4NoSMSRelease' : XW_UUID, - 'xw4SMSDebug' : XW_UUID, - 'xw4SMSRelease' : XW_UUID, - - 'xw4dRelease' : XWD_UUID, - 'xw4dDebug' : XWD_UUID, - 'xw4dNoSMSRelease' : XWD_UUID, - 'xw4dNoSMSDebug' : XWD_UUID, -] // AID must start with F (first 4 bits) and be from 5 to 16 bytes long def NFC_AID_XW4 = "FC8FF510B360" @@ -55,7 +42,8 @@ repositories { android { // Specify buildToolsVersion so gradle will inform when the // default changes and .travis.yml can be kept in sync - buildToolsVersion '27.0.3' + buildToolsVersion '28.0.3' + ndkVersion '21.0.6113669' defaultConfig { // HostApduService requires 19. But is it a problem? minSdkVersion 14 @@ -113,6 +101,8 @@ android { buildConfigField "int", "VARIANT_CODE", "1" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4" + externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4NoSMS'] + externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XW_UUID] } xw4fdroid { @@ -128,6 +118,8 @@ android { buildConfigField "boolean", "FOR_FDROID", "true" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4" + externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4fdroid'] + externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XW_UUID] } xw4d { dimension "variant" @@ -144,6 +136,8 @@ android { buildConfigField "String", "KEY_FCMID", "\"FBMService_fcmid1\"" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4d}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4d" + externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4d'] + externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XWD_UUID] } xw4dNoSMS { @@ -160,6 +154,8 @@ android { buildConfigField "boolean", "REPORT_LOCKS", "true" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4d}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4d" + externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4dNoSMS'] + externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XWD_UUID] } xw4SMS { @@ -174,6 +170,8 @@ android { buildConfigField "int", "VARIANT_CODE", "5" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4" + externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4SMS'] + externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XW_UUID] } // WARNING: "all" breaks things. Seems to be a keyword. Need @@ -210,12 +208,24 @@ android { } buildTypes { + all { + externalNativeBuild { + ndkBuild.arguments += ["INITIAL_CLIENT_VERS=" + INITIAL_CLIENT_VERS] + } + } + release { debuggable false minifyEnabled false // PENDING // proguard crashes when I do this (the optimize part) // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' resValue "bool", "DEBUG", "false" + externalNativeBuild { + ndkBuild.arguments += ['BUILD_TARGET=release'] + } + ndk { + abiFilters 'armeabi-v7a', 'arm64-v8a' + } } debug { debuggable true @@ -224,6 +234,23 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // This doesn't work on marshmallow: duplicate permission error // applicationIdSuffix ".debug" + + externalNativeBuild { + ndkBuild { + cFlags += ['-DDEBUG'] + arguments += ['BUILD_TARGET=debug'] + } + } + + ndk { + abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' + } + } + } + + externalNativeBuild { + ndkBuild { + path "../jni/Android.mk" } } @@ -293,11 +320,11 @@ ext { } dependencies { - implementation "com.android.support:support-v4:$SUPPORT_LIB_VERSION" - implementation "com.android.support:support-compat:$SUPPORT_LIB_VERSION" + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.core:core:1.0.0' - implementation "android.arch.lifecycle:extensions:1.1.1" - annotationProcessor "android.arch.lifecycle:compiler:1.1.1" + implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0' + annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.0.0' // 2.6.8 is probably as far forward as I can go without upping my // min-supported SDK version @@ -330,23 +357,11 @@ task cleanLocStrings(type: Exec) { } clean.dependsOn cleanLocStrings -task ndkSetupDebug(type: Exec) { - workingDir '../' - // remove ', "--arm-only"' for Genymotion builds - - // I'm putting ARM back for a while. It's too much trouble having - // builds, including those built by travis, that don't run on the - // emulator. Maybe remove this change before each release? - commandLine "./scripts/ndksetup.sh", "--with-clang" - // commandLine "./scripts/ndksetup.sh", "--with-clang", "--arm-only" -} - -task ndkSetupRelease(type: Exec) { - workingDir '../' - commandLine "./scripts/ndksetup.sh", "--with-clang", "--arm-only" -} - -task myPreBuild(dependsOn: ['mkImages', 'copyLocStrings', 'mkXml']) { +task myPreBuild(dependsOn: ['mkImages', + 'copyLocStrings', + 'mkXml', + 'copyStringsXw4D', + 'copyStringsXw4DNoSMS']) { } preBuild.dependsOn myPreBuild @@ -357,64 +372,18 @@ task mkXml(type: Exec) { '-t', "debug" } -afterEvaluate { - ArrayList cleanCmdLst = new ArrayList<>(["rm", "-rf"]) - android.applicationVariants.all { variant -> - // print "variant: " + variant.name + "\n" - String BUILD = variant.getBuildType().getName() - // println "type: " + BUILD - String FLAVOR = variant.getFlavorName() - // print "flavor: " + variant.getFlavorName() + "\n" - // print "variant: " + variant + "\n" +task copyStringsXw4D(type: Exec) { + workingDir './' + environment.put('APPNAME', 'CrossDbg') + commandLine 'make', '-f', '../scripts/Variant.mk', + "src/xw4d/res/values/strings.xml" +} - String ndkSetup = "ndkSetup" + BUILD.capitalize() - // println "ndkSetup: " + ndkSetup - - String variantCaps = variant.name.capitalize() - String nameLC = variant.getBuildType().getName().toLowerCase() - String lib = "libs-${variant.name}" - String ndkBuildTask = "ndkBuild${variantCaps}" - String btUUID = BT_UUIDS[variant.name] - task "$ndkBuildTask"(type: Exec) { - workingDir '../' - commandLine './scripts/ndkbuild.sh', '-j3', - "BUILD_TARGET=${nameLC}", "INITIAL_CLIENT_VERS=$INITIAL_CLIENT_VERS", - "VARIANT=${FLAVOR}", "NDK_LIBS_OUT=${lib}", - "NDK_OUT=./obj-${variant.name}", "XW_BT_UUID=\"${btUUID}\"" - } - - String compileTask = "compile${variantCaps}Ndk" - tasks.getByName(ndkBuildTask).dependsOn ndkSetup - tasks.getByName(compileTask).dependsOn ndkBuildTask - - // For clean task - cleanCmdLst.add("libs-${variant.name}") - cleanCmdLst.add("./obj-${variant.name}") - } - - task cleanNDK(type: Exec) { - workingDir '../' - commandLine cleanCmdLst - } - clean.dependsOn 'cleanNDK' - - String copyStringsTask = "copyStringsXw4D" - task "$copyStringsTask"(type: Exec) { - workingDir './' - environment.put('APPNAME', 'CrossDbg') - commandLine 'make', '-f', '../scripts/Variant.mk', - "src/xw4d/res/values/strings.xml" - } - preBuild.dependsOn copyStringsTask - - String copyStringsTaskNoSMS = "copyStringsXw4DNoSMS" - task "$copyStringsTaskNoSMS"(type: Exec) { - workingDir './' - environment.put('APPNAME', 'CrossDbg') - commandLine 'make', '-f', '../scripts/Variant.mk', - "src/xw4dNoSMS/res/values/strings.xml" - } - preBuild.dependsOn copyStringsTaskNoSMS +task copyStringsXw4DNoSMS(type: Exec) { + workingDir './' + environment.put('APPNAME', 'CrossDbg') + commandLine 'make', '-f', '../scripts/Variant.mk', + "src/xw4dNoSMS/res/values/strings.xml" } task makeBuildAssets() { diff --git a/xwords4/android/app/src/main/AndroidManifest.xml b/xwords4/android/app/src/main/AndroidManifest.xml index 8d1e0d07b..bedb9bf1f 100644 --- a/xwords4/android/app/src/main/AndroidManifest.xml +++ b/xwords4/android/app/src/main/AndroidManifest.xml @@ -43,7 +43,7 @@ android:theme="@style/AppTheme" > - diff --git a/xwords4/android/app/src/main/assets/changes.html b/xwords4/android/app/src/main/assets/changes.html index e32fe9a7b..662561108 100644 --- a/xwords4/android/app/src/main/assets/changes.html +++ b/xwords4/android/app/src/main/assets/changes.html @@ -13,9 +13,9 @@ -

CrossWords 4.4.155 release

+

CrossWords 4.4.156 release

-

This release fixes stalls that sometimes follow use of the Undo feature

+

This release fixes a couple of minor UI issues

Please take @@ -25,16 +25,10 @@

New with this release

    -
  • Fix stall that was sometimes triggered by an ill-timed Undo
  • -
  • Make some on-board icons smoother
  • -
  • Fix crash receiving in-game chat message that's too long
  • -
  • Make the board look a bit better on tall&narrow screens
  • -
  • Tweak the game-configure dialog
  • -
  • Make some changes you shouldn't see getting ready to - support "Duplicate" play
  • -
  • New translations (via Weblate) for Catalan, Dutch, French, - German, Polish and Portuguese, and especially for Japanese - and Spanish
  • +
  • Fix so game list entries collapse correctly again
  • +
  • Fix so bringing app to front keeps the open game open
  • +
  • Show name in scoreboard as "Not here yet" until invitee connects
  • +
  • Include more Norwegian translations

(The full changelog diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/AboutAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/AboutAlert.java index 7247ea6fa..4257232c0 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/AboutAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/AboutAlert.java @@ -25,8 +25,6 @@ import android.content.Context; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface; import android.os.Bundle; -import android.support.v4.app.DialogFragment; -import android.view.View; import android.view.View; import android.widget.TextView; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BTService.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BTService.java index e9b35792b..4d583bb4f 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BTService.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BTService.java @@ -261,7 +261,7 @@ public class BTService extends XWJIService { public static void onACLConnected( Context context ) { - Log.d( TAG, "onACLConnected()" ); + Log.d( TAG, "onACLConnected(); enqueuing work" ); enqueueWork( context, getIntentTo( context, BTAction.ACL_CONN ) ); } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ConnStatusHandler.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ConnStatusHandler.java index 801cb9346..09d4b3b7a 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ConnStatusHandler.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ConnStatusHandler.java @@ -165,6 +165,17 @@ public class ConnStatusHandler { return s_downOnMe && s_rect.contains( xx, yy ); } + + private static final CommsConnType[] sDisplayOrder = { + CommsConnType.COMMS_CONN_RELAY, + CommsConnType.COMMS_CONN_BT, + CommsConnType.COMMS_CONN_IR, + CommsConnType.COMMS_CONN_IP_DIRECT, + CommsConnType.COMMS_CONN_SMS, + CommsConnType.COMMS_CONN_P2P, + CommsConnType.COMMS_CONN_NFC, + }; + public static String getStatusText( Context context, XwJNI.GamePtr gamePtr, CommsConnTypeSet connTypes, CommsAddrRec addr ) @@ -179,7 +190,10 @@ public class ConnStatusHandler { sb.append( LocUtils.getString( context, R.string.connstat_net_fmt, connTypes.toString( context, true ))); - for ( CommsConnType typ : connTypes.getTypes() ) { + for ( CommsConnType typ : sDisplayOrder ) { + if ( !connTypes.contains(typ) ) { + continue; + } SuccessRecord record = recordFor( context, typ, false ); // Don't show e.g. NFC unless it's been used diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBAlert.java index 9a873d319..989cb1d26 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBAlert.java @@ -20,15 +20,8 @@ package org.eehouse.android.xw4; import android.app.Dialog; -import android.content.DialogInterface.OnClickListener; -import android.content.DialogInterface; -import android.os.Bundle; import android.os.Bundle; import android.os.Handler; -import android.support.v4.app.DialogFragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; import org.eehouse.android.xw4.loc.LocUtils; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java index 3537c97b8..f5e7bf90c 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java @@ -1123,6 +1123,7 @@ public class DBUtils { } setCached( rowid, result ); } + Assert.assertTrueNR( null != result ); return result; } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java index cc7f6106c..76dbbe2ff 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DelegateBase.java @@ -27,10 +27,7 @@ import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface; import android.content.Intent; -import android.graphics.Point; -import android.graphics.Rect; import android.os.Bundle; -import android.support.v4.app.DialogFragment; import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextMenu; import android.view.LayoutInflater; @@ -44,7 +41,6 @@ import android.widget.EditText; import android.widget.TextView; import org.eehouse.android.xw4.DlgDelegate.Action; -import org.eehouse.android.xw4.DlgDelegate.ActionPair; import org.eehouse.android.xw4.DlgDelegate.ConfirmThenBuilder; import org.eehouse.android.xw4.DlgDelegate.DlgClickNotify; import org.eehouse.android.xw4.DlgDelegate.NotAgainBuilder; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegate.java index 80014cf7f..fbed46ef4 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegate.java @@ -22,15 +22,9 @@ package org.eehouse.android.xw4; import android.app.Activity; import android.app.AlertDialog; -import android.app.Dialog; -import android.support.v4.app.DialogFragment; import android.app.ProgressDialog; -import android.content.Context; import android.content.DialogInterface.OnCancelListener; -import android.content.DialogInterface.OnClickListener; -import android.os.Bundle; import android.os.Handler; -import android.view.View; import java.io.Serializable; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegateAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegateAlert.java index 5a2ee9534..03d0980b0 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegateAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DlgDelegateAlert.java @@ -26,7 +26,7 @@ import android.content.Context; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface; import android.os.Bundle; -import android.support.v4.app.DialogFragment; + import org.eehouse.android.xw4.DlgDelegate.Action; import org.eehouse.android.xw4.DlgDelegate.ActionPair; import org.eehouse.android.xw4.DlgDelegate.DlgClickNotify; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameLock.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameLock.java index 9f355bd9b..188f7e1c4 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameLock.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/GameLock.java @@ -29,7 +29,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; // Implements read-locks and write-locks per game. A read lock is // obtainable when other read locks are granted but not when a diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/InviteChoicesAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/InviteChoicesAlert.java index 9e6fca37e..5810233c3 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/InviteChoicesAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/InviteChoicesAlert.java @@ -19,14 +19,10 @@ package org.eehouse.android.xw4; -import android.app.Activity; import android.app.AlertDialog; -import android.app.Dialog; import android.content.Context; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.DialogFragment; import android.widget.Button; import java.util.ArrayList; @@ -34,11 +30,8 @@ import java.util.List; import org.eehouse.android.xw4.DBUtils.SentInvitesInfo; import org.eehouse.android.xw4.DlgDelegate.Action; -import org.eehouse.android.xw4.DlgDelegate.ActionPair; import org.eehouse.android.xw4.DlgDelegate.DlgClickNotify.InviteMeans; -import org.eehouse.android.xw4.DlgDelegate.NotAgainBuilder; import org.eehouse.android.xw4.Perms23.Perm; -import org.eehouse.android.xw4.loc.LocUtils; public class InviteChoicesAlert extends DlgDelegateAlert { diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/LookupAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/LookupAlert.java index 42cabddf0..bf4b65b7b 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/LookupAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/LookupAlert.java @@ -21,10 +21,7 @@ package org.eehouse.android.xw4; import android.app.Activity; import android.app.Dialog; -import android.content.Context; import android.os.Bundle; -import android.support.v4.app.DialogFragment; -import java.io.Serializable; import org.eehouse.android.xw4.loc.LocUtils; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MainActivity.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MainActivity.java index 27e2da1bf..4da47abfb 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MainActivity.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/MainActivity.java @@ -22,12 +22,10 @@ package org.eehouse.android.xw4; import android.content.Intent; import android.content.res.Configuration; -import android.graphics.Point; -import android.graphics.Rect; import android.os.Bundle; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; import android.text.TextUtils; import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextMenu; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/NotAgainAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/NotAgainAlert.java index 5a83acfb2..a4a49e139 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/NotAgainAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/NotAgainAlert.java @@ -19,20 +19,11 @@ package org.eehouse.android.xw4; -import android.app.Activity; import android.app.AlertDialog; -import android.app.Dialog; import android.content.Context; -import android.content.DialogInterface.OnClickListener; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.DialogFragment; -import org.eehouse.android.xw4.DlgDelegate.Action; + import org.eehouse.android.xw4.DlgDelegate.ActionPair; - -import org.eehouse.android.xw4.loc.LocUtils; - public class NotAgainAlert extends DlgDelegateAlert { private static final String TAG = NotAgainAlert.class.getSimpleName(); diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/OkOnlyAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/OkOnlyAlert.java index b1d00bcab..32f49f0a0 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/OkOnlyAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/OkOnlyAlert.java @@ -19,20 +19,11 @@ package org.eehouse.android.xw4; -import android.app.Activity; import android.app.AlertDialog; -import android.app.Dialog; import android.content.Context; -import android.content.DialogInterface.OnClickListener; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.v4.app.DialogFragment; -import org.eehouse.android.xw4.DlgDelegate.Action; + import org.eehouse.android.xw4.DlgDelegate.ActionPair; - -import org.eehouse.android.xw4.loc.LocUtils; - public class OkOnlyAlert extends DlgDelegateAlert { private static final String TAG = OkOnlyAlert.class.getSimpleName(); diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Perms23.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Perms23.java index 706605222..7bc525c7c 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Perms23.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Perms23.java @@ -21,19 +21,15 @@ package org.eehouse.android.xw4; import android.Manifest; import android.app.Activity; -import android.app.AlertDialog; import android.content.Context; -import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.content.pm.PermissionInfo; import android.os.Build; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -41,7 +37,6 @@ import java.util.Set; import org.eehouse.android.nbsplib.NBSProxy; import org.eehouse.android.xw4.DlgDelegate.Action; -import org.eehouse.android.xw4.DlgDelegate.DlgClickNotify; import org.eehouse.android.xw4.jni.CommsAddrRec.CommsConnType; import org.eehouse.android.xw4.loc.LocUtils; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PrefsActivity.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PrefsActivity.java index 53911c4e2..ea61b4747 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PrefsActivity.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PrefsActivity.java @@ -25,7 +25,6 @@ import android.app.Dialog; import android.content.Intent; import android.os.Bundle; import android.preference.PreferenceActivity; -import android.support.v4.app.DialogFragment; import org.eehouse.android.xw4.DlgDelegate.Action; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/RelayService.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/RelayService.java index 78524dbb5..6eb4fb343 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/RelayService.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/RelayService.java @@ -25,10 +25,9 @@ import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Handler; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; -import org.eehouse.android.xw4.FBMService; import org.eehouse.android.xw4.GameUtils.BackMoveResult; import org.eehouse.android.xw4.MultiService.DictFetchOwner; import org.eehouse.android.xw4.MultiService.MultiEvent; @@ -58,7 +57,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/TilePickAlert.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/TilePickAlert.java index 54e9224d2..8313d3e85 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/TilePickAlert.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/TilePickAlert.java @@ -25,9 +25,6 @@ import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; -import android.support.v4.app.DialogFragment; -import android.view.View; -import android.widget.Button; import java.io.Serializable; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Utils.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Utils.java index cab59e91b..c6899c6e1 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Utils.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/Utils.java @@ -23,12 +23,10 @@ package org.eehouse.android.xw4; import android.app.Activity; import android.app.Dialog; import android.app.Notification; -import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.ContentResolver; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; @@ -39,11 +37,10 @@ import android.database.Cursor; import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; -import android.os.Build; import android.os.Looper; import android.provider.ContactsContract.PhoneLookup; -import android.support.v4.app.NotificationCompat; -import android.support.v4.content.FileProvider; +import androidx.core.app.NotificationCompat; +import androidx.core.content.FileProvider; import android.telephony.PhoneNumberUtils; import android.telephony.TelephonyManager; import android.text.ClipboardManager; @@ -56,7 +53,6 @@ import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; -import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; @@ -69,7 +65,6 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.security.MessageDigest; -import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWActivity.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWActivity.java index a267ba61b..275de7ef7 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWActivity.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWActivity.java @@ -23,13 +23,12 @@ package org.eehouse.android.xw4; import android.app.Activity; import android.app.Dialog; import android.content.Intent; -import android.content.res.Configuration; import android.os.Bundle; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextMenu; import android.view.Menu; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWApp.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWApp.java index b0d993c2a..b4f45100f 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWApp.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWApp.java @@ -21,11 +21,11 @@ package org.eehouse.android.xw4; import android.app.Application; -import android.arch.lifecycle.Lifecycle; -import android.arch.lifecycle.LifecycleObserver; -import android.arch.lifecycle.LifecycleOwner; -import android.arch.lifecycle.OnLifecycleEvent; -import android.arch.lifecycle.ProcessLifecycleOwner; +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleObserver; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.OnLifecycleEvent; +import androidx.lifecycle.ProcessLifecycleOwner; import android.content.Context; import android.graphics.Color; import android.os.Build; @@ -39,7 +39,7 @@ import org.eehouse.android.xw4.jni.XwJNI; import java.util.UUID; -import static android.arch.lifecycle.Lifecycle.Event.ON_ANY; +import static androidx.lifecycle.Lifecycle.Event.ON_ANY; public class XWApp extends Application implements LifecycleObserver, NBSProxy.Callbacks { diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWDialogFragment.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWDialogFragment.java index c83fc3de6..6de4198ef 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWDialogFragment.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWDialogFragment.java @@ -20,10 +20,8 @@ package org.eehouse.android.xw4; import android.app.AlertDialog; -import android.app.Dialog; -import android.content.Context; import android.content.DialogInterface; -import android.support.v4.app.DialogFragment; +import androidx.fragment.app.DialogFragment; import android.view.View.OnClickListener; import android.view.View; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWFragment.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWFragment.java index c0edfe1fa..750d198c4 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWFragment.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWFragment.java @@ -20,10 +20,9 @@ package org.eehouse.android.xw4; -import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.support.v4.app.Fragment; +import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWJIService.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWJIService.java index 3307c93c5..3b5e2e996 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWJIService.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/XWJIService.java @@ -23,12 +23,11 @@ package org.eehouse.android.xw4; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.v4.app.JobIntentService; +import androidx.core.app.JobIntentService; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DUtilCtxt.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DUtilCtxt.java index 4f2eb923e..a3ea4b68d 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DUtilCtxt.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DUtilCtxt.java @@ -121,6 +121,7 @@ public class DUtilCtxt { private static final int STR_DUP_MOVED = 27; private static final int STRD_DUP_TRADED = 28; private static final int STRSD_DUP_ONESCORE = 29; + private static final int STR_PENDING_PLAYER = 30; public String getUserString( int stringCode ) { @@ -207,6 +208,10 @@ public class DUtilCtxt { id = R.string.dup_onescore_fmt; break; + case STR_PENDING_PLAYER: + id = R.string.missing_player; + break; + default: Log.w( TAG, "no such stringCode: %d", stringCode ); } diff --git a/xwords4/android/app/src/main/res/layout/game_list_item.xml b/xwords4/android/app/src/main/res/layout/game_list_item.xml index 33481df67..6d2d35847 100644 --- a/xwords4/android/app/src/main/res/layout/game_list_item.xml +++ b/xwords4/android/app/src/main/res/layout/game_list_item.xml @@ -39,8 +39,9 @@ android:paddingRight="8dip" > - Your opponent %1$s passed (0 points) + %1$s played %2$s for one point %1$s played %2$s for %3$d points @@ -2103,9 +2104,10 @@ %1$s lost a turn Tiles assigned to %1$s You currently have no paired Bluetooth - devices (or Bluetooth is turned off). Would you like to open the - Android Settings Panel to add one or more?\n\n(You may also need - to open it on the device you want to pair with.) + devices (or Bluetooth is turned off). Would you like to open the + Android Settings Panel to add one or more?\n\n(You may also need + to open the Settings panel on the device you want to pair + with.) Unable to connect via Bluetooth to CrossWords on the device %1$s. Please check that the device is within Bluetooth range and that CrossWords is installed on @@ -2394,7 +2396,8 @@ Notify when Android\'s slow to process outgoing invitations and moves Message sending is stalled - %1$s could not send outbound messages for %2$d seconds. + %1$s (and others?) could not send outbound messages + for %2$d seconds. \n \nIf it happens again, e-mail the developer logs and info about your device. \n diff --git a/xwords4/android/build.gradle b/xwords4/android/build.gradle index 40de8fa56..053cc9433 100644 --- a/xwords4/android/build.gradle +++ b/xwords4/android/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url 'https://maven.fabric.io/public' } // rm-for-fdroid } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.android.tools.build:gradle:3.6.2' classpath 'io.fabric.tools:gradle:1.+' // rm-for-fdroid classpath 'com.google.gms:google-services:4.2.0' // google-services plugin diff --git a/xwords4/android/gradle.properties b/xwords4/android/gradle.properties index 6cbe7a622..c62d03dc2 100644 --- a/xwords4/android/gradle.properties +++ b/xwords4/android/gradle.properties @@ -15,4 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryErro # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true + +android.useAndroidX=true +android.enableJetifier=true diff --git a/xwords4/android/gradle/wrapper/gradle-wrapper.properties b/xwords4/android/gradle/wrapper/gradle-wrapper.properties index 0aceb4b70..0b6265206 100644 --- a/xwords4/android/gradle/wrapper/gradle-wrapper.properties +++ b/xwords4/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun May 06 14:11:02 PDT 2018 +#Sat Apr 04 12:56:58 PDT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip diff --git a/xwords4/android/jni/LocalizedStrIncludes.h b/xwords4/android/jni/LocalizedStrIncludes.h index d9dc9e96e..1eaf98af4 100644 --- a/xwords4/android/jni/LocalizedStrIncludes.h +++ b/xwords4/android/jni/LocalizedStrIncludes.h @@ -33,6 +33,6 @@ # define STR_DUP_MOVED 27 # define STRD_DUP_TRADED 28 # define STRSD_DUP_ONESCORE 29 - -# define N_AND_USER_STRINGS 29 +# define STR_PENDING_PLAYER 30 +# define N_AND_USER_STRINGS 30 #endif diff --git a/xwords4/common/comms.c b/xwords4/common/comms.c index 464d09f3c..47d492a07 100644 --- a/xwords4/common/comms.c +++ b/xwords4/common/comms.c @@ -964,7 +964,7 @@ comms_writeToStream( CommsCtxt* comms, XWStreamCtxt* stream, static void resetBackoff( CommsCtxt* comms ) { - XP_LOGFF( "%s", "resetting backoff" ); + XP_LOGFF( "resetting backoff" ); comms->resendBackoff = 0; comms->nextResend = 0; } diff --git a/xwords4/common/comms.h b/xwords4/common/comms.h index 6a1bd3e0e..b9576eefa 100644 --- a/xwords4/common/comms.h +++ b/xwords4/common/comms.h @@ -63,10 +63,6 @@ typedef enum { } CommsRelayState; #ifdef XWFEATURE_BLUETOOTH -# ifndef XW_BT_UUID -# define XW_BT_UUID "7be0d084-ff89-4d6d-9c78-594773a6f963" -# endif - # define XW_BT_NAME "CrossWords" #endif diff --git a/xwords4/common/comtypes.h b/xwords4/common/comtypes.h index 8fe6857aa..7af0ee602 100644 --- a/xwords4/common/comtypes.h +++ b/xwords4/common/comtypes.h @@ -309,7 +309,7 @@ typedef struct _PlayerDicts { #endif -#define LOG_FUNC() XP_LOGFF( "%s", "IN" ) +#define LOG_FUNC() XP_LOGFF( "IN" ) #define LOG_RETURNF(fmt, ...) XP_LOGFF( "OUT: => " fmt, __VA_ARGS__ ) #define LOG_RETURN_VOID() LOG_RETURNF("%s","void") #define XP_LOGLOC() XP_LOGF( "%s(), line %d", __func__, __LINE__ ) diff --git a/xwords4/common/engine.c b/xwords4/common/engine.c index 1fcbe0372..8ba23d751 100644 --- a/xwords4/common/engine.c +++ b/xwords4/common/engine.c @@ -559,7 +559,7 @@ engine_findMove( EngineCtxt* engine, const ModelCtxt* model, engine_reset( engine ); if ( !isRetry ) { isRetry = XP_TRUE; - XP_LOGFF( "%s", "no moves found so retrying" ); + XP_LOGFF( "no moves found so retrying" ); goto retry; } } diff --git a/xwords4/common/scorebdp.c b/xwords4/common/scorebdp.c index 63b920bc1..42d57ea9d 100644 --- a/xwords4/common/scorebdp.c +++ b/xwords4/common/scorebdp.c @@ -23,6 +23,7 @@ #include "game.h" #include "strutils.h" #include "dbgutil.h" +#include "LocalizedStrIncludes.h" #ifdef CPLUS extern "C" { @@ -244,8 +245,10 @@ drawScoreBoard( BoardCtxt* board ) /* figure spacing for each scoreboard entry */ XP_MEMSET( &datum, 0, sizeof(datum) ); totalDim = 0; + XP_U16 missingPlayers = server_getMissingPlayers( board->server ); for ( dp = datum, ii = 0; ii < nPlayers; ++ii, ++dp ) { LocalPlayer* lp = &board->gi->players[ii]; + XP_Bool isMissing = 0 != ((1 << ii) & missingPlayers); /* This is a hack! */ dp->dsi.lsc = board_ScoreCallback; @@ -258,11 +261,16 @@ drawScoreBoard( BoardCtxt* board ) dp->dsi.playerNum = ii; dp->dsi.totalScore = scores.arr[ii]; dp->dsi.isTurn = server_isPlayersTurn( board->server, ii ); - dp->dsi.name = emptyStringIfNull(lp->name); dp->dsi.selected = board->trayVisState != TRAY_HIDDEN && ii==selPlayer; dp->dsi.isRobot = LP_IS_ROBOT(lp); dp->dsi.isRemote = !lp->isLocal; + XP_ASSERT( !isMissing || dp->dsi.isRemote ); + if ( dp->dsi.isRemote && isMissing ) { + dp->dsi.name = dutil_getUserString( board->dutil, STR_PENDING_PLAYER ); + } else { + dp->dsi.name = emptyStringIfNull( lp->name ); + } dp->dsi.nTilesLeft = (nTilesInPool > 0)? -1: model_getNumTilesTotal( model, ii ); diff --git a/xwords4/common/server.c b/xwords4/common/server.c index 3ab9cbddc..f1c0c4ed1 100644 --- a/xwords4/common/server.c +++ b/xwords4/common/server.c @@ -2530,7 +2530,7 @@ nextTurn( ServerCtxt* server, XP_S16 nxtTurn ) nxtTurn = model_getNextTurn( server->vol.model ); } } else { - XP_LOGFF( "%s", "turn == -1 so dropping" ); + XP_LOGFF( "turn == -1 so dropping" ); } } else { /* We're doing an undo, and so won't bother figuring out who the @@ -2552,7 +2552,7 @@ nextTurn( ServerCtxt* server, XP_S16 nxtTurn ) SETSTATE( server, XWSTATE_NEEDSEND_ENDGAME ); /* this is it */ moreToDo = XP_TRUE; } else if ( currentTurn >= 0 ) { - XP_LOGFF( "%s", "Doing nothing; waiting for server to end game" ); + XP_LOGFF( "Doing nothing; waiting for server to end game" ); setTurn( server, -1 ); /* I'm the client. Do ++nothing++. */ } @@ -2930,7 +2930,7 @@ reflectMove( ServerCtxt* server, XWStreamCtxt* stream ) XP_LOGFF( "BAD: currentTurn %d < 0", server->nv.currentTurn ); } else if ( ! readMoveInfo( server, stream, &whoMoved, &isTrade, &newTiles, &tradedTiles, &isLegal, &badStack ) ) { /* modifies model */ - XP_LOGFF( "%s", "BAD: readMoveInfo() failed" ); + XP_LOGFF( "BAD: readMoveInfo() failed" ); } else { moveOk = XP_TRUE; } @@ -4072,7 +4072,7 @@ server_receiveMessage( ServerCtxt* server, XWStreamCtxt* incoming ) XP_LOGF( "%s: somebody's registering!!!", __func__ ); accepted = handleRegistrationMsg( server, incoming ); } else { - XP_LOGFF( "%s", "WTF: I'm not a server!!" ); + XP_LOGFF( "WTF: I'm not a server!!" ); } break; case XWPROTO_CLIENT_SETUP: diff --git a/xwords4/common/smsproto.c b/xwords4/common/smsproto.c index 85f81c8d1..e1aefb5e7 100644 --- a/xwords4/common/smsproto.c +++ b/xwords4/common/smsproto.c @@ -648,7 +648,7 @@ savePartials( SMSProto* state ) XP_U16 newSize = stream_getSize( stream ); if ( state->lastStoredSize == 2 && newSize == 2 ) { - XP_LOGFF( "%s", "not storing empty again" ); + XP_LOGFF( "not storing empty again" ); } else { dutil_storeStream( state->dutil, KEY_PARTIALS, stream ); state->lastStoredSize = newSize; diff --git a/xwords4/linux/LocalizedStrIncludes.h b/xwords4/linux/LocalizedStrIncludes.h index a508b4215..30bcb2a2e 100644 --- a/xwords4/linux/LocalizedStrIncludes.h +++ b/xwords4/linux/LocalizedStrIncludes.h @@ -30,8 +30,7 @@ enum { STR_SUBMIT_CONFIRM, STRD_TURN_SCORE, STR_BONUS_ALL, - STR_NONLOCAL_NAME, - STR_LOCAL_NAME, + STR_PENDING_PLAYER, STRD_TIME_PENALTY_SUB, STRD_CUMULATIVE_SCORE, @@ -46,10 +45,6 @@ enum { STR_ROBOT_MOVED, STRS_REMOTE_MOVED, - STR_LOCALPLAYERS, - STR_TOTALPLAYERS, - STR_REMOTE, - STRS_VALUES_HEADER, STRD_REMAINS_HEADER, STRD_REMAINS_EXPL, @@ -64,6 +59,11 @@ enum { STRD_DUP_TRADED, STRSD_DUP_ONESCORE, + /* These three aren't in Android */ + STR_LOCALPLAYERS, + STR_TOTALPLAYERS, + STR_REMOTE, + STR_LAST }; diff --git a/xwords4/linux/Makefile b/xwords4/linux/Makefile index aa0afa97d..0c7487e4f 100644 --- a/xwords4/linux/Makefile +++ b/xwords4/linux/Makefile @@ -150,7 +150,8 @@ ifeq ($(STANDALONE),) # Bluetooth support ifndef NO_BLUETOOTH -BLUETOOTH = -DXWFEATURE_BLUETOOTH -DBT_USE_L2CAP +BLUETOOTH = -DXWFEATURE_BLUETOOTH -DBT_USE_L2CAP -DXW_BT_UUID=\"7be0d084-ff89-4d6d-9c78-594773a6f963\" + endif #BLUETOOTH = -DXWFEATURE_BLUETOOTH -DBT_USE_RFCOMM # DEFINES += -DXWFEATURE_IR diff --git a/xwords4/linux/cursesmain.c b/xwords4/linux/cursesmain.c index c4f370072..4c7436f2d 100644 --- a/xwords4/linux/cursesmain.c +++ b/xwords4/linux/cursesmain.c @@ -1297,7 +1297,7 @@ cursesDevIDReceived( void* closure, const XP_UCHAR* devID, } (void)g_timeout_add_seconds( maxInterval, keepalive_timer, aGlobals ); } else { - XP_LOGFF( "%s", "bad relayid" ); + XP_LOGFF( "bad relayid" ); db_remove( pDb, KEY_RDEVID ); DevIDType typ; diff --git a/xwords4/linux/lindutil.c b/xwords4/linux/lindutil.c index d4c372640..492c8238b 100644 --- a/xwords4/linux/lindutil.c +++ b/xwords4/linux/lindutil.c @@ -146,10 +146,8 @@ linux_dutil_getUserString( XW_DUtilCtxt* XP_UNUSED(uc), XP_U16 code ) return (XP_UCHAR*)"Score for turn: %d\n"; case STR_BONUS_ALL: return (XP_UCHAR*)"Bonus for using all tiles: 50\n"; - case STR_LOCAL_NAME: - return (XP_UCHAR*)"%s"; - case STR_NONLOCAL_NAME: - return (XP_UCHAR*)"%s (remote)"; + case STR_PENDING_PLAYER: + return (XP_UCHAR*)"(remote)"; case STRD_TIME_PENALTY_SUB: return (XP_UCHAR*)" - %d [time]"; /* added.... */ diff --git a/xwords4/linux/linuxmain.c b/xwords4/linux/linuxmain.c index b5cf28b75..b954f0cc1 100644 --- a/xwords4/linux/linuxmain.c +++ b/xwords4/linux/linuxmain.c @@ -771,7 +771,7 @@ secondTimerFired( gpointer data ) XP_U16 undoRatio = cGlobals->params->undoRatio; if ( 0 != undoRatio ) { if ( (XP_RANDOM() % 1000) < undoRatio ) { - XP_LOGFF( "%s", "calling server_handleUndo()" ); + XP_LOGFF( "calling server_handleUndo()" ); if ( server_handleUndo( game->server, 1 ) ) { board_draw( game->board ); } diff --git a/xwords4/linux/relaycon.c b/xwords4/linux/relaycon.c index 3bd2f20e9..82c7b7f6d 100644 --- a/xwords4/linux/relaycon.c +++ b/xwords4/linux/relaycon.c @@ -678,7 +678,7 @@ process( RelayConStorage* storage, XP_U8* buf, ssize_t nRead ) break; } case XWPDEV_GOTINVITE: { - XP_LOGFF( "%s", "got XWPDEV_GOTINVITE" ); + XP_LOGFF( "got XWPDEV_GOTINVITE" ); #ifdef DEBUG XP_U32 sender = #endif diff --git a/xwords4/linux/xptypes.h b/xwords4/linux/xptypes.h index 89a50d191..61a38c8be 100644 --- a/xwords4/linux/xptypes.h +++ b/xwords4/linux/xptypes.h @@ -78,7 +78,7 @@ extern void linux_debugf(const char*, ...) extern void linux_debugff(const char* func, const char* file, const char* fmt, ...) __attribute__ ((format (printf, 3, 4))); # define XP_LOGFF( FMT, ... ) \ - linux_debugff( __func__, __FILE__, FMT, __VA_ARGS__ ) + linux_debugff( __func__, __FILE__, FMT, ##__VA_ARGS__ ) #define XP_LOG(STR) \ linux_debugff( __func__, __FILE__, "%s", STR ) @@ -125,7 +125,7 @@ void linux_lowerstr( XP_UCHAR* str ); #define XP_ABS(a) ((a)>=0?(a):-(a)) #ifdef DEBUG -# define XP_ASSERT(B) do { if (!(B)) { XP_LOGFF( "%s", "firing assert"); } assert(B); } while (0) +# define XP_ASSERT(B) do { if (!(B)) { XP_LOGFF( "firing assert"); } assert(B); } while (0) void linux_backtrace( void ); # define XP_BACKTRACE linux_backtrace #else