package com.forfan.bigbang.component.activity.screen;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.media.projection.MediaProjectionManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.forfan.bigbang.R;
import com.forfan.bigbang.component.base.BaseActivity;
import com.forfan.bigbang.util.ArcTipViewController;
import com.forfan.bigbang.util.LogUtil;
import com.forfan.bigbang.util.ToastUtil;
import com.forfan.bigbang.view.MarkSizeView;
public class ScreenCaptureActivity extends BaseActivity {
private String TAG = "ScreenCaptureActivity";
private int result = 0;
private Intent intent = null;
private int REQUEST_MEDIA_PROJECTION = 1;
private MediaProjectionManager mMediaProjectionManager;
private MarkSizeView markSizeView;
private Rect markedArea;
private MarkSizeView.GraphicPath mGraphicPath;
private TextView captureTips;
private Button captureAll;
private Button markType;
private boolean isMarkRect=true;
private ScreenCapture screenCaptureService;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
ToastUtil.show(R.string.can_not_capture_under_5_0);
finish();
return;
}
ArcTipViewController.getInstance().showHideFloatImageView();
initWindow();
mMediaProjectionManager = (MediaProjectionManager) getApplication().getSystemService(Context.MEDIA_PROJECTION_SERVICE);
setContentView(R.layout.activity_screen_capture);
markSizeView = (MarkSizeView) findViewById(R.id.mark_size);
captureTips = (TextView) findViewById(R.id.capture_tips);
captureAll = (Button) findViewById(R.id.capture_all);
markType = (Button) findViewById(R.id.mark_type);
markType.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isMarkRect=!isMarkRect;
markSizeView.setIsMarkRect(isMarkRect);
markType.setText(isMarkRect?R.string.capture_type_rect:R.string.capture_type_free);
}
});
markSizeView.setmOnClickListener(new MarkSizeView.onClickListener() {
@Override
public void onConfirm(Rect markedArea) {
// boolean isFirst = SPHelper.getBoolean("is_fist", true);
// if(isFirst){
// ToastUtil.show(R.string.need_capture_perssion);
// }
ScreenCaptureActivity.this.markedArea = new Rect(markedArea);
markSizeView.reset();
markSizeView.setUnmarkedColor(getResources().getColor(R.color.transparent));
markSizeView.setEnabled(false);
startIntent();
}
@Override
public void onConfirm(MarkSizeView.GraphicPath path) {
mGraphicPath=path;
markSizeView.reset();
markSizeView.setUnmarkedColor(getResources().getColor(R.color.transparent));
markSizeView.setEnabled(false);
startIntent();
}
@Override
public void onCancel() {
captureTips.setVisibility(View.VISIBLE);
captureAll.setVisibility(View.VISIBLE);
markType.setVisibility(View.VISIBLE);
}
@Override
public void onTouch() {
captureTips.setVisibility(View.GONE);
captureAll.setVisibility(View.GONE);
markType.setVisibility(View.GONE);
}
});
captureAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// boolean isFirst = SPHelper.getBoolean("is_fist", true);
// if (isFirst) {
// ToastUtil.show(R.string.need_capture_perssion);
// }
markSizeView.setUnmarkedColor(getResources().getColor(R.color.transparent));
captureTips.setVisibility(View.GONE);
captureAll.setVisibility(View.GONE);
markType.setVisibility(View.GONE);
startIntent();
}
});
}
private void initWindow() {
getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.trans));
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void startIntent() {
new Handler().post(new Runnable() {
@Override
public void run() {
try {
startActivityForResult(mMediaProjectionManager.createScreenCaptureIntent(), REQUEST_MEDIA_PROJECTION);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
protected void onDestroy() {
if (screenCaptureService!=null)
screenCaptureService.onDestroy();
super.onDestroy();
}
private void startScreenCapture(Intent intent, int resultCode) {
screenCaptureService=new ScreenCapture(this ,intent, resultCode,markedArea,mGraphicPath);
try {
screenCaptureService.toCapture();
} catch (Throwable e) {
e.printStackTrace();
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
LogUtil.d(TAG, "进入了");
if (requestCode == REQUEST_MEDIA_PROJECTION) {
if (resultCode != Activity.RESULT_OK) {
return;
} else if (data != null && resultCode != 0) {
LogUtil.i(TAG, "user agree the application to capture screen");
result = resultCode;
intent = data;
startScreenCapture(data, resultCode);
LogUtil.i(TAG, "start service ScreenCaptureService");
}
}
}
}