Add a badge with the amount of new posts

filtering
Floens 10 years ago
parent 65d07c4043
commit 2b0428fd2a
  1. 23
      Clover/app/src/main/java/org/floens/chan/ui/controller/RootNavigationController.java
  2. 64
      Clover/app/src/main/java/org/floens/chan/ui/drawable/ArrowMenuDrawable.java
  3. 4
      Clover/app/src/main/java/org/floens/chan/ui/toolbar/Toolbar.java

@ -38,6 +38,8 @@ import org.floens.chan.ui.theme.ThemeHelper;
import org.floens.chan.ui.toolbar.Toolbar; import org.floens.chan.ui.toolbar.Toolbar;
import org.floens.chan.utils.AndroidUtils; import org.floens.chan.utils.AndroidUtils;
import java.util.List;
import de.greenrobot.event.EventBus; import de.greenrobot.event.EventBus;
import static org.floens.chan.utils.AndroidUtils.dp; import static org.floens.chan.utils.AndroidUtils.dp;
@ -79,6 +81,8 @@ public class RootNavigationController extends NavigationController implements Pi
toolbar.setCallback(this); toolbar.setCallback(this);
updateBadge();
AndroidUtils.waitForMeasure(drawer, new AndroidUtils.OnMeasuredCallback() { AndroidUtils.waitForMeasure(drawer, new AndroidUtils.OnMeasuredCallback() {
@Override @Override
public boolean onMeasured(View view) { public boolean onMeasured(View view) {
@ -181,20 +185,39 @@ public class RootNavigationController extends NavigationController implements Pi
public void onEvent(WatchManager.PinAddedMessage message) { public void onEvent(WatchManager.PinAddedMessage message) {
pinAdapter.onPinAdded(message.pin); pinAdapter.onPinAdded(message.pin);
drawerLayout.openDrawer(drawer); drawerLayout.openDrawer(drawer);
updateBadge();
} }
public void onEvent(WatchManager.PinRemovedMessage message) { public void onEvent(WatchManager.PinRemovedMessage message) {
pinAdapter.onPinRemoved(message.pin); pinAdapter.onPinRemoved(message.pin);
updateBadge();
} }
public void onEvent(WatchManager.PinChangedMessage message) { public void onEvent(WatchManager.PinChangedMessage message) {
pinAdapter.onPinChanged(recyclerView, message.pin); pinAdapter.onPinChanged(recyclerView, message.pin);
updateBadge();
} }
private void setDrawerEnabled(boolean enabled) { private void setDrawerEnabled(boolean enabled) {
drawerLayout.setDrawerLockMode(enabled ? DrawerLayout.LOCK_MODE_UNLOCKED : DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.LEFT); drawerLayout.setDrawerLockMode(enabled ? DrawerLayout.LOCK_MODE_UNLOCKED : DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.LEFT);
} }
private void updateBadge() {
List<Pin> list = Chan.getWatchManager().getWatchingPins();
int count = 0;
boolean color = false;
if (list.size() > 0) {
for (Pin p : list) {
count += p.getNewPostCount();
if (p.getNewQuoteCount() > 0) {
color = true;
}
}
}
toolbar.getArrowMenuDrawable().setBadge(count, color);
}
private boolean setDrawerWidth() { private boolean setDrawerWidth() {
int width = Math.min(view.getWidth() - dp(56), dp(56) * 6); int width = Math.min(view.getWidth() - dp(56), dp(56) * 6);
if (drawer.getWidth() != width) { if (drawer.getWidth() != width) {

@ -24,6 +24,7 @@ import android.graphics.Path;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import static org.floens.chan.utils.AndroidUtils.dp; import static org.floens.chan.utils.AndroidUtils.dp;
@ -51,6 +52,11 @@ public class ArrowMenuDrawable extends Drawable {
// The interpolated version of the original progress // The interpolated version of the original progress
private float mProgress; private float mProgress;
private String badgeText;
private boolean badgeRed = false;
private Paint badgePaint = new Paint();
private Rect badgeTextBounds = new Rect();
public ArrowMenuDrawable() { public ArrowMenuDrawable() {
mPaint.setColor(0xffffffff); mPaint.setColor(0xffffffff);
mPaint.setAntiAlias(true); mPaint.setAntiAlias(true);
@ -67,10 +73,8 @@ public class ArrowMenuDrawable extends Drawable {
mPaint.setStrokeWidth(mBarThickness); mPaint.setStrokeWidth(mBarThickness);
setProgress(0f); setProgress(0f);
}
boolean isLayoutRtl() { badgePaint.setAntiAlias(true);
return false;
} }
@Override @Override
@ -120,6 +124,37 @@ public class ArrowMenuDrawable extends Drawable {
canvas.drawPath(mPath, mPaint); canvas.drawPath(mPath, mPaint);
canvas.restore(); canvas.restore();
// Draw a badge over the arrow/menu
if (badgeText != null) {
canvas.save();
float badgeSize = mSize * 0.7f;
float badgeX = mSize - badgeSize / 2f;
float badgeY = badgeSize / 2f;
if (badgeRed) {
badgePaint.setColor(0xddf44336);
} else {
badgePaint.setColor(0x89000000);
}
canvas.drawCircle(badgeX, badgeY, badgeSize / 2f, badgePaint);
float textSize;
if (badgeText.length() == 1) {
textSize = badgeSize * 0.7f;
} else if (badgeText.length() == 2) {
textSize = badgeSize * 0.6f;
} else {
textSize = badgeSize * 0.5f;
}
badgePaint.setColor(0xffffffff);
badgePaint.setTextSize(textSize);
badgePaint.getTextBounds(badgeText, 0, badgeText.length(), badgeTextBounds);
canvas.drawText(badgeText, badgeX - badgeTextBounds.right / 2f, badgeY - badgeTextBounds.top / 2f, badgePaint);
canvas.restore();
}
} }
@Override @Override
@ -152,13 +187,24 @@ public class ArrowMenuDrawable extends Drawable {
} }
public void setProgress(float progress) { public void setProgress(float progress) {
if (progress == 1f) { if (progress != mProgress) {
mVerticalMirror = true; if (progress == 1f) {
} else if (progress == 0f) { mVerticalMirror = true;
mVerticalMirror = false; } else if (progress == 0f) {
mVerticalMirror = false;
}
mProgress = progress;
invalidateSelf();
}
}
public void setBadge(int count, boolean red) {
String text = count == 0 ? null : (count > 999 ? "1k+" : String.valueOf(count));
if (badgeRed != red || !TextUtils.equals(text, badgeText)) {
badgeText = text;
badgeRed = red;
invalidateSelf();
} }
mProgress = progress;
invalidateSelf();
} }
/** /**

@ -114,6 +114,10 @@ public class Toolbar extends LinearLayout implements View.OnClickListener, LoadV
arrowMenuDrawable.setProgress(progress); arrowMenuDrawable.setProgress(progress);
} }
public ArrowMenuDrawable getArrowMenuDrawable() {
return arrowMenuDrawable;
}
@Override @Override
public void onLoadViewRemoved(View view) { public void onLoadViewRemoved(View view) {
// TODO: this is kinda a hack // TODO: this is kinda a hack

Loading…
Cancel
Save