package ezy.demo.settingscompat;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.TextView;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import ezy.assist.compat.RomUtil;
import ezy.assist.compat.SettingsCompat;


public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    TextView vResult;
    FloatView vFloat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        vFloat = new FloatView(this);
        vResult = (TextView) findViewById(R.id.result);

        findViewById(R.id.result).setOnClickListener(this);
        findViewById(R.id.check).setOnClickListener(this);
        findViewById(R.id.manage).setOnClickListener(this);
        findViewById(R.id.toggle).setOnClickListener(this);
        findViewById(R.id.detail).setOnClickListener(this);

        TextView tv = (TextView) findViewById(R.id.info);
        tv.setMovementMethod(ScrollingMovementMethod.getInstance());

        tv.setText(readString("/system/build.prop"));
        if (SettingsCompat.canDrawOverlays(this)) {
            vFloat.attach();
        } else {
            vFloat.detach();
        }
    }

    void checkPermission() {
        if (SettingsCompat.canDrawOverlays(this)) {
            vResult.setText(RomUtil.getVersion() + "\n" + RomUtil.getName() + "\ngranted");
//            vFloat.attach();
        } else {
            vResult.setText(RomUtil.getVersion() + "\n" +RomUtil.getName() + "\ndenied");
//            vFloat.detach();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        checkPermission();
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.detail:
            Intent intent1 = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent1.setData(Uri.fromParts("package", this.getPackageName(), null));
            startActivity(intent1);
            break;
        case R.id.result:
            ClipboardManager manager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
            manager.setPrimaryClip(ClipData.newPlainText("build.prop", readString("/system/build.prop")));
            break;
        case R.id.check:
            checkPermission();
            if (SettingsCompat.canDrawOverlays(this)) {
                vFloat.attach();
            } else {
                vFloat.detach();
            }
            break;
        case R.id.manage:
            SettingsCompat.manageDrawOverlays(this);
            break;
        case R.id.toggle:
            boolean granted1 = SettingsCompat.canDrawOverlays(this);
            SettingsCompat.setDrawOverlays(this, !granted1);
            boolean granted2 = SettingsCompat.canDrawOverlays(this);
            vResult.setText(RomUtil.getVersion() + "\n" +RomUtil.getName() + "\ngranted: " + granted1 + ", " + granted2);
            if (granted2) {
                vFloat.attach();
            } else {
                vFloat.detach();
            }
            break;

        }
    }

    public static String readString(String file) {
        InputStream input = null;
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        try {
            input = new FileInputStream(new File(file));
            byte[] buffer = new byte[1024 * 4];
            int n;
            while (-1 != (n = input.read(buffer))) {
                output.write(buffer, 0, n);
            }
            output.flush();
            return output.toString("UTF-8");
        } catch (IOException e) {
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (output != null) {
                try {
                    output.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return "";
    }
}