package com.marverenic.music.widget;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

import com.marverenic.music.JockeyApplication;
import com.marverenic.music.player.MusicPlayer;
import com.marverenic.music.player.PlayerController;

import javax.inject.Inject;

public abstract class BaseWidget extends AppWidgetProvider {

    @Inject PlayerController mPlayerController;

    @Override
    public final void onReceive(Context context, Intent intent) {
        JockeyApplication.getComponent(context).inject(this);

        String action = intent.getAction();
        if (MusicPlayer.UPDATE_BROADCAST.equals(action)) {
            onUpdate(context);
        } else {
            super.onReceive(context, intent);
        }
    }

    @Override
    public final void onUpdate(Context context, AppWidgetManager widgetManager, int[] widgetIds) {
        if (isEnabled(context)) {
            onUpdate(context);
        }
    }

    /**
     * Called when a broadcast has been sent to trigger an update of the widget's remote view. This
     * method is responsible for creating an updated widget view and applying it either manually
     * or with {@link #updateAllInstances(Context, RemoteViews)}.
     * @param context A {@code Context} that can be used to create RemoteViews and update the widget
     */
    protected abstract void onUpdate(Context context);

    protected ComponentName getComponentName(Context context) {
        return new ComponentName(context.getPackageName(), getClass().getCanonicalName());
    }

    protected boolean isEnabled(Context context) {
        AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
        int[] ids = widgetManager.getAppWidgetIds(getComponentName(context));

        return ids != null && ids.length > 0;
    }

    protected void updateAllInstances(Context context, RemoteViews delta) {
        AppWidgetManager wm = AppWidgetManager.getInstance(context);
        wm.updateAppWidget(getComponentName(context), delta);
    }
}

package com.marverenic.music.widget;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

import com.marverenic.music.JockeyApplication;
import com.marverenic.music.player.MusicPlayer;
import com.marverenic.music.player.PlayerController;

import javax.inject.Inject;

public abstract class BaseWidget extends AppWidgetProvider {

    @Inject PlayerController mPlayerController;

    @Override
    public final void onReceive(Context context, Intent intent) {
        JockeyApplication.getComponent(context).inject(this);

        String action = intent.getAction();
        if (MusicPlayer.UPDATE_BROADCAST.equals(action)) {
            if (isEnabled(context)) {
                onUpdate(context);
            }
        } else {
            super.onReceive(context, intent);
        }
    }

    @Override
    public final void onUpdate(Context context, AppWidgetManager widgetManager, int[] widgetIds) {
        if (isEnabled(context)) {
            onUpdate(context);
        }
    }

    /**
     * Called when a broadcast has been sent to trigger an update of the widget's remote view. This
     * method is responsible for creating an updated widget view and applying it either manually
     * or with {@link #updateAllInstances(Context, RemoteViews)}.
     * @param context A {@code Context} that can be used to create RemoteViews and update the widget
     */
    protected abstract void onUpdate(Context context);

    protected ComponentName getComponentName(Context context) {
        return new ComponentName(context.getPackageName(), getClass().getCanonicalName());
    }

    protected boolean isEnabled(Context context) {
        AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
        int[] ids = widgetManager.getAppWidgetIds(getComponentName(context));

        return ids != null && ids.length > 0;
    }

    protected void updateAllInstances(Context context, RemoteViews delta) {
        AppWidgetManager wm = AppWidgetManager.getInstance(context);
        wm.updateAppWidget(getComponentName(context), delta);
    }
}

Fix widgets updating when they are not active