FPII-1793: Fairphone Updater app should check minimum battery level and Wi-Fi connectivity

Check battery level and Wi-Fi connectivity where required.

Change-Id: I78608648959358c756803813e21edc814a88a739
diff --git a/res/drawable-xxhdpi/ic_battery_std_fpblue_24dp.png b/res/drawable-xxhdpi/ic_battery_std_fpblue_24dp.png
new file mode 100644
index 0000000..2ab6302
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_battery_std_fpblue_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_signal_wifi_4_bar_fpblue_24dp.png b/res/drawable-xxhdpi/ic_signal_wifi_4_bar_fpblue_24dp.png
new file mode 100644
index 0000000..6ae0ef1
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_signal_wifi_4_bar_fpblue_24dp.png
Binary files differ
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 62100b4..d3f4d54 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Du musst dich mit einem WLAN-Netzwerk verbinden um nach Updates zu suchen oder um Software zu installieren.</string>
     <string name="appStoreReinstall">Reinstalliere den app store</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">Ich verstehe</string>
+    <string name="connect_to_wifi">Stell eine Verbindung zum WLAN her</string>
+    <string name="charge_battery">Bitte lade die Batterie mindestens 80% auf</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 800ded3..f5f897f 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Debes conectarte a un punto Wi-Fi para comprobar si existen nuevas actualizaciones o para instalar software.</string>
     <string name="appStoreReinstall">Reinstalar la tienda de aplicaciones (app store)</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">Lo entiendo</string>
+    <string name="connect_to_wifi">Conéctate a la red Wi-Fi</string>
+    <string name="charge_battery">Asegúrate de que tu batería está cargada al menos un 80%</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index aa5e9cb..f0f8777 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Vous devez vous connecter à un réseau Wi-Fi pour vérifier l\'existence de mises à jour ou installer le logiciel.</string>
     <string name="appStoreReinstall">Réinstaller la boutique d\'applications</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">OK</string>
+    <string name="connect_to_wifi">Merci de vous connecter à un réseau Wi-Fi</string>
+    <string name="charge_battery">Chargez votre batterie à au moins 80%</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 57ea902..07c3abe 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Je dient verbonden te zijn met een Wi-Fi netwerk voor het controleren op updates en het installeren van software.</string>
     <string name="appStoreReinstall">Herinstalleer de app store</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">Ik snap het</string>
+    <string name="connect_to_wifi">Maak verbinding met een Wi-Fi netwerk</string>
+    <string name="charge_battery">Zorg er voor dat je batterij minstens 80% opgeladen is</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 0e11cb9..4a033bb 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Precisa de ligar o Wi-Fi para verificar se existem actualizações ou para instalar software.</string>
     <string name="appStoreReinstall">Reinstale a app store</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">Entendi</string>
+    <string name="connect_to_wifi">Por favor ligue-se a uma rede Wi-Fi</string>
+    <string name="charge_battery">Por favor carregue a bateria até pelo menos 80%</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values/config.xml b/res/values/config.xml
index bdc372e..8975c21 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -15,7 +15,7 @@
     
     <!-- Device Model without spaces separated by semicolon. Ex: FP1;FP1U;FP2 -->
     <string name="knownFPDevices" translatable="false">FP1;FP1U;FP2</string>
-    
+
     <string name="oneGBDataPartition" translatable="false">/originalPartition</string>
 	<string name="unifiedDataPartition" translatable="false">/unifiedPartition</string>
 	<string name="FP1Model" translatable="false">FP1</string>
@@ -25,6 +25,8 @@
 	<integer name="FP1DataPartitionSizeMb">1100</integer>
 
 	<string name="FP2Model" translatable="false">FP2</string>
+
+	<string name="minimumBatteryLevel" translatable="false">0.8</string>
 	
 	<!-- Packager -->
 	<string name="removePlayStoreCommand" translatable="false">rm /data/app/com.android.vending-*.apk</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3398f8b..4d290e2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -75,5 +75,7 @@
     <string name="wifi_discaimer_message_startup">You need to connect to a Wi-Fi network to check for updates or install software.</string>
     <string name="appStoreReinstall">Reinstall the app store</string>
     <string name="app_store">App Stores</string>
