summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kde.org>2012-11-04 12:50:14 +0200
committerBogDan Vatra <bogdan@kde.org>2012-11-04 12:50:14 +0200
commitf71e67d47f681b55a8b68d051e607e8478958638 (patch)
treefa3ad8f3b0618cc14b437413452906de273d017f
parent682b33144f3bf2dba98fa5e26be7231d39c4eebb (diff)
Check the free space before start downloading the libs.
Bump version to 8.9
-rw-r--r--Ministro/AndroidManifest.xml2
-rw-r--r--Ministro/res/values/strings.xml1
-rw-r--r--Ministro/src/org/kde/necessitas/ministro/MinistroActivity.java80
3 files changed, 81 insertions, 2 deletions
diff --git a/Ministro/AndroidManifest.xml b/Ministro/AndroidManifest.xml
index 98fbd85..9b7d55c 100644
--- a/Ministro/AndroidManifest.xml
+++ b/Ministro/AndroidManifest.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="org.kde.necessitas.ministro" android:versionName="8.3" android:versionCode="8">
+ package="org.kde.necessitas.ministro" android:versionName="8.9" android:versionCode="8">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MinistroActivity"
android:label="@string/app_name"
diff --git a/Ministro/res/values/strings.xml b/Ministro/res/values/strings.xml
index 464c3d4..934af00 100644
--- a/Ministro/res/values/strings.xml
+++ b/Ministro/res/values/strings.xml
@@ -22,4 +22,5 @@
<string name="check_frequency">Check for updates frequency (days)</string>
<string name="extracting_look_n_feel_msg">Extracting the device look&amp;feel information. Please wait...</string>
<string name="invalid_qt_version">Invalid Qt version</string>
+ <string name="ministro_disk_space_msg">Not enough space to download required libraries.\nPlease free at least an additional %1$s of space.</string>
</resources>
diff --git a/Ministro/src/org/kde/necessitas/ministro/MinistroActivity.java b/Ministro/src/org/kde/necessitas/ministro/MinistroActivity.java
index 6b0f6e7..c9d6bd7 100644
--- a/Ministro/src/org/kde/necessitas/ministro/MinistroActivity.java
+++ b/Ministro/src/org/kde/necessitas/ministro/MinistroActivity.java
@@ -36,6 +36,7 @@ import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.concurrent.Semaphore;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -67,6 +68,7 @@ import android.os.Bundle;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
+import android.os.StatFs;
import android.provider.Settings;
import android.util.Log;
@@ -154,7 +156,82 @@ public class MinistroActivity extends Activity
alert.show();
}
}
+ private AlertDialog m_distSpaceDialog=null;
+ private final int freeSpaceCode=0xf3ee500;
+ private Semaphore m_diskSpaceSemaphore = new Semaphore(0);
+ private boolean checkFreeSpace(final long size) throws InterruptedException
+ {
+ final StatFs stat = new StatFs(m_qtLibsRootPath);
+ if (stat.getBlockSize() * stat.getAvailableBlocks() < size)
+ {
+ runOnUiThread(new Runnable() {
+ public void run() {
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(MinistroActivity.this);
+ builder.setMessage(getResources().getString(R.string.ministro_disk_space_msg,
+ (size-(stat.getBlockSize() * stat.getAvailableBlocks()))/1024+"Kb"));
+ builder.setCancelable(true);
+ builder.setNeutralButton(getResources().getString(R.string.settings_msg), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ try {
+ startActivityForResult(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS), freeSpaceCode);
+ } catch(Exception e) {
+ e.printStackTrace();
+ try {
+ startActivityForResult(new Intent(Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS), freeSpaceCode);
+ } catch(Exception e1) {
+
+ e1.printStackTrace();
+ }
+ }
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id)
+ {
+ dialog.dismiss();
+ m_diskSpaceSemaphore.release();
+ }
+ });
+ builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog)
+ {
+ dialog.dismiss();
+ m_diskSpaceSemaphore.release();
+ }
+ });
+ m_distSpaceDialog = builder.create();
+ m_distSpaceDialog.show();
+ }
+ });
+ m_diskSpaceSemaphore.acquire();
+ }
+ else
+ return true;
+
+ return stat.getBlockSize() * stat.getAvailableBlocks()>size;
+ }
+
+ protected void onActivityResult (int requestCode, int resultCode, Intent data)
+ {
+ if (requestCode == freeSpaceCode)
+ {
+ m_diskSpaceSemaphore.release();
+ try
+ {
+ if (m_distSpaceDialog != null)
+ {
+ m_distSpaceDialog.dismiss();
+ m_distSpaceDialog = null;
+ }
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
private ServiceConnection m_ministroConnection=new ServiceConnection()
{
public void onServiceConnected(ComponentName name, IBinder service)
@@ -423,8 +500,9 @@ public class MinistroActivity extends Activity
for (int j=0;j<params[i].needs.length;j++)
m_totalSize+=params[i].needs[j].size;
}
-
m_dialog.setMax(m_totalSize);
+ if (!checkFreeSpace(m_totalSize))
+ return null;
for (int i=0;i<params.length;i++)
{
if (isCancelled())