package com.stardust.scriptdroid.external.floatingwindow;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import com.stardust.enhancedfloaty.FloatyService;
import com.stardust.enhancedfloaty.FloatyWindow;
/**
* Created by Stardust on 2017/5/9.
*/
public class OverlayPermissionChecker {
public interface Callback {
void onCheckResult(boolean granted);
}
private OnePixelWindow mOnePixelWindow = new OnePixelWindow();
private Callback mCallback;
private Context mContext;
private Handler mHandler;
private Boolean mCheckResult = null;
public OverlayPermissionChecker(Context context) {
mContext = context;
mHandler = new Handler(context.getMainLooper());
}
public void check() {
mCheckResult = null;
try {
FloatyService.addWindow(mOnePixelWindow);
mContext.startService(new Intent(mContext, FloatyService.class));
} catch (WindowManager.BadTokenException e) {
onCheckResult(false);
}
}
public void check(int timeOut) {
check();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (mCheckResult == null) {
onCheckResult(false);
}
}
}, timeOut);
}
public void setCallback(Callback callback) {
mCallback = callback;
}
private void onCheckResult(boolean b) {
mCheckResult = b;
if (mCallback != null) {
mCallback.onCheckResult(b);
}
}
private class OnePixelWindow implements FloatyWindow {
private View mOnePixelView;
private WindowManager mWindowManager;
@Override
public void onCreate(FloatyService floatyService, WindowManager windowManager) {
mWindowManager = windowManager;
mOnePixelView = new View(floatyService) {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
notifyWindowVisible();
}
@Override
protected void onWindowVisibilityChanged(int visibility) {
super.onWindowVisibilityChanged(visibility);
}
};
mOnePixelView.setWillNotDraw(false);
mOnePixelView.setBackgroundColor(Color.RED);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(10, 10,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.START;
windowManager.addView(mOnePixelView, params);
}
private void notifyWindowVisible() {
onCheckResult(true);
//close();
}
@Override
public void onServiceDestroy(FloatyService floatyService) {
close();
}
@Override
public void close() {
mWindowManager.removeView(mOnePixelView);
FloatyService.removeWindow(this);
}
}
}