/** * Copyright (c) 2012 Todoroo Inc * * See the file "LICENSE" for the full license governing this code. */ package com.todoroo.astrid.helper; import java.util.concurrent.atomic.AtomicInteger; import android.app.Activity; import android.support.v4.app.Fragment; import android.view.View; import android.view.animation.AlphaAnimation; import android.widget.ProgressBar; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.sync.SyncResultCallbackAdapter; public class ProgressBarSyncResultCallback extends SyncResultCallbackAdapter { private ProgressBar progressBar; private final Activity activity; private final Runnable onFinished; private final AtomicInteger providers = new AtomicInteger(0); public ProgressBarSyncResultCallback(Activity activity, Fragment fragment, int progressBarId, Runnable onFinished) { this.progressBar = (ProgressBar) fragment.getView().findViewById(progressBarId); this.activity = activity; this.onFinished = onFinished; if(progressBar == null) progressBar = new ProgressBar(activity); progressBar.setProgress(0); progressBar.setMax(0); } @Override public void finished() { if(providers.decrementAndGet() == 0) { activity.runOnUiThread(new Runnable() { @Override public void run() { try { progressBar.setMax(100); progressBar.setProgress(100); AlphaAnimation animation = new AlphaAnimation(1, 0); animation.setFillAfter(true); animation.setDuration(1000L); progressBar.startAnimation(animation); onFinished.run(); } catch (Exception e) { // ignore, view could have been destroyed } } }); new Thread() { @Override public void run() { AndroidUtilities.sleepDeep(1000); activity.runOnUiThread(new Runnable() { @Override public void run() { try { progressBar.setVisibility(View.GONE); } catch (Exception e) { // ignore } } }); } }.start(); } } @Override public void incrementMax(final int incrementBy) { activity.runOnUiThread(new Runnable() { @Override public void run() { try { progressBar.setMax(progressBar.getMax() + incrementBy); } catch (Exception e) { // ignore } } }); } @Override public void incrementProgress(final int incrementBy) { activity.runOnUiThread(new Runnable() { @Override public void run() { try { progressBar.incrementProgressBy(incrementBy); } catch (Exception e) { // ignore } } }); } @Override public void started() { if(providers.incrementAndGet() == 1) { activity.runOnUiThread(new Runnable() { @Override public void run() { progressBar.setVisibility(View.VISIBLE); AlphaAnimation animation = new AlphaAnimation(0, 1); animation.setFillAfter(true); animation.setDuration(1000L); progressBar.startAnimation(animation); } }); } } }