package bg.mentormate.academy.radarapp.widgets; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; import android.view.View; import android.widget.RemoteViews; import bg.mentormate.academy.radarapp.R; import bg.mentormate.academy.radarapp.activities.MainActivity; import bg.mentormate.academy.radarapp.data.LocalDb; import bg.mentormate.academy.radarapp.services.LocationTrackingService; public class TrackingStatusToggleWidget extends AppWidgetProvider { private static final String ON_TRACKING_CLICK = "bg.mentormate.academy.radarapp.action.ON_TRACKING_CLICK"; @Override public void onReceive(@NonNull Context context, @NonNull Intent intent) { super.onReceive(context, intent); if (intent.getAction().equals(ON_TRACKING_CLICK)) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); RemoteViews remoteViews = setupRemoteView(context); int[] appWidgetId = AppWidgetManager.getInstance(context).getAppWidgetIds( new ComponentName(context, TrackingStatusToggleWidget.class)); appWidgetManager.updateAppWidget(appWidgetId, remoteViews); } } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int widgetId : appWidgetIds) { RemoteViews remoteViews = setupRemoteView(context); appWidgetManager.updateAppWidget(widgetId, remoteViews); } } private RemoteViews setupRemoteView(Context context) { RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); if (LocalDb.getInstance().isTrackingOn()) { remoteViews.setViewVisibility(R.id.ivSwitchOff, View.GONE); remoteViews.setViewVisibility(R.id.ivSwitchOn, View.VISIBLE); } else { remoteViews.setViewVisibility(R.id.ivSwitchOff, View.VISIBLE); remoteViews.setViewVisibility(R.id.ivSwitchOn, View.GONE); } Intent openAppIntent = new Intent(context, MainActivity.class); PendingIntent openAppPendingIntent = PendingIntent .getActivity(context, 0, openAppIntent, 0); Intent startTrackingIntent = new Intent(context, LocationTrackingService.class); startTrackingIntent.setAction(LocationTrackingService.ACTION_START_MONITORING); PendingIntent startTrackingPendingIntent = PendingIntent .getService(context, 0, startTrackingIntent, 0); Intent stopTrackingIntent = new Intent(context, LocationTrackingService.class); stopTrackingIntent.setAction(LocationTrackingService.ACTION_STOP_MONITORING); PendingIntent stopTrackingPendingIntent = PendingIntent .getService(context, 0, stopTrackingIntent, 0); remoteViews.setOnClickPendingIntent(R.id.tvOpenApp, openAppPendingIntent); remoteViews.setOnClickPendingIntent(R.id.ivSwitchOff, startTrackingPendingIntent); remoteViews.setOnClickPendingIntent(R.id.ivSwitchOn, stopTrackingPendingIntent); return remoteViews; } }