diff options
author | Samuel Holland <samuel@sholland.org> | 2018-01-09 08:13:32 -0600 |
---|---|---|
committer | Samuel Holland <samuel@sholland.org> | 2018-01-09 08:13:32 -0600 |
commit | 426fa7d50b632ae41216cfdf9eded42eafa48ea5 (patch) | |
tree | 21d80258d63b35f2f74dcf6f803de37a602d6c5c /app/src/main/java/com/wireguard/android/preference | |
parent | 52e8eef9ce217efd02104e4158c02fdb92383b1c (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.java | 34 |
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) { |