package org.deviceconnect.android.deviceplugin.test.profile.unique; import android.content.Intent; import android.net.Uri; import org.deviceconnect.android.profile.DConnectProfile; import org.deviceconnect.android.profile.api.PostApi; import org.deviceconnect.android.profile.api.PutApi; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import static org.deviceconnect.message.DConnectMessage.RESULT_OK; public class TestDataProfile extends DConnectProfile { public TestDataProfile() { addApi(new PostApi() { @Override public boolean onRequest(final Intent request, final Intent response) { String uri = request.getStringExtra("uri"); if (uri != null) { response.putExtra("fileSize", getDataSize(uri)); } setResult(response, RESULT_OK); return true; } }); addApi(new PutApi() { @Override public boolean onRequest(final Intent request, final Intent response) { String uri = request.getStringExtra("uri"); if (uri != null) { response.putExtra("fileSize", getDataSize(uri)); } setResult(response, RESULT_OK); return true; } }); } @Override public String getProfileName() { return "dataTest"; } private long getDataSize(final String uri) { if (uri.startsWith("content://")) { InputStream in = null; try { in = getContext().getContentResolver().openInputStream(Uri.parse(uri)); return getDataSize(in); } catch (IOException e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } else { HttpURLConnection connection = null; InputStream inputStream = null; try { URL url = new URL(uri); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.connect(); inputStream = connection.getInputStream(); return getDataSize(inputStream); } catch (IOException e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } try { if (inputStream != null) { inputStream.close(); } } catch (IOException exception) { exception.printStackTrace(); } } } return -1; } private long getDataSize(InputStream in) throws IOException { long length = 0; byte[] buf = new byte[4096]; int len; while ((len = in.read(buf)) > 0) { length += len; } return length; } }