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); + } + } +} diff --git a/android/src/org/coolreader/crengine/ReaderView.java b/android/src/org/coolreader/crengine/ReaderView.java index 52ec2a0ae..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,8 +2418,12 @@ 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); + ttsToolbar.setOnCloseListener(() -> { + ttsToolbar = null; + CRStateFileLogger.appendState("TTS_OFF"); + }); ttsToolbar.setAppSettings(mSettings, null); })); }