Restore progress bars

pull/170/head
Alinson S. Xavier 9 years ago
parent b35305e16c
commit 46a0777195

@ -23,15 +23,17 @@ import android.content.*;
import android.content.res.*;
import android.support.annotation.*;
import android.support.v7.widget.Toolbar;
import android.util.*;
import android.view.*;
import android.widget.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.activities.*;
import org.isoron.uhabits.activities.habits.list.controllers.*;
import org.isoron.uhabits.activities.habits.list.model.*;
import org.isoron.uhabits.activities.habits.list.views.*;
import org.isoron.uhabits.models.*;
import org.isoron.uhabits.tasks.*;
import org.isoron.uhabits.utils.*;
import javax.inject.*;
@ -40,7 +42,7 @@ import butterknife.*;
@ActivityScope
public class ListHabitsRootView extends BaseRootView
implements ModelObservable.Listener
implements ModelObservable.Listener, TaskRunner.Listener
{
public static final int MAX_CHECKMARK_COUNT = 21;
@ -68,10 +70,13 @@ public class ListHabitsRootView extends BaseRootView
@NonNull
private final HabitCardListAdapter listAdapter;
private final TaskRunner runner;
@Inject
public ListHabitsRootView(@ActivityContext Context context,
@NonNull HintListFactory hintListFactory,
@NonNull HabitCardListAdapter listAdapter)
@NonNull HabitCardListAdapter listAdapter,
@NonNull TaskRunner runner)
{
super(context);
addView(inflate(getContext(), R.layout.list_habits, null));
@ -81,13 +86,16 @@ public class ListHabitsRootView extends BaseRootView
listView.setAdapter(listAdapter);
listAdapter.setListView(listView);
this.runner = runner;
progressBar.setIndeterminate(true);
tvStarEmpty.setTypeface(InterfaceUtils.getFontAwesome(getContext()));
initToolbar();
String hints[] =
getContext().getResources().getStringArray(R.array.hints);
HintList hintList = hintListFactory.create(hints);
hintView.setHints(hintList);
initToolbar();
}
@NonNull
@ -103,6 +111,20 @@ public class ListHabitsRootView extends BaseRootView
updateEmptyView();
}
@Override
public void onTaskFinished(Task task)
{
updateProgressBar();
Log.d("RootView", "onTaskFinished");
}
@Override
public void onTaskStarted(Task task)
{
updateProgressBar();
Log.d("RootView", "onTaskStarted");
}
public void setController(@NonNull ListHabitsController controller,
@NonNull ListHabitsSelectionMenu menu)
{
@ -119,6 +141,8 @@ public class ListHabitsRootView extends BaseRootView
protected void onAttachedToWindow()
{
super.onAttachedToWindow();
runner.addListener(this);
updateProgressBar();
listAdapter.getObservable().addListener(this);
}
@ -126,9 +150,19 @@ public class ListHabitsRootView extends BaseRootView
protected void onDetachedFromWindow()
{
listAdapter.getObservable().removeListener(this);
runner.removeListener(this);
super.onDetachedFromWindow();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
int count = getCheckmarkCount();
header.setButtonCount(count);
listView.setCheckmarkCount(count);
super.onSizeChanged(w, h, oldw, oldh);
}
private int getCheckmarkCount()
{
Resources res = getResources();
@ -144,12 +178,11 @@ public class ListHabitsRootView extends BaseRootView
listAdapter.getItemCount() > 0 ? View.GONE : View.VISIBLE);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
private void updateProgressBar()
{
int count = getCheckmarkCount();
header.setButtonCount(count);
listView.setCheckmarkCount(count);
super.onSizeChanged(w, h, oldw, oldh);
postDelayed(() -> {
progressBar.setVisibility(
runner.getActiveTaskCount() > 0 ? VISIBLE : GONE);
}, 500);
}
}

@ -28,25 +28,34 @@ import java.util.*;
import dagger.*;
@Module
@AppScope
public class AndroidTaskRunner implements TaskRunner
{
private final LinkedList<CustomAsyncTask> activeTasks;
private final HashMap<Task, CustomAsyncTask> taskToAsyncTask;
private LinkedList<Listener> listeners;
public AndroidTaskRunner()
{
activeTasks = new LinkedList<>();
taskToAsyncTask = new HashMap<>();
listeners = new LinkedList<>();
}
@Provides
@AppScope
public static TaskRunner provideTaskRunner()
{
return new AndroidTaskRunner();
}
@Override
public void addListener(Listener listener)
{
listeners.add(listener);
}
@Override
public void execute(Task task)
{
@ -54,6 +63,12 @@ public class AndroidTaskRunner implements TaskRunner
new CustomAsyncTask(task).execute();
}
@Override
public int getActiveTaskCount()
{
return activeTasks.size();
}
@Override
public void publishProgress(Task task, int progress)
{
@ -62,6 +77,12 @@ public class AndroidTaskRunner implements TaskRunner
asyncTask.publish(progress);
}
@Override
public void removeListener(Listener listener)
{
listeners.remove(listener);
}
private class CustomAsyncTask extends AsyncTask<Void, Integer, Void>
{
private final Task task;
@ -94,11 +115,13 @@ public class AndroidTaskRunner implements TaskRunner
task.onPostExecute();
activeTasks.remove(this);
taskToAsyncTask.remove(task);
for (Listener l : listeners) l.onTaskFinished(task);
}
@Override
protected void onPreExecute()
{
for (Listener l : listeners) l.onTaskStarted(task);
activeTasks.add(this);
taskToAsyncTask.put(task, this);
task.onPreExecute();

@ -28,11 +28,17 @@ public class SingleThreadTaskRunner implements TaskRunner
{
@Provides
@AppScope
public static TaskRunner getInstance()
public static TaskRunner provideTaskRunner()
{
return new SingleThreadTaskRunner();
}
@Override
public void addListener(Listener listener)
{
throw new UnsupportedOperationException();
}
@Override
public void execute(Task task)
{
@ -42,10 +48,21 @@ public class SingleThreadTaskRunner implements TaskRunner
task.onPostExecute();
}
@Override
public int getActiveTaskCount()
{
return 0;
}
@Override
public void publishProgress(Task task, int progress)
{
task.onProgressUpdate(progress);
}
@Override
public void removeListener(Listener listener)
{
throw new UnsupportedOperationException();
}
}

@ -21,7 +21,20 @@ package org.isoron.uhabits.tasks;
public interface TaskRunner
{
void addListener(Listener listener);
void removeListener(Listener listener);
void execute(Task task);
void publishProgress(Task task, int progress);
int getActiveTaskCount();
interface Listener
{
void onTaskStarted(Task task);
void onTaskFinished(Task task);
}
}

Loading…
Cancel
Save