2014-03-06 13:00:19 +01:00

97 lines
3.2 KiB
Java

package com.cradle.iitc_mobile.share;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.view.Window;
import com.cradle.iitc_mobile.IITC_FileManager;
import com.cradle.iitc_mobile.Log;
import com.cradle.iitc_mobile.R;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
@TargetApi(19)
public class SaveToFile extends Activity implements Runnable {
private static final int REQUEST_SAVE_FILE = 1;
private Uri mData;
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
if (requestCode == REQUEST_SAVE_FILE) {
if (resultCode != Activity.RESULT_OK || data == null) {
finish();
return;
}
mData = data.getData();
(new Thread(this)).start();
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarIndeterminate(true);
setProgressBarIndeterminateVisibility(true);
setContentView(R.layout.dialog_progressbar);
final Intent intent = getIntent();
if (!(intent.hasExtra(Intent.EXTRA_STREAM) || intent.hasExtra(Intent.EXTRA_TEXT))) {
setResult(RESULT_CANCELED);
finish();
return;
}
String filename = intent.getStringExtra(Intent.EXTRA_SUBJECT);
if (intent.hasExtra(Intent.EXTRA_STREAM)) {
final Uri src = intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (src.getLastPathSegment() != null) filename = src.getLastPathSegment();
}
final Intent request = new Intent(Intent.ACTION_CREATE_DOCUMENT)
.setType(intent.getType())
.addCategory(Intent.CATEGORY_OPENABLE)
.putExtra(Intent.EXTRA_TITLE, filename);
startActivityForResult(request, REQUEST_SAVE_FILE);
}
@Override
public void run() {
final Intent intent = getIntent();
if (mData == null) {
finish();
return;
}
try {
final ParcelFileDescriptor fdOut = getContentResolver().openFileDescriptor(mData, "w");
final FileOutputStream os = new FileOutputStream(fdOut.getFileDescriptor());
if (intent.hasExtra(Intent.EXTRA_STREAM)) {
final Uri src = intent.getParcelableExtra(Intent.EXTRA_STREAM);
final ParcelFileDescriptor fdIn = getContentResolver().openFileDescriptor(src, "r");
final FileInputStream is = new FileInputStream(fdIn.getFileDescriptor());
IITC_FileManager.copyStream(is, os, true);
} else if (intent.hasExtra(Intent.EXTRA_TEXT)) {
os.write(intent.getStringExtra(Intent.EXTRA_TEXT).getBytes());
os.close();
}
fdOut.close();
} catch (final IOException e) {
Log.w("Could not save file!", e);
}
finish();
}
}