diff --git a/folioreader/build.gradle b/folioreader/build.gradle index 70a708dac..b33e4108e 100644 --- a/folioreader/build.gradle +++ b/folioreader/build.gradle @@ -15,7 +15,7 @@ ext { siteUrl = 'https://github.com/FolioReader/FolioReader-Android' gitUrl = 'https://github.com/FolioReader/FolioReader-Android.git' - libraryVersion = '0.3.7' + libraryVersion = '0.3.8' developerId = 'mobisystech' developerName = 'Folio Reader' diff --git a/folioreader/src/main/java/com/folioreader/FolioReader.java b/folioreader/src/main/java/com/folioreader/FolioReader.java index ac5fa6edb..9dcb1d81c 100644 --- a/folioreader/src/main/java/com/folioreader/FolioReader.java +++ b/folioreader/src/main/java/com/folioreader/FolioReader.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.Build; import android.os.Parcelable; import android.support.v4.content.LocalBroadcastManager; @@ -79,7 +80,7 @@ private FolioReader() { private FolioReader(Context context) { this.context = context; - new DbAdapter(context); + DbAdapter.initialize(context); LocalBroadcastManager.getInstance(context).registerReceiver(highlightReceiver, new IntentFilter(HighlightImpl.BROADCAST_EVENT)); LocalBroadcastManager.getInstance(context).registerReceiver(readPositionReceiver, @@ -157,6 +158,8 @@ public FolioReader openBook(String assetOrSdcardPath, Config config, String book private Intent getIntentFromUrl(String assetOrSdcardPath, int rawId) { Intent intent = new Intent(context, FolioActivity.class); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); intent.putExtra(FolioActivity.EXTRA_READ_POSITION, (Parcelable) readPosition); if (rawId != 0) { @@ -192,7 +195,13 @@ public void saveReceivedHighLights(List highlights, OnSaveHighlight o new SaveReceivedHighlightTask(onSaveHighlight, highlights).execute(); } - public static void clear() { + /** + * Nullifies readPosition and listeners. + * This method ideally should be used in onDestroy() of Activity or Fragment. + * Use this method if you want to use FolioReader singleton instance again in the application, + * else use {@link #stop()} which destruct the FolioReader singleton instance. + */ + public static synchronized void clear() { if (singleton != null) { singleton.readPosition = null; @@ -200,4 +209,23 @@ public static void clear() { singleton.readPositionListener = null; } } + + /** + * Destructs the FolioReader singleton instance. + * Use this method only if you are sure that you won't need to use + * FolioReader singleton instance again in application, else use {@link #clear()}. + */ + public static synchronized void stop() { + + if (singleton != null) { + DbAdapter.terminate(); + singleton.unregisterListeners(); + singleton = null; + } + } + + private void unregisterListeners() { + LocalBroadcastManager.getInstance(context).unregisterReceiver(highlightReceiver); + LocalBroadcastManager.getInstance(context).unregisterReceiver(readPositionReceiver); + } } diff --git a/folioreader/src/main/java/com/folioreader/model/sqlite/DbAdapter.java b/folioreader/src/main/java/com/folioreader/model/sqlite/DbAdapter.java index 9d0b2a612..4c3b76b11 100644 --- a/folioreader/src/main/java/com/folioreader/model/sqlite/DbAdapter.java +++ b/folioreader/src/main/java/com/folioreader/model/sqlite/DbAdapter.java @@ -9,14 +9,16 @@ public class DbAdapter { private static final String TAG = "DBAdapter"; - private Context mContext; public static SQLiteDatabase mDatabase; - public DbAdapter(Context ctx) { - this.mContext = ctx; + public static void initialize(Context mContext) { mDatabase = FolioDatabaseHelper.getInstance(mContext).getMyWritableDatabase(); } + public static void terminate() { + FolioDatabaseHelper.clearInstance(); + } + public static boolean insert(String table, ContentValues contentValues) { return mDatabase.insert(table, null, contentValues) > 0; diff --git a/folioreader/src/main/java/com/folioreader/model/sqlite/FolioDatabaseHelper.java b/folioreader/src/main/java/com/folioreader/model/sqlite/FolioDatabaseHelper.java index 188898ecb..cc6844538 100644 --- a/folioreader/src/main/java/com/folioreader/model/sqlite/FolioDatabaseHelper.java +++ b/folioreader/src/main/java/com/folioreader/model/sqlite/FolioDatabaseHelper.java @@ -30,6 +30,10 @@ public static FolioDatabaseHelper getInstance(Context context) { return mInstance; } + public static void clearInstance() { + mInstance = null; + } + public SQLiteDatabase getMyWritableDatabase() { if ((myWritableDb == null) || (!myWritableDb.isOpen())) { myWritableDb = this.getWritableDatabase(); diff --git a/webViewMarker/build.gradle b/webViewMarker/build.gradle index dda9282a6..3d006221b 100644 --- a/webViewMarker/build.gradle +++ b/webViewMarker/build.gradle @@ -13,7 +13,7 @@ ext { siteUrl = 'https://github.com/FolioReader/FolioReader-Android' gitUrl = 'https://github.com/FolioReader/FolioReader-Android.git' - libraryVersion = '0.3.7' + libraryVersion = '0.3.8' developerId = 'mobisystech' developerName = 'Folio Reader'