/*
LinkingServiceDiscoveryProfile.java
Copyright (c) 2016 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.deviceplugin.linking.profile;
import android.content.Intent;
import android.os.Bundle;
import org.deviceconnect.android.deviceplugin.linking.LinkingApplication;
import org.deviceconnect.android.deviceplugin.linking.LinkingDevicePluginService;
import org.deviceconnect.android.deviceplugin.linking.beacon.LinkingBeaconManager;
import org.deviceconnect.android.profile.ServiceDiscoveryProfile;
import org.deviceconnect.android.profile.api.DConnectApi;
import org.deviceconnect.android.profile.api.GetApi;
import org.deviceconnect.android.service.DConnectService;
import org.deviceconnect.android.service.DConnectServiceProvider;
import org.deviceconnect.message.DConnectMessage;
import java.util.ArrayList;
import java.util.List;
public class LinkingServiceDiscoveryProfile extends ServiceDiscoveryProfile {
private static final int TIMEOUT = 20 * 1000;
private LinkingDevicePluginService mService;
public LinkingServiceDiscoveryProfile(final LinkingDevicePluginService service, final DConnectServiceProvider provider) {
super(provider);
mService = service;
addApi(mServiceDiscoveryApi);
}
private final DConnectApi mServiceDiscoveryApi = new GetApi() {
@Override
public boolean onRequest(final Intent request, final Intent response) {
LinkingBeaconManager mgr = getLinkingBeaconManager();
mgr.startBeaconScanWithTimeout(TIMEOUT);
mService.refreshDevices();
List<Bundle> serviceBundles = new ArrayList<>();
for (DConnectService service : getServiceProvider().getServiceList()) {
Bundle serviceBundle = new Bundle();
setId(serviceBundle, service.getId());
setType(serviceBundle, service.getNetworkType());
setName(serviceBundle, service.getName());
setOnline(serviceBundle, service.isOnline());
if (service.getConfig() != null) {
setConfig(serviceBundle, service.getConfig());
}
setScopes(serviceBundle, service);
serviceBundles.add(serviceBundle);
}
setServices(response, serviceBundles);
setResult(response, DConnectMessage.RESULT_OK);
return true;
}
};
private LinkingBeaconManager getLinkingBeaconManager() {
LinkingApplication app = getLinkingApplication();
return app.getLinkingBeaconManager();
}
private LinkingApplication getLinkingApplication() {
LinkingDevicePluginService service = (LinkingDevicePluginService) getContext();
return (LinkingApplication) service.getApplication();
}
}