mirror of
				https://github.com/MinimalBible/MinimalBible
				synced 2025-11-04 02:20:26 -05:00 
			
		
		
		
	Fix the download progress not updating
Integer roundoff errors...
This commit is contained in:
		
							
								
								
									
										20
									
								
								app-test/src/test/kotlin/DLProgressEventTest.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								app-test/src/test/kotlin/DLProgressEventTest.kt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Created by bspeice on 11/20/14.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.junit.Test
 | 
				
			||||||
 | 
					import org.bspeice.minimalbible.activity.downloader.manager.DLProgressEvent
 | 
				
			||||||
 | 
					import org.crosswire.jsword.book.Book
 | 
				
			||||||
 | 
					import org.mockito.Mockito
 | 
				
			||||||
 | 
					import org.junit.Assert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DLProgressEventTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    val b = Mockito.mock(javaClass<Book>())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Test fun fiftyPercentIsOneEighty() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        val e = DLProgressEvent(50, b)
 | 
				
			||||||
 | 
					        Assert.assertEquals(180, e.toCircular())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -77,7 +77,7 @@ public class BookItemHolder {
 | 
				
			|||||||
                .subscribe(new Action1<DLProgressEvent>() {
 | 
					                .subscribe(new Action1<DLProgressEvent>() {
 | 
				
			||||||
                    @Override
 | 
					                    @Override
 | 
				
			||||||
                    public void call(DLProgressEvent event) {
 | 
					                    public void call(DLProgressEvent event) {
 | 
				
			||||||
                        BookItemHolder.this.displayProgress((int) event.toCircular());
 | 
					                        BookItemHolder.this.displayProgress(event.toCircular());
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -104,21 +104,15 @@ public class BookItemHolder {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Display the current progress of this download
 | 
					     * Display the current progress of this download
 | 
				
			||||||
     * TODO: Clean up this logic if at all possible...
 | 
					 | 
				
			||||||
     * @param progress The progress out of 360 (degrees of a circle)
 | 
					     * @param progress The progress out of 360 (degrees of a circle)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void displayProgress(int progress) {
 | 
					    private void displayProgress(int progress) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int downloadView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (progress == DLProgressEvent.PROGRESS_BEGINNING) {
 | 
					        if (progress == DLProgressEvent.PROGRESS_BEGINNING) {
 | 
				
			||||||
            // Download starting
 | 
					            // Download starting
 | 
				
			||||||
            RelativeLayout.LayoutParams acronymParams =
 | 
					            downloadView = downloadProgress.getId();
 | 
				
			||||||
                    (RelativeLayout.LayoutParams)acronym.getLayoutParams();
 | 
					 | 
				
			||||||
            acronymParams.addRule(RelativeLayout.LEFT_OF, downloadProgress.getId());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            RelativeLayout.LayoutParams nameParams =
 | 
					 | 
				
			||||||
                    (RelativeLayout.LayoutParams)itemName.getLayoutParams();
 | 
					 | 
				
			||||||
            nameParams.addRule(RelativeLayout.LEFT_OF, downloadProgress.getId());
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            isDownloaded.setVisibility(View.GONE);
 | 
					            isDownloaded.setVisibility(View.GONE);
 | 
				
			||||||
            downloadProgress.setVisibility(View.VISIBLE);
 | 
					            downloadProgress.setVisibility(View.VISIBLE);
 | 
				
			||||||
@ -126,13 +120,7 @@ public class BookItemHolder {
 | 
				
			|||||||
            downloadProgress.spin();
 | 
					            downloadProgress.spin();
 | 
				
			||||||
        } else if (progress < 360) {
 | 
					        } else if (progress < 360) {
 | 
				
			||||||
            // Download in progress
 | 
					            // Download in progress
 | 
				
			||||||
            RelativeLayout.LayoutParams acronymParams =
 | 
					            downloadView = downloadProgress.getId();
 | 
				
			||||||
                    (RelativeLayout.LayoutParams)acronym.getLayoutParams();
 | 
					 | 
				
			||||||
            acronymParams.addRule(RelativeLayout.LEFT_OF, downloadProgress.getId());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            RelativeLayout.LayoutParams nameParams =
 | 
					 | 
				
			||||||
                    (RelativeLayout.LayoutParams)itemName.getLayoutParams();
 | 
					 | 
				
			||||||
            nameParams.addRule(RelativeLayout.LEFT_OF, downloadProgress.getId());
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            isDownloaded.setVisibility(View.GONE);
 | 
					            isDownloaded.setVisibility(View.GONE);
 | 
				
			||||||
            downloadProgress.setVisibility(View.VISIBLE);
 | 
					            downloadProgress.setVisibility(View.VISIBLE);
 | 
				
			||||||
@ -142,18 +130,20 @@ public class BookItemHolder {
 | 
				
			|||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            // Download complete
 | 
					            // Download complete
 | 
				
			||||||
            subscription.unsubscribe();
 | 
					            subscription.unsubscribe();
 | 
				
			||||||
            RelativeLayout.LayoutParams acronymParams =
 | 
					            downloadView = downloadProgress.getId();
 | 
				
			||||||
                    (RelativeLayout.LayoutParams)acronym.getLayoutParams();
 | 
					 | 
				
			||||||
            acronymParams.addRule(RelativeLayout.LEFT_OF, isDownloaded.getId());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            RelativeLayout.LayoutParams nameParams =
 | 
					 | 
				
			||||||
                    (RelativeLayout.LayoutParams)itemName.getLayoutParams();
 | 
					 | 
				
			||||||
            nameParams.addRule(RelativeLayout.LEFT_OF, isDownloaded.getId());
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            isDownloaded.setVisibility(View.VISIBLE);
 | 
					            isDownloaded.setVisibility(View.VISIBLE);
 | 
				
			||||||
            downloadProgress.setVisibility(View.GONE);
 | 
					            downloadProgress.setVisibility(View.GONE);
 | 
				
			||||||
            displayInstalled();
 | 
					            displayInstalled();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        RelativeLayout.LayoutParams acronymParams =
 | 
				
			||||||
 | 
					                (RelativeLayout.LayoutParams) acronym.getLayoutParams();
 | 
				
			||||||
 | 
					        acronymParams.addRule(RelativeLayout.LEFT_OF, downloadView);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        RelativeLayout.LayoutParams nameParams =
 | 
				
			||||||
 | 
					                (RelativeLayout.LayoutParams) itemName.getLayoutParams();
 | 
				
			||||||
 | 
					        nameParams.addRule(RelativeLayout.LEFT_OF, downloadView);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void onScrollOffscreen() {
 | 
					    public void onScrollOffscreen() {
 | 
				
			||||||
 | 
				
			|||||||
@ -114,8 +114,10 @@ class BookManager(private val installedBooks: Books, val rM: RefreshManager) :
 | 
				
			|||||||
        val job = ev.getJob()
 | 
					        val job = ev.getJob()
 | 
				
			||||||
        bookMappings.filter { it.getKey() == job.getJobID() }
 | 
					        bookMappings.filter { it.getKey() == job.getJobID() }
 | 
				
			||||||
                .map {
 | 
					                .map {
 | 
				
			||||||
                    val event = DLProgressEvent(job.getWorkDone() / job.getTotalWork() * 100,
 | 
					                    // We multiply by 100 first to avoid integer truncation
 | 
				
			||||||
                            it.getValue())
 | 
					                    // Also avoids roundoff error. Neat trick, but I'm spending just as much time
 | 
				
			||||||
 | 
					                    // documenting it as implementing the floating point would take
 | 
				
			||||||
 | 
					                    val event = DLProgressEvent(job.getWorkDone() * 100 / job.getTotalWork(), it.getValue())
 | 
				
			||||||
                    downloadEvents onNext event
 | 
					                    downloadEvents onNext event
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (job.getWorkDone() == job.getTotalWork()) {
 | 
					                    if (job.getWorkDone() == job.getTotalWork()) {
 | 
				
			||||||
 | 
				
			|||||||
@ -12,5 +12,5 @@ class DLProgressEvent(val progress: Int, val b: Book) {
 | 
				
			|||||||
        val PROGRESS_BEGINNING = 0
 | 
					        val PROGRESS_BEGINNING = 0
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fun toCircular() = progress.toFloat() * 360 / 100
 | 
					    fun toCircular() = (progress.toFloat() * 360 / 100).toInt()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user