summaryrefslogtreecommitdiff
path: root/app/src/main/java/com/javispedro/vndroid/ScreenMirrorGrabber.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/javispedro/vndroid/ScreenMirrorGrabber.java')
-rw-r--r--app/src/main/java/com/javispedro/vndroid/ScreenMirrorGrabber.java36
1 files changed, 29 insertions, 7 deletions
diff --git a/app/src/main/java/com/javispedro/vndroid/ScreenMirrorGrabber.java b/app/src/main/java/com/javispedro/vndroid/ScreenMirrorGrabber.java
index 9f78b3c..c223c65 100644
--- a/app/src/main/java/com/javispedro/vndroid/ScreenMirrorGrabber.java
+++ b/app/src/main/java/com/javispedro/vndroid/ScreenMirrorGrabber.java
@@ -1,34 +1,50 @@
package com.javispedro.vndroid;
+import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.graphics.PixelFormat;
import android.hardware.display.DisplayManager;
import android.media.ImageReader;
import android.media.projection.MediaProjection;
+import android.media.projection.MediaProjectionManager;
import android.os.Handler;
-import android.support.annotation.NonNull;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
+import android.view.WindowManager;
public class ScreenMirrorGrabber extends ScreenGrabber {
private static final String TAG = ScreenMirrorGrabber.class.getSimpleName();
- protected final MediaProjection projection;
- protected final Display realDisplay;
+ protected MediaProjection projection;
- protected final DisplayMetrics realDisplayMetrics;
+ protected int projAskCode;
+ protected Intent projAskData;
+
+ protected Display realDisplay;
+ protected DisplayMetrics realDisplayMetrics;
private float scale = 0.5f;
- public ScreenMirrorGrabber(Context context, @NonNull MediaProjection proj, @NonNull Display display) {
+ public ScreenMirrorGrabber(Context context, MediaProjection proj) {
super(context);
projection = proj;
- realDisplay = display;
- realDisplayMetrics = new DisplayMetrics();
+ projAskCode = 0;
+ projAskData = null; // Already obtained
+ }
+
+ public ScreenMirrorGrabber(Context context, int projectionResultCode, Intent projectionResultData) {
+ super(context);
+ projection = null;
+ projAskCode = projectionResultCode;
+ projAskData = projectionResultData;
}
private void initDisplay() {
+ WindowManager wm = getSystemService(WindowManager.class);
+ realDisplay = wm.getDefaultDisplay();
+ realDisplayMetrics = new DisplayMetrics();
realDisplay.getRealMetrics(realDisplayMetrics);
Log.d(TAG, "real display size: " + realDisplayMetrics.widthPixels + "x" + realDisplayMetrics.heightPixels);
@@ -55,6 +71,12 @@ public class ScreenMirrorGrabber extends ScreenGrabber {
Log.w(TAG, "already started");
return;
}
+ if (projection == null && projAskCode == Activity.RESULT_OK) {
+ MediaProjectionManager manager = getSystemService(MediaProjectionManager.class);
+ projection = manager.getMediaProjection(projAskCode, projAskData);
+ projAskCode = 0;
+ projAskData = null;
+ }
initDisplay();
}