Use partiallyUpdateAppWidget method to avoid settings all buttons again
This commit is contained in:
parent
d77582e342
commit
637827d79d
@ -107,18 +107,19 @@ public class CalculatorWidget extends AppWidgetProvider {
|
||||
@Nonnull int[] appWidgetIds) {
|
||||
super.onUpdate(context, appWidgetManager, appWidgetIds);
|
||||
|
||||
updateWidget(context, appWidgetManager, appWidgetIds);
|
||||
updateWidget(context, appWidgetManager, appWidgetIds, false);
|
||||
}
|
||||
|
||||
public void updateWidget(@Nonnull Context context) {
|
||||
public void updateWidget(@Nonnull Context context, boolean partially) {
|
||||
final AppWidgetManager manager = AppWidgetManager.getInstance(context);
|
||||
final int[] widgetIds = manager.getAppWidgetIds(new ComponentName(context, CalculatorWidget.class));
|
||||
updateWidget(context, manager, widgetIds);
|
||||
updateWidget(context, manager, widgetIds, partially);
|
||||
}
|
||||
|
||||
private void updateWidget(@Nonnull Context context,
|
||||
@Nonnull AppWidgetManager manager,
|
||||
@Nonnull int[] widgetIds) {
|
||||
@Nonnull int[] widgetIds,
|
||||
boolean partially) {
|
||||
final EditorState editorState = Locator.getInstance().getEditor().getState();
|
||||
final DisplayState displayState = Locator.getInstance().getDisplay().getViewState();
|
||||
|
||||
@ -127,6 +128,7 @@ public class CalculatorWidget extends AppWidgetProvider {
|
||||
for (int widgetId : widgetIds) {
|
||||
final RemoteViews views = new RemoteViews(context.getPackageName(), getLayout(manager, widgetId, resources, theme));
|
||||
|
||||
if (!partially || Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
|
||||
for (CalculatorButton button : CalculatorButton.values()) {
|
||||
final PendingIntent intent = intents.get(context, button);
|
||||
if (intent != null) {
|
||||
@ -140,15 +142,20 @@ public class CalculatorWidget extends AppWidgetProvider {
|
||||
views.setOnClickPendingIntent(buttonId, intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updateEditorState(context, views, editorState, theme);
|
||||
updateDisplayState(context, views, displayState, theme);
|
||||
|
||||
views.setTextViewText(R.id.cpp_button_multiplication, Locator.getInstance().getEngine().getMultiplicationSign());
|
||||
|
||||
if (partially && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
manager.partiallyUpdateAppWidget(widgetId, views);
|
||||
} else {
|
||||
manager.updateAppWidget(widgetId, views);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int getLayout(@Nonnull AppWidgetManager manager, int widgetId, @Nonnull Resources resources, @Nonnull SimpleTheme theme) {
|
||||
if (Build.VERSION.SDK_INT >= JELLY_BEAN) {
|
||||
@ -197,12 +204,14 @@ public class CalculatorWidget extends AppWidgetProvider {
|
||||
return;
|
||||
}
|
||||
switch (action) {
|
||||
case ACTION_CONFIGURATION_CHANGED:
|
||||
case ACTION_EDITOR_STATE_CHANGED:
|
||||
case ACTION_DISPLAY_STATE_CHANGED:
|
||||
updateWidget(context, true);
|
||||
break;
|
||||
case ACTION_CONFIGURATION_CHANGED:
|
||||
case ACTION_APPWIDGET_OPTIONS_CHANGED:
|
||||
case ACTION_THEME_CHANGED:
|
||||
updateWidget(context);
|
||||
updateWidget(context, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user