]> git.ktnx.net Git - mobile-ledger.git/blob - app/src/main/java/net/ktnx/mobileledger/async/GeneralBackgroundTasks.java
more pronounced day/month delimiters in the transaction list
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / async / GeneralBackgroundTasks.java
1 /*
2  * Copyright © 2021 Damyan Ivanov.
3  * This file is part of MoLe.
4  * MoLe is free software: you can distribute it and/or modify it
5  * under the term of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your opinion), any later version.
8  *
9  * MoLe is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License terms for details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with MoLe. If not, see <https://www.gnu.org/licenses/>.
16  */
17
18 package net.ktnx.mobileledger.async;
19
20 import net.ktnx.mobileledger.utils.Misc;
21
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.annotations.Nullable;
24
25 import java.util.concurrent.Executor;
26 import java.util.concurrent.Executors;
27
28 /**
29  * suitable for short tasks, not involving network communication
30  */
31 public class GeneralBackgroundTasks {
32     private static final Executor runner = Executors.newFixedThreadPool(Runtime.getRuntime()
33                                                                                .availableProcessors());
34     public static void run(@NotNull Runnable runnable) {
35         runner.execute(runnable);
36     }
37     public static void run(@NotNull Runnable runnable, @NotNull Runnable onSuccess) {
38         runner.execute(() -> {
39             runnable.run();
40             Misc.onMainThread(onSuccess);
41         });
42     }
43     public static void run(@NotNull Runnable runnable, @Nullable Runnable onSuccess,
44                            @Nullable ErrorCallback onError, @Nullable Runnable onDone) {
45         runner.execute(() -> {
46             try {
47                 runnable.run();
48                 if (onSuccess != null)
49                     Misc.onMainThread(onSuccess);
50             }
51             catch (Exception e) {
52                 if (onError != null)
53                     Misc.onMainThread(() -> onError.error(e));
54                 else
55                     throw e;
56             }
57             finally {
58                 if (onDone != null)
59                     Misc.onMainThread(onDone);
60             }
61         });
62     }
63     public static abstract class ErrorCallback {
64         abstract void error(Exception e);
65     }
66 }