1 package org.coolreader.crengine; 2 3 import android.os.Handler; 4 5 import org.coolreader.genrescollection.GenresCollection; 6 7 public class Services { 8 9 public static final Logger log = L.create("sv"); 10 11 private static Engine mEngine; 12 private static Scanner mScanner; 13 private static History mHistory; 14 private static CoverpageManager mCoverpageManager; 15 private static FileSystemFolders mFSFolders; 16 private static GenresCollection mGenresCollection; 17 getEngine()18 public static Engine getEngine() { 19 if (null != mEngine) 20 return mEngine; 21 throw new RuntimeException("Services.getEngine(): trying to get null object"); 22 } 23 getScanner()24 public static Scanner getScanner() { 25 if (null != mScanner) 26 return mScanner; 27 throw new RuntimeException("Services.getScanner(): trying to get null object"); 28 } 29 getHistory()30 public static History getHistory() { 31 if (null != mHistory) 32 return mHistory; 33 throw new RuntimeException("Services.getHistory(): trying to get null object"); 34 } 35 getCoverpageManager()36 public static CoverpageManager getCoverpageManager() { 37 if (null != mCoverpageManager) 38 return mCoverpageManager; 39 throw new RuntimeException("Services.getCoverpageManager(): trying to get null object"); 40 } 41 getFileSystemFolders()42 public static FileSystemFolders getFileSystemFolders() { 43 if (null != mFSFolders) 44 return mFSFolders; 45 throw new RuntimeException("Services.getFileSystemFolders(): trying to get null object"); 46 } 47 getGenresCollection()48 public static GenresCollection getGenresCollection() { 49 if (null != mGenresCollection) 50 return mGenresCollection; 51 throw new RuntimeException("Services.getGenresCollection(): trying to get null object"); 52 } 53 isStopped()54 public static boolean isStopped() { 55 return null == mEngine || null == mScanner || null == mHistory || null == mCoverpageManager || null == mFSFolders || null == mGenresCollection; 56 } 57 startServices(BaseActivity activity)58 public static void startServices(BaseActivity activity) { 59 log.i("First activity is created"); 60 // testing background thread 61 //mSettings = activity.settings(); 62 63 BackgroundThread.instance().setGUIHandler(new Handler()); 64 65 mEngine = Engine.getInstance(activity); 66 67 mScanner = new Scanner(activity, mEngine); 68 mScanner.initRoots(Engine.getMountedRootsMap()); 69 70 mHistory = new History(mScanner); 71 mScanner.setDirScanEnabled(activity.settings().getBool(ReaderView.PROP_APP_BOOK_PROPERTY_SCAN_ENABLED, true)); 72 mCoverpageManager = new CoverpageManager(); 73 74 mFSFolders = new FileSystemFolders(mScanner); 75 76 mGenresCollection = GenresCollection.getInstance(activity); 77 } 78 79 // called after user grant permissions for external storage refreshServices(BaseActivity activity)80 public static void refreshServices(BaseActivity activity) { 81 mEngine.initAgain(); 82 mScanner.initRoots(Engine.getMountedRootsMap()); 83 } 84 stopServices()85 public static void stopServices() { 86 log.i("Last activity is destroyed"); 87 if (mCoverpageManager == null) { 88 log.i("Will not destroy services: finish only activity creation detected"); 89 return; 90 } 91 mCoverpageManager.clear(); 92 BackgroundThread.instance().postBackground(() -> { 93 log.i("Stopping background thread"); 94 if (mEngine == null) 95 return; 96 mEngine.uninit(); 97 BackgroundThread.instance().quit(); 98 mEngine = null; 99 }); 100 mHistory = null; 101 mScanner = null; 102 mCoverpageManager = null; 103 mFSFolders = null; 104 mGenresCollection = null; 105 } 106 } 107