97 lines
3.2 KiB
Java
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();
|
|
}
|
|
|
|
}
|