Resolved issues:
Changing fragments outside UI thread
Download of gapps does not stop anymore.
MD5 check does not crash
diff --git a/src/com/fairphone/updater/FairphoneUpdater.java b/src/com/fairphone/updater/FairphoneUpdater.java
index 9eda49c..fb1bf61 100644
--- a/src/com/fairphone/updater/FairphoneUpdater.java
+++ b/src/com/fairphone/updater/FairphoneUpdater.java
@@ -464,21 +464,30 @@
}
}
- public void removeLastFragment(boolean forceFinish)
+ public void removeLastFragment(final boolean forceFinish)
{
- FragmentManager fragManager = getSupportFragmentManager();
- if (fragManager != null)
+ runOnUiThread(new Runnable()
{
- boolean popSuccess = fragManager.popBackStackImmediate();
- if (forceFinish && !popSuccess)
+
+ @Override
+ public void run()
{
- finish();
+ FragmentManager fragManager = getSupportFragmentManager();
+ if (fragManager != null)
+ {
+ boolean popSuccess = fragManager.popBackStackImmediate();
+ if (forceFinish && !popSuccess)
+ {
+ finish();
+ }
+ }
+ else
+ {
+ Log.e(TAG, "removeLastFragment - Couldn't get FragmentManager");
+ }
}
- }
- else
- {
- Log.e(TAG, "removeLastFragment - Couldn't get FragmentManager");
- }
+ });
+
}
public int getFragmentCount()
diff --git a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
index 68dfc26..6357be9 100644
--- a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
+++ b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
@@ -178,9 +178,26 @@
public void run()
{
+ System.out.println(" +++++++++++++++++++++++++++++++ running startDownloadProgressUpdateThread +++++++++++++++++++++++++++++++ ");
boolean downloading = true;
- long latestUpdateDownloadId = mainActivity.getLatestDownloadId();
+ long latestUpdateDownloadId = 0;
+
+ int count = 3;
+
+ while (((latestUpdateDownloadId = mainActivity.getLatestDownloadId()) <= 0) && count > 0){
+ try
+ {
+ Thread.sleep(2000);
+ System.out.println(" +++++++++++++++++++++++++++++++ count: " + count + " +++++++++++++++++++++++++++++++ ");
+ count--;
+ } catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ System.out.println(" +++++++++++++++++++++++++++++++ " + latestUpdateDownloadId + " +++++++++++++++++++++++++++++++ ");
+
while (mDownloadManager != null && latestUpdateDownloadId != 0 && downloading)
{
@@ -188,6 +205,10 @@
q.setFilterById(latestUpdateDownloadId);
Cursor cursor = mDownloadManager != null ? mDownloadManager.query(q) : null;
+
+ if(cursor == null){
+ System.out.println(" +++++++++++++++++++++++++++++++ cursor is null +++++++++++++++++++++++++++++++ ");
+ }
if (cursor != null && cursor.moveToFirst())
{
try
@@ -381,18 +402,24 @@
Cursor cursor = mDownloadManager != null ? mDownloadManager.query(query) : null;
+ System.out.println(" ---------------------- cursor : " + cursor + " ----------------------------------");
+
if (cursor != null && cursor.moveToFirst())
{
int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
int status = cursor.getInt(columnIndex);
+ System.out.println("status from cursor: " + status);
+
switch (status)
{
+
case DownloadManager.STATUS_SUCCESSFUL:
mainActivity.updateStatePreference(UpdaterState.PREINSTALL);
toggleDownloadProgressAndRestart();
break;
case DownloadManager.STATUS_RUNNING:
+ case DownloadManager.STATUS_PENDING:
startDownloadProgressUpdateThread();
break;
case DownloadManager.STATUS_FAILED:
diff --git a/src/com/fairphone/updater/gappsinstaller/GappsInstallerHelper.java b/src/com/fairphone/updater/gappsinstaller/GappsInstallerHelper.java
index f57a2c4..b2e0b43 100644
--- a/src/com/fairphone/updater/gappsinstaller/GappsInstallerHelper.java
+++ b/src/com/fairphone/updater/gappsinstaller/GappsInstallerHelper.java
@@ -746,11 +746,24 @@
while (downloading && download_id != 0)
{
-
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(download_id);
+
+ Cursor cursor = null;
+ int count = 3;
+ if(mDownloadManager != null){
+ while(((cursor = mDownloadManager.query(q)) == null) && count > 0){
+ try{
+ Thread.sleep(1000);
+ count--;
+ }catch(Exception e){}
+ }
+ }
+ if(cursor == null){
+ System.out.println("Cursor is null");
+ }
- Cursor cursor = mDownloadManager != null ? mDownloadManager.query(q) : null;
+// Cursor cursor = mDownloadManager != null ? mDownloadManager.query(q) : null;
if (cursor != null && cursor.moveToFirst())
{
try
@@ -779,7 +792,9 @@
switch (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)))
{
case DownloadManager.STATUS_SUCCESSFUL:
+ System.out.println("*************************** in THREAD status == DownloadManager.STATUS_SUCCESSFUL");
case DownloadManager.STATUS_FAILED:
+ System.out.println("*************************** in THREAD status == DownloadManager.STATUS_FAILED");
downloading = false;
bytes_downloaded = 0;
@@ -938,6 +953,8 @@
long currentDownloadID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
int currentState = getCurrentState();
+
+ System.out.println("*************************** state = " + currentDownloadID);
long downloadID = 0;
switch (currentState)
@@ -969,10 +986,11 @@
if (status == DownloadManager.STATUS_SUCCESSFUL)
{
+ System.out.println("*************************** status == DownloadManager.STATUS_SUCCESSFUL");
// Retrieve the saved download id
if (downloadID == mConfigFileDownloadId)
{
-
+
String targetPath = DOWNLOAD_PATH + ZIP_CONTENT_PATH;
String cfgFilename = mContext.getResources().getString(R.string.gapps_installer_config_file);
String fileCfgExt = mContext.getResources().getString(R.string.gapps_installer_cfg);
@@ -1063,9 +1081,12 @@
}
else if (status == DownloadManager.STATUS_FAILED)
{
+ System.out.println("*************************** status == DownloadManager.STATUS_FAILED");
Toast.makeText(mContext, R.string.google_apps_download_error, Toast.LENGTH_LONG).show();
checkGappsAreInstalled();
+ }else {
+ System.out.println("*************************** status == " + status);
}
}
if (cursor != null)
diff --git a/src/com/fairphone/updater/tools/Utils.java b/src/com/fairphone/updater/tools/Utils.java
index b61d708..d54ce0c 100644
--- a/src/com/fairphone/updater/tools/Utils.java
+++ b/src/com/fairphone/updater/tools/Utils.java
@@ -228,7 +228,9 @@
return output;
} catch (IOException e)
{
- throw new RuntimeException("Unable to process file for MD5", e);
+ Log.e(TAG, "Error digesting MD5", e);
+ return null;
+// throw new RuntimeException("Unable to process file for MD5", e);
} finally
{
try