change image picker code for activity instead controller

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2023-04-17 16:34:55 +02:00
parent f44c528b4f
commit 60534aca61
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
2 changed files with 27 additions and 152 deletions

View File

@ -26,10 +26,9 @@ package com.nextcloud.talk.profile
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Bundle
import android.text.Editable
import android.text.TextUtils
import android.text.TextWatcher
@ -49,7 +48,6 @@ import com.github.dhaval2404.imagepicker.ImagePicker
import com.github.dhaval2404.imagepicker.ImagePicker.Companion.getError
import com.nextcloud.talk.R
import com.nextcloud.talk.activities.BaseActivity
import com.nextcloud.talk.activities.TakePhotoActivity
import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.data.user.model.User
@ -478,56 +476,6 @@ class ProfileActivity : BaseActivity() {
}
}
private fun sendSelectLocalFileIntent() {
with(this)
.provider(ImageProvider.GALLERY)
.crop()
.cropSquare()
.compress(MAX_SIZE)
.maxResultSize(MAX_SIZE, MAX_SIZE)
.createIntent { intent -> startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) }
}
private fun showBrowserScreen() {
val bundle = Bundle()
bundle.putString(KEY_MIME_TYPE_FILTER, IMAGE_PREFIX)
val avatarIntent = Intent(this, RemoteFileBrowserActivity::class.java)
avatarIntent.putExtras(bundle)
startActivityForResult(avatarIntent, REQUEST_CODE_SELECT_REMOTE_FILES)
}
private fun checkPermissionAndTakePicture() {
if (permissionUtil.isCameraPermissionGranted()) {
takePictureForAvatar()
} else {
requestPermissions(arrayOf(android.Manifest.permission.CAMERA), REQUEST_PERMISSION_CAMERA)
}
}
private fun takePictureForAvatar() {
startActivityForResult(TakePhotoActivity.createIntent(context), REQUEST_CODE_TAKE_PICTURE)
}
private fun handleAvatar(remotePath: String?) {
val uri = currentUser!!.baseUrl + "/index.php/apps/files/api/v1/thumbnail/512/512/" +
Uri.encode(remotePath, "/")
val downloadCall = ncApi.downloadResizedImage(
ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token),
uri
)
downloadCall.enqueue(object : Callback<ResponseBody> {
override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
saveBitmapAndPassToImagePicker(BitmapFactory.decodeStream(response.body()!!.byteStream()))
}
override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
// unused atm
}
})
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == REQUEST_PERMISSION_CAMERA) {
@ -541,51 +489,6 @@ class ProfileActivity : BaseActivity() {
}
}
// only possible with API26
private fun saveBitmapAndPassToImagePicker(bitmap: Bitmap) {
val file: File = saveBitmapToTempFile(bitmap) ?: return
openImageWithPicker(file)
}
private fun saveBitmapToTempFile(bitmap: Bitmap): File? {
try {
val file = createTempFileForAvatar()
try {
FileOutputStream(file).use { out ->
bitmap.compress(Bitmap.CompressFormat.PNG, FULL_QUALITY, out)
}
return file
} catch (e: IOException) {
Log.e(TAG, "Error compressing bitmap", e)
}
} catch (e: IOException) {
Log.e(TAG, "Error creating temporary avatar image", e)
}
return null
}
private fun createTempFileForAvatar(): File {
FileUtils.removeTempCacheFile(
this.context,
AVATAR_PATH
)
return FileUtils.getTempCacheFile(
context,
AVATAR_PATH
)
}
private fun openImageWithPicker(file: File) {
with(this)
.provider(ImageProvider.URI)
.crop()
.cropSquare()
.compress(MAX_SIZE)
.maxResultSize(MAX_SIZE, MAX_SIZE)
.setUri(Uri.fromFile(file))
.createIntent { intent -> startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) }
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (resultCode) {
@ -603,22 +506,6 @@ class ProfileActivity : BaseActivity() {
Log.i(TAG, "Task Cancelled")
}
}
// if (requestCode == REQUEST_CODE_IMAGE_PICKER) {
// val uri: Uri = data?.data!!
// uploadAvatar(uri.toFile())
// } else if (requestCode == REQUEST_CODE_SELECT_REMOTE_FILES) {
// val pathList = data?.getStringArrayListExtra(RemoteFileBrowserActivity.EXTRA_SELECTED_PATHS)
// if (pathList?.size!! >= 1) {
// handleAvatar(pathList[0])
// }
// } else if (requestCode == REQUEST_CODE_TAKE_PICTURE) {
// data?.data?.path?.let {
// openImageWithPicker(File(it))
// }
// } else {
// Log.w(TAG, "Unknown intent request code")
// }
}
private fun uploadAvatar(file: File?) {

View File

@ -32,7 +32,6 @@ import com.github.dhaval2404.imagepicker.constant.ImageProvider
import com.nextcloud.talk.activities.TakePhotoActivity
import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.controllers.base.BaseController
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity
import com.nextcloud.talk.utils.bundle.BundleKeys
@ -48,7 +47,7 @@ import javax.inject.Inject
@AutoInjector(NextcloudTalkApplication::class)
class PickImage(
private val controller: BaseController,
private val activity: Activity,
private var currentUser: User?
) {
@ -63,54 +62,44 @@ class PickImage(
}
fun selectLocal() {
val activity = controller.activity
if (activity != null) {
ImagePicker.Companion.with(activity)
.provider(ImageProvider.GALLERY)
.crop()
.cropSquare()
.compress(MAX_SIZE)
.maxResultSize(MAX_SIZE, MAX_SIZE)
.createIntent { intent -> controller.startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) }
}
ImagePicker.Companion.with(activity)
.provider(ImageProvider.GALLERY)
.crop()
.cropSquare()
.compress(MAX_SIZE)
.maxResultSize(MAX_SIZE, MAX_SIZE)
.createIntent { intent -> this.activity.startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) }
}
private fun selectLocal(file: File) {
val activity = controller.activity
if (activity != null) {
ImagePicker.Companion.with(activity)
.provider(ImageProvider.URI)
.crop()
.cropSquare()
.compress(MAX_SIZE)
.maxResultSize(MAX_SIZE, MAX_SIZE)
.setUri(Uri.fromFile(file))
.createIntent { intent -> controller.startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) }
}
ImagePicker.Companion.with(activity)
.provider(ImageProvider.URI)
.crop()
.cropSquare()
.compress(MAX_SIZE)
.maxResultSize(MAX_SIZE, MAX_SIZE)
.setUri(Uri.fromFile(file))
.createIntent { intent -> this.activity.startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) }
}
fun selectRemote() {
val activity = controller.activity
if (activity != null) {
val bundle = Bundle()
bundle.putString(BundleKeys.KEY_MIME_TYPE_FILTER, Mimetype.IMAGE_PREFIX)
val bundle = Bundle()
bundle.putString(BundleKeys.KEY_MIME_TYPE_FILTER, Mimetype.IMAGE_PREFIX)
val avatarIntent = Intent(activity, RemoteFileBrowserActivity::class.java)
avatarIntent.putExtras(bundle)
val avatarIntent = Intent(activity, RemoteFileBrowserActivity::class.java)
avatarIntent.putExtras(bundle)
controller.startActivityForResult(avatarIntent, REQUEST_CODE_SELECT_REMOTE_FILES)
}
this.activity.startActivityForResult(avatarIntent, REQUEST_CODE_SELECT_REMOTE_FILES)
}
fun takePicture() {
if (permissionUtil.isCameraPermissionGranted()) {
controller.startActivityForResult(
TakePhotoActivity.createIntent(controller.context),
activity.startActivityForResult(
TakePhotoActivity.createIntent(activity),
REQUEST_CODE_TAKE_PICTURE
)
} else {
controller.requestPermissions(
activity.requestPermissions(
arrayOf(android.Manifest.permission.CAMERA),
REQUEST_PERMISSION_CAMERA
)
@ -160,17 +149,16 @@ class PickImage(
private fun createTempFileForAvatar(): File {
FileUtils.removeTempCacheFile(
controller.context,
activity,
AVATAR_PATH
)
return FileUtils.getTempCacheFile(
controller.context,
activity,
AVATAR_PATH
)
}
fun handleActivityResult(requestCode: Int, resultCode: Int, data: Intent?, handleImage: (uri: Uri) -> Unit) {
if (resultCode != Activity.RESULT_OK) {
Log.w(
TAG,