Commit f422c485 authored by Dan Ballard's avatar Dan Ballard
Browse files

fixup! Bug 42247: Android helpers for the TorProvider

Fix settings loading issues and saving
parent d980086a
Loading
Loading
Loading
Loading
+30 −11
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
package org.mozilla.geckoview;

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

import androidx.annotation.AnyThread;
@@ -131,7 +132,11 @@ public class TorIntegrationAndroid implements BundleEventListener {
        } else if (EVENT_MEEK_STOP.equals(event)) {
            stopMeek(message, callback);
        } else if (EVENT_SETTINGS_READY.equals(event)) {
            loadSettings(message);
            try {
                new SettingsLoader().execute(message);
            } catch(Exception e) {
                Log.e(TAG, "SettingsLoader error: "+ e.toString());
            }
        } else if (EVENT_BOOTSTRAP_STATE_CHANGED.equals(event)) {
            String state = message.getString("state");
            for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
@@ -161,14 +166,24 @@ public class TorIntegrationAndroid implements BundleEventListener {
        }
    }

    private void loadSettings(GeckoBundle message) {
    private class SettingsLoader extends AsyncTask<GeckoBundle, Void, TorSettings> {
        protected TorSettings doInBackground(GeckoBundle... messages) {
            GeckoBundle message = messages[0];
            TorSettings settings;
            if (TorLegacyAndroidSettings.unmigrated()) {
            mSettings = TorLegacyAndroidSettings.loadTorSettings();
            setSettings(mSettings);
                settings = TorLegacyAndroidSettings.loadTorSettings();
                setSettings(settings, true, true);
                TorLegacyAndroidSettings.setMigrated();
            } else {
                GeckoBundle bundle = message.getBundle("settings");
            mSettings = new TorSettings(bundle);
                settings = new TorSettings(bundle);
            }
            return settings;
        }

        @Override
        protected void onPostExecute(TorSettings torSettings) {
            mSettings = torSettings;
        }
    }

@@ -515,8 +530,12 @@ public class TorIntegrationAndroid implements BundleEventListener {
        return EventDispatcher.getInstance().queryBundle(EVENT_SETTINGS_GET);
    }

    public @NonNull GeckoResult<Void> setSettings(final TorSettings settings) {
        return EventDispatcher.getInstance().queryVoid(EVENT_SETTINGS_SET, settings.asGeckoBundle());
    public @NonNull GeckoResult<Void> setSettings(final TorSettings settings, boolean save, boolean apply) {
        GeckoBundle bundle = new GeckoBundle(3);
        bundle.putBoolean("save", save);
        bundle.putBoolean("apply", apply);
        bundle.putBundle("settings", settings.asGeckoBundle());
        return EventDispatcher.getInstance().queryVoid(EVENT_SETTINGS_SET, bundle);
    }

    public @NonNull GeckoResult<Void> applySettings() {
+8 −2
Original line number Diff line number Diff line
@@ -136,13 +136,19 @@ class TorAndroidIntegrationImpl {
          return;
        case ListenedEvents.settingsSet:
          // This does not throw, so we do not have any way to report the error!
          lazy.TorSettings.setSettings(data);
          lazy.TorSettings.setSettings(data.settings);
          if (data.save) {
            lazy.TorSettings.saveToPrefs();
          }
          if (data.apply) {
            lazy.TorSettings.applySettings();
          }
          break;
        case ListenedEvents.settingsApply:
          await lazy.TorSettings.applySettings();
          break;
        case ListenedEvents.settingsSave:
          await lazy.TorSettings.saveSettings();
          await lazy.TorSettings.saveToPrefs();
          break;
        case ListenedEvents.bootstrapBegin:
          lazy.TorConnect.beginBootstrap();