package net.miz_hi.smileessence.notification;
import android.app.Activity;
import android.widget.Toast;
import de.keyboardsurfer.android.widget.crouton.Configuration;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
import net.miz_hi.smileessence.model.status.event.EventModel;
import net.miz_hi.smileessence.model.status.event.IAttackEvent;
import net.miz_hi.smileessence.model.status.event.StatusEvent;
import net.miz_hi.smileessence.util.CountUpInteger;
import net.miz_hi.smileessence.util.UiHandler;
import net.miz_hi.smileessence.view.activity.MainActivity;
public class Notificator
{
private static long lastUserId = -1;
private static long lastStatusId = -1;
private static CountUpInteger counterSourceUser = new CountUpInteger(5);
private static CountUpInteger counterTargetStatus = new CountUpInteger(5);
private static boolean canNotify = false;
public static void start()
{
canNotify = true;
}
public static void stop()
{
canNotify = false;
Crouton.cancelAllCroutons();
}
public static void toast(final String text)
{
final Activity activity = MainActivity.getInstance();
if (activity == null || activity.isFinishing())
{
return;
}
new UiHandler()
{
@Override
public void run()
{
Toast.makeText(activity, text, Toast.LENGTH_SHORT).show();
}
}.post();
}
public static void info(String text)
{
crouton(new Notice(text));
}
public static void alert(String text)
{
crouton(new Notice(text).setStyle(Style.ALERT));
}
private static Style getStyle(Style type)
{
Configuration.Builder config = new Configuration.Builder();
config.setDuration(1000);
Style.Builder builder = new Style.Builder();
builder.setHeight(64).setConfiguration(config.build());
if (type == Style.INFO)
{
builder.setBackgroundColorValue(Style.holoBlueLight);
}
else if (type == Style.ALERT)
{
builder.setBackgroundColorValue(Style.holoRedLight);
}
return builder.build();
}
public static void crouton(final Notice event)
{
final Activity activity = MainActivity.getInstance();
if (activity == null || activity.isFinishing() || !canNotify)
{
return;
}
new UiHandler()
{
@Override
public void run()
{
Crouton.makeText(activity, event.getText(), getStyle(event.getStyle())).show();
}
}.post();
}
public static Notice buildEvent(final EventModel model)
{
if (model instanceof StatusEvent)
{
StatusEvent se = (StatusEvent) model;
if (se instanceof IAttackEvent)
{
if (lastUserId != se.source.userId)
{
counterSourceUser.reset();
lastUserId = se.source.userId;
}
else
{
if (counterSourceUser.isOver())
{
return Notice.getNullEvent();
}
if (counterSourceUser.countUp())
{
return new Notice(se.source.screenName + "から攻撃を受けています");
}
}
if (lastStatusId != se.tweet.statusId)
{
counterTargetStatus.reset();
lastStatusId = se.tweet.statusId;
}
else
{
if (counterTargetStatus.isOver())
{
return Notice.getNullEvent();
}
if (counterTargetStatus.countUp())
{
return new Notice("あなたのツイートが攻撃を受けています");
}
}
}
}
return new Notice(model.getTextTop());
}
}