mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 17:18:52 -06:00
Restore progress bars
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user