Timers persisted correctly, chronometer and buttons bind correctly
This commit is contained in:
@@ -11,6 +11,7 @@ import java.util.List;
|
||||
/**
|
||||
* Created by Phillip Hsu on 7/26/2016.
|
||||
*/
|
||||
@Deprecated
|
||||
public class TimerAdapter extends BaseAdapter<Timer, TimerViewHolder> {
|
||||
|
||||
public TimerAdapter(List<Timer> items, OnListItemInteractionListener<Timer> listener) {
|
||||
@@ -19,7 +20,7 @@ public class TimerAdapter extends BaseAdapter<Timer, TimerViewHolder> {
|
||||
|
||||
@Override
|
||||
protected TimerViewHolder onCreateViewHolder(ViewGroup parent, OnListItemInteractionListener<Timer> listener) {
|
||||
return new TimerViewHolder(parent, listener);
|
||||
return new TimerViewHolder(parent, listener, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package com.philliphsu.clock2.timers;
|
||||
|
||||
import android.os.SystemClock;
|
||||
import android.view.View;
|
||||
import android.widget.ImageButton;
|
||||
|
||||
import com.philliphsu.clock2.Timer;
|
||||
@@ -23,55 +21,57 @@ public class TimerController {
|
||||
mAddOneMinute = addOneMinute;
|
||||
mStartPause = startPause;
|
||||
mStop = stop;
|
||||
init();
|
||||
|
||||
// init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
mChronometer.setBase(SystemClock.elapsedRealtime() + mTimer.duration());
|
||||
updateStartPauseIcon();
|
||||
setSecondaryButtonsVisible(false);
|
||||
}
|
||||
// private void init() {
|
||||
// mChronometer.setBase(SystemClock.elapsedRealtime() + mTimer.duration());
|
||||
// updateStartPauseIcon();
|
||||
// setSecondaryButtonsVisible(false);
|
||||
// }
|
||||
|
||||
public void start() {
|
||||
mTimer.start();
|
||||
mChronometer.setBase(mTimer.endTime());
|
||||
mChronometer.start();
|
||||
updateStartPauseIcon();
|
||||
setSecondaryButtonsVisible(true);
|
||||
// mChronometer.setBase(mTimer.endTime());
|
||||
// mChronometer.start();
|
||||
// updateStartPauseIcon();
|
||||
// setSecondaryButtonsVisible(true);
|
||||
|
||||
}
|
||||
|
||||
public void pause() {
|
||||
mTimer.pause();
|
||||
mChronometer.stop();
|
||||
updateStartPauseIcon();
|
||||
// mChronometer.stop();
|
||||
// updateStartPauseIcon();
|
||||
}
|
||||
|
||||
public void resume() {
|
||||
mTimer.resume();
|
||||
mChronometer.setBase(mTimer.endTime());
|
||||
mChronometer.start();
|
||||
updateStartPauseIcon();
|
||||
// mChronometer.setBase(mTimer.endTime());
|
||||
// mChronometer.start();
|
||||
// updateStartPauseIcon();
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
mTimer.stop();
|
||||
mChronometer.stop();
|
||||
init();
|
||||
// mChronometer.stop();
|
||||
// init();
|
||||
}
|
||||
|
||||
public void addOneMinute() {
|
||||
mTimer.addOneMinute();
|
||||
mChronometer.setBase(mTimer.endTime());
|
||||
// mChronometer.setBase(mTimer.endTime());
|
||||
}
|
||||
|
||||
public void updateStartPauseIcon() {
|
||||
// TODO: Pause and start icons, resp.
|
||||
// public void updateStartPauseIcon() {
|
||||
// // TODO: Pause and start icons, resp.
|
||||
// mStartPause.setImageResource(mTimer.isRunning() ? 0 : 0);
|
||||
}
|
||||
// }
|
||||
|
||||
public void setSecondaryButtonsVisible(boolean visible) {
|
||||
int visibility = visible ? View.VISIBLE : View.INVISIBLE;
|
||||
mAddOneMinute.setVisibility(visibility);
|
||||
mStop.setVisibility(visibility);
|
||||
}
|
||||
// public void setSecondaryButtonsVisible(boolean visible) {
|
||||
// int visibility = visible ? View.VISIBLE : View.INVISIBLE;
|
||||
// mAddOneMinute.setVisibility(visibility);
|
||||
// mStop.setVisibility(visibility);
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
package com.philliphsu.clock2.timers;
|
||||
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.philliphsu.clock2.AsyncTimersTableUpdateHandler;
|
||||
import com.philliphsu.clock2.BaseViewHolder;
|
||||
import com.philliphsu.clock2.OnListItemInteractionListener;
|
||||
import com.philliphsu.clock2.R;
|
||||
@@ -17,8 +20,10 @@ import butterknife.OnClick;
|
||||
* Created by Phillip Hsu on 7/25/2016.
|
||||
*/
|
||||
public class TimerViewHolder extends BaseViewHolder<Timer> {
|
||||
private static final String TAG = "TimerViewHolder";
|
||||
|
||||
private TimerController mController;
|
||||
// private TimerController mController;
|
||||
private final AsyncTimersTableUpdateHandler mAsyncTimersTableUpdateHandler;
|
||||
|
||||
@Bind(R.id.label) TextView mLabel;
|
||||
@Bind(R.id.duration) CountdownChronometer mChronometer;
|
||||
@@ -28,17 +33,19 @@ public class TimerViewHolder extends BaseViewHolder<Timer> {
|
||||
@Bind(R.id.stop) ImageButton mStop;
|
||||
|
||||
// TODO: Controller param
|
||||
public TimerViewHolder(ViewGroup parent, OnListItemInteractionListener<Timer> listener) {
|
||||
public TimerViewHolder(ViewGroup parent, OnListItemInteractionListener<Timer> listener,
|
||||
AsyncTimersTableUpdateHandler asyncTimersTableUpdateHandler) {
|
||||
super(parent, R.layout.item_timer, listener);
|
||||
mAsyncTimersTableUpdateHandler = asyncTimersTableUpdateHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBind(Timer timer) {
|
||||
super.onBind(timer);
|
||||
bindLabel(timer.label());
|
||||
// We can't create the controller until this VH binds, because
|
||||
// the widgets only exist after this point.
|
||||
mController = new TimerController(timer, mChronometer, mAddOneMinute, mStartPause, mStop);
|
||||
// // We can't create the controller until this VH binds, because
|
||||
// // the widgets only exist after this point.
|
||||
// mController = new TimerController(timer, mChronometer, mAddOneMinute, mStartPause, mStop);
|
||||
bindChronometer(timer);
|
||||
bindButtonControls(timer);
|
||||
}
|
||||
@@ -47,24 +54,30 @@ public class TimerViewHolder extends BaseViewHolder<Timer> {
|
||||
void startPause() {
|
||||
Timer t = getItem();
|
||||
if (t.isRunning()) {
|
||||
mController.pause();
|
||||
// mController.pause();
|
||||
t.pause();
|
||||
} else {
|
||||
if (t.hasStarted()) {
|
||||
mController.resume();
|
||||
t.resume();
|
||||
} else {
|
||||
mController.start();
|
||||
t.start();
|
||||
}
|
||||
}
|
||||
// Persist value changes
|
||||
update();
|
||||
}
|
||||
|
||||
@OnClick(R.id.add_one_minute)
|
||||
void addOneMinute() {
|
||||
mController.addOneMinute();
|
||||
getItem().addOneMinute();
|
||||
// Persist end time increase
|
||||
update();
|
||||
}
|
||||
|
||||
@OnClick(R.id.stop)
|
||||
void stop() {
|
||||
mController.stop();
|
||||
getItem().stop();
|
||||
update();
|
||||
}
|
||||
|
||||
private void bindLabel(String label) {
|
||||
@@ -85,9 +98,7 @@ public class TimerViewHolder extends BaseViewHolder<Timer> {
|
||||
|
||||
if (!timer.hasStarted()) {
|
||||
// Set the initial text
|
||||
// TODO: Verify the controller should already have initialized
|
||||
// the text when it was constructed.
|
||||
// mChronometer.setDuration(timer.duration());
|
||||
mChronometer.setDuration(timer.duration());
|
||||
} else if (timer.isRunning()) {
|
||||
// Re-initialize the base
|
||||
mChronometer.setBase(timer.endTime());
|
||||
@@ -107,7 +118,19 @@ public class TimerViewHolder extends BaseViewHolder<Timer> {
|
||||
}
|
||||
|
||||
private void bindButtonControls(Timer timer) {
|
||||
mController.updateStartPauseIcon();
|
||||
mController.setSecondaryButtonsVisible(timer.hasStarted());
|
||||
// TODO: Pause and start icons, resp.
|
||||
// mStartPause.setImageResource(timer.isRunning() ? 0 : 0);
|
||||
int visibility = timer.hasStarted() ? View.VISIBLE : View.INVISIBLE;
|
||||
mAddOneMinute.setVisibility(visibility);
|
||||
mStop.setVisibility(visibility);
|
||||
}
|
||||
|
||||
private void update() {
|
||||
Timer t = getItem();
|
||||
mAsyncTimersTableUpdateHandler.asyncUpdate(
|
||||
// Alternatively, use ViewHolder#getItemId() because we can forget
|
||||
// to set the id on the object in BaseItemCursor#getItem(). We
|
||||
// luckily remembered to this time!
|
||||
t.getId(), t);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.philliphsu.clock2.timers;
|
||||
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.philliphsu.clock2.AsyncTimersTableUpdateHandler;
|
||||
import com.philliphsu.clock2.BaseCursorAdapter;
|
||||
import com.philliphsu.clock2.OnListItemInteractionListener;
|
||||
import com.philliphsu.clock2.Timer;
|
||||
@@ -12,12 +13,18 @@ import com.philliphsu.clock2.model.TimerCursor;
|
||||
*/
|
||||
public class TimersCursorAdapter extends BaseCursorAdapter<Timer, TimerViewHolder, TimerCursor> {
|
||||
|
||||
public TimersCursorAdapter(OnListItemInteractionListener<Timer> listener) {
|
||||
private final AsyncTimersTableUpdateHandler mAsyncTimersTableUpdateHandler;
|
||||
|
||||
public TimersCursorAdapter(OnListItemInteractionListener<Timer> listener,
|
||||
AsyncTimersTableUpdateHandler asyncTimersTableUpdateHandler) {
|
||||
super(listener);
|
||||
mAsyncTimersTableUpdateHandler = asyncTimersTableUpdateHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TimerViewHolder onCreateViewHolder(ViewGroup parent, OnListItemInteractionListener<Timer> listener, int viewType) {
|
||||
return new TimerViewHolder(parent, listener);
|
||||
return new TimerViewHolder(parent, listener, mAsyncTimersTableUpdateHandler);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.philliphsu.clock2.timers;
|
||||
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.content.Loader;
|
||||
|
||||
import com.philliphsu.clock2.AsyncTimersTableUpdateHandler;
|
||||
import com.philliphsu.clock2.RecyclerViewFragment;
|
||||
import com.philliphsu.clock2.Timer;
|
||||
import com.philliphsu.clock2.edittimer.EditTimerActivity;
|
||||
@@ -19,10 +21,30 @@ public class TimersFragment extends RecyclerViewFragment<
|
||||
TimersCursorAdapter> {
|
||||
public static final int REQUEST_CREATE_TIMER = 0;
|
||||
|
||||
private AsyncTimersTableUpdateHandler mAsyncTimersTableUpdateHandler;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mAsyncTimersTableUpdateHandler = new AsyncTimersTableUpdateHandler(getActivity(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
// if (resultCode != Activity.RESULT_OK || data == null)
|
||||
// return;
|
||||
if (resultCode != Activity.RESULT_OK || data == null)
|
||||
return;
|
||||
int hour = data.getIntExtra(EditTimerActivity.EXTRA_HOUR, -1);
|
||||
int minute = data.getIntExtra(EditTimerActivity.EXTRA_MINUTE, -1);
|
||||
int second = data.getIntExtra(EditTimerActivity.EXTRA_SECOND, -1);
|
||||
String label = data.getStringExtra(EditTimerActivity.EXTRA_LABEL);
|
||||
boolean startTimer = data.getBooleanExtra(EditTimerActivity.EXTRA_START_TIMER, false);
|
||||
// TODO: Timer's group?
|
||||
|
||||
Timer t = Timer.createWithLabel(hour, minute, second, label);
|
||||
if (startTimer) {
|
||||
t.start();
|
||||
}
|
||||
mAsyncTimersTableUpdateHandler.asyncInsert(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -36,8 +58,11 @@ public class TimersFragment extends RecyclerViewFragment<
|
||||
protected TimersCursorAdapter getAdapter() {
|
||||
if (super.getAdapter() != null)
|
||||
return super.getAdapter();
|
||||
// Create a new adapter
|
||||
return new TimersCursorAdapter(this);
|
||||
// Create a new adapter. This is called before we can initialize mAsyncTimersTableUpdateHandler,
|
||||
// so right now it is null. However, after super.onCreate() returns, it is initialized, and
|
||||
// the reference variable will be pointing to an actual object. This assignment "propagates"
|
||||
// to all references to mAsyncTimersTableUpdateHandler.
|
||||
return new TimersCursorAdapter(this, mAsyncTimersTableUpdateHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -59,4 +84,9 @@ public class TimersFragment extends RecyclerViewFragment<
|
||||
public void onListItemUpdate(Timer item, int position) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onScrolledToStableId(long id, int position) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user