From 7d45a8380f03683ed3ac8eb93729c885dc8d009f Mon Sep 17 00:00:00 2001 From: Florens Douwes Date: Fri, 18 Jul 2014 11:37:01 +0200 Subject: [PATCH] Add countdown and progressdialog to pins --- .../chan/core/manager/WatchManager.java | 6 +- .../floens/chan/core/watch/PinWatcher.java | 8 +++ .../floens/chan/ui/adapter/PinnedAdapter.java | 70 +++++++++++++++---- Clover/app/src/main/res/layout/pin_item.xml | 58 ++++++++++----- .../src/main/res/layout/pin_item_header.xml | 16 ++--- 5 files changed, 115 insertions(+), 43 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java b/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java index 801faab6..e3aecdc3 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java +++ b/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java @@ -40,7 +40,7 @@ import java.util.concurrent.TimeUnit; public class WatchManager implements ChanApplication.ForegroundChangedListener { private static final String TAG = "WatchManager"; - private static final int FOREGROUND_TIME = 10; + private static final int FOREGROUND_TIME = 5; private final Context context; private final List listeners = new ArrayList<>(); @@ -312,11 +312,11 @@ public class WatchManager implements ChanApplication.ForegroundChangedListener { } }, time, TimeUnit.SECONDS); pendingTimer = new PendingTimer(scheduledFuture, time); - Logger.d(TAG, "Timer firing in " + time + " seconds"); +// Logger.d(TAG, "Timer firing in " + time + " seconds"); } private void timerFired() { - Logger.d(TAG, "Timer fired"); +// Logger.d(TAG, "Timer fired"); pendingTimer = null; for (Pin pin : getWatchingPins()) { diff --git a/Clover/app/src/main/java/org/floens/chan/core/watch/PinWatcher.java b/Clover/app/src/main/java/org/floens/chan/core/watch/PinWatcher.java index 5665c812..bb73a2a9 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/watch/PinWatcher.java +++ b/Clover/app/src/main/java/org/floens/chan/core/watch/PinWatcher.java @@ -104,6 +104,14 @@ public class PinWatcher implements Loader.LoaderListener { } } + public long getTimeUntilNextLoad() { + return loader.getTimeUntilLoadMore(); + } + + public boolean isLoading() { + return loader.isLoading(); + } + @Override public void onError(VolleyError error) { Logger.e(TAG, "PinWatcher onError: ", error); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinnedAdapter.java b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinnedAdapter.java index f5864cdd..ac84d235 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinnedAdapter.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinnedAdapter.java @@ -18,12 +18,15 @@ package org.floens.chan.ui.adapter; import android.content.Context; +import android.os.Handler; +import android.os.Looper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.FrameLayout; import android.widget.LinearLayout; +import android.widget.ProgressBar; import android.widget.TextView; import org.floens.chan.ChanApplication; @@ -40,6 +43,7 @@ public class PinnedAdapter extends BaseAdapter { private Context context; private List pins = new ArrayList<>(); + private boolean postInvalidated = false; public PinnedAdapter(Context context) { this.context = context; @@ -109,26 +113,54 @@ public class PinnedAdapter extends BaseAdapter { convertView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.pin_item, null); } - ((TextView) convertView.findViewById(R.id.drawer_item_text)).setText(item.loadable.title); + ((TextView) convertView.findViewById(R.id.pin_text)).setText(item.loadable.title); - FrameLayout frameLayout = (FrameLayout) convertView.findViewById(R.id.drawer_item_count_container); + FrameLayout timeContainer = (FrameLayout) convertView.findViewById(R.id.pin_time_container); + FrameLayout countContainer = (FrameLayout) convertView.findViewById(R.id.pin_count_container); if (ChanPreferences.getWatchEnabled()) { - frameLayout.setVisibility(View.VISIBLE); + countContainer.setVisibility(View.VISIBLE); - TextView itemCount = (TextView) convertView.findViewById(R.id.drawer_item_count); + TextView timeView = (TextView) convertView.findViewById(R.id.pin_time); + + if (item.watching && item.getPinWatcher() != null) { + timeContainer.setVisibility(View.VISIBLE); + long timeRaw = item.getPinWatcher().getTimeUntilNextLoad(); + long time = 0; + if (timeRaw > 0) { + time = timeRaw / 1000L; + time = Math.min(9999, time); + } + + timeView.setText(Long.toString(time)); + + postInvalidate(); + } else { + timeContainer.setVisibility(View.GONE); + } + + TextView countView = (TextView) convertView.findViewById(R.id.pin_count); + ProgressBar loadView = (ProgressBar) convertView.findViewById(R.id.pin_load); if (item.isError) { - itemCount.setText("Err"); + countView.setText("Err"); } else { int count = item.getNewPostsCount(); String total = Integer.toString(count); if (count > 999) { total = "1k+"; } - itemCount.setText(total); + countView.setText(total); } - itemCount.setOnClickListener(new View.OnClickListener() { + if (item.getPinWatcher() != null && item.getPinWatcher().isLoading()) { + countView.setVisibility(View.GONE); + loadView.setVisibility(View.VISIBLE); + } else { + loadView.setVisibility(View.GONE); + countView.setVisibility(View.VISIBLE); + } + + countView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { item.toggleWatch(); @@ -136,14 +168,15 @@ public class PinnedAdapter extends BaseAdapter { }); if (!item.watching) { - frameLayout.setBackgroundResource(R.drawable.pin_icon_gray); + countContainer.setBackgroundResource(R.drawable.pin_icon_gray); } else if (item.getNewQuoteCount() > 0) { - frameLayout.setBackgroundResource(R.drawable.pin_icon_red); + countContainer.setBackgroundResource(R.drawable.pin_icon_red); } else { - frameLayout.setBackgroundResource(R.drawable.pin_icon_blue); + countContainer.setBackgroundResource(R.drawable.pin_icon_blue); } } else { - frameLayout.setVisibility(View.GONE); + timeContainer.setVisibility(View.GONE); + countContainer.setVisibility(View.GONE); } return convertView; @@ -151,7 +184,7 @@ public class PinnedAdapter extends BaseAdapter { case VIEW_TYPE_HEADER: { if (convertView == null) { convertView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.pin_item_header, null); - ((TextView) convertView.findViewById(R.id.drawer_item_header)).setText(R.string.drawer_pinned); + ((TextView) convertView.findViewById(R.id.pin_header)).setText(R.string.drawer_pinned); } return convertView; @@ -167,4 +200,17 @@ public class PinnedAdapter extends BaseAdapter { notifyDataSetChanged(); } + + private void postInvalidate() { + if (!postInvalidated) { + postInvalidated = true; + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + postInvalidated = false; + notifyDataSetInvalidated(); + } + }, 1000); + } + } } diff --git a/Clover/app/src/main/res/layout/pin_item.xml b/Clover/app/src/main/res/layout/pin_item.xml index 0fa508a7..ddbb7381 100644 --- a/Clover/app/src/main/res/layout/pin_item.xml +++ b/Clover/app/src/main/res/layout/pin_item.xml @@ -1,5 +1,4 @@ - - - - + android:textSize="19sp" /> + + + + + + + android:layout_height="48dp" + android:background="@drawable/pin_icon_blue"> + android:textColor="#fff" + android:textSize="16dp" /> + + diff --git a/Clover/app/src/main/res/layout/pin_item_header.xml b/Clover/app/src/main/res/layout/pin_item_header.xml index ed59a004..6e1e6288 100644 --- a/Clover/app/src/main/res/layout/pin_item_header.xml +++ b/Clover/app/src/main/res/layout/pin_item_header.xml @@ -1,5 +1,4 @@ - - - + android:paddingTop="24dp" />