Преглед на файлове

add emtpy fragment for list measure types with layout, di

MrOzOn преди 5 години
родител
ревизия
ee52d13d98

+ 6 - 0
feature_measure_type/build.gradle

@@ -28,6 +28,9 @@ android {
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
+    dataBinding {
+        enabled = true
+    }
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_8
@@ -61,6 +64,9 @@ dependencies {
     implementation cardview
     implementation recyclerview
     implementation material
+    implementation coil
+    implementation coilBase
+    implementation coilSvg
     //Unit test
     testImplementation junit
     testImplementation mockitoCore

+ 32 - 0
feature_measure_type/src/main/java/com/mrozon/feature_measure_type/di/ListMeasureTypeFragmentComponent.kt

@@ -0,0 +1,32 @@
+package com.mrozon.feature_measure_type.di
+
+import com.mrozon.core_api.providers.AppWithFacade
+import com.mrozon.core_api.providers.ProvidersFacade
+import com.mrozon.core_api.viewmodel.ViewModelsFactoryProvider
+import com.mrozon.feature_measure_type.presentation.ListMeasureTypeFragment
+import dagger.Component
+import javax.inject.Singleton
+
+@Singleton
+@Component(
+    modules = [ListMeasureTypeFragmentModule::class],
+    dependencies = [ProvidersFacade::class]
+)
+interface ListMeasureTypeFragmentComponent: ViewModelsFactoryProvider {
+
+    companion object {
+        fun create(providersFacade: ProvidersFacade): ListMeasureTypeFragmentComponent {
+            return DaggerListMeasureTypeFragmentComponent.builder()
+                .providersFacade(providersFacade)
+                .build()
+        }
+        fun injectFragment(fragment: ListMeasureTypeFragment): ListMeasureTypeFragmentComponent  {
+            val component = create((fragment.activity?.application
+                    as AppWithFacade).getFacade())
+            component.inject(fragment)
+            return component
+        }
+    }
+
+    fun inject(fragment: ListMeasureTypeFragment)
+}

+ 22 - 0
feature_measure_type/src/main/java/com/mrozon/feature_measure_type/di/ListMeasureTypeFragmentModule.kt

@@ -0,0 +1,22 @@
+package com.mrozon.feature_measure_type.di
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import com.mrozon.core_api.viewmodel.ViewModelKey
+import com.mrozon.feature_measure_type.presentation.ListMeasureTypeFragmentViewModel
+import dagger.Binds
+import dagger.Module
+import dagger.multibindings.IntoMap
+
+@Module
+interface ListMeasureTypeFragmentModule {
+
+    @Binds
+    @IntoMap
+    @ViewModelKey(ListMeasureTypeFragmentViewModel::class)
+    fun bindViewModel(viewmodel: ListMeasureTypeFragmentViewModel): ViewModel
+
+    @Binds
+    fun viewModelFactory(factory: DaggerViewModelFactory): ViewModelProvider.Factory
+
+}

+ 28 - 0
feature_measure_type/src/main/java/com/mrozon/feature_measure_type/presentation/BindingUtils.kt

@@ -0,0 +1,28 @@
+package com.mrozon.feature_measure_type.presentation
+
+import android.annotation.SuppressLint
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.databinding.BindingAdapter
+import coil.load
+import coil.transform.CircleCropTransformation
+import com.mrozon.core_api.entity.MeasureType
+import com.mrozon.core_api.entity.Person
+import com.mrozon.core_api.network.HealthDiaryService
+import com.mrozon.feature_measure_type.R
+
+@BindingAdapter("load_logo")
+fun ImageView.loadLogo(item: MeasureType) {
+    load(HealthDiaryService.ENDPOINT +item.url) {
+        crossfade(true)
+        placeholder(R.drawable.ic_broken_image_24)
+//        transformations(CircleCropTransformation())
+    }
+}
+
+@SuppressLint("SetTextI18n")
+@BindingAdapter("name_with_mark")
+fun TextView.setNameWithMark(item: MeasureType) {
+    text = "${item.name} (${item.mark})"
+}
+

+ 29 - 0
feature_measure_type/src/main/java/com/mrozon/feature_measure_type/presentation/ListMeasureTypeFragment.kt

@@ -0,0 +1,29 @@
+package com.mrozon.feature_measure_type.presentation
+
+import android.content.Context
+import androidx.fragment.app.viewModels
+import androidx.lifecycle.ViewModelProvider
+import com.mrozon.feature_measure_type.R
+import com.mrozon.feature_measure_type.databinding.FragmentListMeasureTypeBinding
+import com.mrozon.feature_measure_type.di.ListMeasureTypeFragmentComponent
+import com.mrozon.utils.base.BaseFragment
+import javax.inject.Inject
+
+class ListMeasureTypeFragment: BaseFragment<FragmentListMeasureTypeBinding>() {
+
+    override fun getLayoutId(): Int = R.layout.fragment_list_measure_type
+
+    @Inject
+    lateinit var viewModelFactory: ViewModelProvider.Factory
+
+    private val viewModel by viewModels<ListMeasureTypeFragmentViewModel> { viewModelFactory }
+
+    override fun onAttach(context: Context) {
+        super.onAttach(context)
+        ListMeasureTypeFragmentComponent.injectFragment(this)
+    }
+
+    override fun subscribeUi() {
+        TODO("Not yet implemented")
+    }
+}

+ 11 - 0
feature_measure_type/src/main/java/com/mrozon/feature_measure_type/presentation/ListMeasureTypeFragmentViewModel.kt

@@ -0,0 +1,11 @@
+package com.mrozon.feature_measure_type.presentation
+
+import com.mrozon.core_api.providers.CoroutineContextProvider
+import com.mrozon.utils.base.BaseViewModel
+import javax.inject.Inject
+
+class ListMeasureTypeFragmentViewModel @Inject constructor(
+
+): BaseViewModel() {
+
+}

+ 10 - 0
feature_measure_type/src/main/res/drawable/ic_broken_image_24.xml

@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="?attr/colorControlNormal">
+  <path
+      android:fillColor="@android:color/black"
+      android:pathData="M21,5v6.59l-3,-3.01 -4,4.01 -4,-4 -4,4 -3,-3.01L3,5c0,-1.1 0.9,-2 2,-2h14c1.1,0 2,0.9 2,2zM18,11.42l3,3.01L21,19c0,1.1 -0.9,2 -2,2L5,21c-1.1,0 -2,-0.9 -2,-2v-6.58l3,2.99 4,-4 4,4 4,-3.99z"/>
+</vector>

+ 39 - 0
feature_measure_type/src/main/res/layout/fragment_list_measure_type.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rvPerson"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="59dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:listitem="@layout/item_measure_type" />
+
+        <ProgressBar
+            android:id="@+id/progressBar"
+            style="?android:attr/progressBarStyle"
+            android:layout_width="128dp"
+            android:layout_height="128dp"
+            android:indeterminate="true"
+            android:visibility="invisible"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:visibility="visible" />
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 65 - 0
feature_measure_type/src/main/res/layout/item_measure_type.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:tools="http://schemas.android.com/tools"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+        <variable
+            name="measure_type"
+            type="com.mrozon.core_api.entity.MeasureType" />
+    </data>
+
+    <androidx.cardview.widget.CardView
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:id="@+id/cvMeasureType"
+        android:layout_gravity="center"
+        android:layout_margin="@dimen/card_margin"
+        app:cardCornerRadius="5dp"
+        app:elevation="@dimen/cardview_elevation">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <ImageView
+                android:id="@+id/ivLogo"
+                android:layout_width="40dp"
+                android:layout_height="40dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginTop="8dp"
+                android:layout_marginBottom="8dp"
+                android:alpha="0.75"
+                app:load_logo="{measure_type}"
+                android:contentDescription="@string/ivLogo"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:srcCompat="@drawable/ic_logo_24" />
+
+            <TextView
+                android:id="@+id/person_name"
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_centerVertical="true"
+                android:layout_marginStart="16dp"
+                android:layout_marginRight="16dp"
+                android:layout_toEndOf="@id/ivLogo"
+                android:paddingTop="16dp"
+                android:textAppearance="@style/TextAppearance.AppCompat.Large"
+                android:textColor="#000000"
+                android:textSize="20sp"
+                app:name_with_mark="{measure_type}"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintHorizontal_bias="0.0"
+                app:layout_constraintStart_toEndOf="@+id/ivLogo"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintVertical_chainStyle="packed"
+                tools:text="Важный показатель" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </androidx.cardview.widget.CardView>
+
+</layout>

+ 5 - 0
feature_measure_type/src/main/res/values/dimens.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <dimen name="card_margin">3dp</dimen>
+    <dimen name="cardview_elevation">3dp</dimen>
+</resources>

+ 4 - 0
feature_measure_type/src/main/res/values/strings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="ivLogo">logo measure type</string>
+</resources>