From 6028da56ce211b2abfccde3f5c5d1858281cd4f3 Mon Sep 17 00:00:00 2001 From: PeeJWeeJ Date: Wed, 16 Dec 2015 14:59:57 -0600 Subject: [PATCH] Working on updating version download state correctly --- .../adapters/versions/VersionViewHolder.java | 4 +- .../adapters/versions/VersionViewModel.java | 41 +++++++++++------ .../DownloadingVersionsEvent.java | 12 +++++ .../selection/VersionSelectionFragment.java | 45 ++++++++++++++----- .../src/main/java/model/DataFileManager.java | 7 +++ .../src/main/java/model/DownloadState.java | 23 ++++++++++ 6 files changed, 107 insertions(+), 25 deletions(-) diff --git a/app/app/src/main/java/adapters/versions/VersionViewHolder.java b/app/app/src/main/java/adapters/versions/VersionViewHolder.java index f55b721..4790adb 100644 --- a/app/app/src/main/java/adapters/versions/VersionViewHolder.java +++ b/app/app/src/main/java/adapters/versions/VersionViewHolder.java @@ -1,5 +1,6 @@ package adapters.versions; +import android.util.Log; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageButton; @@ -59,13 +60,14 @@ public VersionViewModel.ResourceViewModel getViewModel() { return viewModel; } - public void updateViews(VersionViewModel.ResourceViewModel model){ + public void updateViews(final VersionViewModel.ResourceViewModel model){ this.viewModel = model; model.getDownloadStateAsync(new DataFileManager.GetDownloadStateResponse() { @Override public void foundDownloadState(DownloadState state) { setupForDownloadState(state); + Log.d(TAG, "updated Views for model: " + model.toString() + "to download state: " + state.toString()); } }); resourceImage.setImageResource(model.getImageResource()); diff --git a/app/app/src/main/java/adapters/versions/VersionViewModel.java b/app/app/src/main/java/adapters/versions/VersionViewModel.java index 9312bad..957fb8e 100644 --- a/app/app/src/main/java/adapters/versions/VersionViewModel.java +++ b/app/app/src/main/java/adapters/versions/VersionViewModel.java @@ -1,6 +1,7 @@ package adapters.versions; import android.content.Context; +import android.util.Log; import org.unfoldingword.mobile.R; @@ -49,9 +50,9 @@ public VersionViewModel(Context context, Version version, VersionViewModelListen public void updateContent(){ version = Version.getVersionForId(version.getId(), DaoDBHelper.getDaoSession(context)); - for(ResourceViewModel model : resources){ - model.setState(DownloadState.DOWNLOAD_STATE_DOWNLOADING); - } +// for(ResourceViewModel model : resources){ +// model.setState(DownloadState.DOWNLOAD_STATE_DOWNLOADING); +// } } private void setupResources(){ @@ -98,6 +99,7 @@ private void showCheckingLevel(MediaType type){ public class ResourceViewModel{ + private static final String TAG = "ResourceViewModel"; private DownloadState state = DownloadState.DOWNLOAD_STATE_DOWNLOADING; private MediaType type; @@ -149,21 +151,23 @@ public void foundDownloadState(DownloadState newState) { public void getDownloadStateAsync(final DataFileManager.GetDownloadStateResponse response){ if(isInLoadingEvent()){ + Log.d(TAG, "is in loading event"); state = DownloadState.DOWNLOAD_STATE_DOWNLOADING; response.foundDownloadState(state); - return; } - response.foundDownloadState(state); - - DataFileManager.getStateOfContent(context, version, type, new DataFileManager.GetDownloadStateResponse() { - @Override - public void foundDownloadState(DownloadState newState) { - state = newState; - if(response != null) { - response.foundDownloadState(newState); + else { + Log.d(TAG, "isn't loading event"); + response.foundDownloadState(state); + DataFileManager.getStateOfContent(context, version, type, new DataFileManager.GetDownloadStateResponse() { + @Override + public void foundDownloadState(DownloadState newState) { + state = newState; + if (response != null) { + response.foundDownloadState(newState); + } } - } - }); + }); + } } private boolean isInLoadingEvent(){ @@ -222,6 +226,15 @@ public void foundDownloadState(DownloadState state) { public void checkingLevelClicked(){ showCheckingLevel(type); } + + + @Override + public String toString() { + return "ResourceViewModel{" + + "state=" + state.toString() + + ", type=" + type.toString() + + '}'; + } } public interface VersionViewModelListener{ diff --git a/app/app/src/main/java/eventbusmodels/DownloadingVersionsEvent.java b/app/app/src/main/java/eventbusmodels/DownloadingVersionsEvent.java index 0d0be0d..78e4a42 100644 --- a/app/app/src/main/java/eventbusmodels/DownloadingVersionsEvent.java +++ b/app/app/src/main/java/eventbusmodels/DownloadingVersionsEvent.java @@ -1,6 +1,7 @@ package eventbusmodels; import android.support.annotation.Nullable; +import android.util.Log; import java.util.HashMap; import java.util.Map; @@ -14,6 +15,7 @@ */ public class DownloadingVersionsEvent { + private static final String TAG = "DownloadingVrsionsEvent"; private Map models; public DownloadingVersionsEvent() { @@ -49,6 +51,7 @@ public static boolean containsModel(Version version, MediaType type){ return false; } else{ + Log.d(TAG, "checked if version: " + version.getSlug() + " : " + type.toString() + " Is on event: " + event.toString()); return event.getModels().containsKey(getKey(version, type)); } @@ -68,6 +71,15 @@ public static DownloadingVersionsEvent getEventAdding(Version version, MediaType return (event.addModel(version, type))? event : null; } + public static DownloadingVersionsEvent forceGetEventAdding(Version version, MediaType type){ + + DownloadingVersionsEvent event = EventBus.getDefault().getStickyEvent(DownloadingVersionsEvent.class); + if(event == null){ + event = new DownloadingVersionsEvent(); + } + return event; + } + @Nullable public static DownloadingVersionsEvent getEventRemoving(Version version, MediaType type){ diff --git a/app/app/src/main/java/fragments/selection/VersionSelectionFragment.java b/app/app/src/main/java/fragments/selection/VersionSelectionFragment.java index 51fa982..f795e7e 100644 --- a/app/app/src/main/java/fragments/selection/VersionSelectionFragment.java +++ b/app/app/src/main/java/fragments/selection/VersionSelectionFragment.java @@ -117,7 +117,31 @@ public void onStop() { } public void onEventMainThread(DownloadingVersionsEvent event){ + Log.d(TAG, "Received Event: " + event.toString()); + + // need to wait for the event to finish calling before reloading the list + new AsyncTask(){ + @Override + protected Void doInBackground(Void... params) { + try{ + synchronized (this){ + wait(500); + } + } + catch (InterruptedException e){ + e.printStackTrace(); + } + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + reloadData(); + } + }.execute(); + } public void onEventMainThread(DownloadResult event){ @@ -379,13 +403,14 @@ private void stopDownload(VersionViewModel viewModel, MediaType type){ private void downloadText(VersionViewModel viewModel){ - downloadText(viewModel.getVersion().getId()); + downloadText(viewModel.getVersion()); } - private void downloadText(long versionId){ + private void downloadText(Version version){ Intent downloadIntent = new Intent(getContext(), UWVersionDownloaderService.class); - downloadIntent.putExtra(UWVersionDownloaderService.VERSION_PARAM, versionId); + downloadIntent.putExtra(UWVersionDownloaderService.VERSION_PARAM, version.getId()); getContext().startService(downloadIntent); + EventBus.getDefault().postSticky(DownloadingVersionsEvent.forceGetEventAdding(version, MediaType.MEDIA_TYPE_TEXT)); } private void downloadAudio(final VersionViewModel viewModel){ @@ -404,8 +429,7 @@ public void foundDownloadState(DownloadState state) { if(state == DownloadState.DOWNLOAD_STATE_NONE){ for(VersionViewModel.ResourceViewModel model : viewModel.getResources()){ if(model.getType() == MediaType.MEDIA_TYPE_TEXT){ - downloadText(viewModel.getVersion().getId()); - reloadData(); + downloadText(viewModel.getVersion()); break; } } @@ -426,11 +450,12 @@ public void dismissed() { private void downloadAudio(final VersionViewModel viewModel, AudioBitrate bitrate){ - Intent downloadIntent = new Intent(getContext(), UWMediaDownloaderService.class) - .putExtra(UWMediaDownloaderService.VERSION_PARAM, viewModel.getVersion().getId()) - .putExtra(UWMediaDownloaderService.IS_VIDEO_PARAM, false) - .putExtra(UWMediaDownloaderService.BITRATE_PARAM, bitrate); - getContext().startService(downloadIntent); + Intent downloadIntent = new Intent(getContext(), UWMediaDownloaderService.class) + .putExtra(UWMediaDownloaderService.VERSION_PARAM, viewModel.getVersion().getId()) + .putExtra(UWMediaDownloaderService.IS_VIDEO_PARAM, false) + .putExtra(UWMediaDownloaderService.BITRATE_PARAM, bitrate); + getContext().startService(downloadIntent); + EventBus.getDefault().postSticky(DownloadingVersionsEvent.forceGetEventAdding(viewModel.getVersion(), MediaType.MEDIA_TYPE_AUDIO)); } private void downloadVideo(final VersionViewModel viewModel){ diff --git a/app/app/src/main/java/model/DataFileManager.java b/app/app/src/main/java/model/DataFileManager.java index e6394eb..13ae991 100644 --- a/app/app/src/main/java/model/DataFileManager.java +++ b/app/app/src/main/java/model/DataFileManager.java @@ -70,8 +70,11 @@ public static void getStateOfContent(final Context context, final Version versio @Override protected DownloadState doInBackground(Void... params) { + + Log.d(TAG, "started checking of content state asynctask"); File mediaFolder = getFileForDownload(context, type, version); if(!mediaFolder.exists()){ + Log.d(TAG, "Media folder didn't exist"); return DownloadState.DOWNLOAD_STATE_NONE; } else { @@ -142,15 +145,19 @@ private static DownloadState verifyStateForContent(Version version, MediaType ty int expectedSize = getCountForMediaType(version, type); int numberOfFiles = folder.listFiles().length; if (expectedSize < 1) { + Log.d(TAG, "expected size is < 1"); return DownloadState.DOWNLOAD_STATE_NONE; } else if(expectedSize > numberOfFiles){ + Log.d(TAG, "expected size is " + expectedSize + " but number of files is " + numberOfFiles); return DownloadState.DOWNLOAD_STATE_DOWNLOADING; } else if (expectedSize == numberOfFiles) { + Log.d(TAG, "expected size is good!"); return DownloadState.DOWNLOAD_STATE_DOWNLOADED; } else{ + Log.d(TAG, "error that shouldn't happen"); return DownloadState.DOWNLOAD_STATE_ERROR; } } diff --git a/app/app/src/main/java/model/DownloadState.java b/app/app/src/main/java/model/DownloadState.java index e92302e..111b87e 100644 --- a/app/app/src/main/java/model/DownloadState.java +++ b/app/app/src/main/java/model/DownloadState.java @@ -38,4 +38,27 @@ public static DownloadState createState(int value) { } } } + + private String getAsString(){ + + switch (this){ + case DOWNLOAD_STATE_NONE:{ + return "DOWNLOAD_STATE_NONE"; + } + case DOWNLOAD_STATE_DOWNLOADING:{ + return "DOWNLOAD_STATE_DOWNLOADING"; + } + case DOWNLOAD_STATE_DOWNLOADED:{ + return "DOWNLOAD_STATE_DOWNLOADED"; + } + default:{ + return "DOWNLOAD_STATE_ERROR"; + } + } + } + + @Override + public String toString() { + return "DownloadState{" + getAsString() + "}"; + } }