package com.zulip.android.widget;
import android.content.Context;
import android.content.Intent;
import android.text.format.DateUtils;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;
import com.j256.ormlite.stmt.QueryBuilder;
import com.zulip.android.R;
import com.zulip.android.ZulipApp;
import com.zulip.android.models.Message;
import com.zulip.android.models.MessageType;
import com.zulip.android.util.ZLog;
import java.sql.SQLException;
import java.util.List;
import static com.zulip.android.widget.WidgetPreferenceFragment.FROM_PREFERENCE;
public class ZulipRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private Context context;
private List<Message> messageList;
private String from;
public ZulipRemoteViewsFactory(Context applicationContext, Intent intent) {
context = applicationContext;
from = intent.getStringExtra(FROM_PREFERENCE);
}
@Override
public void onCreate() {
}
private String setupWhere() {
switch (from) {
//These values present in R.arrays.from_values
case "today":
return "timestamp BETWEEN DATE('now') AND DATE('now', '+1 day')";
case "yesterday":
return "DATE(timestamp) >= DATE('now', '-1 days')";
case "week":
return "DATE(timestamp) >= DATE('now', 'weekday 0', '-7 days')";
case "all":
default:
return "";
}
}
@Override
public void onDataSetChanged() {
Log.i("ZULIP_WIDGET", "onDataSetChanged() = Data reloaded");
QueryBuilder<Message, Object> queryBuilder = ZulipApp.get().getDao(Message.class).queryBuilder();
String filter;
filter = setupWhere();
if (!filter.equals("")) {
queryBuilder.where().raw(filter);
}
try {
messageList = queryBuilder.query();
} catch (SQLException e) {
ZLog.logException(e);
}
}
@Override
public void onDestroy() {
}
public int getCount() {
return messageList.size();
}
@Override
public RemoteViews getViewAt(int position) {
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget_row);
Message message = messageList.get(position);
if (message.getType() == MessageType.STREAM_MESSAGE) {
remoteView.setTextViewText(R.id.widget_header, message.getStream().getName() + " > " + message.getSubject());
} else {
remoteView.setTextViewText(R.id.widget_header, message.getDisplayRecipient(ZulipApp.get()));
}
remoteView.setTextViewText(R.id.widget_sendername, message.getSender().getName());
remoteView.setTextViewText(R.id.widget_message, message.getFormattedContent(ZulipApp.get()));
if (from.equals("today")) {
remoteView.setTextViewText(R.id.widget_timestamp, DateUtils.formatDateTime(context, message.getTimestamp().getTime(), DateUtils.FORMAT_SHOW_TIME));
} else {
remoteView.setTextViewText(R.id.widget_timestamp, DateUtils.formatDateTime(context, message
.getTimestamp().getTime(), DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_ABBREV_MONTH
| DateUtils.FORMAT_SHOW_TIME));
}
return remoteView;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return true;
}
}