From 9d9563065419f9a12be57dadbbf7db75c43db5cd Mon Sep 17 00:00:00 2001 From: Eric House Date: Mon, 25 Jul 2016 15:57:48 -0700 Subject: [PATCH] make capture of thumbnail part of save Problem was that changes to games didn't show up in the thumbnail until the game was closed. Simply using existing snapshot didn't work because it changes the board layout in order to "draw" to ThumbnailCanvas and that change isn't easily reversed. So copy existing code to open a new JNI object with just-saved game data and use it to create a thumbnail bitmap. --- .../eehouse/android/xw4/BoardDelegate.java | 9 +---- .../org/eehouse/android/xw4/GameUtils.java | 36 +++++++++++++++---- .../eehouse/android/xw4/jni/JNIThread.java | 3 ++ 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java index cc14e3f11..9d3b857fd 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardDelegate.java @@ -1756,6 +1756,7 @@ public class BoardDelegate extends DelegateBase } } ); handleViaThread( JNICmd. CMD_ZOOM, -8 ); + handleViaThread( JNICmd.CMD_SAVE ); } } @@ -2368,14 +2369,6 @@ public class BoardDelegate extends DelegateBase m_view.stopHandling(); - if ( XWPrefs.getThumbEnabled( m_activity ) ) { - // Before we dispose, and after JNIThread has - // relinquished interest, redraw on smaller scale. - Bitmap thumb = - GameUtils.takeSnapshot( m_activity, m_jniGamePtr, m_gi ); - DBUtils.saveThumbnail( m_activity, m_gameLock, thumb ); - } - m_gameLock = null; } } diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameUtils.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameUtils.java index 7acd36348..b580ac52a 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameUtils.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/GameUtils.java @@ -292,10 +292,17 @@ public class GameUtils { public static GamePtr loadMakeGame( Context context, CurGameInfo gi, UtilCtxt util, TransportProcs tp, GameLock lock ) + { + byte[] stream = savedGame( context, lock ); + return loadMakeGame( context, gi, util, tp, stream, lock.getRowid() ); + } + + private static GamePtr loadMakeGame( Context context, CurGameInfo gi, + UtilCtxt util, TransportProcs tp, + byte[] stream, long rowid ) { GamePtr gamePtr = null; - byte[] stream = savedGame( context, lock ); if ( null == stream ) { DbgUtils.logf( "loadMakeGame: no saved game!"); } else { @@ -306,7 +313,7 @@ public class GameUtils { DbgUtils.logf( "loadMakeGame() failing: dicts %s unavailable", TextUtils.join( ",", dictNames ) ); } else { - gamePtr = XwJNI.initJNI( lock.getRowid() ); + gamePtr = XwJNI.initJNI( rowid ); String langName = gi.langName(); boolean madeGame = @@ -327,23 +334,38 @@ public class GameUtils { return gamePtr; } - public static Bitmap loadMakeBitmap( Activity activity, long rowid ) + public static Bitmap loadMakeBitmap( Context context, long rowid ) { Bitmap thumb = null; GameLock lock = new GameLock( rowid, false ); if ( lock.tryLock() ) { - CurGameInfo gi = new CurGameInfo( activity ); - GamePtr gamePtr = loadMakeGame( activity, gi, lock ); + CurGameInfo gi = new CurGameInfo( context ); + GamePtr gamePtr = loadMakeGame( context, gi, lock ); if ( null != gamePtr ) { - thumb = takeSnapshot( activity, gamePtr, gi ); + thumb = takeSnapshot( context, gamePtr, gi ); gamePtr.release(); - DBUtils.saveThumbnail( activity, lock, thumb ); + DBUtils.saveThumbnail( context, lock, thumb ); } lock.unlock(); } return thumb; } + public static Bitmap loadMakeBitmap( Context context, byte[] stream, + GameLock lock ) + { + Bitmap thumb = null; + CurGameInfo gi = new CurGameInfo( context ); + GamePtr gamePtr = loadMakeGame( context, gi, null, null, stream, + lock.getRowid() ); + if ( null != gamePtr ) { + thumb = takeSnapshot( context, gamePtr, gi ); + gamePtr.release(); + DBUtils.saveThumbnail( context, lock, thumb ); + } + return thumb; + } + public static Bitmap takeSnapshot( Context context, GamePtr gamePtr, CurGameInfo gi ) { diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/JNIThread.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/JNIThread.java index 8400071fb..04fc49e7c 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/JNIThread.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/jni/JNIThread.java @@ -378,9 +378,12 @@ public class JNIThread extends Thread { XwJNI.game_summarize( m_jniGamePtr, summary ); DBUtils.saveGame( m_context, m_lock, state, false ); DBUtils.saveSummary( m_context, m_lock, summary ); + // There'd better be no way for saveGame above to fail! XwJNI.game_saveSucceeded( m_jniGamePtr ); m_lastSavedState = state; + + GameUtils.loadMakeBitmap( m_context, state, m_lock ); } } }