package com.hdl.hdllinphonesdk.activity;
|
|
import android.content.BroadcastReceiver;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.content.IntentFilter;
|
import android.graphics.Bitmap;
|
import android.os.Bundle;
|
import android.os.CountDownTimer;
|
import android.os.SystemClock;
|
import android.text.TextUtils;
|
import android.util.DisplayMetrics;
|
import android.util.Log;
|
import android.view.TextureView;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.view.Window;
|
import android.widget.Chronometer;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.RelativeLayout;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.hdl.hdllinphonesdk.HDLLinphoneKit;
|
import com.hdl.hdllinphonesdk.callback.OnLPOpenDoorCallBack;
|
import com.hdl.hdllinphonesdk.R;
|
import com.hdl.hdllinphonesdk.utils.HDLImageUtils;
|
|
/**
|
* Linphone接听页面
|
*/
|
public class HDLLinphoneIntercomActivity extends LPCheckPermissionsActivity implements View.OnClickListener {
|
private static final String TAG = "HDLLinphoneIntercomActivity";
|
|
//控件
|
private TextView tv_lp_title;
|
private ImageView iv_lp_screenshot;
|
private ImageView iv_lp_unlock;
|
|
private ImageView iv_lp_hangUp;
|
private TextView tv_lp_hangUp;
|
|
private ImageView iv_lp_answer;
|
private TextView tv_lp_answer;
|
private RelativeLayout rl_lp_answerView;
|
|
private LinearLayout ll_video_lp_rendering;
|
private TextureView video_lp_rendering;
|
private TextureView video_lp_rendering2;
|
// private TextView tv_lp_calltime;
|
private Chronometer timer_lp_calltime ;
|
private TextView tv_lp_calltime;
|
|
//参数
|
private boolean isAnswer;//是否已经接听了
|
private int callTime;//通话时间
|
|
private CountDownTimer mCountDownTimer;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
// WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
setContentView(R.layout.activity_hdllinphone_intercom);
|
initView();
|
initData();
|
initOnClick();
|
initCallBack();
|
initCountDownTimer();
|
initLinphone();
|
|
}
|
|
/**
|
* onDestroy
|
*/
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
|
if (null != timer_lp_calltime) {
|
timer_lp_calltime.stop();
|
}
|
|
HDLLinphoneKit.getInstance().setOpenOpenDoorCallBack(null);
|
|
if (mCountDownTimer != null) {
|
mCountDownTimer.cancel();
|
mCountDownTimer = null;
|
}
|
|
if (mReceiver != null) {
|
unregisterReceiver(mReceiver);
|
}
|
HDLLinphoneKit.getInstance().onDestroy();
|
|
Log.i(TAG,"onDestroy");
|
|
}
|
|
|
/**
|
* initView
|
*/
|
private void initView() {
|
tv_lp_title = findViewById(R.id.tv_lp_title);
|
iv_lp_screenshot = findViewById(R.id.iv_lp_screenshot);
|
iv_lp_unlock = findViewById(R.id.iv_lp_unlock);
|
iv_lp_hangUp = findViewById(R.id.iv_lp_hangUp);
|
tv_lp_hangUp = findViewById(R.id.tv_lp_hangUp);
|
iv_lp_answer = findViewById(R.id.iv_lp_answer);
|
tv_lp_answer = findViewById(R.id.tv_lp_answer);
|
rl_lp_answerView = findViewById(R.id.rl_lp_answerView);
|
ll_video_lp_rendering = findViewById(R.id.ll_video_lp_rendering);
|
video_lp_rendering = findViewById(R.id.video_lp_rendering);
|
video_lp_rendering2 = findViewById(R.id.video_lp_rendering2);
|
// tv_lp_calltime = findViewById(R.id.tv_lp_calltime);
|
timer_lp_calltime = (Chronometer)findViewById(R.id.timer_lp_calltime);
|
tv_lp_calltime = findViewById(R.id.tv_lp_calltime);
|
setWidthHeightWithRatio(ll_video_lp_rendering,16,9);
|
}
|
|
/**
|
* initData
|
*/
|
private void initData(){
|
Bundle extras = getIntent().getExtras();
|
if(extras != null){
|
String titleName = extras.getString(HDLLinphoneKit.KEY_TITLE_NAME);
|
if(!TextUtils.isEmpty(titleName)){
|
tv_lp_title.setText(titleName);
|
}
|
}
|
}
|
|
/**
|
* 指定屏幕宽度 根据宽高比设置控件宽高
|
*/
|
public void setWidthHeightWithRatio(View view, int widthRatio, int heightRatio) {
|
DisplayMetrics outMetrics = new DisplayMetrics();
|
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
|
int width = outMetrics.widthPixels;
|
|
if (width <= 0) width = view.getWidth();
|
int height = width * heightRatio / widthRatio;
|
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
|
if (layoutParams != null) {
|
layoutParams.height = height;
|
layoutParams.width = width;
|
view.setLayoutParams(layoutParams);
|
}
|
}
|
/**
|
* init OnClickListener
|
*/
|
private void initOnClick() {
|
iv_lp_screenshot.setOnClickListener(this);
|
iv_lp_unlock.setOnClickListener(this);
|
iv_lp_hangUp.setOnClickListener(this);
|
tv_lp_hangUp.setOnClickListener(this);
|
iv_lp_answer.setOnClickListener(this);
|
tv_lp_answer.setOnClickListener(this);
|
}
|
|
/**
|
* 初始化开门回调事件
|
*/
|
void initCallBack(){
|
HDLLinphoneKit.getInstance().setOpenOpenDoorCallBack(new OnLPOpenDoorCallBack() {
|
@Override
|
public void onOpenSuccess() {
|
setOpenDoorSuccess();
|
}
|
|
@Override
|
public void onOpenError(String errorMes) {
|
showToast(getString(R.string.lp_unlockfailureStr) + errorMes);
|
}
|
});
|
}
|
|
/**
|
* 初始化开锁屏蔽倒计时
|
*/
|
void initCountDownTimer(){
|
|
mCountDownTimer = new CountDownTimer(10*1000, 1000) {
|
@Override
|
public void onTick(long millisUntilFinished) {
|
if (!HDLLinphoneIntercomActivity.this.isFinishing()) {
|
|
}
|
}
|
|
/**
|
*倒计时结束后调用的
|
*/
|
@Override
|
public void onFinish() {
|
// showToast("开锁onFinish");
|
iv_lp_unlock.setEnabled(true);
|
}
|
|
};
|
//
|
}
|
|
@Override
|
public void onClick(View view) {
|
int id = view.getId();
|
if (id == R.id.iv_lp_screenshot) {
|
//截图
|
onClickScreenshot();
|
} else if (id == R.id.iv_lp_unlock) {
|
//开锁
|
onClickUnlock();
|
} else if (id == R.id.iv_lp_hangUp || id == R.id.tv_lp_hangUp) {
|
//挂断
|
onClickHangUp();
|
} else if (id == R.id.iv_lp_answer || id == R.id.tv_lp_answer) {
|
//接听
|
onClickAnswer();
|
}
|
}
|
|
/**
|
* 截图点击事件
|
*/
|
private void onClickScreenshot() {
|
// Bitmap img = HDLImageUtils.createViewBitmap(video_lp_rendering);
|
Bitmap img = video_lp_rendering.getBitmap();
|
boolean isSuccess = HDLImageUtils.saveImageToGallery(this, img);
|
|
if(isSuccess){
|
showToast(getString(R.string.lp_saveToTheAlbumsStr));
|
}else {
|
showToast(getString(R.string.lp_operationFailedStr));
|
}
|
}
|
|
|
|
/**
|
* 开锁点击事件
|
*/
|
private void onClickUnlock() {
|
if (HDLLinphoneKit.getInstance().getOnHDLLinphoneCallListener() != null) {
|
HDLLinphoneKit.getInstance().getOnHDLLinphoneCallListener().onUnlockAction();
|
}
|
}
|
|
/**
|
* 挂断点击事件
|
*/
|
private void onClickHangUp() {
|
//1.挂断
|
HDLLinphoneKit.getInstance().hangUp();
|
//2.回调事件
|
if (HDLLinphoneKit.getInstance().getOnHDLLinphoneCallListener() != null) {
|
if (isAnswer) {
|
//如果之前已经接听了,回调是挂断
|
callTime = getTimerCallTime();
|
Log.i("callTime","callTime"+callTime);
|
HDLLinphoneKit.getInstance().getOnHDLLinphoneCallListener().onHangUpAction(callTime);
|
} else {
|
//如果之前没接听了,回调是拒接
|
HDLLinphoneKit.getInstance().getOnHDLLinphoneCallListener().onRejectCallAction();
|
}
|
}
|
//2.页面关闭
|
finish();
|
}
|
|
/**
|
* 接听按钮点击事件
|
*/
|
private void onClickAnswer() {
|
//1.接听
|
HDLLinphoneKit.getInstance().acceptCall();
|
isAnswer = true;
|
tv_lp_hangUp.setText(getString(R.string.lp_hangupStr));
|
setViewGone(rl_lp_answerView);
|
setViewGone(tv_lp_calltime);
|
setViewVisible(timer_lp_calltime);
|
startCallTimeCountdown();
|
//接听通知
|
if (HDLLinphoneKit.getInstance().getOnHDLLinphoneCallListener() != null) {
|
HDLLinphoneKit.getInstance().getOnHDLLinphoneCallListener().onAnswerAction();
|
}
|
}
|
|
/****************开锁成功********/
|
|
/**
|
* 开锁成功后,10s内不能重复开锁
|
* 开锁按钮禁用,倒计时结束后重新允许点击
|
*/
|
void setOpenDoorSuccess() {
|
showToast(getString(R.string.lp_unlockSuccessfullyStr));
|
iv_lp_unlock.setEnabled(false);
|
startOpenDoorCountdown();
|
}
|
/**
|
* 开启倒计时
|
*/
|
void startOpenDoorCountdown() {
|
mCountDownTimer.start();
|
}
|
/**
|
* 通话记录开启倒计时
|
*/
|
void startCallTimeCountdown() {
|
timer_lp_calltime.setBase(SystemClock.elapsedRealtime());//计时器清零
|
timer_lp_calltime.start();
|
}
|
int getTimerCallTime(){
|
int temp0 = Integer.parseInt(timer_lp_calltime.getText().toString().split(":")[0]);
|
int temp1 =Integer.parseInt(timer_lp_calltime.getText().toString().split(":")[1]);
|
return temp0 * 60 + temp1;
|
}
|
|
|
|
/****************封装常用方法********/
|
/**
|
* showToast
|
*/
|
private void showToast(String text) {
|
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
|
}
|
|
/**
|
* setViewVisible
|
*/
|
private static void setViewVisible(View view) {
|
if (view.getVisibility() != View.VISIBLE) {
|
view.setVisibility(View.VISIBLE);
|
}
|
}
|
|
/**
|
* setViewGone
|
*/
|
private static void setViewGone(View view) {
|
if (view.getVisibility() != View.GONE) {
|
view.setVisibility(View.GONE);
|
}
|
}
|
|
/**********LinPhone**********/
|
void initLinphone(){
|
IntentFilter intentFilter = new IntentFilter(RECEIVE_FINISH_VIDEO_ACTIVITY);
|
mReceiver = new FinishVideoActivityReceiver();
|
registerReceiver(mReceiver, intentFilter);
|
HDLLinphoneKit.getInstance().setAndroidVideoWindow(video_lp_rendering, video_lp_rendering2);
|
}
|
|
|
public class FinishVideoActivityReceiver extends BroadcastReceiver {
|
@Override
|
public void onReceive(Context context, Intent intent) {
|
HDLLinphoneIntercomActivity.this.finish();
|
}
|
}
|
|
private FinishVideoActivityReceiver mReceiver;
|
public static final String RECEIVE_FINISH_VIDEO_ACTIVITY = "receive_finish_video_activity";
|
|
|
}
|