Back to project page worldclockwidget.
The source code is released under:
GNU General Public License
If you think the Android project worldclockwidget listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* * Copyright (C) 2012 - 2014 Armin Hberling * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version./*from www . j a v a 2s . c o m*/ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/> */ package ch.corten.aha.worldclock; import java.text.DateFormat; import java.util.TimeZone; import ch.corten.aha.widget.RemoteViewUtil; import ch.corten.aha.worldclock.provider.WorldClock.Clocks; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Color; import android.os.Build; import android.preference.PreferenceManager; import android.view.View; import android.widget.RemoteViews; import org.joda.time.DateTimeUtils; import org.joda.time.DateTimeZone; public class WorldClockWidgetProvider extends ClockWidgetProvider { private static final boolean SANS_JELLY_BEAN_MR1 = Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1; static { registerClockWidget(WorldClockWidgetProvider.class); } @Override protected void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { updateAppWidgetStatic(context, appWidgetManager, appWidgetId); } private static void updateAppWidgetStatic(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { // Create an Intent to launch WorldClockActivity Intent intent = new Intent(context, WorldClockActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); // Get the layout for the App Widget and attach an on-click listener // to the button RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.world_clock_widget); views.setOnClickPendingIntent(R.id.app_widget, pendingIntent); // update view updateViews(context, views); // Tell the AppWidgetManager to perform an update on the current app widget appWidgetManager.updateAppWidget(appWidgetId, views); } private static final String[] PROJECTION = { Clocks.TIMEZONE_ID, Clocks.CITY }; private static final int[] CITY_IDS = { R.id.city_text1, R.id.city_text2, R.id.city_text3, R.id.city_text4, }; private static final int[] TIME_IDS = { R.id.time_text1, R.id.time_text2, R.id.time_text3, R.id.time_text4, }; private static void updateViews(Context context, RemoteViews views) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean autoSort = prefs.getBoolean(context.getString(R.string.auto_sort_clocks_key), true); Cursor cursor = Clocks.widgetList(context, PROJECTION, autoSort); try { int n = 0; DateFormat df = android.text.format.DateFormat.getTimeFormat(context); long now = DateTimeUtils.currentTimeMillis(); final int maxEntries = context.getResources().getInteger(R.integer.worldclock_widget_max_entries); while (cursor.moveToNext() && n < CITY_IDS.length && n < maxEntries) { String id = cursor.getString(cursor.getColumnIndex(Clocks.TIMEZONE_ID)); String city = cursor.getString(cursor.getColumnIndex(Clocks.CITY)); views.setTextViewText(CITY_IDS[n], city); DateTimeZone tz = DateTimeZone.forID(id); if (SANS_JELLY_BEAN_MR1) { views.setTextViewText(TIME_IDS[n], TimeZoneInfo.formatDate(df, tz, now)); } else { TimeZone javaTimeZone = TimeZoneInfo.convertToJavaTimeZone(tz, now); views.setViewVisibility(TIME_IDS[n], View.VISIBLE); RemoteViewUtil.setTextClockTimeZone(views, TIME_IDS[n], javaTimeZone.getID()); } n++; } int showEmptyText = (n == 0) ? View.VISIBLE : View.INVISIBLE; views.setViewVisibility(R.id.empty_text, showEmptyText); for (; n < CITY_IDS.length; n++) { views.setTextViewText(CITY_IDS[n], ""); if (SANS_JELLY_BEAN_MR1) { views.setTextViewText(TIME_IDS[n], ""); } else { views.setViewVisibility(TIME_IDS[n], View.INVISIBLE); } } boolean customColors = prefs.getBoolean(context.getString(R.string.use_custom_colors_key), false); int textColor = Color.WHITE; if (customColors) { int color = prefs.getInt(context.getString(R.string.background_color_key), Color.BLACK); RemoteViewUtil.setBackgroundColor(views, R.id.app_widget, color); textColor = prefs.getInt(context.getString(R.string.foreground_color_key), Color.WHITE); } else { RemoteViewUtil.setBackground(views, R.id.app_widget, R.drawable.appwidget_dark_bg); } for (int i = 0; i < CITY_IDS.length; i++) { views.setTextColor(CITY_IDS[i], textColor); views.setTextColor(TIME_IDS[i], textColor); } } finally { if (cursor != null) { cursor.close(); } } } @Override protected void onClockTick(Context context) { Intent service = new Intent(context, WorldClockWidgetService.class); context.startService(service); } static void updateTime(Context context) { // update on the hour final long minutes = System.currentTimeMillis() / (60000); if (minutes % 60 == 0) { Clocks.updateOrder(context); } // Get the widget manager and ids for this widget provider, then call the shared // clock update method. ComponentName thisAppWidget = new ComponentName(context.getPackageName(), WorldClockWidgetProvider.class.getName()); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); int[] ids = appWidgetManager.getAppWidgetIds(thisAppWidget); for (int appWidgetID: ids) { updateAppWidgetStatic(context, appWidgetManager, appWidgetID); } } }