mirror of https://github.com/tasks/tasks
Fix saving files to Nextcloud
parent
1f659c3dc6
commit
3ada78b0f1
@ -1,80 +0,0 @@
|
|||||||
package org.tasks.activities;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.content.ContentResolver;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.provider.MediaStore;
|
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
import androidx.core.content.FileProvider;
|
|
||||||
|
|
||||||
import com.todoroo.astrid.utility.Constants;
|
|
||||||
|
|
||||||
import org.tasks.files.FileHelper;
|
|
||||||
import org.tasks.time.DateTime;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class CameraActivity extends AppCompatActivity {
|
|
||||||
|
|
||||||
private static final int REQUEST_CODE_CAMERA = 75;
|
|
||||||
private static final String EXTRA_URI = "extra_output";
|
|
||||||
|
|
||||||
private Uri uri;
|
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
|
||||||
uri = savedInstanceState.getParcelable(EXTRA_URI);
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
uri =
|
|
||||||
FileHelper.newFile(
|
|
||||||
this,
|
|
||||||
Uri.fromFile(getCacheDir()),
|
|
||||||
"image/jpeg",
|
|
||||||
new DateTime().toString("yyyyMMddHHmm"),
|
|
||||||
".jpeg");
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
if (!uri.getScheme().equals(ContentResolver.SCHEME_FILE)) {
|
|
||||||
throw new RuntimeException("Invalid Uri");
|
|
||||||
}
|
|
||||||
final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
|
||||||
final Uri shared =
|
|
||||||
FileProvider.getUriForFile(
|
|
||||||
this, Constants.FILE_PROVIDER_AUTHORITY, new File(uri.getPath()));
|
|
||||||
intent.putExtra(MediaStore.EXTRA_OUTPUT, shared);
|
|
||||||
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
|
||||||
startActivityForResult(intent, REQUEST_CODE_CAMERA);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
if (requestCode == REQUEST_CODE_CAMERA) {
|
|
||||||
if (resultCode == RESULT_OK) {
|
|
||||||
final Intent intent = new Intent();
|
|
||||||
intent.setData(uri);
|
|
||||||
setResult(RESULT_OK, intent);
|
|
||||||
}
|
|
||||||
finish();
|
|
||||||
} else {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onSaveInstanceState(Bundle outState) {
|
|
||||||
super.onSaveInstanceState(outState);
|
|
||||||
|
|
||||||
outState.putParcelable(EXTRA_URI, uri);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
package org.tasks.activities
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.app.Activity
|
||||||
|
import android.content.ContentResolver
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.provider.MediaStore
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.core.content.FileProvider
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import com.todoroo.astrid.utility.Constants
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import org.tasks.files.FileHelper.newFile
|
||||||
|
import org.tasks.time.DateTime
|
||||||
|
import java.io.File
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
|
class CameraActivity : AppCompatActivity() {
|
||||||
|
private var uri: Uri? = null
|
||||||
|
|
||||||
|
@SuppressLint("NewApi")
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
uri = savedInstanceState.getParcelable(EXTRA_URI)
|
||||||
|
} else {
|
||||||
|
lifecycleScope.launch {
|
||||||
|
try {
|
||||||
|
uri =
|
||||||
|
newFile(
|
||||||
|
this@CameraActivity,
|
||||||
|
Uri.fromFile(cacheDir),
|
||||||
|
"image/jpeg",
|
||||||
|
DateTime().toString("yyyyMMddHHmm"),
|
||||||
|
".jpeg"
|
||||||
|
)
|
||||||
|
} catch (e: IOException) {
|
||||||
|
throw RuntimeException(e)
|
||||||
|
}
|
||||||
|
if (uri!!.scheme != ContentResolver.SCHEME_FILE) {
|
||||||
|
throw RuntimeException("Invalid Uri")
|
||||||
|
}
|
||||||
|
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
||||||
|
val shared =
|
||||||
|
FileProvider.getUriForFile(
|
||||||
|
this@CameraActivity, Constants.FILE_PROVIDER_AUTHORITY, File(
|
||||||
|
uri!!.path!!
|
||||||
|
)
|
||||||
|
)
|
||||||
|
intent.putExtra(MediaStore.EXTRA_OUTPUT, shared)
|
||||||
|
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
|
||||||
|
startActivityForResult(intent, REQUEST_CODE_CAMERA)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
|
if (requestCode == REQUEST_CODE_CAMERA) {
|
||||||
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
|
val intent = Intent()
|
||||||
|
intent.setData(uri)
|
||||||
|
setResult(Activity.RESULT_OK, intent)
|
||||||
|
}
|
||||||
|
finish()
|
||||||
|
} else {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
|
super.onSaveInstanceState(outState)
|
||||||
|
|
||||||
|
outState.putParcelable(EXTRA_URI, uri)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val REQUEST_CODE_CAMERA = 75
|
||||||
|
private const val EXTRA_URI = "extra_output"
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue