diff options
author | BogDan Vatra <bogdan@kde.org> | 2012-11-04 12:50:14 +0200 |
---|---|---|
committer | BogDan Vatra <bogdan@kde.org> | 2012-11-04 12:50:14 +0200 |
commit | f71e67d47f681b55a8b68d051e607e8478958638 (patch) | |
tree | fa3ad8f3b0618cc14b437413452906de273d017f | |
parent | 682b33144f3bf2dba98fa5e26be7231d39c4eebb (diff) |
Check the free space before start downloading the libs.
Bump version to 8.9
-rw-r--r-- | Ministro/AndroidManifest.xml | 2 | ||||
-rw-r--r-- | Ministro/res/values/strings.xml | 1 | ||||
-rw-r--r-- | Ministro/src/org/kde/necessitas/ministro/MinistroActivity.java | 80 |
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&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()) |