diff --git a/app/src/main/java/com/isolaatti/images/Module.kt b/app/src/main/java/com/isolaatti/images/Module.kt index 04c6759..9208426 100644 --- a/app/src/main/java/com/isolaatti/images/Module.kt +++ b/app/src/main/java/com/isolaatti/images/Module.kt @@ -1,12 +1,17 @@ package com.isolaatti.images +import android.app.Application +import android.content.ContentResolver +import android.content.Context +import com.isolaatti.MyApplication import com.isolaatti.connectivity.RetrofitClient -import com.isolaatti.images.image_list.data.remote.ImagesApi -import com.isolaatti.images.image_list.data.repository.ImagesRepositoryImpl -import com.isolaatti.images.image_list.domain.repository.ImagesRepository +import com.isolaatti.images.common.data.remote.ImagesApi +import com.isolaatti.images.common.data.repository.ImagesRepositoryImpl +import com.isolaatti.images.common.domain.repository.ImagesRepository import dagger.Module import dagger.Provides import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent @Module @@ -18,7 +23,12 @@ class Module { } @Provides - fun provideImagesRepository(imagesApi: ImagesApi): ImagesRepository { - return ImagesRepositoryImpl(imagesApi) + fun provideContentResolver(@ApplicationContext application: Context): ContentResolver { + return application.contentResolver + } + + @Provides + fun provideImagesRepository(imagesApi: ImagesApi, contentResolver: ContentResolver): ImagesRepository { + return ImagesRepositoryImpl(imagesApi, contentResolver) } } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/image_list/data/remote/DeleteImagesDto.kt b/app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesDto.kt similarity index 53% rename from app/src/main/java/com/isolaatti/images/image_list/data/remote/DeleteImagesDto.kt rename to app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesDto.kt index 1bb9251..a1cb357 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/data/remote/DeleteImagesDto.kt +++ b/app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesDto.kt @@ -1,4 +1,4 @@ -package com.isolaatti.images.image_list.data.remote +package com.isolaatti.images.common.data.remote data class DeleteImagesDto( val imageIds: List diff --git a/app/src/main/java/com/isolaatti/images/image_list/data/remote/DeleteImagesResultDto.kt b/app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesResultDto.kt similarity index 64% rename from app/src/main/java/com/isolaatti/images/image_list/data/remote/DeleteImagesResultDto.kt rename to app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesResultDto.kt index 04b377d..8a1c4c3 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/data/remote/DeleteImagesResultDto.kt +++ b/app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesResultDto.kt @@ -1,4 +1,4 @@ -package com.isolaatti.images.image_list.data.remote +package com.isolaatti.images.common.data.remote data class DeleteImagesResultDto( val success: Boolean, diff --git a/app/src/main/java/com/isolaatti/images/image_list/data/remote/ImageDto.kt b/app/src/main/java/com/isolaatti/images/common/data/remote/ImageDto.kt similarity index 75% rename from app/src/main/java/com/isolaatti/images/image_list/data/remote/ImageDto.kt rename to app/src/main/java/com/isolaatti/images/common/data/remote/ImageDto.kt index 020082d..2e8864f 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/data/remote/ImageDto.kt +++ b/app/src/main/java/com/isolaatti/images/common/data/remote/ImageDto.kt @@ -1,4 +1,4 @@ -package com.isolaatti.images.image_list.data.remote +package com.isolaatti.images.common.data.remote data class ImageDto( val id: String, diff --git a/app/src/main/java/com/isolaatti/images/image_list/data/remote/ImagesApi.kt b/app/src/main/java/com/isolaatti/images/common/data/remote/ImagesApi.kt similarity index 90% rename from app/src/main/java/com/isolaatti/images/image_list/data/remote/ImagesApi.kt rename to app/src/main/java/com/isolaatti/images/common/data/remote/ImagesApi.kt index 27ec940..81f48e8 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/data/remote/ImagesApi.kt +++ b/app/src/main/java/com/isolaatti/images/common/data/remote/ImagesApi.kt @@ -1,6 +1,7 @@ -package com.isolaatti.images.image_list.data.remote +package com.isolaatti.images.common.data.remote import com.isolaatti.utils.SimpleData +import okhttp3.MultipartBody import okhttp3.RequestBody import retrofit2.Call import retrofit2.http.Body @@ -19,7 +20,7 @@ interface ImagesApi { @POST("images/create") @Multipart - fun postImage(@Part("file") file: RequestBody, + fun postImage(@Part file: MultipartBody.Part, @Part("name") name: String, @Part("setAsProfile") setAsProfile: Boolean? = null, @Part("squadId") squadId: String? = null): Call diff --git a/app/src/main/java/com/isolaatti/images/common/data/remote/ImagesDto.kt b/app/src/main/java/com/isolaatti/images/common/data/remote/ImagesDto.kt new file mode 100644 index 0000000..1197fa4 --- /dev/null +++ b/app/src/main/java/com/isolaatti/images/common/data/remote/ImagesDto.kt @@ -0,0 +1,5 @@ +package com.isolaatti.images.common.data.remote + +data class ImagesDto( + val data: List +) \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt b/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt new file mode 100644 index 0000000..0ed66cd --- /dev/null +++ b/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt @@ -0,0 +1,76 @@ +package com.isolaatti.images.common.data.repository + +import android.content.ContentResolver +import android.net.Uri +import android.util.Log +import com.isolaatti.images.common.data.remote.ImagesApi +import com.isolaatti.images.common.domain.entity.Image +import com.isolaatti.images.common.domain.repository.ImagesRepository +import com.isolaatti.utils.Resource +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import okhttp3.MultipartBody +import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody +import retrofit2.awaitResponse +import java.io.InputStream +import javax.inject.Inject + +class ImagesRepositoryImpl @Inject constructor(private val imagesApi: ImagesApi, private val contentResolver: ContentResolver) : + ImagesRepository { + override fun getImagesOfUser(userId: Int, lastId: String?): Flow>> = flow { + emit(Resource.Loading()) + try { + val response = imagesApi.getImagesOfUser(userId, lastId).awaitResponse() + if(response.isSuccessful) { + val imagesDto = response.body() + val images = imagesDto?.data?.map { Image.fromDto(it) } + + emit(Resource.Success(images)) + + } else { + emit(Resource.Error(Resource.Error.mapErrorCode(response.code()))) + } + } catch(_: Exception) { + emit(Resource.Error(Resource.Error.ErrorType.NetworkError)) + } + } + + override fun deleteImages(images: List): Flow> = flow { + + } + + override fun uploadImage(name: String, imageUri: Uri, squadId: String?): Flow> = flow { + var imageInputStream: InputStream? = null + try { + imageInputStream = contentResolver.openInputStream(imageUri) + val imageBytes = imageInputStream?.readBytes() + + if(imageBytes == null) { + emit(Resource.Error(Resource.Error.ErrorType.InputError)) + return@flow + } + + Log.d("ImagesRepository", "${imageBytes.size} bytes") + + val response = imagesApi.postImage(MultipartBody.Part.createFormData("file", name,imageBytes.toRequestBody()), name).awaitResponse() + if(response.isSuccessful) { + val imageDto = response.body() + if(imageDto == null) { + emit(Resource.Error(Resource.Error.ErrorType.ServerError)) + return@flow + } + val image = Image.fromDto(imageDto) + emit(Resource.Success(image)) + } else { + emit(Resource.Error(Resource.Error.mapErrorCode(response.code()))) + } + + } catch(e: Exception) { + Log.e("ImagesRepository", e.toString()) + emit(Resource.Error(Resource.Error.ErrorType.NetworkError)) + } finally { + imageInputStream?.close() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/image_list/domain/entity/Image.kt b/app/src/main/java/com/isolaatti/images/common/domain/entity/Image.kt similarity index 82% rename from app/src/main/java/com/isolaatti/images/image_list/domain/entity/Image.kt rename to app/src/main/java/com/isolaatti/images/common/domain/entity/Image.kt index 748701e..404ba06 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/domain/entity/Image.kt +++ b/app/src/main/java/com/isolaatti/images/common/domain/entity/Image.kt @@ -1,6 +1,6 @@ -package com.isolaatti.images.image_list.domain.entity +package com.isolaatti.images.common.domain.entity -import com.isolaatti.images.image_list.data.remote.ImageDto +import com.isolaatti.images.common.data.remote.ImageDto import com.isolaatti.utils.UrlGen import java.io.Serializable diff --git a/app/src/main/java/com/isolaatti/images/image_list/domain/repository/ImagesRepository.kt b/app/src/main/java/com/isolaatti/images/common/domain/repository/ImagesRepository.kt similarity index 53% rename from app/src/main/java/com/isolaatti/images/image_list/domain/repository/ImagesRepository.kt rename to app/src/main/java/com/isolaatti/images/common/domain/repository/ImagesRepository.kt index 0af9920..59f29b5 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/domain/repository/ImagesRepository.kt +++ b/app/src/main/java/com/isolaatti/images/common/domain/repository/ImagesRepository.kt @@ -1,10 +1,12 @@ -package com.isolaatti.images.image_list.domain.repository +package com.isolaatti.images.common.domain.repository -import com.isolaatti.images.image_list.domain.entity.Image +import android.net.Uri +import com.isolaatti.images.common.domain.entity.Image import com.isolaatti.utils.Resource import kotlinx.coroutines.flow.Flow interface ImagesRepository { fun getImagesOfUser(userId: Int, lastId: String? = null): Flow>> fun deleteImages(images: List): Flow> + fun uploadImage(name: String, imageUri: Uri, squadId: String?): Flow> } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/image_list/data/remote/ImagesDto.kt b/app/src/main/java/com/isolaatti/images/image_list/data/remote/ImagesDto.kt deleted file mode 100644 index dd77315..0000000 --- a/app/src/main/java/com/isolaatti/images/image_list/data/remote/ImagesDto.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.isolaatti.images.image_list.data.remote - -data class ImagesDto( - val data: List -) \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/image_list/data/repository/ImagesRepositoryImpl.kt b/app/src/main/java/com/isolaatti/images/image_list/data/repository/ImagesRepositoryImpl.kt deleted file mode 100644 index 66af6e4..0000000 --- a/app/src/main/java/com/isolaatti/images/image_list/data/repository/ImagesRepositoryImpl.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.isolaatti.images.image_list.data.repository - -import com.isolaatti.images.image_list.data.remote.ImagesApi -import com.isolaatti.images.image_list.domain.entity.Image -import com.isolaatti.images.image_list.domain.repository.ImagesRepository -import com.isolaatti.utils.Resource -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow -import retrofit2.awaitResponse -import javax.inject.Inject - -class ImagesRepositoryImpl @Inject constructor(private val imagesApi: ImagesApi) : ImagesRepository { - override fun getImagesOfUser(userId: Int, lastId: String?): Flow>> = flow { - try { - val response = imagesApi.getImagesOfUser(userId, lastId).awaitResponse() - if(response.isSuccessful) { - val imagesDto = response.body() - val images = imagesDto?.data?.map { Image.fromDto(it) } - - emit(Resource.Success(images)) - - } else { - emit(Resource.Error(Resource.Error.mapErrorCode(response.code()))) - } - } catch(_: Exception) { - emit(Resource.Error(Resource.Error.ErrorType.NetworkError)) - } - } - - override fun deleteImages(images: List): Flow> = flow { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageListViewModel.kt b/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageListViewModel.kt index c8f30f4..ecef985 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageListViewModel.kt +++ b/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageListViewModel.kt @@ -3,8 +3,8 @@ package com.isolaatti.images.image_list.presentation import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.isolaatti.images.image_list.domain.entity.Image -import com.isolaatti.images.image_list.domain.repository.ImagesRepository +import com.isolaatti.images.common.domain.entity.Image +import com.isolaatti.images.common.domain.repository.ImagesRepository import com.isolaatti.utils.Resource import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/isolaatti/images/image_list/presentation/ImagesAdapter.kt b/app/src/main/java/com/isolaatti/images/image_list/presentation/ImagesAdapter.kt index a5b8c0a..89de517 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/presentation/ImagesAdapter.kt +++ b/app/src/main/java/com/isolaatti/images/image_list/presentation/ImagesAdapter.kt @@ -9,7 +9,7 @@ import androidx.recyclerview.widget.RecyclerView.Adapter import coil.load import com.isolaatti.common.CoilImageLoader.imageLoader import com.isolaatti.databinding.ImageItemBinding -import com.isolaatti.images.image_list.domain.entity.Image +import com.isolaatti.images.common.domain.entity.Image class ImagesAdapter( private val imageOnClick: ((images: List, position: Int) -> Unit), 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 5fb7cab..c5445f9 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 @@ -9,6 +9,7 @@ import android.view.Menu import android.view.MenuItem import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.widget.PopupMenu @@ -22,7 +23,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.isolaatti.MyApplication import com.isolaatti.R import com.isolaatti.databinding.FragmentImagesBinding -import com.isolaatti.images.image_list.domain.entity.Image +import com.isolaatti.images.common.domain.entity.Image import com.isolaatti.images.image_list.presentation.ImageListViewModel import com.isolaatti.images.image_list.presentation.ImagesAdapter import com.isolaatti.images.image_maker.ui.ImageMakerContract @@ -46,7 +47,7 @@ class ImagesFragment : Fragment() { } private val imageMakerLauncher = registerForActivityResult(ImageMakerContract()) { - + Toast.makeText(requireContext(), "se subio la imagen ${it?.id}", Toast.LENGTH_SHORT).show() } private val choosePictureLauncher = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { @@ -191,9 +192,12 @@ class ImagesFragment : Fragment() { viewModel.list.observe(viewLifecycleOwner) { resource -> when(resource) { is Resource.Error -> {} - is Resource.Loading -> {} + is Resource.Loading -> { + viewBinding.progressBarLoading.visibility = View.VISIBLE + } is Resource.Success -> { resource.data?.let { + viewBinding.progressBarLoading.visibility = View.GONE adapter.setData(it) } } diff --git a/app/src/main/java/com/isolaatti/images/image_maker/presentation/ImageMakerViewModel.kt b/app/src/main/java/com/isolaatti/images/image_maker/presentation/ImageMakerViewModel.kt index c2ebfa7..557fbca 100644 --- a/app/src/main/java/com/isolaatti/images/image_maker/presentation/ImageMakerViewModel.kt +++ b/app/src/main/java/com/isolaatti/images/image_maker/presentation/ImageMakerViewModel.kt @@ -1,9 +1,33 @@ package com.isolaatti.images.image_maker.presentation +import android.net.Uri +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.isolaatti.images.common.domain.entity.Image +import com.isolaatti.images.common.domain.repository.ImagesRepository +import com.isolaatti.utils.Resource import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class ImageMakerViewModel @Inject constructor() : ViewModel() { +class ImageMakerViewModel @Inject constructor(private val imagesRepository: ImagesRepository) : ViewModel() { + var imageUri: Uri? = null + var name: String? = null + val image: MutableLiveData> = MutableLiveData() + fun uploadPicture() { + if(imageUri == null || name == null) { + return + } + viewModelScope.launch { + imagesRepository.uploadImage(name!!, imageUri!!, null).onEach { + image.postValue(it) + }.flowOn(Dispatchers.IO).launchIn(this) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/image_maker/ui/ImageMakerActivity.kt b/app/src/main/java/com/isolaatti/images/image_maker/ui/ImageMakerActivity.kt index babd356..84ef8ed 100644 --- a/app/src/main/java/com/isolaatti/images/image_maker/ui/ImageMakerActivity.kt +++ b/app/src/main/java/com/isolaatti/images/image_maker/ui/ImageMakerActivity.kt @@ -1,21 +1,73 @@ package com.isolaatti.images.image_maker.ui +import android.app.Activity +import android.content.ContentProvider +import android.content.Intent import android.os.Bundle +import android.view.View +import android.widget.Toast +import androidx.activity.viewModels +import androidx.core.content.ContentProviderCompat +import androidx.core.widget.doOnTextChanged import coil.load +import com.isolaatti.R import com.isolaatti.common.IsolaattiBaseActivity import com.isolaatti.databinding.ActivityImageMakerBinding +import com.isolaatti.images.image_maker.presentation.ImageMakerViewModel +import com.isolaatti.utils.Resource import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class ImageMakerActivity : IsolaattiBaseActivity() { private lateinit var binding: ActivityImageMakerBinding + private val viewModel: ImageMakerViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityImageMakerBinding.inflate(layoutInflater) setContentView(binding.root) - - + viewModel.imageUri = intent.data binding.imagePreview.load(intent.data) + + setupListeners() + setupObservers() + } + + private fun setupListeners() { + binding.materialToolbar.setOnMenuItemClickListener { + when(it.itemId) { + R.id.upload_picture_item -> { + viewModel.uploadPicture() + true + } + else -> false + } + } + binding.textImageName.editText?.doOnTextChanged { text, _, _, _ -> + viewModel.name = text.toString() + } + } + + private fun setupObservers() { + viewModel.image.observe(this) { + when(it) { + is Resource.Error -> { + errorViewModel.error.value = it.errorType + } + is Resource.Loading -> { + binding.progressBarLoading.visibility = View.VISIBLE + } + is Resource.Success -> { + binding.progressBarLoading.visibility = View.GONE + setResult(Activity.RESULT_OK) + intent = Intent().putExtra(EXTRA_IMAGE, it.data) + finish() + } + } + } + } + + companion object { + const val EXTRA_IMAGE = "image" } } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/image_maker/ui/ImageMakerContract.kt b/app/src/main/java/com/isolaatti/images/image_maker/ui/ImageMakerContract.kt index ad09ab8..c543c55 100644 --- a/app/src/main/java/com/isolaatti/images/image_maker/ui/ImageMakerContract.kt +++ b/app/src/main/java/com/isolaatti/images/image_maker/ui/ImageMakerContract.kt @@ -1,10 +1,12 @@ package com.isolaatti.images.image_maker.ui +import android.app.Activity import android.content.Context import android.content.Intent import android.net.Uri +import android.os.Build import androidx.activity.result.contract.ActivityResultContract -import com.isolaatti.images.image_list.domain.entity.Image +import com.isolaatti.images.common.domain.entity.Image class ImageMakerContract : ActivityResultContract() { override fun createIntent(context: Context, input: Uri): Intent { @@ -15,6 +17,13 @@ class ImageMakerContract : ActivityResultContract() { } override fun parseResult(resultCode: Int, intent: Intent?): Image? { + if(resultCode == Activity.RESULT_OK) { + return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + intent?.getSerializableExtra(ImageMakerActivity.EXTRA_IMAGE) as Image? + } else { + intent?.getSerializableExtra(ImageMakerActivity.EXTRA_IMAGE, Image::class.java) + } + } return null } } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/picture_viewer/presentation/PictureViewerViewPagerAdapter.kt b/app/src/main/java/com/isolaatti/images/picture_viewer/presentation/PictureViewerViewPagerAdapter.kt index 4ef8d5e..5f7369d 100644 --- a/app/src/main/java/com/isolaatti/images/picture_viewer/presentation/PictureViewerViewPagerAdapter.kt +++ b/app/src/main/java/com/isolaatti/images/picture_viewer/presentation/PictureViewerViewPagerAdapter.kt @@ -2,7 +2,7 @@ package com.isolaatti.images.picture_viewer.presentation import androidx.fragment.app.Fragment import androidx.viewpager2.adapter.FragmentStateAdapter -import com.isolaatti.images.image_list.domain.entity.Image +import com.isolaatti.images.common.domain.entity.Image import com.isolaatti.images.picture_viewer.ui.PictureViewerImageWrapperFragment class PictureViewerViewPagerAdapter(fragment: Fragment, private val images: Array) : FragmentStateAdapter(fragment) { diff --git a/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerActivity.kt b/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerActivity.kt index dcc05c1..487dfac 100644 --- a/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerActivity.kt +++ b/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerActivity.kt @@ -5,7 +5,7 @@ import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.isolaatti.databinding.ActivityPictureViewerBinding -import com.isolaatti.images.image_list.domain.entity.Image +import com.isolaatti.images.common.domain.entity.Image import com.isolaatti.images.picture_viewer.presentation.PictureViewerViewPagerAdapter class PictureViewerActivity : AppCompatActivity() { diff --git a/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerImageWrapperFragment.kt b/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerImageWrapperFragment.kt index b0d31d5..c96bd98 100644 --- a/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerImageWrapperFragment.kt +++ b/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerImageWrapperFragment.kt @@ -8,7 +8,7 @@ import androidx.fragment.app.Fragment import coil.load import com.isolaatti.common.CoilImageLoader.imageLoader import com.isolaatti.databinding.FragmentTouchImageViewWrapperBinding -import com.isolaatti.images.image_list.domain.entity.Image +import com.isolaatti.images.common.domain.entity.Image import com.ortiz.touchview.OnTouchImageViewListener diff --git a/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerMainFragment.kt b/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerMainFragment.kt index 26024cd..e61c7aa 100644 --- a/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerMainFragment.kt +++ b/app/src/main/java/com/isolaatti/images/picture_viewer/ui/PictureViewerMainFragment.kt @@ -7,7 +7,7 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.viewpager2.widget.ViewPager2 import com.isolaatti.databinding.FragmentMainPictureViewerBinding -import com.isolaatti.images.image_list.domain.entity.Image +import com.isolaatti.images.common.domain.entity.Image import com.isolaatti.images.picture_viewer.presentation.PictureViewerViewPagerAdapter class PictureViewerMainFragment : Fragment() { diff --git a/app/src/main/java/com/isolaatti/login/LogInActivity.kt b/app/src/main/java/com/isolaatti/login/LogInActivity.kt index c1eee3c..1cc5caf 100644 --- a/app/src/main/java/com/isolaatti/login/LogInActivity.kt +++ b/app/src/main/java/com/isolaatti/login/LogInActivity.kt @@ -60,6 +60,7 @@ class LogInActivity: AppCompatActivity() { Resource.Error.ErrorType.ServerError -> showServerErrorMessage() Resource.Error.ErrorType.OtherError -> showUnknownErrorMessage() null -> {} + Resource.Error.ErrorType.InputError -> {} } } diff --git a/app/src/main/java/com/isolaatti/utils/Resource.kt b/app/src/main/java/com/isolaatti/utils/Resource.kt index 3bd2c10..42c1e6b 100644 --- a/app/src/main/java/com/isolaatti/utils/Resource.kt +++ b/app/src/main/java/com/isolaatti/utils/Resource.kt @@ -5,7 +5,7 @@ sealed class Resource { class Loading: Resource() class Error(val errorType: ErrorType? = null, val message: String? = null): Resource() { enum class ErrorType { - NetworkError, AuthError, NotFoundError, ServerError, OtherError + NetworkError, AuthError, NotFoundError, ServerError, InputError, OtherError } companion object { fun mapErrorCode(errorCode: Int): ErrorType { diff --git a/app/src/main/res/layout/activity_image_maker.xml b/app/src/main/res/layout/activity_image_maker.xml index a986c3b..54a8cd3 100644 --- a/app/src/main/res/layout/activity_image_maker.xml +++ b/app/src/main/res/layout/activity_image_maker.xml @@ -13,7 +13,8 @@ app:title="@string/upload_a_picture" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:menu="@menu/image_maker_menu"/> @@ -39,20 +41,21 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_margin="32dp" - app:layout_constraintBottom_toTopOf="@+id/postButton" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textImageName" /> - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/materialToolbar" + tools:visibility="visible" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_images.xml b/app/src/main/res/layout/fragment_images.xml index fc91e6c..e44cb8c 100644 --- a/app/src/main/res/layout/fragment_images.xml +++ b/app/src/main/res/layout/fragment_images.xml @@ -1,5 +1,6 @@ @@ -22,6 +23,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" /> + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d6f8b77..8eeb37d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -120,4 +120,5 @@ Upload picture Remove %d images? Images selected: %d + Picture name \ No newline at end of file