diff --git a/Chan/AndroidManifest.xml b/Chan/AndroidManifest.xml
index 48d20742..c8ad01e7 100644
--- a/Chan/AndroidManifest.xml
+++ b/Chan/AndroidManifest.xml
@@ -2,8 +2,8 @@
+ android:versionCode="13"
+ android:versionName="v0.11" >
+
@@ -67,8 +68,8 @@
android:windowSoftInputMode="adjustResize" >
-
\ No newline at end of file
+
diff --git a/Chan/res/drawable/pin_icon_gray.xml b/Chan/res/drawable/pin_icon_gray.xml
new file mode 100644
index 00000000..6ffc7d91
--- /dev/null
+++ b/Chan/res/drawable/pin_icon_gray.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Chan/res/values/strings.xml b/Chan/res/values/strings.xml
index f01974a4..758742ee 100644
--- a/Chan/res/values/strings.xml
+++ b/Chan/res/values/strings.xml
@@ -107,5 +107,29 @@
To view the thread watcher options, turn the thread watcher on.
+ Time between reloads in background
+
+ - 1 minute
+ - 2 minutes
+ - 3 minutes
+ - 5 minutes
+ - 10 minutes
+ - 30 minutes
+ - 60 minutes
+
+
+ - 60
+ - 120
+ - 180
+ - 300
+ - 600
+ - 1800
+ - 3600
+
+
+
+
+
+
diff --git a/Chan/res/xml/preference_watch.xml b/Chan/res/xml/preference_watch.xml
new file mode 100644
index 00000000..a41b73f9
--- /dev/null
+++ b/Chan/res/xml/preference_watch.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/Chan/src/org/floens/chan/ChanApplication.java b/Chan/src/org/floens/chan/ChanApplication.java
index 86dbf6d1..e94d9510 100644
--- a/Chan/src/org/floens/chan/ChanApplication.java
+++ b/Chan/src/org/floens/chan/ChanApplication.java
@@ -2,9 +2,10 @@ package org.floens.chan;
import org.floens.chan.core.manager.BoardManager;
import org.floens.chan.core.manager.PinnedManager;
+import org.floens.chan.core.manager.PinnedManager.PinListener;
import org.floens.chan.core.manager.ReplyManager;
import org.floens.chan.database.DatabaseManager;
-import org.floens.chan.service.PinnedService;
+import org.floens.chan.service.WatchService;
import org.floens.chan.utils.IconCache;
import android.app.Application;
@@ -17,7 +18,7 @@ import com.android.volley.extra.BitmapLruImageCache;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
-public class ChanApplication extends Application {
+public class ChanApplication extends Application implements PinListener {
public static final boolean DEVELOPER_MODE = true;
private static ChanApplication instance;
@@ -88,9 +89,15 @@ public class ChanApplication extends Application {
databaseManager = new DatabaseManager(this);
boardManager = new BoardManager(this);
pinnedManager = new PinnedManager(this);
+ pinnedManager.addPinListener(this);
replyManager = new ReplyManager(this);
- PinnedService.updateRunningState(this);
+ WatchService.updateRunningState(this);
+ }
+
+ @Override
+ public void onPinsChanged() {
+ WatchService.updateRunningState(this);
}
}
diff --git a/Chan/src/org/floens/chan/core/ChanPreferences.java b/Chan/src/org/floens/chan/core/ChanPreferences.java
index ebb0b426..77111290 100644
--- a/Chan/src/org/floens/chan/core/ChanPreferences.java
+++ b/Chan/src/org/floens/chan/core/ChanPreferences.java
@@ -1,7 +1,7 @@
package org.floens.chan.core;
import org.floens.chan.ChanApplication;
-import org.floens.chan.service.PinnedService;
+import org.floens.chan.service.WatchService;
public class ChanPreferences {
public static boolean getOpenLinkConfirmation() {
@@ -41,7 +41,13 @@ public class ChanPreferences {
public static void setWatchEnabled(boolean enabled) {
if (getWatchEnabled() != enabled) {
ChanApplication.getPreferences().edit().putBoolean("preference_watch_enabled", enabled).commit();
- PinnedService.updateRunningState(ChanApplication.getInstance());
+ WatchService.updateRunningState(ChanApplication.getInstance());
+ ChanApplication.getPinnedManager().onPinsChanged();
}
}
+
+ public static long getWatchBackgroundTimeout() {
+ String number = ChanApplication.getPreferences().getString("preference_watch_background_timeout", "0");
+ return Integer.parseInt(number) * 1000L;
+ }
}
diff --git a/Chan/src/org/floens/chan/core/loader/Loader.java b/Chan/src/org/floens/chan/core/loader/Loader.java
index 903946a5..32541663 100644
--- a/Chan/src/org/floens/chan/core/loader/Loader.java
+++ b/Chan/src/org/floens/chan/core/loader/Loader.java
@@ -75,7 +75,7 @@ public class Loader {
*/
public void setAutoLoadMore(boolean autoReload) {
if (this.autoReload != autoReload) {
- Logger.test("Setting autoreload to " + autoReload);
+ Logger.d(TAG, "Setting autoreload to " + autoReload);
this.autoReload = autoReload;
if (!autoReload) {
@@ -89,7 +89,7 @@ public class Loader {
* If auto load more is disabled, this needs to be called manually.
* Otherwise this is called automatically when the timer hits 0.
*/
- public void tryLoadMoreIfTime() {
+ public void loadMoreIfTime() {
if (getTimeUntilLoadMore() < 0L) {
requestMoreData();
}
@@ -112,6 +112,7 @@ public class Loader {
}
currentTimeout = 0;
+ cachedPosts.clear();
request = getData();
}
@@ -176,47 +177,40 @@ public class Loader {
}
private void setTimer(int postCount) {
- if (pendingRunnable != null) {
- clearTimer();
- }
-
- if (pendingRunnable == null) {
- if (postCount > lastPostCount) {
- currentTimeout = 0;
- } else {
- currentTimeout++;
- if (currentTimeout >= watchTimeouts.length) {
- currentTimeout = watchTimeouts.length - 1;
- }
- }
+ clearTimer();
- if (!autoReload && currentTimeout < 4) {
- currentTimeout = 4; // At least 60 seconds in the background
+ if (postCount > lastPostCount) {
+ currentTimeout = 0;
+ } else {
+ currentTimeout++;
+ if (currentTimeout >= watchTimeouts.length) {
+ currentTimeout = watchTimeouts.length - 1;
}
+ }
- lastPostCount = postCount;
+ if (!autoReload && currentTimeout < 4) {
+ currentTimeout = 4; // At least 60 seconds in the background
+ }
- Logger.test("Current timeout: " + watchTimeouts[currentTimeout]);
+ lastPostCount = postCount;
- if (autoReload) {
- pendingRunnable = new Runnable() {
- @Override
- public void run() {
- pendingRunnable = null;
- tryLoadMoreIfTime();
- };
+ if (autoReload) {
+ pendingRunnable = new Runnable() {
+ @Override
+ public void run() {
+ pendingRunnable = null;
+ loadMoreIfTime();
};
+ };
- Logger.test("Scheduled reload");
- handler.postDelayed(pendingRunnable, watchTimeouts[currentTimeout] * 1000L);
-
- }
+ Logger.d(TAG, "Scheduled reload in " + watchTimeouts[currentTimeout] * 1000L);
+ handler.postDelayed(pendingRunnable, watchTimeouts[currentTimeout] * 1000L);
}
}
private void clearTimer() {
if (pendingRunnable != null) {
- Logger.test("Removed reload");
+ Logger.d(TAG, "Removed pending runnable");
handler.removeCallbacks(pendingRunnable);
pendingRunnable = null;
}
diff --git a/Chan/src/org/floens/chan/core/manager/PinnedManager.java b/Chan/src/org/floens/chan/core/manager/PinnedManager.java
index 22b8b04e..c0bd01f8 100644
--- a/Chan/src/org/floens/chan/core/manager/PinnedManager.java
+++ b/Chan/src/org/floens/chan/core/manager/PinnedManager.java
@@ -26,9 +26,12 @@ public class PinnedManager {
}
/**
- * Look for a pin that has an loadable that is equal to the supplied loadable.
+ * Look for a pin that has an loadable that is equal to the supplied
+ * loadable.
+ *
* @param other
- * @return The pin whose loadable is equal to the supplied loadable, or null if no pin was found.
+ * @return The pin whose loadable is equal to the supplied loadable, or null
+ * if no pin was found.
*/
public Pin findPinByLoadable(Loadable other) {
for (Pin pin : pins) {
@@ -44,8 +47,20 @@ public class PinnedManager {
return pins;
}
+ public List getWatchingPins() {
+ List l = new ArrayList();
+
+ for (Pin p : pins) {
+ if (p.watching)
+ l.add(p);
+ }
+
+ return l;
+ }
+
/**
* Add a pin
+ *
* @param pin
* @return true if it was added, false if it wasn't (duplicated)
*/
@@ -67,18 +82,20 @@ public class PinnedManager {
/**
* Remove a pin
+ *
* @param pin
*/
public void remove(Pin pin) {
pins.remove(pin);
ChanApplication.getDatabaseManager().removePin(pin);
- pin.destroy();
+ pin.destroyWatcher();
onPinsChanged();
}
/**
* Update the pin in the database
+ *
* @param pin
*/
public void update(Pin pin) {
@@ -88,9 +105,9 @@ public class PinnedManager {
}
/**
- * Updates all the pins to the database.
- * This will run in a new thread because it can be an expensive operation.
- * (this will be an huge headache later on when we get concurrent problems)
+ * Updates all the pins to the database. This will run in a new thread
+ * because it can be an expensive operation. (this will be an huge headache
+ * later on when we get concurrent problems)
*/
public void updateAll() {
new Thread(new Runnable() {
@@ -117,8 +134,3 @@ public class PinnedManager {
public void onPinsChanged();
}
}
-
-
-
-
-
diff --git a/Chan/src/org/floens/chan/core/model/Pin.java b/Chan/src/org/floens/chan/core/model/Pin.java
index 48fb9b27..985d4853 100644
--- a/Chan/src/org/floens/chan/core/model/Pin.java
+++ b/Chan/src/org/floens/chan/core/model/Pin.java
@@ -25,6 +25,9 @@ public class Pin {
// PinnedService stuff
public PinWatcher pinWatcher;
+ @DatabaseField
+ public boolean watching = true;
+
@DatabaseField
public int watchLastCount;
@@ -51,9 +54,18 @@ public class Pin {
watchLastCount = watchNewCount;
}
- public void destroy() {
+ public void destroyWatcher() {
if (pinWatcher != null) {
pinWatcher.destroy();
+ pinWatcher = null;
+ }
+ }
+
+ public boolean isError() {
+ if (pinWatcher != null) {
+ return pinWatcher.isError();
+ } else {
+ return false;
}
}
}
diff --git a/Chan/src/org/floens/chan/core/watch/PinWatcher.java b/Chan/src/org/floens/chan/core/watch/PinWatcher.java
index 87864cca..00eca50c 100644
--- a/Chan/src/org/floens/chan/core/watch/PinWatcher.java
+++ b/Chan/src/org/floens/chan/core/watch/PinWatcher.java
@@ -6,7 +6,7 @@ import org.floens.chan.core.loader.Loader;
import org.floens.chan.core.loader.LoaderPool;
import org.floens.chan.core.model.Pin;
import org.floens.chan.core.model.Post;
-import org.floens.chan.service.PinnedService;
+import org.floens.chan.service.WatchService;
import org.floens.chan.utils.Logger;
import com.android.volley.VolleyError;
@@ -15,9 +15,7 @@ public class PinWatcher implements Loader.LoaderListener {
private static final String TAG = "PinWatcher";
private final Pin pin;
- private final Loader loader;
-
- private long startTime;
+ private Loader loader;
private boolean isError = false;
public PinWatcher(Pin pin) {
@@ -27,14 +25,15 @@ public class PinWatcher implements Loader.LoaderListener {
}
public void destroy() {
- LoaderPool.getInstance().release(loader, this);
+ if (loader != null) {
+ LoaderPool.getInstance().release(loader, this);
+ loader = null;
+ }
}
public void update() {
-// Logger.test("PinWatcher update");
-
if (!isError) {
- loader.tryLoadMoreIfTime();
+ loader.loadMoreIfTime();
}
}
@@ -46,14 +45,24 @@ public class PinWatcher implements Loader.LoaderListener {
}
}
+ public boolean isError() {
+ return isError;
+ }
+
@Override
public void onError(VolleyError error) {
- Logger.test("PinWatcher onError: ", error);
+ Logger.e(TAG, "PinWatcher onError: ", error);
isError = true;
+ pin.watchLastCount = 0;
+ pin.watchNewCount = 0;
+
+ WatchService.callOnPinsChanged();
}
@Override
public void onData(List result, boolean append) {
+ isError = false;
+
int count = result.size();
Logger.test("PinWatcher onData, Post size: " + count);
@@ -64,6 +73,6 @@ public class PinWatcher implements Loader.LoaderListener {
pin.watchNewCount = count;
- PinnedService.callOnPinsChanged();
+ WatchService.callOnPinsChanged();
}
}
diff --git a/Chan/src/org/floens/chan/core/watch/WatchNotifier.java b/Chan/src/org/floens/chan/core/watch/WatchNotifier.java
index fce41eae..a6bb5cb4 100644
--- a/Chan/src/org/floens/chan/core/watch/WatchNotifier.java
+++ b/Chan/src/org/floens/chan/core/watch/WatchNotifier.java
@@ -1,11 +1,12 @@
package org.floens.chan.core.watch;
+import java.util.ArrayList;
import java.util.List;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.model.Pin;
-import org.floens.chan.service.PinnedService;
+import org.floens.chan.service.WatchService;
import org.floens.chan.ui.activity.BoardActivity;
import android.app.Notification;
@@ -17,57 +18,81 @@ import android.content.Intent;
public class WatchNotifier {
private final int NOTIFICATION_ID = 1;
- private final PinnedService pinnedService;
+ private final WatchService pinnedService;
private final NotificationManager nm;
- public WatchNotifier(PinnedService pinnedService) {
+ private int lastNewPosts;
+
+ public WatchNotifier(WatchService pinnedService) {
this.pinnedService = pinnedService;
nm = (NotificationManager) pinnedService.getSystemService(Context.NOTIFICATION_SERVICE);
}
public void update() {
- List pins = ChanApplication.getPinnedManager().getPins();
+ if (!WatchService.getActivityInForeground()) {
+ prepareNotification();
+ }
+ }
+
+ public void onForegroundChanged() {
+ if (WatchService.getActivityInForeground()) {
+ nm.cancel(NOTIFICATION_ID);
+ } else {
+
+ }
+ }
+
+ private void prepareNotification() {
+ List pins = ChanApplication.getPinnedManager().getWatchingPins();
- int count = 0;
- int pinCount = 0;
+ int newPosts = 0;
+ List pinsWithNewPosts = new ArrayList();
for (Pin pin : pins) {
- count += pin.getNewPostCount();
- pinCount++;
+ if (pin.getNewPostCount() > 0) {
+ newPosts += pin.getNewPostCount();
+ pinsWithNewPosts.add(pin);
+ }
}
- if (!PinnedService.getActivityInForeground()) {
- showNotification(count + " new posts in " + pinCount + " threads\n" + System.currentTimeMillis());
+ boolean show = false;
+
+ if (lastNewPosts != newPosts && newPosts > 0) {
+ show = true;
}
- }
+ lastNewPosts = newPosts;
- public void onForegroundChanged() {
- if (PinnedService.getActivityInForeground()) {
- nm.cancel(NOTIFICATION_ID);
- } else {
+ if (show) {
+ String descriptor;
+ if (pinsWithNewPosts.size() == 1) {
+ descriptor = pinsWithNewPosts.get(0).loadable.title;
+ } else {
+ descriptor = pinsWithNewPosts.size() + " threads";
+ }
+
+ String content = newPosts + " new posts in " + descriptor;
+ String title = "New posts";
+ showNotification(content, title, content, Integer.toString(newPosts));
}
}
@SuppressWarnings("deprecation")
- private void showNotification(String text) {
+ private void showNotification(String tickerText, String title, String content, String contentInfo) {
Intent intent = new Intent(pinnedService, BoardActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
+ | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pending = PendingIntent.getActivity(pinnedService, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification.Builder builder = new Notification.Builder(pinnedService);
builder.setContentIntent(pending);
- builder.setTicker(text);
- builder.setContentTitle(text);
- builder.setContentText(text);
+ builder.setTicker(tickerText);
+ builder.setContentTitle(title);
+ builder.setContentText(content);
+ builder.setContentInfo(contentInfo);
builder.setSmallIcon(R.drawable.ic_stat_notify);
nm.notify(NOTIFICATION_ID, builder.getNotification());
}
}
-
-
-
-
-
diff --git a/Chan/src/org/floens/chan/database/DatabaseHelper.java b/Chan/src/org/floens/chan/database/DatabaseHelper.java
index f87db8d1..5d7ba1f3 100644
--- a/Chan/src/org/floens/chan/database/DatabaseHelper.java
+++ b/Chan/src/org/floens/chan/database/DatabaseHelper.java
@@ -17,21 +17,21 @@ import com.j256.ormlite.table.TableUtils;
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String TAG = "DatabaseHelper";
-
+
private static final String DATABASE_NAME = "ChanDB";
- private static final int DATABASE_VERSION = 7;
-
+ private static final int DATABASE_VERSION = 8;
+
public Dao pinDao;
public Dao loadableDao;
public Dao savedDao;
-
+
private final Context context;
-
+
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
-
+
this.context = context;
-
+
try {
pinDao = getDao(Pin.class);
loadableDao = getDao(Loadable.class);
@@ -58,25 +58,25 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
switch(oldVersion) {
// Change tables if we make adjustments
}
-
+
// Drop the tables and recreate them for now
reset(database, connectionSource);
}
-
+
public void reset() {
Logger.i(TAG, "Resetting database!");
-
+
if (context.deleteDatabase(DATABASE_NAME)) {
Logger.i(TAG, "Deleted database");
}
}
-
+
private void reset(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
TableUtils.dropTable(connectionSource, Pin.class, true);
TableUtils.dropTable(connectionSource, Loadable.class, true);
TableUtils.dropTable(connectionSource, SavedReply.class, true);
-
+
onCreate(database, connectionSource);
} catch (SQLException e) {
e.printStackTrace();
diff --git a/Chan/src/org/floens/chan/service/PinnedService.java b/Chan/src/org/floens/chan/service/WatchService.java
similarity index 75%
rename from Chan/src/org/floens/chan/service/PinnedService.java
rename to Chan/src/org/floens/chan/service/WatchService.java
index 2a7f33a6..cc807790 100644
--- a/Chan/src/org/floens/chan/service/PinnedService.java
+++ b/Chan/src/org/floens/chan/service/WatchService.java
@@ -16,11 +16,10 @@ import android.os.IBinder;
import android.os.Looper;
import android.widget.Toast;
-public class PinnedService extends Service {
+public class WatchService extends Service {
private static final long FOREGROUND_INTERVAL = 10000L;
- private static final long BACKGROUND_INTERVAL = 60000L;
- private static PinnedService instance;
+ private static WatchService instance;
private static boolean activityInForeground = false;
private Thread loadThread;
@@ -47,8 +46,14 @@ public class PinnedService extends Service {
public static void updateRunningState(Context context) {
if (ChanPreferences.getWatchEnabled()) {
- if (!getRunning()) {
- enable(context);
+ if (ChanApplication.getPinnedManager().getWatchingPins().size() == 0) {
+ if (getRunning()) {
+ disable(context);
+ }
+ } else {
+ if (!getRunning()) {
+ enable(context);
+ }
}
} else {
if (getRunning()) {
@@ -59,13 +64,18 @@ public class PinnedService extends Service {
public static void enable(Context context) {
if (!getRunning()) {
- context.startService(new Intent(context, PinnedService.class));
+ context.startService(new Intent(context, WatchService.class));
}
}
public static void disable(Context context) {
if (getRunning()) {
- context.stopService(new Intent(context, PinnedService.class));
+ context.stopService(new Intent(context, WatchService.class));
+
+ List pins = ChanApplication.getPinnedManager().getWatchingPins();
+ for (Pin pin : pins) {
+ pin.destroyWatcher();
+ }
}
}
@@ -86,10 +96,10 @@ public class PinnedService extends Service {
public void onCreate() {
super.onCreate();
- watchNotifier = new WatchNotifier(this);
-
instance = this;
+ watchNotifier = new WatchNotifier(this);
+
startThread();
}
@@ -102,7 +112,7 @@ public class PinnedService extends Service {
running = false;
if (loadThread != null) {
loadThread.interrupt();
- Toast.makeText(getApplicationContext(), "Service thread interrupted", Toast.LENGTH_SHORT).show();
+ Toast.makeText(getApplicationContext(), "Pinned thread interrupted", Toast.LENGTH_SHORT).show();
}
}
@@ -121,7 +131,7 @@ public class PinnedService extends Service {
if (!running)
return;
- long timeout = activityInForeground ? FOREGROUND_INTERVAL : BACKGROUND_INTERVAL;
+ long timeout = activityInForeground ? FOREGROUND_INTERVAL : getBackgroundTimeout();
try {
Thread.sleep(timeout);
@@ -135,7 +145,7 @@ public class PinnedService extends Service {
});
loadThread.start();
- Toast.makeText(getApplicationContext(), "Service thread started", Toast.LENGTH_SHORT).show();
+ Toast.makeText(getApplicationContext(), "Pinned thread started", Toast.LENGTH_SHORT).show();
}
}
@@ -150,8 +160,13 @@ public class PinnedService extends Service {
watchNotifier.onForegroundChanged();
}
+ private long getBackgroundTimeout() {
+ Logger.test("::: " + ChanPreferences.getWatchBackgroundTimeout());
+ return ChanPreferences.getWatchBackgroundTimeout();
+ }
+
private void update() {
- List pins = ChanApplication.getPinnedManager().getPins();
+ List pins = ChanApplication.getPinnedManager().getWatchingPins();
for (Pin pin : pins) {
pin.updateWatch();
}
diff --git a/Chan/src/org/floens/chan/ui/activity/BaseActivity.java b/Chan/src/org/floens/chan/ui/activity/BaseActivity.java
index 698e9e8e..0383551c 100644
--- a/Chan/src/org/floens/chan/ui/activity/BaseActivity.java
+++ b/Chan/src/org/floens/chan/ui/activity/BaseActivity.java
@@ -83,6 +83,13 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
ChanApplication.getPinnedManager().removePinListener(this);
}
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+
+ pinDrawer.openDrawer(pinDrawerView);
+ }
+
private void initPane() {
threadPane.setPanelSlideListener(this);
threadPane.setParallaxDistance(200);
diff --git a/Chan/src/org/floens/chan/ui/activity/BoardActivity.java b/Chan/src/org/floens/chan/ui/activity/BoardActivity.java
index cb240953..fdf7041d 100644
--- a/Chan/src/org/floens/chan/ui/activity/BoardActivity.java
+++ b/Chan/src/org/floens/chan/ui/activity/BoardActivity.java
@@ -9,7 +9,7 @@ import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Pin;
import org.floens.chan.core.model.Post;
-import org.floens.chan.service.PinnedService;
+import org.floens.chan.service.WatchService;
import org.floens.chan.ui.fragment.ThreadFragment;
import android.app.ActionBar;
@@ -92,14 +92,14 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
protected void onStart() {
super.onStart();
- PinnedService.onActivityStart();
+ WatchService.onActivityStart();
}
@Override
protected void onStop() {
super.onStop();
- PinnedService.onActivityStop();
+ WatchService.onActivityStop();
}
@Override
diff --git a/Chan/src/org/floens/chan/ui/activity/WatchSettingsActivity.java b/Chan/src/org/floens/chan/ui/activity/WatchSettingsActivity.java
index e267e779..4c353e30 100644
--- a/Chan/src/org/floens/chan/ui/activity/WatchSettingsActivity.java
+++ b/Chan/src/org/floens/chan/ui/activity/WatchSettingsActivity.java
@@ -93,6 +93,7 @@ public class WatchSettingsActivity extends Activity implements OnCheckedChangeLi
TextView text = new TextView(inflater.getContext());
text.setTextSize(20);
text.setText(getArguments().getInt("text_resource"));
+ text.setGravity(Gravity.CENTER);
container.setGravity(Gravity.CENTER);
container.addView(text);
@@ -102,7 +103,24 @@ public class WatchSettingsActivity extends Activity implements OnCheckedChangeLi
}
public static class WatchSettingsFragment extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.preference_watch);
+ }
}
}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Chan/src/org/floens/chan/ui/adapter/PinnedAdapter.java b/Chan/src/org/floens/chan/ui/adapter/PinnedAdapter.java
index 275d9f96..a1579f00 100644
--- a/Chan/src/org/floens/chan/ui/adapter/PinnedAdapter.java
+++ b/Chan/src/org/floens/chan/ui/adapter/PinnedAdapter.java
@@ -5,6 +5,7 @@ import java.util.HashMap;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
+import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.model.Pin;
import android.content.Context;
@@ -32,7 +33,7 @@ public class PinnedAdapter extends ArrayAdapter {
LinearLayout view = null;
- Pin item = getItem(position);
+ final Pin item = getItem(position);
if (item.type == Pin.Type.HEADER) {
view = (LinearLayout) inflater.inflate(R.layout.pin_item_header, null);
@@ -43,20 +44,41 @@ public class PinnedAdapter extends ArrayAdapter {
((TextView) view.findViewById(R.id.drawer_item_text)).setText(item.loadable.title);
- int count = item.getNewPostCount();
- String total = Integer.toString(count);
- if (count > 999) {
- total = "1k+";
- }
-
- ((TextView) view.findViewById(R.id.drawer_item_count)).setText(total);
-
FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.drawer_item_count_container);
-// if (Math.random() < 0.5d) {
- frameLayout.setBackgroundResource(R.drawable.pin_icon_blue);
-// } else {
-// frameLayout.setBackgroundResource(R.drawable.pin_icon_red);
-// }
+ if (ChanPreferences.getWatchEnabled()) {
+ frameLayout.setVisibility(View.VISIBLE);
+
+ TextView itemCount = (TextView) view.findViewById(R.id.drawer_item_count);
+
+ if (item.isError()) {
+ itemCount.setText("404");
+ } else {
+ int count = item.getNewPostCount();
+ String total = Integer.toString(count);
+ if (count > 999) {
+ total = "1k+";
+ }
+ itemCount.setText(total);
+ }
+
+ itemCount.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ item.watching = !item.watching;
+ ChanApplication.getPinnedManager().onPinsChanged();
+ }
+ });
+
+ if (item.isError()) {
+ frameLayout.setBackgroundResource(R.drawable.pin_icon_red);
+ } else if (item.watching) {
+ frameLayout.setBackgroundResource(R.drawable.pin_icon_blue);
+ } else {
+ frameLayout.setBackgroundResource(R.drawable.pin_icon_gray);
+ }
+ } else {
+ frameLayout.setVisibility(View.GONE);
+ }
}
return view;
@@ -95,7 +117,8 @@ public class PinnedAdapter extends ArrayAdapter {
@Override
public long getItemId(int position) {
- if (position < 0 || position >= getCount()) return -1;
+ if (position < 0 || position >= getCount())
+ return -1;
Pin item = getItem(position);
if (item == null) {
@@ -110,8 +133,3 @@ public class PinnedAdapter extends ArrayAdapter {
}
}
}
-
-
-
-
-