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.app.Activity
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.net.Uri import android.net.Uri
import android.os.Bundle
import android.text.Editable import android.text.Editable
import android.text.TextUtils import android.text.TextUtils
import android.text.TextWatcher import android.text.TextWatcher
@ -49,7 +48,6 @@ import com.github.dhaval2404.imagepicker.ImagePicker
import com.github.dhaval2404.imagepicker.ImagePicker.Companion.getError import com.github.dhaval2404.imagepicker.ImagePicker.Companion.getError
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.activities.BaseActivity import com.nextcloud.talk.activities.BaseActivity
import com.nextcloud.talk.activities.TakePhotoActivity
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.data.user.model.User 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) { override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == REQUEST_PERMISSION_CAMERA) { 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?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
when (resultCode) { when (resultCode) {
@ -603,22 +506,6 @@ class ProfileActivity : BaseActivity() {
Log.i(TAG, "Task Cancelled") 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?) { 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.activities.TakePhotoActivity
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication 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.data.user.model.User
import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity
import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.bundle.BundleKeys
@ -48,7 +47,7 @@ import javax.inject.Inject
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
class PickImage( class PickImage(
private val controller: BaseController, private val activity: Activity,
private var currentUser: User? private var currentUser: User?
) { ) {
@ -63,21 +62,16 @@ class PickImage(
} }
fun selectLocal() { fun selectLocal() {
val activity = controller.activity
if (activity != null) {
ImagePicker.Companion.with(activity) ImagePicker.Companion.with(activity)
.provider(ImageProvider.GALLERY) .provider(ImageProvider.GALLERY)
.crop() .crop()
.cropSquare() .cropSquare()
.compress(MAX_SIZE) .compress(MAX_SIZE)
.maxResultSize(MAX_SIZE, MAX_SIZE) .maxResultSize(MAX_SIZE, MAX_SIZE)
.createIntent { intent -> controller.startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) } .createIntent { intent -> this.activity.startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) }
}
} }
private fun selectLocal(file: File) { private fun selectLocal(file: File) {
val activity = controller.activity
if (activity != null) {
ImagePicker.Companion.with(activity) ImagePicker.Companion.with(activity)
.provider(ImageProvider.URI) .provider(ImageProvider.URI)
.crop() .crop()
@ -85,32 +79,27 @@ class PickImage(
.compress(MAX_SIZE) .compress(MAX_SIZE)
.maxResultSize(MAX_SIZE, MAX_SIZE) .maxResultSize(MAX_SIZE, MAX_SIZE)
.setUri(Uri.fromFile(file)) .setUri(Uri.fromFile(file))
.createIntent { intent -> controller.startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) } .createIntent { intent -> this.activity.startActivityForResult(intent, REQUEST_CODE_IMAGE_PICKER) }
}
} }
fun selectRemote() { fun selectRemote() {
val activity = controller.activity
if (activity != null) {
val bundle = Bundle() val bundle = Bundle()
bundle.putString(BundleKeys.KEY_MIME_TYPE_FILTER, Mimetype.IMAGE_PREFIX) bundle.putString(BundleKeys.KEY_MIME_TYPE_FILTER, Mimetype.IMAGE_PREFIX)
val avatarIntent = Intent(activity, RemoteFileBrowserActivity::class.java) val avatarIntent = Intent(activity, RemoteFileBrowserActivity::class.java)
avatarIntent.putExtras(bundle) avatarIntent.putExtras(bundle)
controller.startActivityForResult(avatarIntent, REQUEST_CODE_SELECT_REMOTE_FILES) this.activity.startActivityForResult(avatarIntent, REQUEST_CODE_SELECT_REMOTE_FILES)
}
} }
fun takePicture() { fun takePicture() {
if (permissionUtil.isCameraPermissionGranted()) { if (permissionUtil.isCameraPermissionGranted()) {
controller.startActivityForResult( activity.startActivityForResult(
TakePhotoActivity.createIntent(controller.context), TakePhotoActivity.createIntent(activity),
REQUEST_CODE_TAKE_PICTURE REQUEST_CODE_TAKE_PICTURE
) )
} else { } else {
controller.requestPermissions( activity.requestPermissions(
arrayOf(android.Manifest.permission.CAMERA), arrayOf(android.Manifest.permission.CAMERA),
REQUEST_PERMISSION_CAMERA REQUEST_PERMISSION_CAMERA
) )
@ -160,17 +149,16 @@ class PickImage(
private fun createTempFileForAvatar(): File { private fun createTempFileForAvatar(): File {
FileUtils.removeTempCacheFile( FileUtils.removeTempCacheFile(
controller.context, activity,
AVATAR_PATH AVATAR_PATH
) )
return FileUtils.getTempCacheFile( return FileUtils.getTempCacheFile(
controller.context, activity,
AVATAR_PATH AVATAR_PATH
) )
} }
fun handleActivityResult(requestCode: Int, resultCode: Int, data: Intent?, handleImage: (uri: Uri) -> Unit) { fun handleActivityResult(requestCode: Int, resultCode: Int, data: Intent?, handleImage: (uri: Uri) -> Unit) {
if (resultCode != Activity.RESULT_OK) { if (resultCode != Activity.RESULT_OK) {
Log.w( Log.w(
TAG, TAG,