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"