14f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/* 24f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Copyright (C) 2010 The Android Open Source Project 34f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * 44f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 54f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * you may not use this file except in compliance with the License. 64f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * You may obtain a copy of the License at 74f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * 84f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 94f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * 104f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 114f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * See the License for the specific language governing permissions and 144f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project * limitations under the License. 154f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project */ 164f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 174f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectpackage com.android.protips; 184f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 194f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.app.PendingIntent; 204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.appwidget.AppWidgetManager; 214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.appwidget.AppWidgetProvider; 229857d99eecc389389da261a72461322d5cfb8eebMathias Agopianimport android.content.ComponentName; 234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.content.Context; 244f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.content.SharedPreferences; 254f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.content.Intent; 264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.content.res.Resources; 274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.os.Handler; 284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.os.HandlerThread; 294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.util.Log; 304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.view.View; 314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport android.widget.RemoteViews; 324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport java.util.regex.Matcher; 344f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectimport java.util.regex.Pattern; 354f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 364f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project/** Mister Widget appears on your home screen to provide helpful tips. */ 374f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Projectpublic class ProtipWidget extends AppWidgetProvider { 384f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project public static final String ACTION_NEXT_TIP = "com.android.misterwidget.NEXT_TIP"; 394f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project public static final String ACTION_POKE = "com.android.misterwidget.HEE_HEE"; 404f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 414f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project public static final String EXTRA_TIMES = "times"; 424f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 434f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project public static final String PREFS_NAME = "Protips"; 444f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project public static final String PREFS_TIP_NUMBER = "widget_tip"; 454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project public static final String PREFS_TIP_SET = "widget_tip_set"; 464f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 474f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private static final Pattern sNewlineRegex = Pattern.compile(" *\\n *"); 484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private static final Pattern sDrawableRegex = Pattern.compile(" *@(drawable/[a-z0-9_]+) *"); 494f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 504f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private static Handler mAsyncHandler; 514f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project static { 524f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project HandlerThread thr = new HandlerThread("ProtipWidget async"); 534f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project thr.start(); 544f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project mAsyncHandler = new Handler(thr.getLooper()); 554f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 564f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 574f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // initial appearance: eyes closed, no bubble 582bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind private int mIconRes = R.drawable.droidman_open; 592bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind private int mMessage = 0; 602bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind private int mTipSet = 0; 612bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 624f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private AppWidgetManager mWidgetManager = null; 634f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private int[] mWidgetIds; 644f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private Context mContext; 654f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 664f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private CharSequence[] mTips; 674f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 684f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private void setup(Context context) { 694f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project mContext = context; 704f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project mWidgetManager = AppWidgetManager.getInstance(context); 714f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project mWidgetIds = mWidgetManager.getAppWidgetIds(new ComponentName(context, ProtipWidget.class)); 724f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 732bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind SharedPreferences pref = context.getSharedPreferences(PREFS_NAME, 0); 742bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mMessage = pref.getInt(PREFS_TIP_NUMBER, 0); 752bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mTipSet = pref.getInt(PREFS_TIP_SET, 0); 762bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 772bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mTips = context.getResources().getTextArray(mTipSet == 1 ? R.array.tips2 : R.array.tips); 782bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 792bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind if (mTips != null) { 802bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind if (mMessage >= mTips.length) mMessage = 0; 812bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } else { 822bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mMessage = -1; 832bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } 842bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } 852bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 862bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind public void goodmorning() { 872bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mMessage = -1; 882bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind try { 892bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind setIcon(R.drawable.droidman_down_closed); 902bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind Thread.sleep(500); 912bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind setIcon(R.drawable.droidman_down_open); 922bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind Thread.sleep(200); 932bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind setIcon(R.drawable.droidman_down_closed); 942bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind Thread.sleep(100); 952bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind setIcon(R.drawable.droidman_down_open); 962bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind Thread.sleep(600); 972bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } catch (InterruptedException ex) { 982bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } 992bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mMessage = 0; 1002bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mIconRes = R.drawable.droidman_open; 1012bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind refresh(); 1022bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } 1032bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 1042bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind @Override 1052bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind public void onReceive(final Context context, final Intent intent) { 1062bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind final PendingResult result = goAsync(); 1072bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind Runnable worker = new Runnable() { 1082bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind @Override 1092bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind public void run() { 1102bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind onReceiveAsync(context, intent); 1112bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind result.finish(); 1122bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } 1132bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind }; 1142bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mAsyncHandler.post(worker); 1152bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } 1162bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 1172bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind void onReceiveAsync(Context context, Intent intent) { 1182bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind setup(context); 1192bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 1202bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind Resources res = mContext.getResources(); 1212bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mTips = res.getTextArray(mTipSet == 1 ? R.array.tips2 : R.array.tips); 1222bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 1232bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind if (intent.getAction().equals(ACTION_NEXT_TIP)) { 1242bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mMessage = getNextMessageIndex(); 1252bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind SharedPreferences.Editor pref = context.getSharedPreferences(PREFS_NAME, 0).edit(); 1262bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind pref.putInt(PREFS_TIP_NUMBER, mMessage); 1272bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind pref.apply(); 1282bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind refresh(); 1292bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } else if (intent.getAction().equals(ACTION_POKE)) { 1302bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind blink(intent.getIntExtra(EXTRA_TIMES, 1)); 1312bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } else if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_ENABLED)) { 1322bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind goodmorning(); 1332bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } else if (intent.getAction().equals("android.provider.Telephony.SECRET_CODE")) { 1342bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind Log.d("Protips", "ACHIEVEMENT UNLOCKED"); 1352bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mTipSet = 1 - mTipSet; 1362bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mMessage = 0; 1372bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 1382bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind SharedPreferences.Editor pref = context.getSharedPreferences(PREFS_NAME, 0).edit(); 1392bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind pref.putInt(PREFS_TIP_NUMBER, mMessage); 1402bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind pref.putInt(PREFS_TIP_SET, mTipSet); 1412bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind pref.apply(); 1422bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 1432bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mContext.startActivity( 1442bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind new Intent(Intent.ACTION_MAIN) 1452bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP) 1462bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind .addCategory(Intent.CATEGORY_HOME)); 1472bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 1482bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind final Intent bcast = new Intent(context, ProtipWidget.class); 1492bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind bcast.setAction(ACTION_POKE); 1502bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind bcast.putExtra(EXTRA_TIMES, 3); 1512bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mContext.sendBroadcast(bcast); 1522bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } else { 1532bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind mIconRes = R.drawable.droidman_open; 1542bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind refresh(); 1552bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } 1562bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind } 1572bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 1582bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind private void refresh() { 1592bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind RemoteViews rv = buildUpdate(mContext); 1604f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project for (int i : mWidgetIds) { 1614f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project mWidgetManager.updateAppWidget(i, rv); 1624f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 1634f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 1644f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1654f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private void setIcon(int resId) { 1664f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project mIconRes = resId; 1674f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project refresh(); 1684f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 1694f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1704f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private int getNextMessageIndex() { 1714f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project return (mMessage + 1) % mTips.length; 1724f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 1734f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1744f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project private void blink(int blinks) { 1754f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // don't blink if no bubble showing or if goodmorning() is happening 1764f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project if (mMessage < 0) return; 1774f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1784f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project setIcon(R.drawable.droidman_closed); 1794f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project try { 1804f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project Thread.sleep(100); 1814f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project while (0<--blinks) { 1824f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project setIcon(R.drawable.droidman_open); 1834f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project Thread.sleep(200); 1844f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project setIcon(R.drawable.droidman_closed); 1854f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project Thread.sleep(100); 1864f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 1874f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } catch (InterruptedException ex) { } 1884f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project setIcon(R.drawable.droidman_open); 1894f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 1904f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1914f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project public RemoteViews buildUpdate(Context context) { 1924f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project RemoteViews updateViews = new RemoteViews( 1934f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project context.getPackageName(), R.layout.widget); 1944f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 1954f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // Action for tap on bubble 1964f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project Intent bcast = new Intent(context, ProtipWidget.class); 1974f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project bcast.setAction(ACTION_NEXT_TIP); 1984f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project PendingIntent pending = PendingIntent.getBroadcast( 1994f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project context, 0, bcast, PendingIntent.FLAG_UPDATE_CURRENT); 2004f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setOnClickPendingIntent(R.id.tip_bubble, pending); 2014f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2024f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // Action for tap on android 2034f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project bcast = new Intent(context, ProtipWidget.class); 2044f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project bcast.setAction(ACTION_POKE); 2054f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project bcast.putExtra(EXTRA_TIMES, 1); 2064f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project pending = PendingIntent.getBroadcast( 2074f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project context, 0, bcast, PendingIntent.FLAG_UPDATE_CURRENT); 2084f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setOnClickPendingIntent(R.id.bugdroid, pending); 2094f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2104f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // Tip bubble text 2114f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project if (mMessage >= 0) { 2124f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project String[] parts = sNewlineRegex.split(mTips[mMessage], 2); 2134f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project String title = parts[0]; 2144f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project String text = parts.length > 1 ? parts[1] : ""; 2154f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2164f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project // Look for a callout graphic referenced in the text 2174f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project Matcher m = sDrawableRegex.matcher(text); 2184f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project if (m.find()) { 2194f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project String imageName = m.group(1); 2204f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project int resId = context.getResources().getIdentifier( 2214f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2224f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project imageName, null, context.getPackageName()); 2234f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setImageViewResource(R.id.tip_callout, resId); 2244f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setViewVisibility(R.id.tip_callout, View.VISIBLE); 2254f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project text = m.replaceFirst(""); 2264f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } else { 2274f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setImageViewResource(R.id.tip_callout, 0); 2284f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setViewVisibility(R.id.tip_callout, View.GONE); 2294f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2304f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2314f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setTextViewText(R.id.tip_message, 2324f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project text); 2334f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setTextViewText(R.id.tip_header, 2344f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project title); 2354f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setTextViewText(R.id.tip_footer, 2364f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project context.getResources().getString( 2374f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project R.string.pager_footer, 2384f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project (1+mMessage), mTips.length)); 2394f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setViewVisibility(R.id.tip_bubble, View.VISIBLE); 2404f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } else { 2414f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setViewVisibility(R.id.tip_bubble, View.INVISIBLE); 2424f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2434f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2444f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project updateViews.setImageViewResource(R.id.bugdroid, mIconRes); 2454f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project 2464f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project return updateViews; 2474f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project } 2484f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project} 2494f6e8d7a00cbeda1e70cc15be9c4af1018bdad5The Android Open Source Project