package com.novoda.monkeytrap; import static android.view.View.GONE; import static android.view.View.VISIBLE; import android.app.Service; import android.content.Intent; import android.graphics.Color; import android.os.IBinder; import android.view.WindowManager; public class OverlayService extends Service { private static final String ACTION = "com.novoda.monkeytrap.SHOW_OVERLAY"; private static final String EXTRA_SHOW = "show"; private static OverlayService instance; private WindowManager windowManager; private OverlayView overlayView; static Intent show() { return createIntent(true); } static Intent hide() { return createIntent(false); } private static Intent createIntent(boolean show) { return new Intent(ACTION) .setPackage(BuildConfig.APPLICATION_ID) .putExtra(EXTRA_SHOW, show); } static boolean isOverlayShowing() { return instance != null && instance.overlayView != null && instance.overlayView.getVisibility() == VISIBLE; } @Override public IBinder onBind(Intent intent) { // Not used return null; } @Override public void onCreate() { super.onCreate(); instance = this; windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); overlayView = new OverlayView(this); overlayView.setBackgroundColor(Color.parseColor("#30A4D9")); overlayView.setImageResource(R.drawable.novoda); windowManager.addView(overlayView, OverlayView.createLayoutParams(getResources())); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (overlayView != null) { overlayView.setVisibility(shouldShow(intent) ? VISIBLE : GONE); } return super.onStartCommand(intent, flags, startId); } private boolean shouldShow(Intent intent) { return intent.getBooleanExtra(EXTRA_SHOW, true); } @Override public void onDestroy() { instance = null; if (overlayView != null) { windowManager.removeView(overlayView); } super.onDestroy(); } }