Skip to content

Commit 8d93b99

Browse files
seperated widgets
and fixed some minor issues regarding widget interconnection
1 parent dd65630 commit 8d93b99

File tree

1 file changed

+60
-46
lines changed

1 file changed

+60
-46
lines changed

app/src/main/java/com/jj/hangoverclock/ClockWidgetProvider.java

+60-46
Original file line numberDiff line numberDiff line change
@@ -54,60 +54,66 @@ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] a
5454
public void onReceive(Context context, Intent intent) {
5555
super.onReceive(context, intent);
5656
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
57-
overhang = sharedPreferences.getInt("overhang", overhang);
57+
if (intent.getAction().split("#").length != 1) {
58+
overhang = sharedPreferences.getInt("overhang" + intent.getAction().split("#")[1], overhang);
59+
controlsvisible = sharedPreferences.getBoolean("controlsvisible" + intent.getAction().split("#")[1], false);
60+
}
5861

59-
if (controlbutton.equals(intent.getAction())) {
60-
Log.i(TAG, "onReceive: controlbutton pressed");
62+
if (controlbutton.equals(intent.getAction().split("#")[0])) {
63+
Log.i(TAG, "onReceive: controlbutton pressed on widget " + intent.getAction().split("#")[1]);
6164
ComponentName thisAppWidget = new ComponentName(context.getPackageName(), getClass().getName());
6265
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
6366
int[] ids = appWidgetManager.getAppWidgetIds(thisAppWidget);
6467
if(!controlsvisible) {
6568
boolean switchcheck = true;
6669
for (int appWidgetID : ids) {
67-
String timebefore = sharedPreferences.getString("time", "");
68-
updateAppWidget(context, appWidgetManager, appWidgetID);
69-
String timeafter = sharedPreferences.getString("time", "");
70-
if (timebefore != timeafter) switchcheck = false;
70+
if (!sharedPreferences.getBoolean("controlsvisible" + appWidgetID, false)) {
71+
String timebefore = sharedPreferences.getString("time" + appWidgetID, "");
72+
updateAppWidget(context, appWidgetManager, appWidgetID);
73+
String timeafter = sharedPreferences.getString("time" + appWidgetID, "");
74+
Log.i(TAG, "onReceive: comparing widget " + appWidgetID + ", before " + timebefore + " with after " + timeafter + ", result: " + !timebefore.equals(timeafter));
75+
if (!timebefore.equals(timeafter)) switchcheck = false;
76+
}
7177
}
7278
if (!switchcheck) return;
7379
}
7480
controlsvisible = !controlsvisible;
81+
SharedPreferences.Editor editor = sharedPreferences.edit();
82+
editor.putBoolean("controlsvisible" + intent.getAction().split("#")[1], controlsvisible);
83+
editor.apply();
7584
Log.i(TAG, "onReceive: new controlbutton state: " + controlsvisible);
7685
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
77-
for (int appWidgetID: ids) {
78-
if (controlsvisible) {
79-
remoteViews.setViewVisibility(R.id.plus, View.VISIBLE);
80-
remoteViews.setViewVisibility(R.id.minus, View.VISIBLE);
81-
remoteViews.setTextViewText(R.id.clock, "+" + overhang);
82-
Log.i(TAG, "onReceive: enabled controls");
83-
} else {
84-
remoteViews.setViewVisibility(R.id.plus, View.GONE);
85-
remoteViews.setViewVisibility(R.id.minus, View.GONE);
86-
remoteViews.setTextViewText(R.id.clock, calculatetime((double)Calendar.getInstance().get(Calendar.HOUR_OF_DAY)*60*60+Calendar.getInstance().get(Calendar.MINUTE)*60,overhang));
87-
Log.i(TAG, "onReceive: disabled controls");
88-
}
89-
appWidgetManager.updateAppWidget(appWidgetID, remoteViews);
86+
if (controlsvisible) {
87+
remoteViews.setViewVisibility(R.id.plus, View.VISIBLE);
88+
remoteViews.setViewVisibility(R.id.minus, View.VISIBLE);
89+
remoteViews.setTextViewText(R.id.clock, "+" + overhang);
90+
Log.i(TAG, "onReceive: enabled controls");
91+
} else {
92+
remoteViews.setViewVisibility(R.id.plus, View.GONE);
93+
remoteViews.setViewVisibility(R.id.minus, View.GONE);
94+
updateAppWidget(context, appWidgetManager, Integer.valueOf(intent.getAction().split("#")[1]));
95+
Log.i(TAG, "onReceive: disabled controls");
9096
}
97+
appWidgetManager.updateAppWidget(Integer.valueOf(intent.getAction().split("#")[1]), remoteViews);
9198
}
92-
if (plusbutton.equals(intent.getAction())) {
99+
if (plusbutton.equals(intent.getAction().split("#")[0])) {
93100
Log.i(TAG, "onReceive: plusbutton pressed");
94101
if (overhang>=60) overhang += 60;
95102
if (overhang<60) overhang += 10;
96-
//overhang = Math.min(overhang, 60);
103+
//overhang = Math.min(overhang, 60); //Limit of 1 hour
104+
//overhang = Math.min(overhang, 60*24); //Limit of a day
97105
ComponentName thisAppWidget = new ComponentName(context.getPackageName(), getClass().getName());
98106
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
99107
int[] ids = appWidgetManager.getAppWidgetIds(thisAppWidget);
100108
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
101-
for (int appWidgetID: ids) {
102-
remoteViews.setTextViewText(R.id.clock, "+" + overhang);
103-
appWidgetManager.updateAppWidget(appWidgetID, remoteViews);
104-
}
105-
SharedPreferences.Editor editor= sharedPreferences.edit();
106-
editor.putInt("overhang", overhang);
109+
remoteViews.setTextViewText(R.id.clock, "+" + overhang);
110+
appWidgetManager.updateAppWidget(Integer.valueOf(intent.getAction().split("#")[1]), remoteViews);
111+
SharedPreferences.Editor editor = sharedPreferences.edit();
112+
editor.putInt("overhang" + Integer.valueOf(intent.getAction().split("#")[1]), overhang);
107113
editor.apply();
108-
Log.i(TAG, "onReceive: new overhang value: " + overhang);
114+
Log.i(TAG, "onReceive: new overhang " + Integer.valueOf(intent.getAction().split("#")[1]) + " value: " + overhang);
109115
}
110-
if (minusbutton.equals(intent.getAction())) {
116+
if (minusbutton.equals(intent.getAction().split("#")[0])) {
111117
Log.i(TAG, "onReceive: minusbutton pressed");
112118
if (overhang<=60) overhang -= 10;
113119
if (overhang>60) overhang -= 60;
@@ -116,14 +122,12 @@ public void onReceive(Context context, Intent intent) {
116122
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
117123
int[] ids = appWidgetManager.getAppWidgetIds(thisAppWidget);
118124
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
119-
for (int appWidgetID: ids) {
120-
remoteViews.setTextViewText(R.id.clock, "+" + overhang);
121-
appWidgetManager.updateAppWidget(appWidgetID, remoteViews);
122-
}
125+
remoteViews.setTextViewText(R.id.clock, "+" + overhang);
126+
appWidgetManager.updateAppWidget(Integer.valueOf(intent.getAction().split("#")[1]), remoteViews);
123127
SharedPreferences.Editor editor= sharedPreferences.edit();
124-
editor.putInt("overhang", overhang);
128+
editor.putInt("overhang" + Integer.valueOf(intent.getAction().split("#")[1]), overhang);
125129
editor.apply();
126-
Log.i(TAG, "onReceive: new overhang value: " + overhang);
130+
Log.i(TAG, "onReceive: new overhang " + Integer.valueOf(intent.getAction().split("#")[1]) + " value: " + overhang);
127131
}
128132

129133
if (CLOCK_WIDGET_UPDATE.equals(intent.getAction())) {
@@ -152,16 +156,20 @@ protected PendingIntent getPendingSelfIntent(Context context, String action) {
152156
@Override
153157
public void onDisabled(Context context) {
154158
super.onDisabled(context);
155-
Log.i(TAG, "Widget Provider disabled. Turning off timer");
159+
Log.i(TAG, "Widget Provider disabled. Turning off timer and deleting all values");
156160
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
157161
alarmManager.cancel(createClockTickIntent(context));
162+
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
163+
SharedPreferences.Editor editor= sharedPreferences.edit();
164+
editor.clear();
165+
editor.commit();
158166
}
159167

160168
@Override
161169
public void onEnabled(Context context) {
162170
super.onEnabled(context);
163-
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
164-
overhang = sharedPreferences.getInt("overhang", overhang);
171+
//SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
172+
//overhang = sharedPreferences.getInt("overhang", overhang);
165173
Log.i(TAG, "Widget Provider enabled. Starting timer to update widget every minute");
166174
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
167175
Calendar calendar = Calendar.getInstance();
@@ -171,23 +179,29 @@ public void onEnabled(Context context) {
171179
}
172180

173181
public void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
174-
Log.i("info", "updateAppWidget: i have been called");
175182
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
176-
overhang = sharedPreferences.getInt("overhang", overhang);
183+
overhang = sharedPreferences.getInt("overhang" + appWidgetId, overhang);
184+
controlsvisible = sharedPreferences.getBoolean("controlsvisible" + appWidgetId, false);
177185
int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
178186
int minutes = Calendar.getInstance().get(Calendar.MINUTE);
179187
//int seconds = Calendar.getInstance().get(Calendar.SECOND);
180188
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
181189
//remoteViews.setTextViewText(R.id.clock, hour + ":" + minutes);
182190
String time = calculatetime((double)hour*60*60+minutes*60,overhang);
191+
if (controlsvisible) {
192+
remoteViews.setViewVisibility(R.id.plus, View.GONE);
193+
remoteViews.setViewVisibility(R.id.minus, View.GONE);
194+
controlsvisible = false;
195+
Log.i(TAG, "updateAppWidget: disabled controls");
196+
}
183197
remoteViews.setTextViewText(R.id.clock, time);
184-
SharedPreferences.Editor editor= sharedPreferences.edit();
185-
editor.putString("time", time);
198+
SharedPreferences.Editor editor = sharedPreferences.edit();
199+
editor.putString("time" + appWidgetId, time);
186200
editor.apply();
187201
//remoteViews.setTextViewText(R.id.clock, hour + ":" + minutes + ":" + seconds);
188-
remoteViews.setOnClickPendingIntent(R.id.controlbutton, getPendingSelfIntent(context, controlbutton));
189-
remoteViews.setOnClickPendingIntent(R.id.plus, getPendingSelfIntent(context, plusbutton));
190-
remoteViews.setOnClickPendingIntent(R.id.minus, getPendingSelfIntent(context, minusbutton));
202+
remoteViews.setOnClickPendingIntent(R.id.controlbutton, getPendingSelfIntent(context, controlbutton + "#" + appWidgetId));
203+
remoteViews.setOnClickPendingIntent(R.id.plus, getPendingSelfIntent(context, plusbutton + "#" + appWidgetId));
204+
remoteViews.setOnClickPendingIntent(R.id.minus, getPendingSelfIntent(context, minusbutton + "#" + appWidgetId));
191205
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
192206
Log.i("info", "updateAppWidget: updated widget " + appWidgetId);
193207
}

0 commit comments

Comments
 (0)