package com.byagowi.persiancalendar.util;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.RemoteViews;
import com.byagowi.persiancalendar.Constants;
import com.byagowi.persiancalendar.R;
import com.byagowi.persiancalendar.Widget1x1;
import com.byagowi.persiancalendar.Widget2x2;
import com.byagowi.persiancalendar.Widget4x1;
import com.byagowi.persiancalendar.service.ApplicationService;
import com.byagowi.persiancalendar.view.activity.MainActivity;
import com.github.praytimes.Clock;
import com.google.android.apps.dashclock.api.ExtensionData;
import java.util.Calendar;
import java.util.Date;
import calendar.CivilDate;
import calendar.DateConverter;
import calendar.PersianDate;
public class UpdateUtils {
private static final int NOTIFICATION_ID = 1001;
private static UpdateUtils myInstance;
private Context context;
private PersianDate pastDate;
private ExtensionData mExtensionData;
private UpdateUtils(Context context) {
this.context = context;
}
public static UpdateUtils getInstance(Context context) {
if (myInstance == null) {
myInstance = new UpdateUtils(context);
}
return myInstance;
}
boolean firstTime = true;
public void update(boolean updateDate) {
Log.d("UpdateUtils", "update");
Utils utils = Utils.getInstance(context);
utils.changeAppLanguage(context);
if (firstTime) {
utils.loadLanguageResource();
firstTime = false;
}
Calendar calendar = utils.makeCalendarFromDate(new Date());
CivilDate civil = new CivilDate(calendar);
PersianDate persian = utils.getToday();
Intent intent = new Intent(context, MainActivity.class);
PendingIntent launchAppPendingIntent = PendingIntent.getActivity(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
//
// Widgets
//
//
AppWidgetManager manager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews1 = new RemoteViews(context.getPackageName(), R.layout.widget1x1);
RemoteViews remoteViews4 = new RemoteViews(context.getPackageName(), R.layout.widget4x1);
RemoteViews remoteViews2 = new RemoteViews(context.getPackageName(), R.layout.widget2x2);
String colorInt = utils.getSelectedWidgetTextColor();
int color = Color.parseColor(colorInt);
// Widget 1x1
remoteViews1.setTextColor(R.id.textPlaceholder1_1x1, color);
remoteViews1.setTextColor(R.id.textPlaceholder2_1x1, color);
remoteViews1.setTextViewText(R.id.textPlaceholder1_1x1,
utils.formatNumber(persian.getDayOfMonth()));
remoteViews1.setTextViewText(R.id.textPlaceholder2_1x1,
utils.shape(utils.getMonthName(persian)));
remoteViews1.setOnClickPendingIntent(R.id.widget_layout1x1, launchAppPendingIntent);
manager.updateAppWidget(new ComponentName(context, Widget1x1.class), remoteViews1);
// Widget 4x1
remoteViews4.setTextColor(R.id.textPlaceholder1_4x1, color);
remoteViews4.setTextColor(R.id.textPlaceholder2_4x1, color);
remoteViews4.setTextColor(R.id.textPlaceholder3_4x1, color);
String text1;
String text2;
String text3 = "";
String weekDayName = utils.getWeekDayName(civil);
String persianDate = utils.dateToString(persian);
String civilDate = utils.dateToString(civil);
String date = persianDate + Constants.PERSIAN_COMMA + " " + civilDate;
String time = utils.getPersianFormattedClock(calendar);
boolean enableClock = utils.isWidgetClock();
if (enableClock) {
text2 = weekDayName + " " + date;
text1 = time;
if (utils.iranTime) {
text3 = "(" + context.getString(R.string.iran_time) + ")";
}
} else {
text1 = weekDayName;
text2 = date;
}
remoteViews4.setTextViewText(R.id.textPlaceholder1_4x1, utils.shape(text1));
remoteViews4.setTextViewText(R.id.textPlaceholder2_4x1, utils.shape(text2));
remoteViews4.setTextViewText(R.id.textPlaceholder3_4x1, utils.shape(text3));
remoteViews4.setOnClickPendingIntent(R.id.widget_layout4x1, launchAppPendingIntent);
manager.updateAppWidget(new ComponentName(context, Widget4x1.class), remoteViews4);
// Widget 2x2
remoteViews2.setTextColor(R.id.time_2x2, color);
remoteViews2.setTextColor(R.id.date_2x2, color);
remoteViews2.setTextColor(R.id.event_2x2, color);
remoteViews2.setTextColor(R.id.owghat_2x2, color);
if (enableClock) {
text2 = weekDayName + " " + persianDate;
text1 = time;
} else {
text1 = weekDayName;
text2 = persianDate;
}
Clock currentClock =
new Clock(calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE));
String owghat;
if (pastDate == null || !pastDate.equals(persian) || updateDate) {
Log.d("UpdateUtils", "change date");
pastDate = persian;
utils.loadAlarms();
owghat = utils.getNextOghatTime(currentClock, true);
String holidays = utils.getEventsTitle(persian, true);
if (!TextUtils.isEmpty(holidays)) {
remoteViews2.setTextViewText(R.id.holiday_2x2, utils.shape(holidays));
remoteViews2.setViewVisibility(R.id.holiday_2x2, View.VISIBLE);
} else {
remoteViews2.setViewVisibility(R.id.holiday_2x2, View.GONE);
}
String events = utils.getEventsTitle(persian, false);
if (!TextUtils.isEmpty(events)) {
remoteViews2.setTextViewText(R.id.event_2x2, utils.shape(events));
remoteViews2.setViewVisibility(R.id.event_2x2, View.VISIBLE);
} else {
remoteViews2.setViewVisibility(R.id.event_2x2, View.GONE);
}
} else {
owghat = utils.getNextOghatTime(currentClock, false);
}
if (owghat != null) {
remoteViews2.setTextViewText(R.id.owghat_2x2, utils.shape(owghat));
remoteViews2.setViewVisibility(R.id.owghat_2x2, View.VISIBLE);
} else {
remoteViews2.setViewVisibility(R.id.owghat_2x2, View.GONE);
}
remoteViews2.setTextViewText(R.id.time_2x2, utils.shape(text1));
remoteViews2.setTextViewText(R.id.date_2x2, utils.shape(text2));
remoteViews2.setOnClickPendingIntent(R.id.widget_layout2x2, launchAppPendingIntent);
manager.updateAppWidget(new ComponentName(context, Widget2x2.class), remoteViews2);
//
// Permanent Notification Bar and DashClock Data Extension Update
//
//
String status = utils.getMonthName(persian);
String title = utils.getWeekDayName(civil) + Constants.PERSIAN_COMMA + " " +
utils.dateToString(persian);
String body = utils.dateToString(civil) + Constants.PERSIAN_COMMA + " "
+ utils.dateToString(DateConverter.civilToIslamic(civil, utils.getIslamicOffset()));
// Prepend a right-to-left mark character to Android with sane text rendering stack
// to resolve a bug seems some Samsung devices have with characters with weak direction,
// digits being at the first of string on
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
title = Constants.RLM + title;
body = Constants.RLM + body;
}
int icon = utils.getDayIconResource(persian.getDayOfMonth());
ApplicationService applicationService = ApplicationService.getInstance();
if (applicationService != null && utils.isNotifyDate()) {
applicationService.startForeground(
NOTIFICATION_ID,
new NotificationCompat.Builder(context)
.setPriority(NotificationCompat.PRIORITY_LOW)
.setOngoing(true)
.setSmallIcon(icon)
.setWhen(0)
.setContentIntent(launchAppPendingIntent)
.setContentText(utils.shape(body))
.setContentTitle(utils.shape(title))
.setColor(0xFF607D8B) // permanent services color
.build());
}
mExtensionData = new ExtensionData().visible(true).icon(icon)
.status(utils.shape(status))
.expandedTitle(utils.shape(title))
.expandedBody(utils.shape(body)).clickIntent(intent);
}
public ExtensionData getExtensionData() {
return mExtensionData;
}
}