From f71e67d47f681b55a8b68d051e607e8478958638 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Sun, 4 Nov 2012 12:50:14 +0200 Subject: Check the free space before start downloading the libs. Bump version to 8.9 --- Ministro/AndroidManifest.xml | 2 +- Ministro/res/values/strings.xml | 1 + .../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 @@ + package="org.kde.necessitas.ministro" android:versionName="8.9" android:versionCode="8"> Check for updates frequency (days) Extracting the device look&feel information. Please wait... Invalid Qt version + Not enough space to download required libraries.\nPlease free at least an additional %1$s of space. 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