+ public static MobileLedgerProfile getProfile(String profileUUID) {
+ MobileLedgerProfile profile;
+ try (LockHolder readLock = profilesLocker.lockForReading()) {
+ List<MobileLedgerProfile> prList = profiles.getValue();
+ if ((prList == null) || prList.isEmpty()) {
+ readLock.close();
+ try (LockHolder ignored = profilesLocker.lockForWriting()) {
+ profile = MobileLedgerProfile.loadAllFromDB(profileUUID);
+ }
+ }
+ else {
+ int i = getProfileIndex(profileUUID);
+ if (i == -1) i = 0;
+ profile = prList.get(i);
+ }
+ }
+ return profile;
+ }
+ public synchronized static void scheduleTransactionListRetrieval(MainActivity activity) {
+ if (retrieveTransactionsTask != null) {
+ Logger.debug("db", "Ignoring request for transaction retrieval - already active");
+ return;
+ }
+ MobileLedgerProfile pr = profile.getValue();
+ if (pr == null) throw new IllegalStateException("No current profile");
+
+ retrieveTransactionsTask =
+ new RetrieveTransactionsTask(new WeakReference<>(activity), profile.getValue());
+ Logger.debug("db", "Created a background transaction retrieval task");
+
+ retrieveTransactionsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+ public static synchronized void stopTransactionsRetrieval() {
+ if (retrieveTransactionsTask != null) retrieveTransactionsTask.cancel(false);
+ }
+ public static void transactionRetrievalDone() {
+ retrieveTransactionsTask = null;
+ }