mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Restore progress bars
This commit is contained in:
@@ -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,14 +63,26 @@ public class AndroidTaskRunner implements TaskRunner
|
||||
new CustomAsyncTask(task).execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getActiveTaskCount()
|
||||
{
|
||||
return activeTasks.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void publishProgress(Task task, int progress)
|
||||
{
|
||||
CustomAsyncTask asyncTask = taskToAsyncTask.get(task);
|
||||
if(asyncTask == null) return;
|
||||
if (asyncTask == null) return;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user