-
+    <string name="connect_to_wifi">Please connect to a Wi-Fi network</string>
+    <string name="charge_battery">Please charge your battery to at least 80%</string>
+    <string name="got_it">Got it</string>
 </resources>
\ No newline at end of file
diff --git a/src/com/fairphone/updater/FairphoneUpdater.java b/src/com/fairphone/updater/FairphoneUpdater.java
index 285afbb..e297f33 100644
--- a/src/com/fairphone/updater/FairphoneUpdater.java
+++ b/src/com/fairphone/updater/FairphoneUpdater.java
@@ -864,11 +864,10 @@
 
 		    AlertDialog.Builder wifiOffDialogBuilder = new AlertDialog.Builder(this);
 
-		    wifiOffDialogBuilder.setTitle(resources.getString(R.string.wifi_disabled));
+		    wifiOffDialogBuilder.setTitle(resources.getString(R.string.connect_to_wifi));
+            wifiOffDialogBuilder.setIcon(resources.getDrawable(R.drawable.ic_signal_wifi_4_bar_fpblue_24dp));
 
-		    // Setting Dialog Message
-		    wifiOffDialogBuilder.setMessage(resources.getString(R.string.wifi_discaimer_message_startup));
-		    wifiOffDialogBuilder.setPositiveButton(resources.getString(android.R.string.ok), new DialogInterface.OnClickListener() {
+		    wifiOffDialogBuilder.setPositiveButton(resources.getString(R.string.got_it), new DialogInterface.OnClickListener() {
 			    public void onClick(DialogInterface dialog, int id) {
 				    // do nothing, since the state is still the same
 			    }
diff --git a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
index d176505..735393e 100644
--- a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
+++ b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
@@ -180,13 +180,23 @@
                     @Override
                     public void onClick(View v)
                     {
-                        if (mIsVersion)
-                        {
-                            showEraseAllDataWarning();
-                        }
-                        else if (mSelectedStore != null)
-                        {
-                            startPreInstall();
+                        if(Utils.isBatteryLevelOk(mainActivity)) {
+                            if (mIsVersion) {
+                                showEraseAllDataWarning();
+                            } else if (mSelectedStore != null) {
+                                startPreInstall();
+                            }
+                        } else {
+                            AlertDialog.Builder batteryDialog = new AlertDialog.Builder(mainActivity);
+                            batteryDialog.setIcon(R.drawable.ic_battery_std_fpblue_24dp);
+                            batteryDialog.setTitle(R.string.charge_battery);
+                            batteryDialog.setPositiveButton(R.string.got_it, new DialogInterface.OnClickListener() {
+                                public void onClick(DialogInterface dialog, int id) {
+                                    // do nothing, since the state is still the same
+                                }
+                            });
+                            batteryDialog.create();
+                            batteryDialog.show();
                         }
                     }
                 });
diff --git a/src/com/fairphone/updater/fragments/VersionDetailFragment.java b/src/com/fairphone/updater/fragments/VersionDetailFragment.java
index b03a643..37dc5be 100644
--- a/src/com/fairphone/updater/fragments/VersionDetailFragment.java
+++ b/src/com/fairphone/updater/fragments/VersionDetailFragment.java
@@ -121,7 +121,41 @@
             @Override
             public void onClick(View v)
             {
-                startDownload();
+                boolean isWifiEnabled = Utils.isWiFiEnabled(mainActivity);
+                boolean isBatteryLevelOk = Utils.isBatteryLevelOk(mainActivity);
+
+                if (isWifiEnabled && isBatteryLevelOk)
+                {
+                    startDownload();
+                }
+                else
+                {
+                    if(!isWifiEnabled) {
+                        AlertDialog.Builder wifiDialog = new AlertDialog.Builder(mainActivity);
+                        wifiDialog.setIcon(R.drawable.ic_signal_wifi_4_bar_fpblue_24dp);
+                        wifiDialog.setTitle(R.string.connect_to_wifi);
+                        wifiDialog.setPositiveButton(R.string.got_it, new DialogInterface.OnClickListener() {
+                            public void onClick(DialogInterface dialog, int id) {
+                                // do nothing, since the state is still the same
+                            }
+                        });
+                        wifiDialog.create();
+                        wifiDialog.show();
+                    }
+
+                    if(!isBatteryLevelOk) {
+                        AlertDialog.Builder batteryDialog = new AlertDialog.Builder(mainActivity);
+                        batteryDialog.setIcon(R.drawable.ic_battery_std_fpblue_24dp);
+                        batteryDialog.setTitle(R.string.charge_battery);
+                        batteryDialog.setPositiveButton(R.string.got_it, new DialogInterface.OnClickListener() {
+                            public void onClick(DialogInterface dialog, int id) {
+                                // do nothing, since the state is still the same
+                            }
+                        });
+                        batteryDialog.create();
+                        batteryDialog.show();
+                    }
+                }
             }
         });
     }
