Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-feature android:name="android.hardware.camera" android:required="true" />

<application
android:name=".OpenEventGeneral"
android:allowBackup="true"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import android.content.pm.PackageManager
import android.graphics.Bitmap
import org.fossasia.openevent.general.utils.ImageUtils.decodeBitmap
import android.os.Bundle
import android.provider.MediaStore
import android.util.Base64
import android.view.LayoutInflater
import android.view.View
Expand All @@ -27,6 +28,7 @@ import kotlinx.android.synthetic.main.fragment_edit_profile.view.firstName
import kotlinx.android.synthetic.main.fragment_edit_profile.view.details
import com.squareup.picasso.MemoryPolicy
import kotlinx.android.synthetic.main.dialog_edit_profile_image.view.editImage
import kotlinx.android.synthetic.main.dialog_edit_profile_image.view.takeImage
import kotlinx.android.synthetic.main.dialog_edit_profile_image.view.replaceImage
import kotlinx.android.synthetic.main.dialog_edit_profile_image.view.removeImage
import kotlinx.android.synthetic.main.fragment_edit_profile.view.lastName
Expand Down Expand Up @@ -58,10 +60,15 @@ class EditProfileFragment : Fragment(), ComplexBackPressFragment {
private val editProfileViewModel by viewModel<EditProfileViewModel>()
private val safeArgs: EditProfileFragmentArgs by navArgs()
private lateinit var rootView: View
private var permissionGranted = false
private var storagePermissionGranted = false
private val PICK_IMAGE_REQUEST = 100
private val READ_STORAGE = arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
private val REQUEST_CODE = 1
private val READ_STORAGE_REQUEST_CODE = 1

private var cameraPermissionGranted = false
private val TAKE_IMAGE_REQUEST = 101
private val CAMERA_REQUEST = arrayOf(Manifest.permission.CAMERA)
private val CAMERA_REQUEST_CODE = 2

private lateinit var userFirstName: String
private lateinit var userLastName: String
Expand Down Expand Up @@ -108,8 +115,10 @@ class EditProfileFragment : Fragment(), ComplexBackPressFragment {
.into(rootView.profilePhoto)
})

