diff --git a/presentation/src/main/java/com/jcaique/presentation/contributing/ContributingConst.kt b/presentation/src/main/java/com/jcaique/presentation/contributing/ContributingConst.kt new file mode 100644 index 0000000..bd57954 --- /dev/null +++ b/presentation/src/main/java/com/jcaique/presentation/contributing/ContributingConst.kt @@ -0,0 +1,6 @@ +package com.jcaique.presentation.contributing + +internal object ContributingConst { + const val ANDROID = "https://github.com/jcaiqueoliveira/dialetus" + const val API = "https://github.com/mvfsillva/dialetus-service" +} diff --git a/presentation/src/main/java/com/jcaique/presentation/contributing/ContributingInteraction.kt b/presentation/src/main/java/com/jcaique/presentation/contributing/ContributingInteraction.kt new file mode 100644 index 0000000..6688caa --- /dev/null +++ b/presentation/src/main/java/com/jcaique/presentation/contributing/ContributingInteraction.kt @@ -0,0 +1,6 @@ +package com.jcaique.presentation.contributing + +internal interface ContributingInteraction { + object OpenAndroid : ContributingInteraction + object OpenWeb : ContributingInteraction +} diff --git a/presentation/src/main/java/com/jcaique/presentation/contributing/ContributingNavigation.kt b/presentation/src/main/java/com/jcaique/presentation/contributing/ContributingNavigation.kt new file mode 100644 index 0000000..a36eaba --- /dev/null +++ b/presentation/src/main/java/com/jcaique/presentation/contributing/ContributingNavigation.kt @@ -0,0 +1,48 @@ +package com.jcaique.presentation.contributing + +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.jcaique.presentation.R +import com.jcaique.presentation.utils.dataflow.UnsupportedUserInteraction +import kotlinx.android.synthetic.main.regions_menu_view.* + +internal class ContributingNavigation : BottomSheetDialogFragment() { + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.regions_menu_view, container, false) + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + + navigation.setNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.android -> handleClick(ContributingInteraction.OpenAndroid) + R.id.web -> handleClick(ContributingInteraction.OpenWeb) + } + true + } + } + + private fun handleClick(interaction: ContributingInteraction) { + when (interaction) { + ContributingInteraction.OpenAndroid -> navigate(ContributingConst.ANDROID) + ContributingInteraction.OpenWeb -> navigate(ContributingConst.API) + else -> throw UnsupportedUserInteraction + } + } + + private fun navigate(url: String) { + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) + dismiss() + } +} diff --git a/presentation/src/main/java/com/jcaique/presentation/regions/RegionsActivity.kt b/presentation/src/main/java/com/jcaique/presentation/regions/RegionsActivity.kt index fc68856..b3eb8d7 100644 --- a/presentation/src/main/java/com/jcaique/presentation/regions/RegionsActivity.kt +++ b/presentation/src/main/java/com/jcaique/presentation/regions/RegionsActivity.kt @@ -6,6 +6,7 @@ import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.jcaique.presentation.R +import com.jcaique.presentation.contributing.ContributingNavigation import com.jcaique.presentation.utils.DividerItemDecoration import com.jcaique.presentation.utils.dataflow.UserInteraction.OpenedScreen import com.jcaique.presentation.utils.dataflow.UserInteraction.RequestedFreshContent @@ -14,7 +15,7 @@ import com.jcaique.presentation.utils.dataflow.ViewState.Failed import com.jcaique.presentation.utils.dataflow.ViewState.Loading import com.jcaique.presentation.utils.dataflow.ViewState.Success import com.jcaique.presentation.utils.selfInject -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_regions.* import kotlinx.android.synthetic.main.error_state_layout.* import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch @@ -28,8 +29,9 @@ class RegionsActivity : AppCompatActivity(), KodeinAware { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) + setContentView(R.layout.activity_regions) init() + setupBottomBar() } private fun init() { @@ -43,6 +45,15 @@ class RegionsActivity : AppCompatActivity(), KodeinAware { } } + private fun setupBottomBar() { + setSupportActionBar(bar) + val bottom = ContributingNavigation() + + bar.setNavigationOnClickListener { + bottom.show(supportFragmentManager, bottom.tag) + } + } + private fun handle(state: ViewState) { controlVisibilities(state) diff --git a/presentation/src/main/java/com/jcaique/presentation/regions/RegionsViewModel.kt b/presentation/src/main/java/com/jcaique/presentation/regions/RegionsViewModel.kt index bad28bb..bbc27a2 100644 --- a/presentation/src/main/java/com/jcaique/presentation/regions/RegionsViewModel.kt +++ b/presentation/src/main/java/com/jcaique/presentation/regions/RegionsViewModel.kt @@ -1,6 +1,5 @@ package com.jcaique.presentation.regions -import androidx.lifecycle.ViewModel import com.jcaique.domain.regions.RegionsService import com.jcaique.presentation.utils.dataflow.StateMachine import com.jcaique.presentation.utils.dataflow.StateTransition @@ -10,7 +9,7 @@ import com.jcaique.presentation.utils.dataflow.UserInteraction internal class RegionsViewModel( private val service: RegionsService, private val machine: StateMachine -) : ViewModel() { +) { fun bind() = machine.states() diff --git a/presentation/src/main/res/drawable/ic_android.xml b/presentation/src/main/res/drawable/ic_android.xml new file mode 100644 index 0000000..2b8dbc6 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_android.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_code.xml b/presentation/src/main/res/drawable/ic_code.xml new file mode 100644 index 0000000..4aafc6c --- /dev/null +++ b/presentation/src/main/res/drawable/ic_code.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/layout/activity_main.xml b/presentation/src/main/res/layout/activity_regions.xml similarity index 82% rename from presentation/src/main/res/layout/activity_main.xml rename to presentation/src/main/res/layout/activity_regions.xml index 8904a93..59b14c4 100644 --- a/presentation/src/main/res/layout/activity_main.xml +++ b/presentation/src/main/res/layout/activity_regions.xml @@ -44,4 +44,15 @@ app:layout_behavior="@string/appbar_scrolling_view_behavior" android:id="@+id/errorStateView"/> + + diff --git a/presentation/src/main/res/layout/regions_menu_view.xml b/presentation/src/main/res/layout/regions_menu_view.xml new file mode 100644 index 0000000..4770a28 --- /dev/null +++ b/presentation/src/main/res/layout/regions_menu_view.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/presentation/src/main/res/menu/regions_menu.xml b/presentation/src/main/res/menu/regions_menu.xml new file mode 100644 index 0000000..7904b99 --- /dev/null +++ b/presentation/src/main/res/menu/regions_menu.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index 2f8d2c4..85b2379 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -2,8 +2,9 @@ Dialetus Tentar novamente Ops, algo deu errado. - Como contribuir + Adicionar mais dialetos Não conseguimos carregar as regiões Nenhum dialeto cadastrado Não foi encontrado nenhum dialeto ou região. + Contribuir com o aplicativo