diff --git a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java index a64d837af..6f99b3106 100644 --- a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java +++ b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java @@ -33,7 +33,6 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.net.Uri; -import android.net.wifi.WifiManager; import android.os.Build; import android.os.IBinder; import android.os.Message; @@ -239,10 +238,7 @@ public class FDroidApp extends Application { // initialized the local repo information FDroidApp.initWifiSettings(); - WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); - int wifiState = wifiManager.getWifiState(); - if (wifiState == WifiManager.WIFI_STATE_ENABLED) - startService(new Intent(this, WifiStateChangeService.class)); + startService(new Intent(this, WifiStateChangeService.class)); // if the HTTPS pref changes, then update all affected things Preferences.get().registerLocalRepoHttpsListeners(new ChangeListener() { @Override diff --git a/F-Droid/src/org/fdroid/fdroid/net/WifiStateChangeService.java b/F-Droid/src/org/fdroid/fdroid/net/WifiStateChangeService.java index 7b4cbb7c1..95a81b7d4 100644 --- a/F-Droid/src/org/fdroid/fdroid/net/WifiStateChangeService.java +++ b/F-Droid/src/org/fdroid/fdroid/net/WifiStateChangeService.java @@ -21,26 +21,48 @@ import java.security.cert.Certificate; import java.util.Locale; public class WifiStateChangeService extends Service { + private static final String TAG = "WifiStateChangeService"; + public static final String BROADCAST = "org.fdroid.fdroid.action.WIFI_CHANGE"; + private WifiManager wifiManager; private static WaitForWifiAsyncTask asyncTask; @Override public int onStartCommand(Intent intent, int flags, int startId) { - if (asyncTask != null) - asyncTask.cancel(true); - asyncTask = new WaitForWifiAsyncTask(); - asyncTask.execute(); + NetworkInfo ni = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); + wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); + if (ni == null) { + // this app just started up, NetworkInfo is only passed via WifiStateChangeReceiver + int wifiState = wifiManager.getWifiState(); + if (wifiState == WifiManager.WIFI_STATE_ENABLED) { + startAsyncTask(); + } + } else if (ni.isConnected()) { + Log.i(TAG, "ni.isConnected()"); + startAsyncTask(); + } else { + Log.i("WifiStateChangeReceiver", "ni != null && !ni.isConnected()"); + FDroidApp.initWifiSettings(); + } return START_NOT_STICKY; } + private void startAsyncTask() { + Log.i(TAG, "startAsyncTask"); + if (asyncTask != null) { + Log.i(TAG, "asyncTask.cancel"); + asyncTask.cancel(true); + } + asyncTask = new WaitForWifiAsyncTask(); + asyncTask.execute(); + } + public class WaitForWifiAsyncTask extends AsyncTask { - private static final String TAG = "WifiStateChangeService.WaitForWifiAsyncTask"; - private WifiManager wifiManager; + private static final String TAG = "WaitForWifiAsyncTask"; @Override protected Void doInBackground(Void... params) { - wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); try { while (!wifiManager.isWifiEnabled()) { FDroidApp.initWifiSettings(); diff --git a/F-Droid/src/org/fdroid/fdroid/receiver/WifiStateChangeReceiver.java b/F-Droid/src/org/fdroid/fdroid/receiver/WifiStateChangeReceiver.java index 1a736386a..67dfe38d8 100644 --- a/F-Droid/src/org/fdroid/fdroid/receiver/WifiStateChangeReceiver.java +++ b/F-Droid/src/org/fdroid/fdroid/receiver/WifiStateChangeReceiver.java @@ -1,23 +1,17 @@ package org.fdroid.fdroid.receiver; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.net.NetworkInfo; -import android.net.wifi.WifiManager; -import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.net.WifiStateChangeService; public class WifiStateChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - NetworkInfo ni = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); - if (ni.isConnected()) { - context.startService(new Intent(context, WifiStateChangeService.class)); - } else { - FDroidApp.initWifiSettings(); - } + intent.setComponent(new ComponentName(context, WifiStateChangeService.class)); + context.startService(intent); } }