permissionGranted = (ContextCompat.checkSelfPermission(requireContext(),
storagePermissionGranted = (ContextCompat.checkSelfPermission(requireContext(),
Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)
cameraPermissionGranted = (ContextCompat.checkSelfPermission(requireContext(),
Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)

rootView.updateButton.setOnClickListener {
hideSoftKeyboard(context, rootView)
Expand All @@ -136,7 +145,9 @@ class EditProfileFragment : Fragment(), ComplexBackPressFragment {

override fun onActivityResult(requestCode: Int, resultCode: Int, intentData: Intent?) {
super.onActivityResult(requestCode, resultCode, intentData)
if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && intentData?.data != null) {
if (resultCode != Activity.RESULT_OK) return

if (requestCode == PICK_IMAGE_REQUEST && intentData?.data != null) {
val imageUri = intentData.data ?: return

try {
Expand All @@ -146,6 +157,12 @@ class EditProfileFragment : Fragment(), ComplexBackPressFragment {
} catch (e: FileNotFoundException) {
Timber.d(e, "File Not Found Exception")
}
} else if (requestCode == TAKE_IMAGE_REQUEST) {
val imageBitmap = intentData?.extras?.get("data")
if (imageBitmap is Bitmap) {
editProfileViewModel.encodedImage = imageBitmap.let { encodeImage(it) }
editProfileViewModel.avatarUpdated = true
}
}
}

Expand Down Expand Up @@ -203,12 +220,21 @@ class EditProfileFragment : Fragment(), ComplexBackPressFragment {
clearAvatar()
}

editImageView.takeImage.setOnClickListener {
dialog.cancel()
if (cameraPermissionGranted) {
takeImage()
} else {
requestPermissions(CAMERA_REQUEST, CAMERA_REQUEST_CODE)
}
}

editImageView.replaceImage.setOnClickListener {
dialog.cancel()
if (permissionGranted) {
if (storagePermissionGranted) {
showFileChooser()
} else {
requestPermissions(READ_STORAGE, REQUEST_CODE)
requestPermissions(READ_STORAGE, READ_STORAGE_REQUEST_CODE)
}
}
dialog.show()
Expand Down Expand Up @@ -250,6 +276,11 @@ class EditProfileFragment : Fragment(), ComplexBackPressFragment {
return "data:image/jpeg;base64," + Base64.encodeToString(bytes, Base64.DEFAULT)
}

private fun takeImage() {
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(intent, TAKE_IMAGE_REQUEST)
}

private fun showFileChooser() {
val intent = Intent()
intent.type = "image/*"
Expand All @@ -262,13 +293,21 @@ class EditProfileFragment : Fragment(), ComplexBackPressFragment {
permissions: Array<String>,
grantResults: IntArray
) {
if (requestCode == REQUEST_CODE) {
if (requestCode == READ_STORAGE_REQUEST_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
permissionGranted = true
rootView.snackbar(getString(R.string.storage_permission_granted_message))
storagePermissionGranted = true
rootView.snackbar(getString(R.string.permission_granted_message, getString(R.string.external_storage)))
showFileChooser()
} else {
rootView.snackbar(getString(R.string.storage_permission_denied_message))
rootView.snackbar(getString(R.string.permission_denied_message, getString(R.string.external_storage)))
}
} else if (requestCode == CAMERA_REQUEST_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
cameraPermissionGranted = true
rootView.snackbar(getString(R.string.permission_granted_message, getString(R.string.camera)))
takeImage()
} else {
rootView.snackbar(getString(R.string.permission_denied_message, getString(R.string.camera)))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,10 +185,10 @@ class OrderDetailsFragment : Fragment() {
if (requestCode == WRITE_REQUEST_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
writePermissionGranted = true
rootView.snackbar(getString(R.string.storage_permission_granted_message))
rootView.snackbar(getString(R.string.permission_granted_message, getString(R.string.external_storage)))
downloadInvoice()
} else {
rootView.snackbar(getString(R.string.storage_permission_denied_message))
rootView.snackbar(getString(R.string.permission_denied_message, getString(R.string.external_storage)))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,10 +214,10 @@ class EditSpeakerFragment : Fragment(), ComplexBackPressFragment {
if (requestCode == REQUEST_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
permissionGranted = true
rootView.snackbar(getString(R.string.storage_permission_granted_message))
rootView.snackbar(getString(R.string.permission_granted_message, getString(R.string.external_storage)))
showFileChooser()
} else {
rootView.snackbar(getString(R.string.storage_permission_denied_message))
rootView.snackbar(getString(R.string.permission_denied_message, getString(R.string.external_storage)))
}
}
}
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/res/drawable/ic_camera.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<vector android:height="24dp" android:viewportHeight="612"
android:viewportWidth="612" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M472.909,222.545m-27.818,0a27.818,27.818 0,1 1,55.636 0a27.818,27.818 0,1 1,-55.636 0"/>
<path android:fillColor="#FF000000" android:pathData="M160.733,125.181c3.422,0 6.176,-2.476 6.176,-5.563v-16.691c0,-3.06 -2.754,-5.563 -6.176,-5.563h-43.285c-3.421,0 -6.175,2.476 -6.175,5.563v16.691c0,3.06 2.754,5.563 6.175,5.563H160.733z"/>
<path android:fillColor="#FF000000" android:pathData="M319.909,445.091c69.128,0 125.182,-56.055 125.182,-125.182c0,-69.129 -56.054,-125.183 -125.182,-125.183c-69.128,0 -125.182,56.054 -125.182,125.183C194.727,389.036 250.781,445.091 319.909,445.091zM319.909,222.545c53.772,0 97.363,43.591 97.363,97.364c0,53.771 -43.591,97.363 -97.363,97.363s-97.364,-43.592 -97.364,-97.363C222.545,266.136 266.137,222.545 319.909,222.545z"/>
<path android:fillColor="#FF000000" android:pathData="M0,194.727v278.183c0,55.637 55.636,55.637 55.636,55.637h500.727c0,0 55.637,0 55.637,-55.637V194.727c0,-55.636 -55.637,-55.636 -55.637,-55.636H450.654l-29.543,-49.21c-2.114,-3.561 -7.232,-6.426 -11.238,-6.426H229.945c-4.089,0 -9.18,2.977 -11.239,6.426l-29.543,49.21H55.636C55.636,139.09 0,139.09 0,194.727zM207.913,166.909l30.989,-55.637h159.343l35.245,55.637h122.567c0,0 28.124,0 28.124,28.319V472.38c0,28.348 -28.124,28.348 -28.124,28.348H55.942c0,0 -28.124,0 -28.124,-28.348V195.228c0,-28.319 28.124,-28.319 28.124,-28.319H207.913z"/>
</vector>
18 changes: 18 additions & 0 deletions app/src/main/res/layout/dialog_edit_profile_image.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,24 @@
android:gravity="center"
android:text="@string/replace_image"/>
</LinearLayout>
<LinearLayout
android:id="@+id/takeImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/padding_large"
android:background="?selectableItemBackground"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/icon_edit_profile_height"
android:padding="@dimen/padding_large"
android:src="@drawable/ic_camera"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/take_image"/>
</LinearLayout>
<LinearLayout
android:id="@+id/removeImage"
android:layout_width="match_parent"
Expand Down
2 changes: 0 additions & 2 deletions app/src/main/res/values-vi/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -197,8 +197,6 @@
<string name="changes_not_saved">Thay đổi của bạn chưa được lưu lại</string>
<string name="discard">Hủy</string>
<string name="save">Lưu</string>
<string name="storage_permission_granted_message">Yêu cầu truy cập bộ nhớ ngoài thành công!</string>
<string name="storage_permission_denied_message">Yêu cầu truy cập bộ nhớ ngoài thất bại!</string>
<string name="image_upload_success_message">Ảnh được tải lên thành công!</string>
<string name="image_upload_error_message">Ảnh được tải lên thất bại!</string>
<string name="provide_name_message">Xin hãy nhập tên của bạn!</string>
Expand Down
7 changes: 5 additions & 2 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -357,8 +357,10 @@
<string name="changes_not_saved">Your changes have not been saved</string>
<string name="discard">Discard</string>
<string name="save">Save</string>
<string name="storage_permission_granted_message">Permission to Access External Storage Granted !</string>
<string name="storage_permission_denied_message">Permission to Access External Storage Denied :(</string>
<string name="permission_granted_message">Permission to Access %1$s Granted !</string>
<string name="permission_denied_message">Permission to Access %1$s Denied :(</string>
<string name="external_storage">External Storage</string>
<string name="camera">Camera</string>
<string name="image_upload_success_message">Image uploaded successfully!</string>
<string name="image_upload_error_message">Error uploading image!</string>
<string name="provide_name_message">Please provide first name and last name!</string>
Expand Down Expand Up @@ -460,6 +462,7 @@
<string name="edit_image">Edit Image</string>
<string name="remove_image">Remove Image</string>
<string name="replace_image">Replace Image</string>
<string name="take_image">Take Image</string>
<string name="error_cropping_image_message">Oops. There is an error on cropping image</string>
<string name="error_editting_image_message">Oops, there is an error. Current image can\'t be edited</string>
<string name="donation">Donation</string>
Expand Down