mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-07 06:39:45 +00:00
change image picker code for activity instead controller
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
parent
f44c528b4f
commit
60534aca61
@ -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?) {
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user