summaryrefslogtreecommitdiffhomepage
path: root/app/src/main/java/com/wireguard/android/preference
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2018-01-09 08:13:32 -0600
committerSamuel Holland <samuel@sholland.org>2018-01-09 08:13:32 -0600
commit426fa7d50b632ae41216cfdf9eded42eafa48ea5 (patch)
tree21d80258d63b35f2f74dcf6f803de37a602d6c5c /app/src/main/java/com/wireguard/android/preference
parent52e8eef9ce217efd02104e4158c02fdb92383b1c (diff)
ToolsInstaller: Propagate NoRootException properly
Signed-off-by: Samuel Holland <samuel@sholland.org>
Diffstat (limited to 'app/src/main/java/com/wireguard/android/preference')
-rw-r--r--app/src/main/java/com/wireguard/android/preference/ToolsInstallerPreference.java34
1 files changed, 20 insertions, 14 deletions
diff --git a/app/src/main/java/com/wireguard/android/preference/ToolsInstallerPreference.java b/app/src/main/java/com/wireguard/android/preference/ToolsInstallerPreference.java
index 1620fd10..0836025a 100644
--- a/app/src/main/java/com/wireguard/android/preference/ToolsInstallerPreference.java
+++ b/app/src/main/java/com/wireguard/android/preference/ToolsInstallerPreference.java
@@ -34,15 +34,6 @@ public class ToolsInstallerPreference extends Preference {
this(context, null);
}
- private static State mapResultToState(final int scriptResult) {
- if (scriptResult == OsConstants.EXIT_SUCCESS)
- return State.SUCCESS;
- else if (scriptResult == OsConstants.EALREADY)
- return State.ALREADY;
- else
- return State.FAILURE;
- }
-
@Override
public CharSequence getSummary() {
return getContext().getString(state.messageResourceId);
@@ -61,16 +52,31 @@ public class ToolsInstallerPreference extends Preference {
@Override
protected void onAttachedToActivity() {
super.onAttachedToActivity();
- asyncWorker.supplyAsync(toolsInstaller::areInstalled)
- .thenAccept(installed -> setState(installed ? State.ALREADY : State.INITIAL));
+ asyncWorker.supplyAsync(toolsInstaller::areInstalled).whenComplete(this::onCheckResult);
+ }
+
+ private void onCheckResult(final Integer result, final Throwable throwable) {
+ setState(throwable == null && result == OsConstants.EALREADY ?
+ State.ALREADY : State.INITIAL);
}
@Override
protected void onClick() {
setState(State.WORKING);
- asyncWorker.supplyAsync(toolsInstaller::install)
- .thenApply(ToolsInstallerPreference::mapResultToState)
- .thenAccept(this::setState);
+ asyncWorker.supplyAsync(toolsInstaller::install).whenComplete(this::onInstallResult);
+ }
+
+ private void onInstallResult(final Integer result, final Throwable throwable) {
+ final State nextState;
+ if (throwable != null)
+ nextState = State.FAILURE;
+ else if (result == OsConstants.EXIT_SUCCESS)
+ nextState = State.SUCCESS;
+ else if (result == OsConstants.EALREADY)
+ nextState = State.ALREADY;
+ else
+ nextState = State.FAILURE;
+ setState(nextState);
}
private void setState(@NonNull final State state) {