blob: cd0b84f88fae0ae1a29c8132fd88d364209866dc [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.x.media_sharing;
import android.app.Activity;
import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import io.v.v23.OptionDefs;
import io.v.v23.Options;
import io.v.v23.context.VContext;
import io.v.v23.vdl.TypedClientStream;
import io.v.v23.verror.VException;
/**
* Background task to stream media without blocking the UI thread.
*/
public class SendMediaTask extends AsyncTask<Void, Void, Void> {
private static final String TAG = "SendMediaTask";
Activity activity;
VContext vContext;
String targetName;
Uri uri;
String mimeType;
public SendMediaTask(Activity activity, VContext vContext, String targetName, Uri uri, String mimeType) {
this.activity = activity;
this.vContext = vContext;
this.targetName = targetName;
this.uri = uri;
this.mimeType = mimeType;
}
@Override
protected Void doInBackground(Void... params) {
try {
InputStream is = activity.getContentResolver().openInputStream(uri);
MediaSharingClient client = MediaSharingClientFactory.getMediaSharingClient(targetName);
// TODO(bprosnitz) Remove this option when possible. It is allows the app to connect
// without having the proper blessings.
Options opts = new Options();
opts.set(OptionDefs.SKIP_SERVER_ENDPOINT_AUTHORIZATION, true);
String mimeType = activity.getIntent().getType();
TypedClientStream<byte[], Void, Void> stream = client.displayBytes(vContext, mimeType, opts);
ClientByteOutputStream os = new ClientByteOutputStream(stream);
IOUtils.copy(is, os);
stream.finish();
Log.i(TAG, activity.getString(R.string.share_messsage_success));
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, R.string.share_messsage_success, Toast.LENGTH_LONG).show();
}
});
return null;
} catch (IOException|VException e) {
final String errorMessage = activity.getString(R.string.share_messsage_error) + ": " + e.toString();
Log.e(TAG, errorMessage);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, errorMessage, Toast.LENGTH_LONG).show();
}
});
throw new RuntimeException(e);
}
}
}