package com.bell.floatlayoutdemo;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;

import java.util.Random;

/**
 * @Info
 * @Auth Bello
 * @Time 18/1/7 上午1:21
 * @Ver
 */

public class Main2Service extends Service implements View.OnClickListener, View.OnTouchListener {

    private static final String TAG = "Main2Service";

    RelativeLayout baseLayout;
    WindowManager.LayoutParams params;
    WindowManager windowManager;

    ImageView imageButton1;

    //状态栏高度.
    int statusBarHeight = -1;
    private FloatView f1;
    private FloatView f2;
    private float x1, y1, x2, y2;
    private int d;

    //不与Activity进行绑定.
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        createTouche();
    }

    private void createTouche() {
        //赋值WindowManager&LayoutParam.
        params = new WindowManager.LayoutParams();
        windowManager = (WindowManager) getApplication().getSystemService(Context.WINDOW_SERVICE);
        //设置type.系统提示型窗口，一般都在应用程序窗口之上.
        params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
        //设置效果为背景透明.
        params.format = PixelFormat.RGBA_8888;
        //设置flags.不可聚焦及不可使用按钮对悬浮窗进行操控.
        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

        //设置窗口初始停靠位置.
        params.gravity = Gravity.LEFT | Gravity.TOP;
        params.x = 0;
        params.y = 300;

        //设置悬浮窗口长宽数据.
        params.width = windowManager.getDefaultDisplay().getWidth();
        params.height = 1080;

        LayoutInflater inflater = LayoutInflater.from(getApplication());
        //获取浮动窗口视图所在布局.
        baseLayout = (RelativeLayout) inflater.inflate(R.layout.float_window2, null);
        //添加baseLayout
        windowManager.addView(baseLayout, params);


        //主动计算出当前View的宽高信息.
        baseLayout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);

        //用于检测状态栏高度.
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            statusBarHeight = getResources().getDimensionPixelSize(resourceId);
        }
        Log.i(TAG, "状态栏高度为:" + statusBarHeight);

        baseLayout.findViewById(R.id.btn).setOnClickListener(this);
        baseLayout.findViewById(R.id.reset).setOnClickListener(this);

        f1 = baseLayout.findViewById(R.id.img1);
        f1.setOnTouchListener(this);
        f2 = baseLayout.findViewById(R.id.img2);
        f2.setOnTouchListener(this);

        //浮动窗口按钮.
        baseLayout.setOnClickListener(new View.OnClickListener() {
            long[] hints = new long[2];

            @Override
            public void onClick(View v) {
                Log.i(TAG, "点击了");
                System.arraycopy(hints, 1, hints, 0, hints.length - 1);
                hints[hints.length - 1] = SystemClock.uptimeMillis();
                if (SystemClock.uptimeMillis() - hints[0] >= 300) {
                    Log.i(TAG, "要执行");
                    Toast.makeText(Main2Service.this, "连续点击两次以退出", Toast.LENGTH_SHORT).show();
                } else {
                    Log.i(TAG, "即将关闭");
                    stopSelf();
                }
            }
        });
/*
        baseLayout.findViewById(R.id.float_300).setOnClickListener(this);
        baseLayout.findViewById(R.id.float_400).setOnClickListener(this);
        baseLayout.findViewById(R.id.float_500).setOnClickListener(this);
        baseLayout.findViewById(R.id.float_600).setOnClickListener(this);
        baseLayout.findViewById(R.id.float_700).setOnClickListener(this);
        baseLayout.findViewById(R.id.float_800).setOnClickListener(this);
        baseLayout.findViewById(R.id.float_900).setOnClickListener(this);
        baseLayout.findViewById(R.id.float_200).setOnClickListener(this);
*/
        /*imageButton1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                params.x = (int) event.getRawX() - 150;
                params.y = (int) event.getRawY() - 150 - statusBarHeight;
                windowManager.updateViewLayout(toucherLayout,params);
                return false;
            }
        });*/
    }

    @Override
    public void onDestroy() {
        windowManager.removeView(baseLayout);
        super.onDestroy();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn:
                ShellUtil.execShellCmd(getShellStr(d));
                break;
            case R.id.reset:
                f1.setX(0);
                f1.setY(0);
                f2.setX(0);
                f2.setY(0);
                break;
        }
    }


    public String getShellStr(int m) {
        int r1 = getRandomInt();
        int x1 = 700 + r1;
        int y1 = 1800 + r1;
        int m1 = (int) (m *1.34);
        return "input swipe " + x1 + " " + y1 + " " + x1 + " " + y1 + " " + (m1) + "";
    }

    public int getRandomInt() {
        Random random = new Random();
        return random.nextInt(15);
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()) {
            case MotionEvent.ACTION_UP:
                if (view.getId() == R.id.img1) {
                    x1 = view.getX();
                    y1 = view.getY();
                } else if (view.getId() == R.id.img2) {
                    x2 = view.getX();
                    y2 = view.getY();
                }

                Log.e("activity", "222 => " + x1 + ", " + y1 + ", " + x2 + ", " + y2);

                //计算时间
                double a = Math.pow((x2 - x1), 2);
                double b =  Math.pow((y2 - y1), 2);
                d = (int) Math.sqrt(a+b);

                Log.e("activity", "33 => " + a + ", " + b + ", " + d);

                break;
        }

        return false;
    }
}