mirror of
https://github.com/TeamVanced/VancedMicroG
synced 2025-01-23 09:27:31 +01:00
Discovery cleanup
This commit is contained in:
parent
84299d4cfd
commit
3c3e391232
2
extern/GmsApi
vendored
2
extern/GmsApi
vendored
@ -1 +1 @@
|
|||||||
Subproject commit e5dfb2e459f0196642c17fa04368874677f4e38b
|
Subproject commit 9b04f236b58bd43b5e9d735c6e676b5eb30502ed
|
@ -27,7 +27,7 @@ dependencies {
|
|||||||
implementation "com.takisoft.fix:preference-v7:$supportLibraryVersion.0"
|
implementation "com.takisoft.fix:preference-v7:$supportLibraryVersion.0"
|
||||||
implementation "de.hdodenhof:circleimageview:1.3.0"
|
implementation "de.hdodenhof:circleimageview:1.3.0"
|
||||||
implementation "com.squareup.wire:wire-runtime:1.6.1"
|
implementation "com.squareup.wire:wire-runtime:1.6.1"
|
||||||
implementation "su.litvak.chromecast:api-v2:0.10.3-SNAPSHOT"
|
implementation "su.litvak.chromecast:api-v2:0.10.4-SNAPSHOT"
|
||||||
|
|
||||||
// Specified manually due to
|
// Specified manually due to
|
||||||
// https://github.com/vitalidze/chromecast-java-api-v2/issues/91
|
// https://github.com/vitalidze/chromecast-java-api-v2/issues/91
|
||||||
|
@ -71,18 +71,6 @@ public class CastContextImpl extends ICastContext.Stub {
|
|||||||
.addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
|
.addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
|
||||||
.addControlCategory(defaultCategory)
|
.addControlCategory(defaultCategory)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// TODO: Find a home for this once the rest of the implementation
|
|
||||||
// becomes more clear. Uncomment this to enable discovery of devices.
|
|
||||||
// Note that the scan currently isn't ever disabled as part of the
|
|
||||||
// lifecycle, so we don't want to ship with this.
|
|
||||||
/*
|
|
||||||
Bundle selectorBundle = this.mergedSelector.asBundle();
|
|
||||||
|
|
||||||
router.clearCallbacks();
|
|
||||||
router.registerMediaRouterCallbackImpl(selectorBundle, new MediaRouterCallbackImpl(this));
|
|
||||||
router.addCallback(selectorBundle, MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -53,6 +53,7 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
|
|||||||
private static final String TAG = CastMediaRouteProvider.class.getSimpleName();
|
private static final String TAG = CastMediaRouteProvider.class.getSimpleName();
|
||||||
|
|
||||||
private Map<String, CastDevice> castDevices = new HashMap<String, CastDevice>();
|
private Map<String, CastDevice> castDevices = new HashMap<String, CastDevice>();
|
||||||
|
private Map<String, String> serviceCastIds = new HashMap<String, String>();
|
||||||
|
|
||||||
private NsdManager mNsdManager;
|
private NsdManager mNsdManager;
|
||||||
private NsdManager.DiscoveryListener mDiscoveryListener;
|
private NsdManager.DiscoveryListener mDiscoveryListener;
|
||||||
@ -180,7 +181,6 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDiscoveryStarted(String regType) {
|
public void onDiscoveryStarted(String regType) {
|
||||||
Log.d(TAG, "DiscoveryListener unimplemented Method: onDiscoveryStarted");
|
|
||||||
CastMediaRouteProvider.this.state = State.DISCOVERING;
|
CastMediaRouteProvider.this.state = State.DISCOVERING;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +189,10 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
|
|||||||
mNsdManager.resolveService(service, new NsdManager.ResolveListener() {
|
mNsdManager.resolveService(service, new NsdManager.ResolveListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
|
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
|
||||||
Log.e(TAG, "DiscoveryListener unimplemented Method: Resolve failed" + errorCode);
|
if (errorCode == NsdManager.FAILURE_ALREADY_ACTIVE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Log.e(TAG, "DiscoveryListener Resolve failed. Error code " + errorCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -197,16 +200,21 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
|
|||||||
String name = serviceInfo.getServiceName();
|
String name = serviceInfo.getServiceName();
|
||||||
InetAddress host = serviceInfo.getHost();
|
InetAddress host = serviceInfo.getHost();
|
||||||
int port = serviceInfo.getPort();
|
int port = serviceInfo.getPort();
|
||||||
|
Map<String, byte[]> attributes = serviceInfo.getAttributes();
|
||||||
|
if (attributes == null) {
|
||||||
|
Log.e(TAG, "Error getting service attributes from DNS-SD response");
|
||||||
|
return;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
String id = new String(serviceInfo.getAttributes().get("id"), "UTF-8");
|
String id = new String(attributes.get("id"), "UTF-8");
|
||||||
String deviceVersion = new String(serviceInfo.getAttributes().get("ve"), "UTF-8");
|
String deviceVersion = new String(attributes.get("ve"), "UTF-8");
|
||||||
String friendlyName = new String(serviceInfo.getAttributes().get("fn"), "UTF-8");
|
String friendlyName = new String(attributes.get("fn"), "UTF-8");
|
||||||
String modelName = new String(serviceInfo.getAttributes().get("md"), "UTF-8");
|
String modelName = new String(attributes.get("md"), "UTF-8");
|
||||||
String iconPath = new String(serviceInfo.getAttributes().get("ic"), "UTF-8");
|
String iconPath = new String(attributes.get("ic"), "UTF-8");
|
||||||
int status = Integer.parseInt(new String(serviceInfo.getAttributes().get("st"), "UTF-8"));
|
int status = Integer.parseInt(new String(attributes.get("st"), "UTF-8"));
|
||||||
|
|
||||||
onChromeCastDiscovered(id, name, host, port, deviceVersion, friendlyName, modelName, iconPath, status);
|
onChromeCastDiscovered(id, name, host, port, deviceVersion, friendlyName, modelName, iconPath, status);
|
||||||
} catch (UnsupportedEncodingException ex) {
|
} catch (UnsupportedEncodingException | NullPointerException ex) {
|
||||||
Log.e(TAG, "Error getting cast details from DNS-SD response", ex);
|
Log.e(TAG, "Error getting cast details from DNS-SD response", ex);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -215,26 +223,23 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onServiceLost(NsdServiceInfo service) {
|
public void onServiceLost(NsdServiceInfo serviceInfo) {
|
||||||
Log.d(TAG, "DiscoveryListener unimplemented Method: onServiceLost" + service);
|
String name = serviceInfo.getServiceName();
|
||||||
// TODO: Remove chromecast route.
|
onChromeCastLost(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDiscoveryStopped(String serviceType) {
|
public void onDiscoveryStopped(String serviceType) {
|
||||||
Log.i(TAG, "DiscoveryListener unimplemented Method: onDiscoveryStopped " + serviceType);
|
|
||||||
CastMediaRouteProvider.this.state = State.NOT_DISCOVERING;
|
CastMediaRouteProvider.this.state = State.NOT_DISCOVERING;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
|
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
|
||||||
Log.e(TAG, "DiscoveryListener unimplemented Method: onStartDiscoveryFailed: Error code:" + errorCode);
|
|
||||||
CastMediaRouteProvider.this.state = State.NOT_DISCOVERING;
|
CastMediaRouteProvider.this.state = State.NOT_DISCOVERING;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
|
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
|
||||||
Log.e(TAG, "DiscoveryListener unimplemented Method: onStopDiscoveryFailed: Error code:" + errorCode);
|
|
||||||
CastMediaRouteProvider.this.state = State.DISCOVERING;
|
CastMediaRouteProvider.this.state = State.DISCOVERING;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -250,15 +255,19 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
|
|||||||
|
|
||||||
CastDevice castDevice = new CastDevice(id, name, host, port, deviceVersion, friendlyName, modelName, iconPath, status, capabilities);
|
CastDevice castDevice = new CastDevice(id, name, host, port, deviceVersion, friendlyName, modelName, iconPath, status, capabilities);
|
||||||
this.castDevices.put(id, castDevice);
|
this.castDevices.put(id, castDevice);
|
||||||
|
this.serviceCastIds.put(name, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
Handler mainHandler = new Handler(this.getContext().getMainLooper());
|
publishRoutesInMainThread();
|
||||||
mainHandler.post(new Runnable() {
|
}
|
||||||
@Override
|
|
||||||
public void run() {
|
private void onChromeCastLost(String name) {
|
||||||
publishRoutes();
|
String id = this.serviceCastIds.remove(name);
|
||||||
}
|
if (id != null) {
|
||||||
});
|
this.castDevices.remove(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
publishRoutesInMainThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -289,6 +298,16 @@ public class CastMediaRouteProvider extends MediaRouteProvider {
|
|||||||
return new CastMediaRouteController(this, routeId, castDevice.getAddress());
|
return new CastMediaRouteController(this, routeId, castDevice.getAddress());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void publishRoutesInMainThread() {
|
||||||
|
Handler mainHandler = new Handler(this.getContext().getMainLooper());
|
||||||
|
mainHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
publishRoutes();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void publishRoutes() {
|
private void publishRoutes() {
|
||||||
MediaRouteProviderDescriptor.Builder builder = new MediaRouteProviderDescriptor.Builder();
|
MediaRouteProviderDescriptor.Builder builder = new MediaRouteProviderDescriptor.Builder();
|
||||||
for (CastDevice castDevice : this.castDevices.values()) {
|
for (CastDevice castDevice : this.castDevices.values()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user