@@ -271,8 +305,11 @@
     void startUpdateDownload()
     {
         DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
-        // use only on WiFi
-        if (Utils.isWiFiEnabled(mainActivity))
+
+        boolean isWifiEnabled = Utils.isWiFiEnabled(mainActivity);
+        boolean isBatteryLevelOk = Utils.isBatteryLevelOk(mainActivity);
+
+        if (isWifiEnabled && isBatteryLevelOk)
         {
             if (item != null)
             {
@@ -324,21 +361,31 @@
         {
             Resources resources = this.getResources();
 
-            AlertDialog.Builder wifiOffDialog = new AlertDialog.Builder(mainActivity);
+            if(!isWifiEnabled) {
+                AlertDialog.Builder wifiDialog = new AlertDialog.Builder(mainActivity);
+                wifiDialog.setIcon(R.drawable.ic_signal_wifi_4_bar_fpblue_24dp);
+                wifiDialog.setTitle(resources.getString(R.string.connect_to_wifi));
+                wifiDialog.setPositiveButton(resources.getString(R.string.got_it), new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int id) {
+                        // do nothing, since the state is still the same
+                    }
+                });
+                wifiDialog.create();
+                wifiDialog.show();
+            }
 
-            wifiOffDialog.setTitle(resources.getString(R.string.wifi_disabled));
-
-            // Setting Dialog Message
-            wifiOffDialog.setMessage(resources.getString(R.string.wifi_discaimer_message));
-            wifiOffDialog.setPositiveButton(resources.getString(android.R.string.ok), new DialogInterface.OnClickListener()
-            {
-                public void onClick(DialogInterface dialog, int id)
-                {
-                    // do nothing, since the state is still the same
-                }
-            });
-            wifiOffDialog.create();
-            wifiOffDialog.show();
+            if(!isBatteryLevelOk) {
+                AlertDialog.Builder batteryDialog = new AlertDialog.Builder(mainActivity);
+                batteryDialog.setIcon(R.drawable.ic_battery_std_fpblue_24dp);
+                batteryDialog.setTitle(resources.getString(R.string.charge_battery));
+                batteryDialog.setPositiveButton(resources.getString(R.string.got_it), new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int id) {
+                        // do nothing, since the state is still the same
+                    }
+                });
+                batteryDialog.create();
+                batteryDialog.show();
+            }
         }
     }
 
diff --git a/src/com/fairphone/updater/tools/Utils.java b/src/com/fairphone/updater/tools/Utils.java
index f766aca..b42f558 100644
--- a/src/com/fairphone/updater/tools/Utils.java
+++ b/src/com/fairphone/updater/tools/Utils.java
@@ -19,10 +19,12 @@
 import android.app.DownloadManager;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.net.ConnectivityManager;
 import android.net.Uri;
+import android.os.BatteryManager;
 import android.os.Build;
 import android.os.Environment;
 import android.os.PowerManager;
@@ -662,6 +664,20 @@
 		return manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
 	}
 
+    public static boolean isBatteryLevelOk(Context context) {
+        IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+        Intent batteryStatus = context.registerReceiver(null, ifilter);
+        int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+        int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+        float batteryPct = level / (float)scale;
+
+        if(batteryPct >= Float.parseFloat(context.getResources().getString(R.string.minimumBatteryLevel))) {
+            return true;
+        }
+        return false;
+    }
+
     public static Store getGappsStore()
     {
         return UpdaterData.getInstance().getStore(GAPPS_STORE_NUMBER);