package com.myqsc.mobile2.Timetable.AppWidget;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.SharedPreferences;
import java.lang.ref.WeakReference;
import java.util.WeakHashMap;
class DateIndexManager {
private static final String PREFERENCES_FILE_NAME = "Timetable.AppWidget.DateIndex";
private static final int DATE_INDEX_INVALID = -1;
private static final String IDS_SHOWING_TODAY = "IdsShowingToday";
private static final String IDS_SEPARATOR = ",";
private String keyPrefix;
private String idsShowingTodayKey;
private int dateIndexToday;
SharedPreferences sharedPreferences;
private static WeakHashMap<Class<? extends AppWidgetProvider>, WeakReference<DateIndexManager>> instanceCache = new WeakHashMap<Class<? extends AppWidgetProvider>, WeakReference<DateIndexManager>>();
public static DateIndexManager getInstance(Context context, Class<? extends AppWidgetProvider> appWidgetProviderClass, int dateIndexToday) {
synchronized (instanceCache) {
WeakReference<DateIndexManager> weakRef = instanceCache.get(appWidgetProviderClass);
DateIndexManager instance = null;
if (weakRef != null) {
instance = weakRef.get();
}
if (instance == null) {
instance = new DateIndexManager(context, appWidgetProviderClass, dateIndexToday);
instanceCache.put(appWidgetProviderClass, new WeakReference<DateIndexManager>(instance));
}
return instance;
}
}
private DateIndexManager(Context context, Class<? extends AppWidgetProvider> appWidgetProviderClass, int dateIndexToday) {
keyPrefix = appWidgetProviderClass.getSimpleName();
idsShowingTodayKey = keyPrefix + IDS_SHOWING_TODAY;
sharedPreferences = context.getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE | Context.MODE_MULTI_PROCESS);
this.dateIndexToday = dateIndexToday;
}
private String getKey(int appWidgetId) {
return keyPrefix + appWidgetId;
}
// Store IDs of AppWidgets that are showing today.
// AppWidgetManager.getAppWidgetIds() returns all the ids that have been added historically.
private void addToIds(int id) {
String idsPrevious = sharedPreferences.getString(idsShowingTodayKey, "");
StringBuilder idsBuilder = new StringBuilder(idsPrevious);
if (idsPrevious.length() != 0) {
idsBuilder.append(IDS_SEPARATOR);
}
idsBuilder.append(Integer.toString(id));
sharedPreferences.edit().putString(idsShowingTodayKey, idsBuilder.toString()).commit();
}
private void removeFromIds(int id) {
String idsPrevious = sharedPreferences.getString(idsShowingTodayKey, "");
if (idsPrevious.length() == 0) {
return;
}
StringBuilder idsBuilder = new StringBuilder();
String idString = Integer.toString(id);
boolean first = true;
for (String idPrevious : idsPrevious.split(IDS_SEPARATOR)) {
if (!idPrevious.equals(idString)) {
if (first) {
first = false;
} else {
idsBuilder.append(IDS_SEPARATOR);
}
idsBuilder.append(idPrevious);
}
}
sharedPreferences.edit().putString(idsShowingTodayKey, idsBuilder.toString()).commit();
}
public synchronized int[] getIdsShowingToday() {
String[] idStrings = sharedPreferences.getString(idsShowingTodayKey, "").split(IDS_SEPARATOR);
int[] ids;
if (idStrings[0].length() != 0) {
ids = new int[idStrings.length];
for (int i = 0; i != idStrings.length; ++i) {
ids[i] = Integer.valueOf(idStrings[i]);
}
} else {
ids = new int[0];
}
return ids;
}
// Return and set to default value (DATE_INDEX_TODAY) if the date index has not been set.
public synchronized int get(int appWidgetId) {
String key = getKey(appWidgetId);
int dateIndex = sharedPreferences.getInt(key, DATE_INDEX_INVALID);
if (dateIndex == DATE_INDEX_INVALID) {
dateIndex = dateIndexToday;
sharedPreferences.edit().putInt(key, dateIndex).commit();
addToIds(appWidgetId);
}
return dateIndex;
}
public synchronized void set(int appWidgetId, int dateIndex) {
int dateIndexPrevious = sharedPreferences.getInt(getKey(appWidgetId), DATE_INDEX_INVALID);
sharedPreferences.edit().putInt(getKey(appWidgetId), dateIndex).commit();
if (dateIndex != dateIndexPrevious) {
if (dateIndexPrevious == dateIndexToday) {
removeFromIds(appWidgetId);
} else if (dateIndex == dateIndexToday) {
addToIds(appWidgetId);
}
}
}
public synchronized void remove(int appWidgetId) {
sharedPreferences.edit().remove(getKey(appWidgetId)).commit();
removeFromIds(appWidgetId);
}
public synchronized void clear() {
SharedPreferences.Editor editor = sharedPreferences.edit();
for (String key : sharedPreferences.getAll().keySet()) {
if (key.startsWith(keyPrefix)) {
editor.remove(key);
}
}
editor.remove(idsShowingTodayKey);
editor.commit();
}
}