From 7d1755c408b962d33c8034a3beaeaee5cf76d13f Mon Sep 17 00:00:00 2001 From: Chris Comeaux Date: Mon, 2 May 2016 21:03:19 -0500 Subject: [PATCH 1/9] Update version --- CHANGELOG.md | 4 ++++ app/build.gradle | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index afd5a4e3a..a925e5c9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ Release Notes ============= +Version 5.2.7 +------------- + * Bug fixes + Version 5.2.6 ------------- * Improvements to syncing logic (it won't completely fix the syncing problems, but it's a start! diff --git a/app/build.gradle b/app/build.gradle index 166c77a3d..11332a01f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,8 +36,8 @@ android { applicationId "com.boardgamegeek" minSdkVersion 9 targetSdkVersion 23 - versionCode 58 - versionName "5.2.6" + versionCode 59 + versionName "5.2.7" buildConfigField "String", "BRANCH", "\"" + getBranchName() + "\"" } buildTypes { From 8733f393823152d56e1856eacddaa6e3a5095fba Mon Sep 17 00:00:00 2001 From: Chris Comeaux Date: Mon, 2 May 2016 21:06:19 -0500 Subject: [PATCH 2/9] Consider "-" a valid number in the number pad dialog fragment --- .../com/boardgamegeek/ui/dialog/NumberPadDialogFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/boardgamegeek/ui/dialog/NumberPadDialogFragment.java b/app/src/main/java/com/boardgamegeek/ui/dialog/NumberPadDialogFragment.java index dc7ced0b5..4e88c5234 100644 --- a/app/src/main/java/com/boardgamegeek/ui/dialog/NumberPadDialogFragment.java +++ b/app/src/main/java/com/boardgamegeek/ui/dialog/NumberPadDialogFragment.java @@ -221,7 +221,7 @@ private boolean hasTwoDecimalPoints(String text) { } private double parseDouble(String text) { - if (TextUtils.isEmpty(text) || ".".equals(text)) { + if (TextUtils.isEmpty(text) || ".".equals(text) || "-".equals(text)) { return 0.0; } if (text.endsWith(".")) { From 1bdafd37f0e264eeaeb91aa714594420dfb1eada Mon Sep 17 00:00:00 2001 From: Chris Comeaux Date: Mon, 2 May 2016 21:06:33 -0500 Subject: [PATCH 3/9] Only log exceptions at the error level --- .../main/java/com/boardgamegeek/util/CrashReportingTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/boardgamegeek/util/CrashReportingTree.java b/app/src/main/java/com/boardgamegeek/util/CrashReportingTree.java index 0bc681f1b..f86fddf6c 100644 --- a/app/src/main/java/com/boardgamegeek/util/CrashReportingTree.java +++ b/app/src/main/java/com/boardgamegeek/util/CrashReportingTree.java @@ -18,7 +18,7 @@ protected void log(int priority, String tag, String message, Throwable t) { Crashlytics.getInstance().core.log(priority, tag, message); - if (t != null) { + if (t != null && priority == Log.ERROR) { Crashlytics.getInstance().core.logException(t); } } From a6a27fbd3e987dfc9458e516eb1537da750e791d Mon Sep 17 00:00:00 2001 From: Chris Comeaux Date: Mon, 2 May 2016 21:12:47 -0500 Subject: [PATCH 4/9] Avoid NPE trying to get an auth token --- app/src/main/java/com/boardgamegeek/io/Adapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/boardgamegeek/io/Adapter.java b/app/src/main/java/com/boardgamegeek/io/Adapter.java index 1b874d5a2..3e3b1172e 100644 --- a/app/src/main/java/com/boardgamegeek/io/Adapter.java +++ b/app/src/main/java/com/boardgamegeek/io/Adapter.java @@ -75,7 +75,7 @@ private static Builder addAuth(final Context context, Builder builder) { AccountManager accountManager = AccountManager.get(context); final Account account = Authenticator.getAccount(accountManager); try { - final String authToken = accountManager.blockingGetAuthToken(account, Authenticator.AUTH_TOKEN_TYPE, true); + final String authToken = (account != null) ? "" : accountManager.blockingGetAuthToken(account, Authenticator.AUTH_TOKEN_TYPE, true); requestInterceptor = new RequestInterceptor() { @Override public void intercept(RequestFacade request) { From a5b9a20f31f8e80e86bcbd8bb724d1b690099a5f Mon Sep 17 00:00:00 2001 From: Chris Comeaux Date: Mon, 2 May 2016 21:14:29 -0500 Subject: [PATCH 5/9] Supply more dependable defaults in PaletteUtils --- .../java/com/boardgamegeek/util/PaletteUtils.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/boardgamegeek/util/PaletteUtils.java b/app/src/main/java/com/boardgamegeek/util/PaletteUtils.java index e3efdeedf..8d236551a 100644 --- a/app/src/main/java/com/boardgamegeek/util/PaletteUtils.java +++ b/app/src/main/java/com/boardgamegeek/util/PaletteUtils.java @@ -115,7 +115,11 @@ public static Palette.Swatch getDarkSwatch(Palette palette) { return swatch; } - return palette.getSwatches().get(0); + if (palette.getSwatches().size() > 0) { + return palette.getSwatches().get(0); + } + + return new Palette.Swatch(Color.BLACK, 0); } /** @@ -132,6 +136,10 @@ public static Palette.Swatch getHeaderSwatch(Palette palette) { return swatch; } - return palette.getSwatches().get(0); + if (palette.getSwatches().size() > 0) { + return palette.getSwatches().get(0); + } + + return new Palette.Swatch(Color.BLACK, 0); } } From 61d004f7e8dfb66d07a0a2f4b28a4aff8bfc759f Mon Sep 17 00:00:00 2001 From: Chris Comeaux Date: Mon, 2 May 2016 21:22:56 -0500 Subject: [PATCH 6/9] Improve formatting of the date header when sorting plays by date. --- .../boardgamegeek/sorter/PlaysDateSorter.java | 27 +++++-------------- .../com/boardgamegeek/util/DateTimeUtils.java | 19 +++++++++++++ 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/boardgamegeek/sorter/PlaysDateSorter.java b/app/src/main/java/com/boardgamegeek/sorter/PlaysDateSorter.java index fd6b86dec..7a11dda70 100644 --- a/app/src/main/java/com/boardgamegeek/sorter/PlaysDateSorter.java +++ b/app/src/main/java/com/boardgamegeek/sorter/PlaysDateSorter.java @@ -3,30 +3,23 @@ import android.content.Context; import android.database.Cursor; import android.support.annotation.NonNull; -import android.text.TextUtils; import com.boardgamegeek.R; import com.boardgamegeek.provider.BggContract.Plays; +import com.boardgamegeek.util.DateTimeUtils; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.GregorianCalendar; import java.util.Locale; import timber.log.Timber; public class PlaysDateSorter extends PlaysSorter { - private final SimpleDateFormat formatter = new SimpleDateFormat("MMMM", Locale.getDefault()); - private final GregorianCalendar calendar = new GregorianCalendar(); + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MMMM yyyy", Locale.getDefault()); public PlaysDateSorter(@NonNull Context context) { super(context); orderByClause = Plays.DEFAULT_SORT; descriptionId = R.string.menu_plays_sort_date; - - // account for leap years - calendar.set(Calendar.YEAR, 2012); - calendar.set(Calendar.DAY_OF_MONTH, 1); } @Override @@ -42,18 +35,12 @@ public String[] getColumns() { @NonNull @Override public String getHeaderText(@NonNull Cursor cursor) { - String date = getYearAndMonth(cursor); - int month = Integer.parseInt(date.substring(5, 7)); - calendar.set(Calendar.MONTH, month - 1); - return formatter.format(calendar.getTime()) + " " + date.substring(0, 4); - } - - private String getYearAndMonth(@NonNull Cursor cursor) { String date = getString(cursor, Plays.DATE); - Timber.w("Attempting to parse date %s", date); - if (TextUtils.isEmpty(date)) { - return "1969-01"; + long millis = DateTimeUtils.getMillisFromApiDate(date, 0); + if (millis == 0) { + Timber.w("This isn't a date in the expected format: " + date); + return date; } - return date.substring(0, 7); + return DATE_FORMAT.format(millis); } } diff --git a/app/src/main/java/com/boardgamegeek/util/DateTimeUtils.java b/app/src/main/java/com/boardgamegeek/util/DateTimeUtils.java index f929ccd19..542951bbf 100644 --- a/app/src/main/java/com/boardgamegeek/util/DateTimeUtils.java +++ b/app/src/main/java/com/boardgamegeek/util/DateTimeUtils.java @@ -13,6 +13,8 @@ import java.util.Calendar; import java.util.Locale; +import timber.log.Timber; + public class DateTimeUtils { public static final long UNPARSED_DATE = -2; public static final long UNKNOWN_DATE = -1; @@ -88,6 +90,23 @@ public static String formatDateForApi(int year, int month, int day) { return String.format("%04d", year) + "-" + String.format("%02d", month + 1) + "-" + String.format("%02d", day); } + public static long getMillisFromApiDate(String date, long defaultMillis) { + if (TextUtils.isEmpty(date)) { + return defaultMillis; + } + String[] parts = date.split("-"); + if (parts.length != 3) { + return defaultMillis; + } + Calendar calendar = Calendar.getInstance(); + try { + calendar.set(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]) - 1, Integer.parseInt(parts[2])); + } catch (Exception e) { + Timber.w(e, "Couldn't get a date from the API: " + date); + } + return calendar.getTimeInMillis(); + } + /** * Formats a date for use in the API (yyyy-mm-dd) */ From c598a33f57653c74d319ce041f97dd9e2a847bb9 Mon Sep 17 00:00:00 2001 From: Chris Comeaux Date: Thu, 12 May 2016 08:22:42 -0500 Subject: [PATCH 7/9] Reverse null check when attempting to get the password for a retrofit builder --- app/src/main/java/com/boardgamegeek/io/Adapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/boardgamegeek/io/Adapter.java b/app/src/main/java/com/boardgamegeek/io/Adapter.java index 3e3b1172e..a4738e839 100644 --- a/app/src/main/java/com/boardgamegeek/io/Adapter.java +++ b/app/src/main/java/com/boardgamegeek/io/Adapter.java @@ -75,7 +75,7 @@ private static Builder addAuth(final Context context, Builder builder) { AccountManager accountManager = AccountManager.get(context); final Account account = Authenticator.getAccount(accountManager); try { - final String authToken = (account != null) ? "" : accountManager.blockingGetAuthToken(account, Authenticator.AUTH_TOKEN_TYPE, true); + final String authToken = (account == null) ? "" : accountManager.blockingGetAuthToken(account, Authenticator.AUTH_TOKEN_TYPE, true); requestInterceptor = new RequestInterceptor() { @Override public void intercept(RequestFacade request) { From 89651eeea0b5d00b8c3784fb4cef576408f74241 Mon Sep 17 00:00:00 2001 From: Chris Comeaux Date: Thu, 19 May 2016 08:10:01 -0500 Subject: [PATCH 8/9] Ensure the plays fragment is added before (un)checking items --- app/src/main/java/com/boardgamegeek/ui/PlaysFragment.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/boardgamegeek/ui/PlaysFragment.java b/app/src/main/java/com/boardgamegeek/ui/PlaysFragment.java index 52fb71c87..3b375eabb 100644 --- a/app/src/main/java/com/boardgamegeek/ui/PlaysFragment.java +++ b/app/src/main/java/com/boardgamegeek/ui/PlaysFragment.java @@ -686,6 +686,10 @@ public void onDestroyActionMode(ActionMode mode) { @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { + if (!isAdded()) { + return; + } + if (checked) { mSelectedPlaysPositions.add(position); } else { From e771024d168ad932b26b604b4a22a8300c2d257a Mon Sep 17 00:00:00 2001 From: Chris Comeaux Date: Wed, 1 Jun 2016 22:16:52 -0500 Subject: [PATCH 9/9] Log headers when not in DEBUG mode to work around RetrofitError during collection upload --- CHANGELOG.md | 1 + app/src/main/java/com/boardgamegeek/io/Adapter.java | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a925e5c9a..d948697fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ Release Notes Version 5.2.7 ------------- + * No more RetrofitError when modifying your collection (we hope!) * Bug fixes Version 5.2.6 diff --git a/app/src/main/java/com/boardgamegeek/io/Adapter.java b/app/src/main/java/com/boardgamegeek/io/Adapter.java index a4738e839..7d3e6950b 100644 --- a/app/src/main/java/com/boardgamegeek/io/Adapter.java +++ b/app/src/main/java/com/boardgamegeek/io/Adapter.java @@ -62,9 +62,7 @@ public void intercept(RequestFacade request) { .setEndpoint("https://www.boardgamegeek.com/") .setRequestInterceptor(requestInterceptor) .setClient(new OkClient(client)); - if (DEBUG) { - builder.setLog(new AndroidLog("BGG-retrofit")).setLogLevel(LogLevel.FULL); - } + builder.setLog(new AndroidLog("BGG-retrofit")).setLogLevel(DEBUG ? LogLevel.HEADERS : LogLevel.FULL); return builder; }