summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/protips/ProtipWidget.java54
1 files changed, 38 insertions, 16 deletions
diff --git a/src/com/android/protips/ProtipWidget.java b/src/com/android/protips/ProtipWidget.java
index aa047bd..c41c90e 100644
--- a/src/com/android/protips/ProtipWidget.java
+++ b/src/com/android/protips/ProtipWidget.java
@@ -24,8 +24,10 @@ import android.appwidget.AppWidgetProvider;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
+import android.content.SharedPreferences;
import android.content.Intent;
import android.content.res.Resources;
+import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
@@ -50,11 +52,16 @@ public class ProtipWidget extends AppWidgetProvider {
public static final String ACTION_NEXT_TIP = "com.android.misterwidget.NEXT_TIP";
public static final String ACTION_POKE = "com.android.misterwidget.HEE_HEE";
- public static final String EXTRA_TIP_NUMBER = "tip";
public static final String EXTRA_TIMES = "times";
+ public static final String PREFS_NAME = "Protips";
+ public static final String PREFS_TIP_NUMBER = "widget_tip";
+
private static Random sRNG = new Random();
+ private static final Pattern sNewlineRegex = Pattern.compile(" *\\n *");
+ private static final Pattern sDrawableRegex = Pattern.compile(" *@(drawable/[a-z0-9_]+) *");
+
// initial appearance: eyes closed, no bubble
private int mIconRes = R.drawable.droidman_open;
private int mMessage = 0;
@@ -64,14 +71,23 @@ public class ProtipWidget extends AppWidgetProvider {
private Context mContext;
private CharSequence[] mTips;
- private CharSequence[] mTitles;
private void setup(Context context) {
mContext = context;
mWidgetManager = AppWidgetManager.getInstance(context);
mWidgetIds = mWidgetManager.getAppWidgetIds(new ComponentName(context, ProtipWidget.class));
- mTips = mContext.getResources().getTextArray(R.array.tips);
- mTitles = mContext.getResources().getTextArray(R.array.titles);
+
+ SharedPreferences pref = context.getSharedPreferences(PREFS_NAME, 0);
+ mMessage = pref.getInt(PREFS_TIP_NUMBER, 0);
+
+ mTips = context.getResources().getTextArray(R.array.tips);
+
+ if (mTips != null) {
+ if (mMessage >= mTips.length) mMessage = 0;
+ } else {
+ mMessage = -1;
+ }
+
}
public void goodmorning() {
@@ -96,10 +112,11 @@ public class ProtipWidget extends AppWidgetProvider {
public void onReceive(Context context, Intent intent) {
setup(context);
- // carry state along in every message
- mMessage = intent.getIntExtra(EXTRA_TIP_NUMBER, 0);
-
if (intent.getAction().equals(ACTION_NEXT_TIP)) {
+ mMessage = getNextMessageIndex();
+ SharedPreferences.Editor pref = context.getSharedPreferences(PREFS_NAME, 0).edit();
+ pref.putInt(PREFS_TIP_NUMBER, mMessage);
+ pref.commit();
refresh();
} else if (intent.getAction().equals(ACTION_POKE)) {
blink(intent.getIntExtra(EXTRA_TIMES, 1));
@@ -148,29 +165,33 @@ public class ProtipWidget extends AppWidgetProvider {
RemoteViews updateViews = new RemoteViews(
context.getPackageName(), R.layout.widget);
+ // Action for tap on bubble
Intent bcast = new Intent(context, ProtipWidget.class);
bcast.setAction(ACTION_NEXT_TIP);
- bcast.putExtra(EXTRA_TIP_NUMBER, getNextMessageIndex());
PendingIntent pending = PendingIntent.getBroadcast(
context, 0, bcast, PendingIntent.FLAG_UPDATE_CURRENT);
updateViews.setOnClickPendingIntent(R.id.tip_bubble, pending);
+ // Action for tap on android
bcast = new Intent(context, ProtipWidget.class);
bcast.setAction(ACTION_POKE);
- bcast.putExtra(EXTRA_TIP_NUMBER, mMessage);
bcast.putExtra(EXTRA_TIMES, 1);
pending = PendingIntent.getBroadcast(
context, 0, bcast, PendingIntent.FLAG_UPDATE_CURRENT);
updateViews.setOnClickPendingIntent(R.id.bugdroid, pending);
+ // Tip bubble text
if (mMessage >= 0) {
- CharSequence text = mTips[mMessage];
- Pattern p = Pattern.compile(" *@(drawable/[a-z0-9_]+) *");
- Matcher m = p.matcher(text);
+ String[] parts = sNewlineRegex.split(mTips[mMessage], 2);
+ String title = parts[0];
+ String text = parts.length > 1 ? parts[1] : "";
+
+ // Look for a callout graphic referenced in the text
+ Matcher m = sDrawableRegex.matcher(text);
if (m.find()) {
String imageName = m.group(1);
int resId = context.getResources().getIdentifier(
-
+
imageName, null, context.getPackageName());
updateViews.setImageViewResource(R.id.tip_callout, resId);
updateViews.setViewVisibility(R.id.tip_callout, View.VISIBLE);
@@ -183,10 +204,11 @@ public class ProtipWidget extends AppWidgetProvider {
updateViews.setTextViewText(R.id.tip_message,
text);
updateViews.setTextViewText(R.id.tip_header,
- mTitles[mMessage]);
+ title);
updateViews.setTextViewText(R.id.tip_footer,
- String.format(context.getResources().getString(R.string.pager_footer),
- (1+mMessage), mTips.length));
+ context.getResources().getString(
+ R.string.pager_footer,
+ (1+mMessage), mTips.length));
updateViews.setViewVisibility(R.id.tip_bubble, View.VISIBLE);
} else {
updateViews.setViewVisibility(R.id.tip_bubble, View.INVISIBLE);