Skip to content

Commit

Permalink
Merge pull request #75 from josdem/feature/73
Browse files Browse the repository at this point in the history
[medium]feature/73
  • Loading branch information
josdem authored Jul 8, 2024
2 parents c3ddc91 + 124580f commit 3318a30
Show file tree
Hide file tree
Showing 6 changed files with 135 additions and 32 deletions.
9 changes: 6 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {
}

ext {
testIntegrationVersion = '1.5.0'
testIntegrationVersion = '1.6.0'
}

android {
Expand Down Expand Up @@ -64,8 +64,11 @@ dependencies {
implementation 'com.google.firebase:firebase-analytics'
testImplementation 'junit:junit:4.13.2'
testImplementation 'io.mockk:mockk:1.13.8'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation 'androidx.test.ext:junit:1.2.0'
//TODO: Remove debugImplementation since it is a temporal fix to this Junit issue:
//https://github.com/android/android-test/issues/1755
debugImplementation 'androidx.tracing:tracing:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.0'
androidTestImplementation "androidx.test:runner:$testIntegrationVersion"
androidTestImplementation "androidx.test:rules:$testIntegrationVersion"
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@ import androidx.test.espresso.Espresso.onData
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.josdem.fruitypedia.model.Category
import org.hamcrest.Matchers.allOf
import org.hamcrest.Matchers.equalTo
import org.hamcrest.Matchers.instanceOf
import org.hamcrest.Matchers.`is`
import org.hamcrest.collection.IsMapContaining.hasEntry
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
Expand All @@ -32,5 +35,17 @@ class MainNavigationTest {

val beverages = onView(allOf(withId(R.id.listViewBeverages)))
beverages.check(matches(isDisplayed()))

val beverage =
onData(
allOf(
`is`(instanceOf(Map::class.java)),
hasEntry(
equalTo("NAME"),
`is`("Anti-constipation Smoothie"),
),
),
)
beverage.check(matches(isCompletelyDisplayed()))
}
}
55 changes: 40 additions & 15 deletions app/src/main/java/com/josdem/fruitypedia/BeverageFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ListView
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import com.google.common.collect.Maps
import com.josdem.fruitypedia.adapter.BeverageAdapter
import com.josdem.fruitypedia.databinding.FragmentBeverageBinding
import com.josdem.fruitypedia.model.Beverage
import com.josdem.fruitypedia.service.FruityService
Expand All @@ -37,7 +38,12 @@ import kotlinx.coroutines.launch
class BeverageFragment : Fragment() {
private var _binding: FragmentBeverageBinding? = null
private val binding get() = _binding!!
private val fruityService: FruityService = RetrofitHelper.getInstance().create(FruityService::class.java)
private val fruityService: FruityService =
RetrofitHelper.getInstance().create(FruityService::class.java)

private val id: String = "ID"
private val name: String = "NAME"
private var data: MutableList<MutableMap<String, Any>> = mutableListOf()

override fun onCreateView(
inflater: LayoutInflater,
Expand All @@ -61,27 +67,46 @@ class BeverageFragment : Fragment() {
val result =
fruityService.getBeverages(ApplicationState.getValue("currentCategory") as Int)
Log.d("beverages: ", result.body().toString())
displayResults(result.body())
populateData(result.body())
printData()
displayResults()
}
}
}

private fun displayResults(beverages: List<Beverage>?) {
private fun makeItem(beverage: Beverage): MutableMap<String, Any> {
val dataRow: MutableMap<String, Any> = Maps.newHashMap()
dataRow[beverage.id.toString()] = beverage.name
return dataRow
}

private fun populateData(beverages: List<Beverage>?) {
beverages?.forEach { beverage ->
data.add(makeItem(beverage))
}
}

private fun printData() {
Log.d("data size: ", "size: " + data.size.toString())
data.forEach {
Log.d("item:", it.toString())
}
}

private fun displayResults() {
val listView = view?.findViewById(R.id.listViewBeverages) as ListView
val from = arrayOf(id, name)
val to = intArrayOf(R.id.beverageIdTextView, R.id.beverageTextView)

val arrayAdapter: ArrayAdapter<Beverage> =
ArrayAdapter<Beverage>(
view!!.context,
R.layout.list_beverage,
R.id.beverageTextView,
beverages as MutableList<Beverage>,
)
listView.adapter = arrayAdapter
val simpleAdapter =
this.context?.let { BeverageAdapter(it, data, R.layout.list_beverage, from, to) }
listView.adapter = simpleAdapter

listView.setOnItemClickListener { parent, view, position, id ->
val beverage = arrayAdapter.getItem(position)
Log.d("element: $beverage", "was selected")
beverage?.id?.let { ApplicationState.storeValue("currentBeverage", it) }
val item = simpleAdapter?.getItem(position)
Log.d("element:", "$item was selected")
val entry = item.toString().replace("{", "").replace("}", "").split("=")
ApplicationState.storeValue("currentBeverage", Integer.valueOf(entry[0]))
findNavController().navigate(R.id.action_SecondFragment_to_ThirdFragment)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
Copyright 2024 Jose Morales [email protected]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/

package com.josdem.fruitypedia.adapter

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.SimpleAdapter
import android.widget.TextView
import com.josdem.fruitypedia.R

class BeverageAdapter(
context: Context,
data: MutableList<MutableMap<String, Any>>,
resource: Int,
from: Array<String>,
to: IntArray,
) : SimpleAdapter(context, data, resource, from, to) {
private val inflater: LayoutInflater =
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater

override fun getView(
position: Int,
convertView: View?,
parent: ViewGroup,
): View {
if (convertView == null) {
val view = inflater.inflate(R.layout.list_beverage, parent, false)
val textView: TextView = view.findViewById(R.id.beverageIdTextView)
val nameView: TextView = view.findViewById(R.id.beverageTextView)
val entry = this.getItem(position).toString().replace("{", "").replace("}", "").split("=")
textView.text = entry[0]
nameView.text = entry[1]
return view
}
return convertView
}
}
8 changes: 0 additions & 8 deletions app/src/main/res/layout/fragment_beverage.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,6 @@
android:layout_height="match_parent"
tools:context=".BeverageFragment">

<TextView
android:id="@+id/textview_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ListView
android:id="@+id/listViewBeverages"
android:layout_width="0dp"
Expand Down
26 changes: 20 additions & 6 deletions app/src/main/res/layout/list_beverage.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/beverageTextView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="30dp"
android:textSize="25sp" />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/beverageIdTextView"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:padding="20dp"
android:textSize="25sp" />

<TextView
android:id="@+id/beverageTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/beverageIdTextView"
android:padding="20dp"
android:textSize="25sp" />

</RelativeLayout>

0 comments on commit 3318a30

Please sign in to comment.