diff --git a/mobile/res/drawable-hdpi/ic_action_save.png b/mobile/res/drawable-hdpi/ic_action_save.png new file mode 100644 index 00000000..0fe36a1e Binary files /dev/null and b/mobile/res/drawable-hdpi/ic_action_save.png differ diff --git a/mobile/res/drawable-mdpi/ic_action_save.png b/mobile/res/drawable-mdpi/ic_action_save.png new file mode 100644 index 00000000..664260d8 Binary files /dev/null and b/mobile/res/drawable-mdpi/ic_action_save.png differ diff --git a/mobile/res/drawable-xhdpi/ic_action_save.png b/mobile/res/drawable-xhdpi/ic_action_save.png new file mode 100644 index 00000000..dde278b5 Binary files /dev/null and b/mobile/res/drawable-xhdpi/ic_action_save.png differ diff --git a/mobile/res/drawable-xxhdpi/ic_action_save.png b/mobile/res/drawable-xxhdpi/ic_action_save.png new file mode 100644 index 00000000..ccf8c82c Binary files /dev/null and b/mobile/res/drawable-xxhdpi/ic_action_save.png differ diff --git a/mobile/src/com/cradle/iitc_mobile/share/SaveToFile.java b/mobile/src/com/cradle/iitc_mobile/share/SaveToFile.java new file mode 100644 index 00000000..f01e9dc9 --- /dev/null +++ b/mobile/src/com/cradle/iitc_mobile/share/SaveToFile.java @@ -0,0 +1,97 @@ +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) { + mData = data.getData(); + if (resultCode != Activity.RESULT_OK || mData == null) { + finish(); + return; + } + + (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(); + } + +}