Fixes some bugs in TimeZoneUtils

TimeZoneUtils was updating the db and modifying the selection. This
creates a static selection for each update type and creates new
values for each update. Also adds a method for apps to force the
local tz cache to refresh if they think another app has modified
the db.

Change-Id: Iaaade635ac8ff11bb116005a0f6b44efcd4c4056
This commit is contained in:
Erik
2010-09-14 15:09:34 -07:00
parent 09340a4bb9
commit 426ee7f22e

View File

@@ -45,6 +45,10 @@ public class CalendarUtils {
* values.
*/
public static class TimeZoneUtils {
private static final String[] TIMEZONE_TYPE_ARGS = { CalendarCache.TIMEZONE_KEY_TYPE };
private static final String[] TIMEZONE_INSTANCES_ARGS =
{ CalendarCache.TIMEZONE_KEY_INSTANCES };
private static StringBuilder mSB = new StringBuilder(50);
private static Formatter mF = new Formatter(mSB, Locale.getDefault());
private volatile static boolean mFirstTZRequest = true;
@@ -213,19 +217,17 @@ public class CalendarUtils {
}
// Write the use home tz setting
String[] selArgs = new String[] { CalendarCache.TIMEZONE_KEY_TYPE };
values.put(CalendarCache.VALUE, mUseHomeTZ ? CalendarCache.TIMEZONE_TYPE_HOME
: CalendarCache.TIMEZONE_TYPE_AUTO);
mHandler.startUpdate(mToken, null, CalendarCache.URI, values, CalendarCache.WHERE,
selArgs);
TIMEZONE_TYPE_ARGS);
// If using a home tz write it to the db
if (mUseHomeTZ) {
selArgs[0] = CalendarCache.TIMEZONE_KEY_INSTANCES;
values.clear();
values.put(CalendarCache.VALUE, mHomeTZ);
mHandler.startUpdate(
mToken, null, CalendarCache.URI, values, CalendarCache.WHERE, selArgs);
ContentValues values2 = new ContentValues();
values2.put(CalendarCache.VALUE, mHomeTZ);
mHandler.startUpdate(mToken, null, CalendarCache.URI, values2,
CalendarCache.WHERE, TIMEZONE_INSTANCES_ARGS);
}
}
}
@@ -270,6 +272,27 @@ public class CalendarUtils {
}
return mUseHomeTZ ? mHomeTZ : Time.getCurrentTimezone();
}
/**
* Forces a query of the database to check for changes to the time zone.
* This should be called if another app may have modified the db. If a
* query is already in progress the callback will be added to the list
* of callbacks to be called when it returns.
*
* @param context The calling activity
* @param callback The runnable that should execute if a query returns
* new values
*/
public void forceDBRequery(Context context, Runnable callback) {
synchronized (mTZCallbacks){
if (mTZQueryInProgress) {
mTZCallbacks.add(callback);
return;
}
mFirstTZRequest = true;
getTimeZone(context, callback);
}
}
}
/**