Add intents capability and handling to the server

This commit is contained in:
brunoais 2021-06-19 12:46:35 +01:00
commit fc97b00ac8
3 changed files with 56 additions and 1 deletions

View file

@ -0,0 +1,36 @@
package com.genymobile.scrcpy;
import java.io.IOException;
import java.util.*;
enum Intents {
START(1),
STOP(30),
CLEANED(31),
;
public static final String SCRCPY_PREFIX = "com.genymobile.scrcpy.";
int shift;
Intents(int shift) {
this.shift = shift;
}
public static EnumSet<Intents> fromBitSet(BitSet bits) {
EnumSet<Intents> es = EnumSet.allOf(Intents.class);
Iterator<Intents> it = es.iterator();
Intents intent;
while (it.hasNext()) {
intent = it.next();
if (!bits.get(intent.shift - 1)) {
it.remove();
}
}
return es;
}
public static String scrcpyPrefix(String unprefixed){
return SCRCPY_PREFIX + unprefixed;
}
}

View file

@ -2,6 +2,9 @@ package com.genymobile.scrcpy;
import android.graphics.Rect; import android.graphics.Rect;
import java.util.BitSet;
import java.util.EnumSet;
public class Options { public class Options {
private Ln.Level logLevel; private Ln.Level logLevel;
private int maxSize; private int maxSize;
@ -18,6 +21,7 @@ public class Options {
private String codecOptions; private String codecOptions;
private String encoderName; private String encoderName;
private boolean powerOffScreenOnClose; private boolean powerOffScreenOnClose;
private EnumSet<Intents> broadcastIntents;
public Ln.Level getLogLevel() { public Ln.Level getLogLevel() {
return logLevel; return logLevel;
@ -83,6 +87,10 @@ public class Options {
this.sendFrameMeta = sendFrameMeta; this.sendFrameMeta = sendFrameMeta;
} }
public void setBroadcastIntents(EnumSet<Intents> broadcastIntents) {
this.broadcastIntents = broadcastIntents;
}
public boolean getControl() { public boolean getControl() {
return control; return control;
} }
@ -138,4 +146,8 @@ public class Options {
public boolean getPowerOffScreenOnClose() { public boolean getPowerOffScreenOnClose() {
return this.powerOffScreenOnClose; return this.powerOffScreenOnClose;
} }
public EnumSet<Intents> getBroadcastIntents() {
return broadcastIntents;
}
} }

View file

@ -1,5 +1,7 @@
package com.genymobile.scrcpy; package com.genymobile.scrcpy;
import android.content.Intent;
import android.net.Uri;
import com.genymobile.scrcpy.wrappers.ContentProvider; import com.genymobile.scrcpy.wrappers.ContentProvider;
import android.graphics.Rect; import android.graphics.Rect;
@ -9,6 +11,8 @@ import android.os.BatteryManager;
import android.os.Build; import android.os.Build;
import java.io.IOException; import java.io.IOException;
import java.util.BitSet;
import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
@ -135,7 +139,7 @@ public final class Server {
"The server version (" + BuildConfig.VERSION_NAME + ") does not match the client " + "(" + clientVersion + ")"); "The server version (" + BuildConfig.VERSION_NAME + ") does not match the client " + "(" + clientVersion + ")");
} }
final int expectedParameters = 16; final int expectedParameters = 17;
if (args.length != expectedParameters) { if (args.length != expectedParameters) {
throw new IllegalArgumentException("Expecting " + expectedParameters + " parameters"); throw new IllegalArgumentException("Expecting " + expectedParameters + " parameters");
} }
@ -188,6 +192,9 @@ public final class Server {
boolean powerOffScreenOnClose = Boolean.parseBoolean(args[15]); boolean powerOffScreenOnClose = Boolean.parseBoolean(args[15]);
options.setPowerOffScreenOnClose(powerOffScreenOnClose); options.setPowerOffScreenOnClose(powerOffScreenOnClose);
EnumSet<Intents> broadcastIntents = Intents.fromBitSet(BitSet.valueOf(new long[]{Long.parseLong(args[16])}));
options.setBroadcastIntents(broadcastIntents);
return options; return options;
} }