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