
package com.rn.calltime;

import android.app.Activity;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;

import javax.annotation.Nullable;

public class RNCalltimeModule extends ReactContextBaseJavaModule {

    private final ReactApplicationContext reactContext;

    // 通话监听
    private TelephonyManager tm;
    private MyPhoneListener MyPhoneListener;
    private long callTime;// 通话时长
    private long firstCallTime;// 点击拨号时候的时间
    private boolean isCall = false;// 是否拨打过电话

    public RNCalltimeModule(ReactApplicationContext reactContext) {
        super(reactContext);
        this.reactContext = reactContext;
    }

    /**
     * 初始化
     */
    public void init() {
        final Activity activity = getCurrentActivity();
        if (activity != null) {// 监听通话
            tm = (TelephonyManager) activity.getSystemService(activity.TELEPHONY_SERVICE);
            MyPhoneListener = new MyPhoneListener();
            tm.listen(MyPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
        }
        //
    }

    @Override
    public String getName() {
        return "RNCalltime";
    }

    /**
     * 向js端发送事件
     *
     * @param reactContext ReactContext对象
     * @param eventName    事件名称，即在js addListener的第一个参数
     * @param params       需要发送的变量对象
     */
    private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {
        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);
    }

    /**
     * 监听通话时长
     */
    class MyPhoneListener extends PhoneStateListener {
        WritableMap params = Arguments.createMap();

        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            super.onCallStateChanged(state, incomingNumber);
            switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:// 空闲
                System.err.println(" 空闲");
                if (isCall) {
                    callTime = System.currentTimeMillis() - firstCallTime;
                    System.out.printf("%d分%n", callTime);
                    params.putDouble("callTime", callTime);// 通话时长
                    params.putString("incomingNumber", incomingNumber);// 来电号码
                    sendEvent(reactContext, "onCallStateChanged", params);
                }
                break;
            case TelephonyManager.CALL_STATE_RINGING:// 响铃
                System.out.println("发现来电!!!!!");
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:// 通话状态
                isCall = true;
                firstCallTime = System.currentTimeMillis();
                System.out.println("通话状态!!!!!");
                params.putBoolean("isCall", isCall);// 是否处于通话状态
                sendEvent(reactContext, "onCallStateChanged", params);
                break;
            default:
                break;
            }

        }
    }
}