From d73f261e9af3a0deea0e0b3b8af0dbac7d96d18e Mon Sep 17 00:00:00 2001 From: Elliot Wolk Date: Mon, 16 Jan 2023 22:40:18 -0500 Subject: [PATCH 1/4] android: add simple file log for persistent state outside of logcat --- android/src/org/coolreader/CoolReader.java | 6 +++ .../crengine/CRStateFileLogger.java | 50 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 android/src/org/coolreader/crengine/CRStateFileLogger.java diff --git a/android/src/org/coolreader/CoolReader.java b/android/src/org/coolreader/CoolReader.java index 2d26520ec..690301cc2 100644 --- a/android/src/org/coolreader/CoolReader.java +++ b/android/src/org/coolreader/CoolReader.java @@ -56,6 +56,7 @@ import org.coolreader.crengine.BrowserViewLayout; import org.coolreader.crengine.CRRootView; import org.coolreader.crengine.CRToolBar; +import org.coolreader.crengine.CRStateFileLogger; import org.coolreader.crengine.DeviceInfo; import org.coolreader.crengine.DocumentsContractWrapper; import org.coolreader.crengine.Engine; @@ -212,6 +213,10 @@ public void onReceive(Context context, Intent intent) { */ @Override protected void onCreate(Bundle savedInstanceState) { + CRStateFileLogger.init(getApplicationContext()); + CRStateFileLogger.clear(); + CRStateFileLogger.appendState("APP_CREATE"); + startServices(); log.i("CoolReader.onCreate() entered"); @@ -283,6 +288,7 @@ protected void onCreate(Bundle savedInstanceState) { @Override protected void onDestroy() { + CRStateFileLogger.appendState("APP_DESTROY"); log.i("CoolReader.onDestroy() entered"); if (!CLOSE_BOOK_ON_STOP && mReaderView != null) diff --git a/android/src/org/coolreader/crengine/CRStateFileLogger.java b/android/src/org/coolreader/crengine/CRStateFileLogger.java new file mode 100644 index 000000000..0e6db2547 --- /dev/null +++ b/android/src/org/coolreader/crengine/CRStateFileLogger.java @@ -0,0 +1,50 @@ +package org.coolreader.crengine; + +import android.content.Context; +import android.text.format.DateFormat; + +import org.coolreader.crengine.L; +import org.coolreader.crengine.Logger; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import java.util.Date; + +public class CRStateFileLogger { + private static final String fileName = "cr-state-log.txt"; + private static File appFilesDir; + + public static final Logger log = L.create("state-logger"); + + public static void init(Context applicationContext){ + appFilesDir = applicationContext.getFilesDir(); + } + + public static void clear(){ + File file = new File(appFilesDir, fileName); + file.delete(); + } + + public static void appendState(String state){ + log.i("writing " + state + " to " + fileName); + + if (appFilesDir == null) { + log.e("ERROR: " + fileName + " is not initialized"); + return; + } + + String dtm = DateFormat.format("yyyy-MM-ddTHH:mm:ss", new Date()).toString(); + String msg = dtm + " - " + state.trim() + "\n"; + + try { + File file = new File(appFilesDir, fileName); + FileOutputStream stream = new FileOutputStream(file, true); + stream.write(msg.getBytes()); + stream.close(); + } catch (IOException e){ + log.e("ERROR: could not log to " + fileName); + } + } +} From 963ef388d0f972d256c7dcaa59ab957c0ab07cd6 Mon Sep 17 00:00:00 2001 From: Elliot Wolk Date: Mon, 16 Jan 2023 22:43:45 -0500 Subject: [PATCH 2/4] android: add TTS_CREATE and TTS_DESTROY to state file logger --- android/src/org/coolreader/tts/TTSControlService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/src/org/coolreader/tts/TTSControlService.java b/android/src/org/coolreader/tts/TTSControlService.java index e76be3fc1..1cf03d0b6 100644 --- a/android/src/org/coolreader/tts/TTSControlService.java +++ b/android/src/org/coolreader/tts/TTSControlService.java @@ -50,6 +50,7 @@ import org.coolreader.CoolReader; import org.coolreader.R; +import org.coolreader.crengine.CRStateFileLogger; import org.coolreader.crengine.L; import org.coolreader.crengine.Logger; import org.coolreader.db.BaseService; @@ -284,6 +285,7 @@ public TTSControlService() { @Override public void onCreate() { + CRStateFileLogger.appendState("TTS_CREATE"); log.d("onCreate"); super.onCreate(); mState = State.STOPPED; @@ -536,6 +538,7 @@ public IBinder onBind(Intent intent) { @Override public void onDestroy() { + CRStateFileLogger.appendState("TTS_DESTROY"); log.d("onDestroy"); getApplicationContext().getContentResolver().unregisterContentObserver(mVolumeSettingsContentObserver); synchronized (mLocker) { From 631ae7b917b6b2581f962b612becf7049cf71716 Mon Sep 17 00:00:00 2001 From: Elliot Wolk Date: Sat, 3 Jun 2023 11:05:02 -0400 Subject: [PATCH 3/4] tts: tiny refactor of tts toolbar on-close-listener --- android/src/org/coolreader/crengine/ReaderView.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android/src/org/coolreader/crengine/ReaderView.java b/android/src/org/coolreader/crengine/ReaderView.java index 52ec2a0ae..04a1acba8 100644 --- a/android/src/org/coolreader/crengine/ReaderView.java +++ b/android/src/org/coolreader/crengine/ReaderView.java @@ -2418,7 +2418,9 @@ public void onCommand(final ReaderCommand cmd, final int param, final Runnable o mActivity.initTTS(ttsacc -> BackgroundThread.instance().executeGUI(() -> { log.i("TTS created: opening TTS toolbar"); ttsToolbar = TTSToolbarDlg.showDialog(mActivity, ReaderView.this, ttsacc); - ttsToolbar.setOnCloseListener(() -> ttsToolbar = null); + ttsToolbar.setOnCloseListener(() -> { + ttsToolbar = null; + }); ttsToolbar.setAppSettings(mSettings, null); })); } From 71373afbbbcc4c1208c3174498c58501566b6d02 Mon Sep 17 00:00:00 2001 From: Elliot Wolk Date: Sat, 3 Jun 2023 11:06:15 -0400 Subject: [PATCH 4/4] tts: log when TTS toolbar is shown/hidden instead of created/destroyed --- android/src/org/coolreader/crengine/ReaderView.java | 3 +++ android/src/org/coolreader/tts/TTSControlService.java | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/android/src/org/coolreader/crengine/ReaderView.java b/android/src/org/coolreader/crengine/ReaderView.java index 04a1acba8..e5210bbff 100644 --- a/android/src/org/coolreader/crengine/ReaderView.java +++ b/android/src/org/coolreader/crengine/ReaderView.java @@ -58,6 +58,7 @@ import org.coolreader.CoolReader; import org.coolreader.R; +import org.coolreader.crengine.CRStateFileLogger; import org.coolreader.crengine.InputDialog.InputHandler; import org.koekak.android.ebookdownloader.SonyBookSelector; @@ -2417,9 +2418,11 @@ public void onCommand(final ReaderCommand cmd, final int param, final Runnable o log.i("DCMD_TTS_PLAY: initializing TTS"); mActivity.initTTS(ttsacc -> BackgroundThread.instance().executeGUI(() -> { log.i("TTS created: opening TTS toolbar"); + CRStateFileLogger.appendState("TTS_ON"); ttsToolbar = TTSToolbarDlg.showDialog(mActivity, ReaderView.this, ttsacc); ttsToolbar.setOnCloseListener(() -> { ttsToolbar = null; + CRStateFileLogger.appendState("TTS_OFF"); }); ttsToolbar.setAppSettings(mSettings, null); })); diff --git a/android/src/org/coolreader/tts/TTSControlService.java b/android/src/org/coolreader/tts/TTSControlService.java index 1cf03d0b6..e76be3fc1 100644 --- a/android/src/org/coolreader/tts/TTSControlService.java +++ b/android/src/org/coolreader/tts/TTSControlService.java @@ -50,7 +50,6 @@ import org.coolreader.CoolReader; import org.coolreader.R; -import org.coolreader.crengine.CRStateFileLogger; import org.coolreader.crengine.L; import org.coolreader.crengine.Logger; import org.coolreader.db.BaseService; @@ -285,7 +284,6 @@ public TTSControlService() { @Override public void onCreate() { - CRStateFileLogger.appendState("TTS_CREATE"); log.d("onCreate"); super.onCreate(); mState = State.STOPPED; @@ -538,7 +536,6 @@ public IBinder onBind(Intent intent) { @Override public void onDestroy() { - CRStateFileLogger.appendState("TTS_DESTROY"); log.d("onDestroy"); getApplicationContext().getContentResolver().unregisterContentObserver(mVolumeSettingsContentObserver); synchronized (mLocker) {