Draw separate widgets for landscape and portrait modes

Fixes #76
pull/84/head
Alinson S. Xavier 10 years ago
parent 8f64b696d8
commit 4bfb839370

@ -45,7 +45,8 @@ import java.io.IOException;
public abstract class BaseWidgetProvider extends AppWidgetProvider public abstract class BaseWidgetProvider extends AppWidgetProvider
{ {
private int width, height; private int portraitWidth, portraitHeight;
private int landscapeWidth, landscapeHeight;
protected abstract int getDefaultHeight(); protected abstract int getDefaultHeight();
@ -132,7 +133,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
ImageView iv = (ImageView) view.findViewById(R.id.imageView); ImageView iv = (ImageView) view.findViewById(R.id.imageView);
iv.setImageBitmap(widgetCache); iv.setImageBitmap(widgetCache);
view.measure(width, height); view.measure(portraitWidth, portraitHeight);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.setDrawingCacheEnabled(true); view.setDrawingCacheEnabled(true);
view.buildDrawingCache(); view.buildDrawingCache();
@ -172,8 +173,11 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT)); options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT));
} }
width = maxWidth; portraitWidth = minWidth;
height = maxHeight; portraitHeight = maxHeight;
landscapeWidth = maxWidth;
landscapeHeight = minHeight;
} }
private void measureCustomView(Context context, int w, int h, View customView) private void measureCustomView(Context context, int w, int h, View customView)
@ -203,8 +207,8 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
private final Context context; private final Context context;
private final Habit habit; private final Habit habit;
private final AppWidgetManager manager; private final AppWidgetManager manager;
public RemoteViews remoteViews; public RemoteViews portraitRemoteViews, landscapeRemoteViews;
public View widgetView; public View portraitWidgetView, landscapeWidgetView;
public RenderWidgetTask(int widgetId, Context context, Habit habit, public RenderWidgetTask(int widgetId, Context context, Habit habit,
AppWidgetManager manager) AppWidgetManager manager)
@ -220,16 +224,31 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
{ {
super.onPreExecute(); super.onPreExecute();
remoteViews = new RemoteViews(context.getPackageName(), getLayoutId()); portraitRemoteViews = new RemoteViews(context.getPackageName(), getLayoutId());
widgetView = buildCustomView(context, habit); portraitWidgetView = buildCustomView(context, habit);
measureCustomView(context, width, height, widgetView); measureCustomView(context, portraitWidth, portraitHeight, portraitWidgetView);
manager.updateAppWidget(widgetId, remoteViews);
landscapeRemoteViews = new RemoteViews(context.getPackageName(), getLayoutId());
landscapeWidgetView = buildCustomView(context, habit);
measureCustomView(context, landscapeWidth, landscapeHeight, landscapeWidgetView);
updateAppWidget();
}
private void updateAppWidget()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
manager.updateAppWidget(widgetId, new RemoteViews(landscapeRemoteViews,
portraitRemoteViews));
else
manager.updateAppWidget(widgetId, portraitRemoteViews);
} }
@Override @Override
protected void doInBackground() protected void doInBackground()
{ {
refreshCustomViewData(widgetView); refreshCustomViewData(portraitWidgetView);
refreshCustomViewData(landscapeWidgetView);
} }
@Override @Override
@ -237,20 +256,9 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
{ {
try try
{ {
widgetView.invalidate(); buildRemoteViews(portraitWidgetView, portraitRemoteViews);
widgetView.setDrawingCacheEnabled(true); buildRemoteViews(landscapeWidgetView, landscapeRemoteViews);
widgetView.buildDrawingCache(true); updateAppWidget();
Bitmap drawingCache = widgetView.getDrawingCache();
remoteViews.setTextViewText(R.id.label, habit.name);
remoteViews.setImageViewBitmap(R.id.imageView, drawingCache);
//savePreview(context, widgetId, drawingCache);
PendingIntent onClickIntent = getOnClickPendingIntent(context, habit);
if (onClickIntent != null) remoteViews.setOnClickPendingIntent(R.id.imageView,
onClickIntent);
manager.updateAppWidget(widgetId, remoteViews);
} }
catch (Exception e) catch (Exception e)
{ {
@ -260,5 +268,21 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
} }
private void buildRemoteViews(View widgetView, RemoteViews remoteViews)
{
widgetView.invalidate();
widgetView.setDrawingCacheEnabled(true);
widgetView.buildDrawingCache(true);
Bitmap drawingCache = widgetView.getDrawingCache();
remoteViews.setTextViewText(R.id.label, habit.name);
remoteViews.setImageViewBitmap(R.id.imageView, drawingCache);
//savePreview(context, widgetId, drawingCache);
PendingIntent onClickIntent = getOnClickPendingIntent(context, habit);
if (onClickIntent != null) remoteViews.setOnClickPendingIntent(R.id.imageView,
onClickIntent);
}
} }
} }

Loading…
Cancel
Save