diff --git a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/BabyLayoutHolder.java b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/BabyLayoutHolder.java index b0b44861..6412ce96 100644 --- a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/BabyLayoutHolder.java +++ b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/BabyLayoutHolder.java @@ -21,9 +21,7 @@ import eu.pkgsoftware.babybuddywidgets.networking.BabyBuddyClient; import eu.pkgsoftware.babybuddywidgets.networking.ChildrenStateTracker; import eu.pkgsoftware.babybuddywidgets.networking.babybuddy.models.TimeEntry; -import eu.pkgsoftware.babybuddywidgets.timers.EmptyTimerListProvider; import eu.pkgsoftware.babybuddywidgets.timers.TimerControlInterface; -import eu.pkgsoftware.babybuddywidgets.timers.TimerListProvider; import eu.pkgsoftware.babybuddywidgets.timers.TimersUpdatedCallback; import eu.pkgsoftware.babybuddywidgets.timers.TranslatedException; import eu.pkgsoftware.babybuddywidgets.utils.Promise; @@ -32,7 +30,6 @@ public class BabyLayoutHolder extends RecyclerView.ViewHolder implements TimerCo private final BabyManagerBinding binding; private final BaseFragment baseFragment; private final BabyBuddyClient client; - private TimerListProvider timerListProvider = null; private BabyBuddyClient.Child child = null; @@ -55,9 +52,6 @@ public BabyLayoutHolder(BaseFragment fragment, BabyManagerBinding bmb) { baseFragment = fragment; client = fragment.getMainActivity().getClient(); - GridLayoutManager l = new GridLayoutManager(binding.timersList.getContext(), 1); - binding.timersList.setLayoutManager(l); - binding.mainScrollView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> { if (childHistoryLoader != null) { childHistoryLoader.updateTop(); @@ -87,7 +81,6 @@ private void resetChildHistoryLoader() { childHistoryLoader.close(); } childHistoryLoader = null; - binding.timersList.setAdapter(new EmptyTimerListProvider()); } public void updateChild(BabyBuddyClient.Child c, ChildrenStateTracker stateTracker) { @@ -117,8 +110,6 @@ public void updateChild(BabyBuddyClient.Child c, ChildrenStateTracker stateTrack } ); - timerListProvider = new TimerListProvider(baseFragment, this); - binding.timersList.setAdapter(timerListProvider); loggingButtonController = new LoggingButtonController( baseFragment, @@ -208,7 +199,6 @@ public void clear() { public void close() { clear(); - timerListProvider.close(); } private class UpdateBufferingPromise implements Promise { @@ -253,29 +243,6 @@ public void stopTimer(@NotNull BabyBuddyClient.Timer timer, @NonNull Promise cb - ) { - baseFragment.getMainActivity().getChildTimerControl(child).storeActivity( - timer, - activity, - notes, - new UpdateBufferingPromise<>(cb) { - @Override - public void succeeded(Boolean aBoolean) { - super.succeeded(aBoolean); - if (childHistoryLoader != null) { - childHistoryLoader.forceRefresh(); - } - } - } - ); - } - @Override public void registerTimersUpdatedCallback(@NonNull TimersUpdatedCallback callback) { if (updateTimersCallbacks.contains(callback)) { diff --git a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/activitycomponents/TimerControl.kt b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/activitycomponents/TimerControl.kt index 4557804c..099c3087 100644 --- a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/activitycomponents/TimerControl.kt +++ b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/activitycomponents/TimerControl.kt @@ -70,15 +70,6 @@ class TimerControl(val mainActivity: MainActivity, val childId: Int) : TimerCont }) } - override fun storeActivity( - timer: Timer, - activity: String, - notes: String, - cb: Promise - ) { - throw NotImplementedError() - } - override fun registerTimersUpdatedCallback(callback: TimersUpdatedCallback) { updateTimersCallback = callback } diff --git a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/compat/BabyBuddyV2TimerAdapter.kt b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/compat/BabyBuddyV2TimerAdapter.kt index 4adec1ec..dcb36485 100644 --- a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/compat/BabyBuddyV2TimerAdapter.kt +++ b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/compat/BabyBuddyV2TimerAdapter.kt @@ -236,19 +236,6 @@ class BabyBuddyV2TimerAdapter( } } - override fun storeActivity( - timer: Timer, - activity: String, - notes: String, - cb: Promise - ) { - virtualToActualTimer(timer)?.let { - wrap.storeActivity(it, activity, notes, cb) - } ?: { - cb.failed(java.lang.Exception("Timer ${timer.name} does not exist")) - } - } - override fun registerTimersUpdatedCallback(callback: TimersUpdatedCallback) { timersCallback = callback triggerTimerCallback() diff --git a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/EmptyTimerListProvider.kt b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/EmptyTimerListProvider.kt deleted file mode 100644 index ea02749c..00000000 --- a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/EmptyTimerListProvider.kt +++ /dev/null @@ -1,16 +0,0 @@ -package eu.pkgsoftware.babybuddywidgets.timers - -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView - -class EmptyTimerListProvider : RecyclerView.Adapter() { - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TimerListViewHolder { - throw NotImplementedError() - } - - override fun onBindViewHolder(holder: TimerListViewHolder, position: Int) {} - - override fun getItemCount(): Int { - return 0 - } -} diff --git a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerControlInterface.kt b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerControlInterface.kt index bd3009d2..84b9313c 100644 --- a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerControlInterface.kt +++ b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerControlInterface.kt @@ -17,12 +17,6 @@ interface TimerControlInterface { fun createNewTimer(timer: Timer, cb: Promise) fun startTimer(timer: Timer, cb: Promise) fun stopTimer(timer: Timer, cb: Promise) - fun storeActivity( - timer: Timer, - activity: String, - notes: String, - cb: Promise - ) fun registerTimersUpdatedCallback(callback: TimersUpdatedCallback) fun unregisterTimersUpdatedCallback(callback: TimersUpdatedCallback) fun getNotes(timer: Timer): Notes diff --git a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerListProvider.java b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerListProvider.java deleted file mode 100644 index e0341a5a..00000000 --- a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerListProvider.java +++ /dev/null @@ -1,125 +0,0 @@ -package eu.pkgsoftware.babybuddywidgets.timers; - -import android.view.LayoutInflater; -import android.view.ViewGroup; - -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import eu.pkgsoftware.babybuddywidgets.BaseFragment; -import eu.pkgsoftware.babybuddywidgets.history.ChildEventHistoryLoader; -import eu.pkgsoftware.babybuddywidgets.networking.BabyBuddyClient; - -public class TimerListProvider extends RecyclerView.Adapter implements TimersUpdatedCallback { - private BabyBuddyClient.Timer[] timers = new BabyBuddyClient.Timer[0]; - - private final BaseFragment baseFragment; - private final List holders = new LinkedList<>(); - private final TimerControlInterface timerControls; - - public TimerListProvider( - @NotNull BaseFragment baseFragment, - @NotNull TimerControlInterface timerControls - ) { - super(); - this.baseFragment = baseFragment; - this.timerControls = timerControls; - this.timerControls.registerTimersUpdatedCallback(this); - } - - private int[] listIds(BabyBuddyClient.Timer[] t) { - int[] result = new int[t.length]; - for (int i = 0; i < t.length; i++) { - result[i] = t[i].id; - } - Arrays.sort(result); - return result; - } - - private boolean compareIds(BabyBuddyClient.Timer[] t1, BabyBuddyClient.Timer[] t2) { - return Arrays.equals(listIds(t1), listIds(t2)); - } - - private TimerListViewHolder findHolderForTimer(BabyBuddyClient.Timer t) { - TimerListViewHolder result = null; - for (TimerListViewHolder h : holders) { - if (h.getTimer().id == t.id) { - if (result != null) { - return null; // Multiple timers - dismiss - } else { - result = h; - } - } - } - return result; - } - - @Override - public TimerListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - eu.pkgsoftware.babybuddywidgets.databinding.QuickTimerEntryBinding entryBinding = eu.pkgsoftware.babybuddywidgets.databinding.QuickTimerEntryBinding.inflate(LayoutInflater.from(parent.getContext())); - return new TimerListViewHolder(baseFragment, entryBinding, timerControls); - } - - @Override - public void onViewAttachedToWindow(@NonNull TimerListViewHolder holder) { - super.onViewAttachedToWindow(holder); - holders.add(holder); - } - - @Override - public void onViewDetachedFromWindow(@NonNull TimerListViewHolder holder) { - super.onViewDetachedFromWindow(holder); - holders.remove(holder); - } - - @Override - public void onBindViewHolder(TimerListViewHolder holder, int position) { - holder.assignTimer(timers[position]); - } - - @Override - public int getItemCount() { - return timers.length; - } - - public void close() { - for (TimerListViewHolder h : holders) { - h.close(); - } - } - - @Override - public void newTimerListLoaded(@NonNull BabyBuddyClient.Timer[] timers) { - timers = timers.clone(); - Arrays.sort(timers, (a, b) -> Integer.compare(a.id, b.id)); - - if (!compareIds(timers, this.timers)) { - this.timers = timers; - notifyDataSetChanged(); - } else { - for (int i = 0; i < timers.length; i++) { - final TimerListViewHolder timerHolder = findHolderForTimer(timers[i]); - if (!this.timers[i].equals(timers[i])) { - BabyBuddyClient.Timer probeTimer = timers[i].clone(); - probeTimer.start = this.timers[i].start; - probeTimer.end = this.timers[i].end; - boolean probeTimerEqual = probeTimer.equals(this.timers[i]); - - this.timers[i] = timers[i]; - if (probeTimerEqual && (timerHolder != null)) { - timerHolder.assignTimer(timers[i]); - } else { - notifyItemChanged(i); - } - } else if (timerHolder != null) { - timerHolder.updateNoChange(); - } - } - } - } -} diff --git a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerListViewHolder.java b/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerListViewHolder.java deleted file mode 100644 index a99f208e..00000000 --- a/app/src/main/java/eu/pkgsoftware/babybuddywidgets/timers/TimerListViewHolder.java +++ /dev/null @@ -1,243 +0,0 @@ -package eu.pkgsoftware.babybuddywidgets.timers; - -import android.os.Handler; - -import com.squareup.phrase.Phrase; - -import org.jetbrains.annotations.NotNull; - -import java.util.Date; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import eu.pkgsoftware.babybuddywidgets.BaseFragment; -import eu.pkgsoftware.babybuddywidgets.CredStore; -import eu.pkgsoftware.babybuddywidgets.NotesControl; -import eu.pkgsoftware.babybuddywidgets.NotesEditorLogic; -import eu.pkgsoftware.babybuddywidgets.R; -import eu.pkgsoftware.babybuddywidgets.databinding.NotesEditorBinding; -import eu.pkgsoftware.babybuddywidgets.databinding.QuickTimerEntryBinding; -import eu.pkgsoftware.babybuddywidgets.login.Utils; -import eu.pkgsoftware.babybuddywidgets.networking.BabyBuddyClient; -import eu.pkgsoftware.babybuddywidgets.networking.RequestCodeFailure; -import eu.pkgsoftware.babybuddywidgets.utils.Promise; -import eu.pkgsoftware.babybuddywidgets.widgets.SwitchButtonLogic; - -public class TimerListViewHolder extends RecyclerView.ViewHolder { - private final @NotNull QuickTimerEntryBinding binding; - - private final @NotNull BaseFragment baseFragment; - private final BabyBuddyClient client; - private final Handler timerHandler; - private final TimerControlInterface timerControl; - - private final SwitchButtonLogic notesEditorSwitch; - private final NotesEditorLogic notesEditor; - - private SwitchButtonLogic startStopLogic = null; - - private BabyBuddyClient.Timer timer = null; - private Long timerStartTime = null; - - private boolean isClosed = false; - - private boolean newUpdatedPosted = false; - - private void updateTimerTime() { - if (timerStartTime == null) { - binding.currentTimerTime.setText(""); - } else { - long diff = System.currentTimeMillis() + timerStartTime; - - int seconds = (int) diff / 1000; - int minutes = seconds / 60; - int hours = minutes / 60; - - binding.currentTimerTime.setText( - "HH:MM:ss" - .replaceAll("HH", "" + hours) - .replaceAll("MM", Utils.Companion.padToLen("" + (minutes % 60), '0', 2)) - .replaceAll("ss", Utils.Companion.padToLen("" + (seconds % 60), '0', 2)) - ); - - if (!newUpdatedPosted) { - timerHandler.postDelayed(() -> { - newUpdatedPosted = false; - if (!isClosed) { - updateTimerTime(); - } - }, 500); - newUpdatedPosted = true; - } - } - } - - public TimerListViewHolder( - BaseFragment baseFragment, - QuickTimerEntryBinding binding, - TimerControlInterface timerControl - ) { - super(binding.getRoot()); - - this.baseFragment = baseFragment; - this.binding = binding; - this.timerControl = timerControl; - - client = baseFragment.getMainActivity().getClient(); - - binding.currentTimerTime.setText(""); - timerHandler = new Handler(baseFragment.getMainActivity().getMainLooper()); - - notesEditorSwitch = new SwitchButtonLogic( - binding.addNoteButton, binding.removeNoteButton, false - ); - NotesEditorBinding notesBinding = NotesEditorBinding.inflate( - baseFragment.getMainActivity().getLayoutInflater() - ); - binding.verticalRoot.addView(notesBinding.getRoot()); - notesEditor = new NotesEditorLogic(notesBinding, false); - notesEditorSwitch.addStateListener((v, userTriggered) -> notesEditor.setVisible(v)); - - startStopLogic = new SwitchButtonLogic( - binding.appStartTimerButton, - binding.appStopTimerButton, - false - ); - startStopLogic.addStateListener( - (active, userClicked) -> { - if (timer == null) { - return; - } - if (!userClicked) { - return; - } - - if (active) { - this.timerControl.startTimer(timer, new Promise<>() { - @Override - public void succeeded(BabyBuddyClient.Timer t) { - timer = t; - updateActiveState(); - } - - @Override - public void failed(TranslatedException s) { - } - }); - } else { - if (BabyBuddyClient.ACTIVITIES.index(timer.name) < 0) { - throw new UnsupportedOperationException("Activity does not exist: " + timer.name); - } - this.timerControl.storeActivity( - timer, - timer.name, - notesEditor.getText(), - new Promise<>() { - @Override - public void succeeded(Boolean stopped) { - if (stopped == null) { - stopped = true; - } - - if (stopped) { - timer.active = false; - updateActiveState(); - - notesEditor.clearText(); - notesEditorSwitch.setState(false); - } - } - - @Override - public void failed(Exception e) { - tryResolveStoreError(e); - } - } - ); - } - } - ); - } - - private void tryResolveStoreError(@NotNull Exception error) { - new ResolveConflicts(baseFragment, timer, timerControl) { - @Override - protected void updateTimerActiveState() { - updateActiveState(); - } - - @Override - protected void finished() { - } - }.tryResolveStoreError(error); - } - - private void updateActiveState() { - startStopLogic.setState(timer.active); - if ((timer == null) || (!timer.active)) { - timerStartTime = null; - } else { - timerStartTime = new Date().getTime() - timer.start.getTime() + client.getServerDateOffsetMillis() - System.currentTimeMillis(); - } - updateTimerTime(); - } - - public void assignTimer(BabyBuddyClient.Timer timer) { - if (isClosed) { - isClosed = false; - updateTimerTime(); - } - - this.timer = timer; - - String name = timer.readableName(); - final int activityIndex = BabyBuddyClient.ACTIVITIES.index(timer.name); - if (activityIndex >= 0) { - final String[] names = baseFragment.getResources().getStringArray(R.array.timerTypeNames); - name = names[activityIndex]; - } - binding.timerName.setText(name); - - updateActiveState(); - - notesEditor.setNotes( - new NotesControl() { - @Override - public void persistChanges() { - baseFragment.getMainActivity().getCredStore().storePrefs(); - } - - @Override - public void setNotes(@NonNull CredStore.Notes notes) { - timerControl.setNotes(timer, notes); - } - - @NonNull - @Override - public CredStore.Notes getNotes() { - return timerControl.getNotes(timer); - } - } - ); - notesEditorSwitch.setState(notesEditor.isVisible()); - } - - /** - * Called if a new data frame was received from the server, but no timer-data was - * changed. - */ - public void updateNoChange() { - // We might have "short circuited" the timer-active state. If this was the case, - // re-enable the timer now! - updateActiveState(); - } - - public BabyBuddyClient.Timer getTimer() { - return timer.clone(); - } - - public void close() { - timerStartTime = null; - isClosed = true; - } -} diff --git a/app/src/main/res/layout/baby_manager.xml b/app/src/main/res/layout/baby_manager.xml index b6a9bcbe..06f452c0 100644 --- a/app/src/main/res/layout/baby_manager.xml +++ b/app/src/main/res/layout/baby_manager.xml @@ -174,12 +174,6 @@ app:tint="@color/fixed_color_button_text_color" /> - -