diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c149bde..84bf187 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,6 +39,7 @@
+
()
- val isUserItself: MutableLiveData = MutableLiveData()
+ val isUserItself: MutableLiveData = MutableLiveData(false)
private val list: List get() {
return liveList.value ?: listOf()
diff --git a/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt b/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt
index be57c1d..60bf214 100644
--- a/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt
+++ b/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt
@@ -191,6 +191,7 @@ class ImagesFragment : Fragment() {
actionMode?.menu?.findItem(R.id.delete_item)?.isEnabled = it > 0
},
onDeleteMode = {
+ if(viewModel.isUserItself.value == false) return@ImagesAdapter
adapter.deleteMode = it
actionMode = requireActivity().startActionMode(contextBarCallback)
},
diff --git a/app/src/main/java/com/isolaatti/profile/domain/entity/UserProfile.kt b/app/src/main/java/com/isolaatti/profile/domain/entity/UserProfile.kt
index c04242a..f6ecc52 100644
--- a/app/src/main/java/com/isolaatti/profile/domain/entity/UserProfile.kt
+++ b/app/src/main/java/com/isolaatti/profile/domain/entity/UserProfile.kt
@@ -4,6 +4,7 @@ import com.isolaatti.audio.common.domain.Audio
import com.isolaatti.common.Ownable
import com.isolaatti.profile.data.remote.UserProfileDto
import com.isolaatti.utils.UrlGen
+import java.io.Serializable
data class UserProfile(
override val userId: Int,
@@ -20,7 +21,7 @@ data class UserProfile(
val descriptionText: String?,
val descriptionAudioId: String?,
val descriptionAudio: Audio?
-) : Ownable {
+) : Ownable, Serializable {
val profileAvatarPictureUrl: String get() = UrlGen.userProfileImage(userId)
val profilePictureUrl: String get() = UrlGen.userProfileImageFullQuality(userId)
diff --git a/app/src/main/java/com/isolaatti/profile/presentation/EditProfileContract.kt b/app/src/main/java/com/isolaatti/profile/presentation/EditProfileContract.kt
index 3bd5027..268c03e 100644
--- a/app/src/main/java/com/isolaatti/profile/presentation/EditProfileContract.kt
+++ b/app/src/main/java/com/isolaatti/profile/presentation/EditProfileContract.kt
@@ -1,4 +1,23 @@
package com.isolaatti.profile.presentation
-class EditProfileContract {
+import android.app.Activity
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import androidx.activity.result.contract.ActivityResultContract
+import com.isolaatti.profile.domain.entity.UserProfile
+import com.isolaatti.profile.ui.EditProfileActivity
+
+class EditProfileContract : ActivityResultContract() {
+ override fun createIntent(context: Context, input: Void?): Intent {
+ return Intent(context, EditProfileActivity::class.java)
+ }
+
+ override fun parseResult(resultCode: Int, intent: Intent?): UserProfile? {
+ if(intent == null || resultCode != Activity.RESULT_OK) return null
+ return if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
+ intent.extras?.getSerializable(EditProfileActivity.EXTRA_OUT_USER_PROFILE, UserProfile::class.java)
+ else
+ intent.extras?.getSerializable(EditProfileActivity.EXTRA_OUT_USER_PROFILE) as UserProfile
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/isolaatti/profile/ui/EditProfileActivity.kt b/app/src/main/java/com/isolaatti/profile/ui/EditProfileActivity.kt
index c1ef67c..072b2c5 100644
--- a/app/src/main/java/com/isolaatti/profile/ui/EditProfileActivity.kt
+++ b/app/src/main/java/com/isolaatti/profile/ui/EditProfileActivity.kt
@@ -16,4 +16,8 @@ class EditProfileActivity : IsolaattiBaseActivity() {
setContentView(binding.root)
}
+
+ companion object {
+ const val EXTRA_OUT_USER_PROFILE = "user_profile"
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt b/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt
index 724b686..58c4fd4 100644
--- a/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt
+++ b/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt
@@ -18,6 +18,7 @@ import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import coil.load
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.isolaatti.BuildConfig
import com.isolaatti.R
import com.isolaatti.audio.audios_list.ui.AudiosFragment
@@ -35,6 +36,7 @@ import com.isolaatti.databinding.FragmentDiscussionsBinding
import com.isolaatti.followers.domain.FollowingState
import com.isolaatti.images.image_chooser.ui.ImageChooserContract
import com.isolaatti.images.image_list.ui.ImagesFragment
+import com.isolaatti.images.picture_viewer.ui.PictureViewerActivity
import com.isolaatti.posting.comments.ui.BottomSheetPostComments
import com.isolaatti.posting.posts.domain.entity.Post
import com.isolaatti.posting.posts.presentation.CreatePostContract
@@ -44,6 +46,7 @@ import com.isolaatti.posting.posts.presentation.PostsRecyclerViewAdapter
import com.isolaatti.posting.posts.presentation.UpdateEvent
import com.isolaatti.posting.posts.viewer.ui.PostViewerActivity
import com.isolaatti.profile.domain.entity.UserProfile
+import com.isolaatti.profile.presentation.EditProfileContract
import com.isolaatti.profile.presentation.ProfileViewModel
import com.isolaatti.utils.UrlGen
import dagger.hilt.android.AndroidEntryPoint
@@ -96,6 +99,10 @@ class ProfileMainFragment : Fragment() {
}
}
+ private val editProfile = registerForActivityResult(EditProfileContract()) {
+
+ }
+
private val audioPlayerConnectorListener = object: AudioPlayerConnector.Listener {
override fun onPlaying(isPlaying: Boolean, audio: Audio) {
viewBinding.playButton.icon = AppCompatResources.getDrawable(requireContext(), if(isPlaying) R.drawable.baseline_pause_circle_24 else R.drawable.baseline_play_circle_24)
@@ -190,11 +197,13 @@ class ProfileMainFragment : Fragment() {
Options.Option.OPTION_PROFILE_PHOTO_CHANGE_PHOTO -> {
chooseImageLauncher.launch(ImageChooserContract.Requester.UserPost)
}
- Options.Option.OPTION_PROFILE_PHOTO_REMOVE_PHOTO -> {}
+ Options.Option.OPTION_PROFILE_PHOTO_REMOVE_PHOTO -> {
+ showRemoveProfileImageDialog()
+ }
Options.Option.OPTION_PROFILE_PHOTO_VIEW_PHOTO -> {
val profilePictureUrl = profile?.profilePictureUrl
if(profilePictureUrl != null) {
- //PictureViewerActivity.startActivityWithUrls(requireContext(), arrayOf(profilePictureUrl))
+ // TODO show image
}
}
}
@@ -228,6 +237,17 @@ class ProfileMainFragment : Fragment() {
}
}
+ private fun showRemoveProfileImageDialog() {
+ MaterialAlertDialogBuilder(requireContext())
+ .setMessage(R.string.remove_image_message_confirmation)
+ .setTitle(R.string.remove_photo)
+ .setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(R.string.yes_continue) { _, _ ->
+ // remove image here
+ }
+ .show()
+ }
+
private lateinit var postListingRecyclerViewAdapterWiring: PostListingRecyclerViewAdapterWiring
@@ -255,6 +275,25 @@ class ProfileMainFragment : Fragment() {
requireActivity().finish()
}
+ viewBinding.topAppBar.setOnMenuItemClickListener {
+ when(it.itemId) {
+ R.id.edit_profile -> {
+ editProfile.launch(null)
+ true
+ }
+ R.id.user_link_menu_item -> {
+ true
+ }
+ R.id.report_profile_menu_item -> {
+ true
+ }
+ R.id.block_profile_menu_item -> {
+ true
+ }
+ else -> false
+ }
+ }
+
viewBinding.audiosButton.setOnClickListener {
findNavController().navigate(ProfileMainFragmentDirections.actionDiscussionsFragmentToAudiosFragment(AudiosFragment.SOURCE_PROFILE, userId.toString()))
}
@@ -340,8 +379,13 @@ class ProfileMainFragment : Fragment() {
private fun setupUiForUserType(isOwnProfile: Boolean) {
if(isOwnProfile) {
viewBinding.followButton.visibility = View.GONE
+ viewBinding.topAppBar.menu?.run {
+ removeItem(R.id.block_profile_menu_item)
+ removeItem(R.id.report_profile_menu_item)
+ }
} else {
viewBinding.createPostButton.visibility = View.GONE
+ viewBinding.topAppBar.menu.removeItem(R.id.edit_profile)
}
}
diff --git a/app/src/main/res/drawable/baseline_qr_code_24.xml b/app/src/main/res/drawable/baseline_qr_code_24.xml
new file mode 100644
index 0000000..5461a42
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_qr_code_24.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/menu/profile_menu.xml b/app/src/main/res/menu/profile_menu.xml
index 3bf41ac..099fdef 100644
--- a/app/src/main/res/menu/profile_menu.xml
+++ b/app/src/main/res/menu/profile_menu.xml
@@ -2,10 +2,16 @@