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

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

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

Loading…
Cancel
Save