package mobi.urika.android.widget;
import mobi.urika.android.content.LauncherIntent;
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
/**
*
* @author Bo
*
*/
public abstract class WidgetCellLayout extends ViewGroup {
public WidgetCellLayout(Context context) {
super(context);
}
public WidgetCellLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public WidgetCellLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// do nothing here
}
/**
* Called when this cell layout get into the viewport
*/
public void onViewportIn() {
View child;
AppWidgetHostView widgetView;
AppWidgetProviderInfo widgetInfo;
Intent intent;
for (int i = this.getChildCount() - 1; i >= 0; i--) {
try {
child = this.getChildAt(i);
if (child instanceof AppWidgetHostView) {
widgetView = ((AppWidgetHostView) child);
widgetInfo = widgetView.getAppWidgetInfo();
int appWidgetId = widgetView.getAppWidgetId();
intent = new Intent(LauncherIntent.Notification.NOTIFICATION_IN_VIEWPORT)
.setComponent(widgetInfo.provider);
intent.putExtra(LauncherIntent.Extra.EXTRA_APPWIDGET_ID, appWidgetId);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
getContext().sendBroadcast(intent);
}
} catch (Exception e) {
// LauncherApplication.reportExceptionStack(e);
}
}
}
/**
* Called when this cell layout get into the viewport
*/
public void onViewportOut() {
View child;
AppWidgetHostView widgetView;
AppWidgetProviderInfo widgetInfo;
Intent intent;
for (int i = this.getChildCount() - 1; i >= 0; i--) {
try {
child = this.getChildAt(i);
if (child instanceof AppWidgetHostView) {
widgetView = ((AppWidgetHostView) child);
// Stop all animations in the view
stopAllAnimationDrawables(widgetView);
// Notify the widget provider
widgetInfo = widgetView.getAppWidgetInfo();
int appWidgetId = widgetView.getAppWidgetId();
intent = new Intent(LauncherIntent.Notification.NOTIFICATION_OUT_VIEWPORT)
.setComponent(widgetInfo.provider);
intent.putExtra(LauncherIntent.Extra.EXTRA_APPWIDGET_ID, appWidgetId);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
getContext().sendBroadcast(intent);
}
} catch (Exception e) {
// LauncherApplication.reportExceptionStack(e);
}
}
}
private void stopAllAnimationDrawables(ViewGroup vg) {
View child;
for (int i = vg.getChildCount() - 1; i >= 0; i--) {
child = vg.getChildAt(i);
if (child instanceof ImageView) {
try {
AnimationDrawable ad = (AnimationDrawable) ((ImageView) child).getDrawable();
ad.stop();
} catch (Exception e) {
}
} else if (child instanceof ViewGroup) {
stopAllAnimationDrawables((ViewGroup) child);
}
}
}
}