Add countdown and progressdialog to pins

captchafix
Florens Douwes 11 years ago
parent f9dc5e2cce
commit 7d45a8380f
  1. 6
      Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java
  2. 8
      Clover/app/src/main/java/org/floens/chan/core/watch/PinWatcher.java
  3. 70
      Clover/app/src/main/java/org/floens/chan/ui/adapter/PinnedAdapter.java
  4. 58
      Clover/app/src/main/res/layout/pin_item.xml
  5. 16
      Clover/app/src/main/res/layout/pin_item_header.xml

@ -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<PinListener> 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()) {

@ -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);

@ -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<Pin> 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);
}
}
}

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<?xml version="1.0" encoding="utf-8"?><!--
Clover - 4chan browser https://github.com/Floens/Clover/
Copyright (C) 2014 Floens
@ -16,42 +15,63 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal">
<TextView
android:id="@+id/drawer_item_text"
android:id="@+id/pin_text"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:paddingTop="8dp"
android:ellipsize="end"
android:gravity="center_vertical"
android:lines="1"
android:paddingBottom="8dp"
android:paddingLeft="16dp"
android:paddingRight="8dp"
android:textSize="19sp"
android:paddingRight="0dp"
android:paddingTop="8dp"
android:singleLine="true"
android:textColor="#fff"
android:gravity="center_vertical"
android:ellipsize="end"
android:lines="1"
android:singleLine="true">
</TextView>
android:textSize="19sp" />
<FrameLayout
android:id="@+id/pin_time_container"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:paddingLeft="4dp">
<TextView
android:id="@+id/pin_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:lines="1"
android:minWidth="36dp"
android:textColor="#fff"
android:textSize="16dp" />
</FrameLayout>
<FrameLayout
android:id="@+id/drawer_item_count_container"
android:background="@drawable/pin_icon_blue"
android:id="@+id/pin_count_container"
android:layout_width="48dp"
android:layout_height="48dp">
android:layout_height="48dp"
android:background="@drawable/pin_icon_blue">
<TextView
android:id="@+id/drawer_item_count"
android:id="@+id/pin_count"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="16dp"
android:textColor="#fff"/>
android:textColor="#fff"
android:textSize="16dp" />
<ProgressBar
android:id="@+id/pin_load"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<?xml version="1.0" encoding="utf-8"?><!--
Clover - 4chan browser https://github.com/Floens/Clover/
Copyright (C) 2014 Floens
@ -16,19 +15,18 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/drawer_item_header"
android:id="@+id/pin_header"
style="?android:attr/listSeparatorTextViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="24dp"
android:orientation="vertical"
android:paddingBottom="8dp"
android:paddingLeft="16dp"
android:paddingRight="56dp"
android:paddingBottom="8dp"
style="?android:attr/listSeparatorTextViewStyle"
android:orientation="vertical"/>
android:paddingTop="24dp" />
</LinearLayout>

Loading…
Cancel
Save