From 72acdf1f105275c25f3e5871d534b925891537ef Mon Sep 17 00:00:00 2001 From: erike Date: Sun, 20 Aug 2023 16:11:07 -0600 Subject: [PATCH] WIP visor de imagenes --- .idea/navEditor.xml | 22 +++++++ app/build.gradle | 4 ++ app/src/main/AndroidManifest.xml | 1 + .../java/com/isolaatti/about/AboutActivity.kt | 4 ++ .../java/com/isolaatti/home/FeedFragment.kt | 4 ++ .../picture_viewer/domain/Picture.kt | 4 ++ .../PictureViewerViewPagerAdapter.kt | 15 +++++ .../ui/PictureViewerActivity.kt | 33 ++++++++++ .../ui/PictureViewerImageWrapperFragment.kt | 61 +++++++++++++++++++ .../ui/PictureViewerMainFragment.kt | 38 ++++++++++++ .../isolaatti/settings/ui/SettingsFragment.kt | 24 ++------ .../main/java/com/isolaatti/utils/UrlGen.kt | 1 + app/src/main/res/layout/activity_about.xml | 2 + .../res/layout/activity_picture_viewer.xml | 14 +++++ .../layout/fragment_main_picture_viewer.xml | 10 +++ app/src/main/res/layout/fragment_settings.xml | 33 ---------- .../fragment_touch_image_view_wrapper.xml | 10 +++ .../navigation/picture_viewer_navigation.xml | 11 ++++ app/src/main/res/values/colors.xml | 1 + app/src/main/res/xml/preferences.xml | 4 ++ settings.gradle | 1 + 21 files changed, 245 insertions(+), 52 deletions(-) create mode 100644 app/src/main/java/com/isolaatti/picture_viewer/domain/Picture.kt create mode 100644 app/src/main/java/com/isolaatti/picture_viewer/presentation/PictureViewerViewPagerAdapter.kt create mode 100644 app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerActivity.kt create mode 100644 app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerImageWrapperFragment.kt create mode 100644 app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerMainFragment.kt create mode 100644 app/src/main/res/layout/activity_picture_viewer.xml create mode 100644 app/src/main/res/layout/fragment_main_picture_viewer.xml delete mode 100644 app/src/main/res/layout/fragment_settings.xml create mode 100644 app/src/main/res/layout/fragment_touch_image_view_wrapper.xml create mode 100644 app/src/main/res/navigation/picture_viewer_navigation.xml create mode 100644 app/src/main/res/xml/preferences.xml diff --git a/.idea/navEditor.xml b/.idea/navEditor.xml index 0d5fb65..f86a504 100644 --- a/.idea/navEditor.xml +++ b/.idea/navEditor.xml @@ -159,6 +159,28 @@ + + + + + + + diff --git a/app/build.gradle b/app/build.gradle index 3ba3d0e..c9751af 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -108,4 +108,8 @@ dependencies { annotationProcessor "androidx.room:room-compiler:$room_version" kapt("androidx.room:room-compiler:$room_version") implementation "androidx.room:room-ktx:2.5.2" + + implementation "androidx.preference:preference-ktx:1.2.1" + + implementation 'com.github.MikeOrtiz:TouchImageView:3.5' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 915dbb2..66ad57c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -33,6 +33,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/about/AboutActivity.kt b/app/src/main/java/com/isolaatti/about/AboutActivity.kt index 12bb6ed..6966368 100644 --- a/app/src/main/java/com/isolaatti/about/AboutActivity.kt +++ b/app/src/main/java/com/isolaatti/about/AboutActivity.kt @@ -13,5 +13,9 @@ class AboutActivity : AppCompatActivity() { binding = ActivityAboutBinding.inflate(layoutInflater) setContentView(binding.root) + + binding.toolbar.setNavigationOnClickListener { + finish() + } } } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/home/FeedFragment.kt b/app/src/main/java/com/isolaatti/home/FeedFragment.kt index 1f16443..d9b7edd 100644 --- a/app/src/main/java/com/isolaatti/home/FeedFragment.kt +++ b/app/src/main/java/com/isolaatti/home/FeedFragment.kt @@ -23,6 +23,7 @@ import com.isolaatti.common.ErrorMessageViewModel import com.isolaatti.databinding.FragmentFeedBinding import com.isolaatti.drafts.ui.DraftsActivity import com.isolaatti.home.presentation.FeedViewModel +import com.isolaatti.picture_viewer.ui.PictureViewerActivity import com.isolaatti.posting.PostViewerActivity import com.isolaatti.posting.comments.presentation.BottomSheetPostComments import com.isolaatti.posting.common.domain.OnUserInteractedWithPostCallback @@ -163,6 +164,9 @@ class FeedFragment : Fragment(), OnUserInteractedWithPostCallback { val textViewEmail: TextView? = header?.findViewById(R.id.textViewEmail) Picasso.get().load(UrlGen.userProfileImage(it.id)).into(image) + image?.setOnClickListener {_ -> + PictureViewerActivity.startActivityWithUrls(requireContext(), arrayOf(UrlGen.userProfileImageFullQuality(it.id))) + } textViewName?.text = it.name textViewEmail?.text = it.email diff --git a/app/src/main/java/com/isolaatti/picture_viewer/domain/Picture.kt b/app/src/main/java/com/isolaatti/picture_viewer/domain/Picture.kt new file mode 100644 index 0000000..3b6d90a --- /dev/null +++ b/app/src/main/java/com/isolaatti/picture_viewer/domain/Picture.kt @@ -0,0 +1,4 @@ +package com.isolaatti.picture_viewer.domain + +class Picture { +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/picture_viewer/presentation/PictureViewerViewPagerAdapter.kt b/app/src/main/java/com/isolaatti/picture_viewer/presentation/PictureViewerViewPagerAdapter.kt new file mode 100644 index 0000000..85c8145 --- /dev/null +++ b/app/src/main/java/com/isolaatti/picture_viewer/presentation/PictureViewerViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.isolaatti.picture_viewer.presentation + +import androidx.fragment.app.Fragment +import androidx.viewpager2.adapter.FragmentStateAdapter +import com.isolaatti.picture_viewer.ui.PictureViewerImageWrapperFragment + +class PictureViewerViewPagerAdapter(fragment: Fragment, private val images: Array) : FragmentStateAdapter(fragment) { + override fun getItemCount(): Int { + return images.size + } + + override fun createFragment(position: Int): Fragment { + return PictureViewerImageWrapperFragment.getInstance(images[position]) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerActivity.kt b/app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerActivity.kt new file mode 100644 index 0000000..5023e7c --- /dev/null +++ b/app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerActivity.kt @@ -0,0 +1,33 @@ +package com.isolaatti.picture_viewer.ui + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.isolaatti.databinding.ActivityPictureViewerBinding +import com.isolaatti.picture_viewer.presentation.PictureViewerViewPagerAdapter + +class PictureViewerActivity : AppCompatActivity() { + private lateinit var binding: ActivityPictureViewerBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + binding = ActivityPictureViewerBinding.inflate(layoutInflater) + + setContentView(binding.root) + } + + + + companion object { + const val EXTRA_URLS = "urls" + const val EXTRA_PROFILE_ID = "profileId" + + fun startActivityWithUrls(context: Context, urls: Array) { + val intent = Intent(context, PictureViewerActivity::class.java) + intent.putExtra(EXTRA_URLS, urls) + context.startActivity(intent) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerImageWrapperFragment.kt b/app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerImageWrapperFragment.kt new file mode 100644 index 0000000..3735b17 --- /dev/null +++ b/app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerImageWrapperFragment.kt @@ -0,0 +1,61 @@ +package com.isolaatti.picture_viewer.ui + +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.isolaatti.databinding.FragmentTouchImageViewWrapperBinding +import com.ortiz.touchview.OnTouchImageViewListener +import com.squareup.picasso.Picasso +import java.lang.NullPointerException + +class PictureViewerImageWrapperFragment : Fragment() { + + private lateinit var binding: FragmentTouchImageViewWrapperBinding + private var url: String? = null + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentTouchImageViewWrapperBinding.inflate(inflater) + + url = arguments?.getString(ARGUMENT_URL) + + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + parentFragment?.let { + + binding.touchImageView.setOnTouchImageViewListener(object: OnTouchImageViewListener { + override fun onMove() { + (it as PictureViewerMainFragment).enableViewPagerUserInput(!binding.touchImageView.isZoomed) + } + }) + } + + + + url?.let { + Picasso.get().load(it).into(binding.touchImageView) + } + } + + companion object { + const val ARGUMENT_URL = "url" + fun getInstance(url: String): PictureViewerImageWrapperFragment { + val fragment = PictureViewerImageWrapperFragment() + fragment.arguments = Bundle().apply { + putString(ARGUMENT_URL, url) + } + + return fragment + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerMainFragment.kt b/app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerMainFragment.kt new file mode 100644 index 0000000..af21935 --- /dev/null +++ b/app/src/main/java/com/isolaatti/picture_viewer/ui/PictureViewerMainFragment.kt @@ -0,0 +1,38 @@ +package com.isolaatti.picture_viewer.ui + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.isolaatti.databinding.FragmentMainPictureViewerBinding +import com.isolaatti.picture_viewer.presentation.PictureViewerViewPagerAdapter + +class PictureViewerMainFragment : Fragment() { + + private lateinit var binding: FragmentMainPictureViewerBinding + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentMainPictureViewerBinding.inflate(inflater) + + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val url = requireActivity().intent.extras?.getStringArray(PictureViewerActivity.EXTRA_URLS) + + url?.let { + val adapter = PictureViewerViewPagerAdapter(this, it) + binding.viewpager.adapter = adapter + } + } + + fun enableViewPagerUserInput(enabled: Boolean) { + binding.viewpager.isUserInputEnabled = enabled + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/settings/ui/SettingsFragment.kt b/app/src/main/java/com/isolaatti/settings/ui/SettingsFragment.kt index 632438e..a6ed41e 100644 --- a/app/src/main/java/com/isolaatti/settings/ui/SettingsFragment.kt +++ b/app/src/main/java/com/isolaatti/settings/ui/SettingsFragment.kt @@ -1,26 +1,12 @@ package com.isolaatti.settings.ui import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import com.isolaatti.databinding.FragmentSettingsBinding +import androidx.preference.PreferenceFragmentCompat +import com.isolaatti.R -class SettingsFragment : Fragment() { - lateinit var viewBinding: FragmentSettingsBinding +class SettingsFragment : PreferenceFragmentCompat() { - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - viewBinding = FragmentSettingsBinding.inflate(inflater) - - viewBinding.topAppBar.setNavigationOnClickListener { - requireActivity().onBackPressed() - } - - return viewBinding.root + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.preferences, rootKey) } } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/utils/UrlGen.kt b/app/src/main/java/com/isolaatti/utils/UrlGen.kt index 4167559..02805f0 100644 --- a/app/src/main/java/com/isolaatti/utils/UrlGen.kt +++ b/app/src/main/java/com/isolaatti/utils/UrlGen.kt @@ -4,5 +4,6 @@ import com.isolaatti.connectivity.RetrofitClient.Companion.BASE_URL object UrlGen { fun userProfileImage(userId: Int) = "${BASE_URL}images/profile_image/of_user/$userId?mode=small" + fun userProfileImageFullQuality(userId: Int) = "${BASE_URL}images/profile_image/of_user/$userId?mode=original" fun imageUrl(imageId: String) = "${BASE_URL}images/image/${imageId}" } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index f16841a..5ea44b6 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -4,10 +4,12 @@ android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_picture_viewer.xml b/app/src/main/res/layout/fragment_main_picture_viewer.xml new file mode 100644 index 0000000..af3c6c2 --- /dev/null +++ b/app/src/main/res/layout/fragment_main_picture_viewer.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml deleted file mode 100644 index 67e7c9d..0000000 --- a/app/src/main/res/layout/fragment_settings.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_touch_image_view_wrapper.xml b/app/src/main/res/layout/fragment_touch_image_view_wrapper.xml new file mode 100644 index 0000000..8d6c069 --- /dev/null +++ b/app/src/main/res/layout/fragment_touch_image_view_wrapper.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/picture_viewer_navigation.xml b/app/src/main/res/navigation/picture_viewer_navigation.xml new file mode 100644 index 0000000..ace999a --- /dev/null +++ b/app/src/main/res/navigation/picture_viewer_navigation.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 29fcb7e..4c6f753 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,4 +5,5 @@ @color/design_default_color_background #000000 #BA0606 + #000000 \ No newline at end of file diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml new file mode 100644 index 0000000..624ed13 --- /dev/null +++ b/app/src/main/res/xml/preferences.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 8e39d6d..4612563 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,6 +10,7 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + maven { url 'https://jitpack.io' } } } rootProject.name = "Isolaatti"