Browse Source

Cleaned up the code. There may be a bug ('vegetable' button not showing) in the filters area that Andrés and I missed.

Víctor Hernández 3 years ago
parent
commit
274ff1cd0a
38 changed files with 146 additions and 912 deletions
  1. 6
    0
      Floradex20/.idea/vcs.xml
  2. 4
    4
      Floradex20/app/src/main/AndroidManifest.xml
  3. 25
    25
      Floradex20/app/src/main/java/com/example/floradex20/ApiManager.kt
  4. 7
    32
      Floradex20/app/src/main/java/com/example/floradex20/activities/DiscoverActivity.kt
  5. 5
    7
      Floradex20/app/src/main/java/com/example/floradex20/activities/FilteringActivity.kt
  6. 12
    14
      Floradex20/app/src/main/java/com/example/floradex20/activities/FlowerDetailActivity.kt
  7. 5
    5
      Floradex20/app/src/main/java/com/example/floradex20/activities/LoginActivity.kt
  8. 5
    27
      Floradex20/app/src/main/java/com/example/floradex20/activities/RegisterActivity.kt
  9. 6
    7
      Floradex20/app/src/main/java/com/example/floradex20/adapters/FlowerAdapter.kt
  10. 9
    8
      Floradex20/app/src/main/java/com/example/floradex20/interfaces/RestApi.kt
  11. 4
    4
      Floradex20/app/src/main/java/com/example/floradex20/interfaces/TrefleService.kt
  12. 2
    2
      Floradex20/app/src/main/java/com/example/floradex20/models/Flower.kt
  13. 1
    1
      Floradex20/app/src/main/java/com/example/floradex20/models/FlowerLinks.kt
  14. 7
    0
      Floradex20/app/src/main/java/com/example/floradex20/models/FlowersResponse.kt
  15. 1
    1
      Floradex20/app/src/main/java/com/example/floradex20/models/FlowersResponseLinks.kt
  16. 1
    1
      Floradex20/app/src/main/java/com/example/floradex20/models/FlowersResponseMetadata.kt
  17. 0
    11
      Floradex20/app/src/main/java/com/example/floradex20/models/PlantListss.kt
  18. 11
    0
      Floradex20/app/src/main/java/com/example/floradex20/models/User.kt
  19. 0
    11
      Floradex20/app/src/main/java/com/example/floradex20/models/UserInfo.kt
  20. 22
    0
      Floradex20/app/src/main/java/com/example/floradex20/services/ServiceBuilder.kt
  21. 0
    0
      Floradex20/app/src/main/res/drawable/star_empty.png
  22. 0
    0
      Floradex20/app/src/main/res/drawable/star_filled.png
  23. 6
    3
      Floradex20/app/src/main/res/layout/activity_discover.xml
  24. 1
    1
      Floradex20/app/src/main/res/layout/activity_flower_detail.xml
  25. 0
    0
      Floradex20/app/src/main/res/layout/activity_login.xml
  26. 0
    0
      Floradex20/app/src/main/res/layout/activity_register.xml
  27. 1
    1
      Floradex20/app/src/main/res/layout/row_flower.xml
  28. 1
    7
      Floradex20/app/src/main/res/values/strings.xml
  29. 0
    23
      Planta_Display/AndroidManifest.xml
  30. 0
    81
      Planta_Display/MainActivity.kt
  31. 0
    468
      Planta_Display/Plant.kt
  32. 0
    14
      Planta_Display/TrefleService.kt
  33. 0
    73
      Planta_Display/activity_main.xml
  34. 0
    54
      Planta_Display/build.gradle
  35. 0
    9
      Planta_Display/strings.xml
  36. 0
    10
      Planta_Display/styles.xml
  37. 4
    7
      README.md
  38. 0
    1
      README2.md

+ 6
- 0
Floradex20/.idea/vcs.xml View File

1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="VcsDirectoryMappings">
4
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
5
+  </component>
6
+</project>

+ 4
- 4
Floradex20/app/src/main/AndroidManifest.xml View File

13
         android:theme="@style/AppTheme">
13
         android:theme="@style/AppTheme">
14
         <activity
14
         <activity
15
             android:name=".activities.FilteringActivity"
15
             android:name=".activities.FilteringActivity"
16
-            android:parentActivityName=".activities.MainActivity" />
16
+            android:parentActivityName=".activities.RegisterActivity" />
17
         <activity
17
         <activity
18
             android:name=".activities.LoginActivity"
18
             android:name=".activities.LoginActivity"
19
-            android:parentActivityName=".activities.MainActivity" />
19
+            android:parentActivityName=".activities.RegisterActivity" />
20
         <activity android:name=".activities.DiscoverActivity">
20
         <activity android:name=".activities.DiscoverActivity">
21
 <!--            android:parentActivityName=".activities.MainActivity">-->
21
 <!--            android:parentActivityName=".activities.MainActivity">-->
22
 
22
 
23
         </activity>
23
         </activity>
24
-        <activity android:name=".activities.MainActivity">
24
+        <activity android:name=".activities.RegisterActivity">
25
             <intent-filter>
25
             <intent-filter>
26
                 <action android:name="android.intent.action.MAIN" />
26
                 <action android:name="android.intent.action.MAIN" />
27
 
27
 
29
             </intent-filter>
29
             </intent-filter>
30
         </activity>
30
         </activity>
31
         <activity
31
         <activity
32
-            android:name=".activities.VentantaActivity"
32
+            android:name=".activities.FlowerDetailActivity"
33
             android:parentActivityName=".activities.DiscoverActivity">
33
             android:parentActivityName=".activities.DiscoverActivity">
34
 
34
 
35
 
35
 

+ 25
- 25
Floradex20/app/src/main/java/com/example/floradex20/ApiManager.kt View File

1
 package com.example.floradex20
1
 package com.example.floradex20
2
 
2
 
3
 import android.view.View
3
 import android.view.View
4
-import com.example.floradex20.activities.ServiceBuilder
5
 import com.example.floradex20.interfaces.RestApi
4
 import com.example.floradex20.interfaces.RestApi
6
-import com.example.floradex20.interfaces.TrefleService
7
-import com.example.floradex20.models.PlantListss
8
-import com.example.floradex20.models.UserInfo
5
+import com.example.floradex20.models.FlowersResponse
6
+import com.example.floradex20.models.User
7
+import com.example.floradex20.services.ServiceBuilder
9
 import com.google.android.material.snackbar.Snackbar
8
 import com.google.android.material.snackbar.Snackbar
10
 import org.json.JSONObject
9
 import org.json.JSONObject
11
 import retrofit2.Call
10
 import retrofit2.Call
15
 class ApiManager(val parent: View) {
14
 class ApiManager(val parent: View) {
16
 
15
 
17
 
16
 
18
-    fun addUser(userData: UserInfo, onResult: (UserInfo?) -> Unit){
17
+    fun addUser(userData: User, onResult: (User?) -> Unit){
19
         val retrofit = ServiceBuilder.buildService(RestApi::class.java)
18
         val retrofit = ServiceBuilder.buildService(RestApi::class.java)
20
-        retrofit.addUser(userData).enqueue(object: Callback<UserInfo> {
21
-            override fun onFailure(call: Call<UserInfo>, t: Throwable) {
19
+        retrofit.addUser(userData).enqueue(object: Callback<User> {
20
+            override fun onFailure(call: Call<User>, t: Throwable) {
22
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
21
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
23
             }
22
             }
24
-            override fun onResponse(call: Call<UserInfo>, response: Response<UserInfo>) {
23
+            override fun onResponse(call: Call<User>, response: Response<User>) {
25
                 if(response.code() == 500 || response.code() == 400) {
24
                 if(response.code() == 500 || response.code() == 400) {
26
                     val responseString = response.errorBody()!!.string()
25
                     val responseString = response.errorBody()!!.string()
27
                     val message = JSONObject(responseString).getString("error")
26
                     val message = JSONObject(responseString).getString("error")
34
     }
33
     }
35
 
34
 
36
 
35
 
37
-    fun logInUser(userData: UserInfo, onResult: (UserInfo?) -> Unit) {
36
+    fun logInUser(userData: User, onResult: (User?) -> Unit) {
38
         val retrofit = ServiceBuilder.buildService(RestApi::class.java)
37
         val retrofit = ServiceBuilder.buildService(RestApi::class.java)
39
-        retrofit.logInUser(userData).enqueue(object: Callback<UserInfo> {
40
-            override fun onFailure(call: Call<UserInfo>, t: Throwable) {
38
+        retrofit.logInUser(userData).enqueue(object: Callback<User> {
39
+            override fun onFailure(call: Call<User>, t: Throwable) {
41
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
40
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
42
             }
41
             }
43
-            override fun onResponse(call: Call<UserInfo>, response: Response<UserInfo>) {
42
+            override fun onResponse(call: Call<User>, response: Response<User>) {
44
 
43
 
45
                 if(response.code() == 500 || response.code() == 400) {
44
                 if(response.code() == 500 || response.code() == 400) {
46
                     val responseString = response.errorBody()!!.string()
45
                     val responseString = response.errorBody()!!.string()
54
     }
53
     }
55
 
54
 
56
 
55
 
57
-    fun getPlants(user_id: String, onResult: (PlantListss) -> Unit) {
56
+    fun getPlants(user_id: String, onResult: (FlowersResponse) -> Unit) {
58
         val request = ServiceBuilder.buildService(RestApi::class.java)
57
         val request = ServiceBuilder.buildService(RestApi::class.java)
59
-        request.getPlants(user_id).enqueue(object: Callback<PlantListss> {
60
-            override fun onFailure(call: Call<PlantListss>, t: Throwable) {
58
+        request.getPlants(user_id).enqueue(object: Callback<FlowersResponse> {
59
+            override fun onFailure(call: Call<FlowersResponse>, t: Throwable) {
61
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
60
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
62
             }
61
             }
63
-            override fun onResponse(call: Call<PlantListss>, response: Response<PlantListss>) {
62
+            override fun onResponse(call: Call<FlowersResponse>, response: Response<FlowersResponse>) {
64
                 if (response.code() == 500 || response.code() == 400) {
63
                 if (response.code() == 500 || response.code() == 400) {
65
                     val responseString = response.errorBody()!!.string()
64
                     val responseString = response.errorBody()!!.string()
66
                     val message = JSONObject(responseString).getString("error")
65
                     val message = JSONObject(responseString).getString("error")
72
         })
71
         })
73
     }
72
     }
74
 
73
 
75
-    fun getPlantsByName(user_id: String, search_input: String, onResult: (PlantListss) -> Unit) {
74
+
75
+    fun getPlantsByName(user_id: String, search_input: String, onResult: (FlowersResponse) -> Unit) {
76
         val request = ServiceBuilder.buildService(RestApi::class.java)
76
         val request = ServiceBuilder.buildService(RestApi::class.java)
77
-        request.getPlantsbyName(user_id, search_input).enqueue(object: Callback<PlantListss> {
78
-            override fun onFailure(call: Call<PlantListss>, t: Throwable) {
77
+        request.getPlantsbyName(user_id, search_input).enqueue(object: Callback<FlowersResponse> {
78
+            override fun onFailure(call: Call<FlowersResponse>, t: Throwable) {
79
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
79
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
80
             }
80
             }
81
-            override fun onResponse(call: Call<PlantListss>, response: Response<PlantListss>) {
81
+            override fun onResponse(call: Call<FlowersResponse>, response: Response<FlowersResponse>) {
82
                 if (response.code() == 500 || response.code() == 400) {
82
                 if (response.code() == 500 || response.code() == 400) {
83
                     val responseString = response.errorBody()!!.string()
83
                     val responseString = response.errorBody()!!.string()
84
                     val message = JSONObject(responseString).getString("error")
84
                     val message = JSONObject(responseString).getString("error")
90
         })
90
         })
91
     }
91
     }
92
 
92
 
93
-    fun getFiltered(user_id: String, edible: String, vegetable: String, color: String, scientificName: String, onResult: (PlantListss) -> Unit) {
93
+
94
+    fun getFiltered(user_id: String, edible: String, vegetable: String, color: String, scientificName: String, onResult: (FlowersResponse) -> Unit) {
94
         val request = ServiceBuilder.buildService(RestApi::class.java)
95
         val request = ServiceBuilder.buildService(RestApi::class.java)
95
-        request.getFiltered(user_id, edible, vegetable, color, scientificName).enqueue(object: Callback<PlantListss> {
96
-            override fun onFailure(call: Call<PlantListss>, t: Throwable) {
96
+        request.getFiltered(user_id, edible, vegetable, color, scientificName).enqueue(object: Callback<FlowersResponse> {
97
+            override fun onFailure(call: Call<FlowersResponse>, t: Throwable) {
97
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
98
                 Snackbar.make(parent, "${t.message}", Snackbar.LENGTH_SHORT).show()
98
             }
99
             }
99
-            override fun onResponse(call: Call<PlantListss>, response: Response<PlantListss>) {
100
+            override fun onResponse(call: Call<FlowersResponse>, response: Response<FlowersResponse>) {
100
                 if (response.code() == 500 || response.code() == 400) {
101
                 if (response.code() == 500 || response.code() == 400) {
101
                     val responseString = response.errorBody()!!.string()
102
                     val responseString = response.errorBody()!!.string()
102
                     val message = JSONObject(responseString).getString("error")
103
                     val message = JSONObject(responseString).getString("error")
109
     }
110
     }
110
 
111
 
111
 
112
 
112
-
113
 }
113
 }

+ 7
- 32
Floradex20/app/src/main/java/com/example/floradex20/activities/DiscoverActivity.kt View File

15
 import androidx.recyclerview.widget.RecyclerView
15
 import androidx.recyclerview.widget.RecyclerView
16
 import com.example.floradex20.ApiManager
16
 import com.example.floradex20.ApiManager
17
 import com.example.floradex20.R
17
 import com.example.floradex20.R
18
-import com.example.floradex20.models.Data
19
-
20
-
21
-//Cosas para que lleguen las flores
22
-//private const val TOKEN: String = "cMyugCJvk-U_xoi31FVBgoEqZiuRnDYpP8fv8Vfiejg"
23
-//private const val  BASE_URL = "https://trefle.io/"
24
-//var slug: String = "prunella-vulgaris"
25
-//private const val ada_link = "https://ada.uprrp.edu/"
26
-//Creo que mas cosas para que lleguen las flores
27
-//object ServiceBuilder {
28
-//
29
-//    val client = OkHttpClient.Builder().build()
30
-//
31
-//    var retrofit: Retrofit = Retrofit.Builder()
32
-//            .baseUrl(ada_link)
33
-//            .addConverterFactory(GsonConverterFactory.create())
34
-//            .client(client)
35
-//            .build()
36
-//
37
-//    fun <T> buildService(service: Class<T>): T {
38
-//        return retrofit.create(service)
39
-//    }
40
-//}
41
-
42
-
43
-//Main Activity
18
+import com.example.floradex20.adapters.FlowerAdapter
19
+import com.example.floradex20.models.Flower
20
+
44
 class DiscoverActivity : AppCompatActivity(), FlowerAdapter.OnItemClickListener {
21
 class DiscoverActivity : AppCompatActivity(), FlowerAdapter.OnItemClickListener {
45
     private lateinit var recyclerView: RecyclerView
22
     private lateinit var recyclerView: RecyclerView
46
-    private lateinit var plants: List<Data>
47
-
48
-    var search_input: String = ""     //Guarda search input de user
23
+    private lateinit var plants: List<Flower>
49
 
24
 
50
 
25
 
51
     //Para desplegar el boton de filtro en Discover Page
26
     //Para desplegar el boton de filtro en Discover Page
57
 
32
 
58
     override fun onCreate(savedInstanceState: Bundle?) {
33
     override fun onCreate(savedInstanceState: Bundle?) {
59
         super.onCreate(savedInstanceState)
34
         super.onCreate(savedInstanceState)
60
-        setContentView(R.layout.discover_activity)
35
+        setContentView(R.layout.activity_discover)
61
 
36
 
62
         //Donde se guarda el input del search bar y el search button
37
         //Donde se guarda el input del search bar y el search button
63
         val enterButton = findViewById<Button>(R.id.search_enter)
38
         val enterButton = findViewById<Button>(R.id.search_enter)
90
         //Esto se ejecuta cuando el usuario hace un search con el search bar
65
         //Esto se ejecuta cuando el usuario hace un search con el search bar
91
         enterButton?.setOnClickListener {
66
         enterButton?.setOnClickListener {
92
 
67
 
93
-            search_input = input.text.toString()
68
+            val search_input = input.text.toString()
94
 
69
 
95
             apimanager.getPlantsByName(userID, search_input) {
70
             apimanager.getPlantsByName(userID, search_input) {
96
 
71
 
114
         //Empezar el activity de Jose
89
         //Empezar el activity de Jose
115
         val plantInfo = arrayOf<String>(plants[position].common_name.toString(), plants[position].scientific_name.toString()
90
         val plantInfo = arrayOf<String>(plants[position].common_name.toString(), plants[position].scientific_name.toString()
116
                 , plants[position].year.toString(), plants[position].author.toString(), plants[position].image_url.toString())
91
                 , plants[position].year.toString(), plants[position].author.toString(), plants[position].image_url.toString())
117
-        val intent = Intent(this, VentantaActivity::class.java).apply {
92
+        val intent = Intent(this, FlowerDetailActivity::class.java).apply {
118
             putExtra("plant_info", plantInfo)
93
             putExtra("plant_info", plantInfo)
119
         }
94
         }
120
         startActivity(intent)
95
         startActivity(intent)

+ 5
- 7
Floradex20/app/src/main/java/com/example/floradex20/activities/FilteringActivity.kt View File

28
         var nom_cientifico: String = ""
28
         var nom_cientifico: String = ""
29
         var color_flor: String = ""
29
         var color_flor: String = ""
30
 
30
 
31
-        edibleToggle.setOnCheckedChangeListener{ _, isChecked ->
31
+        edibleToggle.setOnCheckedChangeListener{_, isChecked ->
32
             if (isChecked){
32
             if (isChecked){
33
                 edible = "true"
33
                 edible = "true"
34
-            }
35
-            else{
34
+            } else {
36
                 edible = "false"
35
                 edible = "false"
37
             }
36
             }
38
         }
37
         }
39
-        vegetableToggle.setOnCheckedChangeListener{ _, isChecked ->
38
+        vegetableToggle.setOnCheckedChangeListener{_, isChecked ->
40
             if (isChecked){
39
             if (isChecked){
41
                 vegetable = "true"
40
                 vegetable = "true"
42
-            }
43
-            else{
41
+            } else {
44
                 vegetable = "false"
42
                 vegetable = "false"
45
             }
43
             }
46
         }
44
         }
47
 
45
 
48
         //Cuando usuario le da apply se envia los filter values a main activity
46
         //Cuando usuario le da apply se envia los filter values a main activity
49
-        apply.setOnClickListener(){
47
+        apply.setOnClickListener {
50
 
48
 
51
             color_flor = colorTxt.text.toString()
49
             color_flor = colorTxt.text.toString()
52
             nom_cientifico = sciTxt.text.toString()
50
             nom_cientifico = sciTxt.text.toString()

Floradex20/app/src/main/java/com/example/floradex20/activities/VentantaActivity.kt → Floradex20/app/src/main/java/com/example/floradex20/activities/FlowerDetailActivity.kt View File

8
 import com.example.floradex20.R
8
 import com.example.floradex20.R
9
 import com.squareup.picasso.Picasso
9
 import com.squareup.picasso.Picasso
10
 
10
 
11
-class VentantaActivity(): AppCompatActivity() {
11
+class FlowerDetailActivity : AppCompatActivity() {
12
 
12
 
13
-//    val planta:Data = plant
14
     override fun onCreate(savedInstanceState: Bundle?) {
13
     override fun onCreate(savedInstanceState: Bundle?) {
15
         super.onCreate(savedInstanceState)
14
         super.onCreate(savedInstanceState)
16
-        setContentView(R.layout.ventanita)
15
+        setContentView(R.layout.activity_flower_detail)
17
 
16
 
18
         val plant = intent.getStringArrayExtra("plant_info")
17
         val plant = intent.getStringArrayExtra("plant_info")
19
 
18
 
25
 
24
 
26
         nom_planta.text = "Salu2"
25
         nom_planta.text = "Salu2"
27
 
26
 
28
-    if (plant != null) {
27
+        if (plant != null) {
29
 
28
 
30
-        nom_planta.text = plant.get(0)
31
-        nom_sci.text = plant.get(1)
32
-        year.text = plant.get(2)
33
-        author.text = plant.get(3)
34
-        Picasso.get().load(plant.get(4)).into(imagen_planta)
35
-    }
36
-
37
-    else {
38
-        Log.i("Desde ventana kt", "Llega null el valor. Te la mamaste")
39
-    }
29
+            nom_planta.text = plant.get(0)
30
+            nom_sci.text = plant.get(1)
31
+            year.text = plant.get(2)
32
+            author.text = plant.get(3)
33
+            Picasso.get().load(plant.get(4)).into(imagen_planta)
34
+        }
40
 
35
 
36
+        else {
37
+            Log.i("Desde ventana kt", "Llega null el valor. Te la mamaste")
38
+        }
41
 
39
 
42
     }
40
     }
43
 }
41
 }

+ 5
- 5
Floradex20/app/src/main/java/com/example/floradex20/activities/LoginActivity.kt View File

10
 import androidx.appcompat.app.AppCompatActivity
10
 import androidx.appcompat.app.AppCompatActivity
11
 import com.example.floradex20.ApiManager
11
 import com.example.floradex20.ApiManager
12
 import com.example.floradex20.R
12
 import com.example.floradex20.R
13
-import com.example.floradex20.models.UserInfo
13
+import com.example.floradex20.models.User
14
 //import com.example.login.ApiManager
14
 //import com.example.login.ApiManager
15
 //import com.example.login.UserInfo
15
 //import com.example.login.UserInfo
16
 import com.google.android.material.snackbar.Snackbar
16
 import com.google.android.material.snackbar.Snackbar
19
 
19
 
20
     override fun onCreate(savedInstanceState: Bundle?) {
20
     override fun onCreate(savedInstanceState: Bundle?) {
21
         super.onCreate(savedInstanceState)
21
         super.onCreate(savedInstanceState)
22
-        setContentView(R.layout.login)
22
+        setContentView(R.layout.activity_login)
23
 
23
 
24
 
24
 
25
         val b: Button
25
         val b: Button
47
 
47
 
48
 
48
 
49
             //Hasta aqui funciona
49
             //Hasta aqui funciona
50
-            val user_info = UserInfo(null, user_email, user_password, null, null)
50
+            val user_info = User(null, user_email, user_password, null, null)
51
             val apimanager = ApiManager(it)
51
             val apimanager = ApiManager(it)
52
             val thisActivity = it
52
             val thisActivity = it
53
 //            user_info.user_email?.let { it1 -> Log.i("check instance info", it1) }
53
 //            user_info.user_email?.let { it1 -> Log.i("check instance info", it1) }
69
                     ).setAction("Action", null).show()
69
                     ).setAction("Action", null).show()
70
 
70
 
71
                     val user_id: String? = it?.id
71
                     val user_id: String? = it?.id
72
-//                    val user_name: String? = it?.user_name
72
+//                    val user_name: String? = it?.username
73
                     val sharedPref: SharedPreferences = applicationContext.getSharedPreferences("user_info", Context.MODE_PRIVATE)
73
                     val sharedPref: SharedPreferences = applicationContext.getSharedPreferences("user_info", Context.MODE_PRIVATE)
74
                     val editor = sharedPref.edit()
74
                     val editor = sharedPref.edit()
75
                     editor.putString("user_id", user_id)
75
                     editor.putString("user_id", user_id)
76
-//                    editor.putString("user_name", user_name)
76
+//                    editor.putString("user_name", username)
77
                     editor.apply()
77
                     editor.apply()
78
 
78
 
79
 
79
 

Floradex20/app/src/main/java/com/example/floradex20/activities/MainActivity.kt → Floradex20/app/src/main/java/com/example/floradex20/activities/RegisterActivity.kt View File

10
 import androidx.appcompat.app.AppCompatActivity
10
 import androidx.appcompat.app.AppCompatActivity
11
 import com.example.floradex20.ApiManager
11
 import com.example.floradex20.ApiManager
12
 import com.example.floradex20.R
12
 import com.example.floradex20.R
13
-import com.example.floradex20.models.UserInfo
13
+import com.example.floradex20.models.User
14
 import com.google.android.material.snackbar.Snackbar
14
 import com.google.android.material.snackbar.Snackbar
15
-import okhttp3.OkHttpClient
16
-import retrofit2.Retrofit
17
-import retrofit2.converter.gson.GsonConverterFactory
18
 
15
 
19
-
20
-private const val ada_link = "https://ada.uprrp.edu/"
21
-
22
-object ServiceBuilder {
23
-    private val client = OkHttpClient.Builder().build()
24
-
25
-    private val retrofit = Retrofit.Builder()
26
-            .baseUrl(ada_link) // change this IP for testing by your actual machine IP
27
-
28
-            .addConverterFactory(GsonConverterFactory.create())
29
-            .client(client)
30
-            .build()
31
-
32
-    fun<T> buildService(service: Class<T>): T{
33
-        return retrofit.create(service)
34
-    }
35
-}
36
-
37
-class MainActivity() : AppCompatActivity() {
16
+class RegisterActivity : AppCompatActivity() {
38
 
17
 
39
     override fun onCreate(savedInstanceState: Bundle?) {
18
     override fun onCreate(savedInstanceState: Bundle?) {
40
 
19
 
41
-
42
         super.onCreate(savedInstanceState)
20
         super.onCreate(savedInstanceState)
43
-        setContentView(R.layout.register)
21
+        setContentView(R.layout.activity_register)
44
 
22
 
45
         val sharedPref: SharedPreferences = applicationContext.getSharedPreferences("user_info", Context.MODE_PRIVATE)
23
         val sharedPref: SharedPreferences = applicationContext.getSharedPreferences("user_info", Context.MODE_PRIVATE)
46
 
24
 
92
             //Manda el info a la base de datos
70
             //Manda el info a la base de datos
93
             else {
71
             else {
94
 
72
 
95
-                val user_info = UserInfo(full_name, user_email, user_password, null, null)
73
+                val user_info = User(full_name, user_email, user_password, null, null)
96
                 val apimanager = ApiManager(it)
74
                 val apimanager = ApiManager(it)
97
                 val thisActivity = it
75
                 val thisActivity = it
98
 
76
 
106
 
84
 
107
                     //Se guarda el username y id
85
                     //Se guarda el username y id
108
                     val user_id: String? = it?.id
86
                     val user_id: String? = it?.id
109
-                    val user_name: String? = it?.user_name
87
+                    val user_name: String? = it?.username
110
                     val sharedPref: SharedPreferences = applicationContext.getSharedPreferences("user_info", Context.MODE_PRIVATE)
88
                     val sharedPref: SharedPreferences = applicationContext.getSharedPreferences("user_info", Context.MODE_PRIVATE)
111
                     val editor = sharedPref.edit()
89
                     val editor = sharedPref.edit()
112
                     editor.putString("user_id", user_id)
90
                     editor.putString("user_id", user_id)

Floradex20/app/src/main/java/com/example/floradex20/activities/FlowerAdapter.kt → Floradex20/app/src/main/java/com/example/floradex20/adapters/FlowerAdapter.kt View File

1
-package com.example.floradex20.activities
1
+package com.example.floradex20.adapters
2
 
2
 
3
 import android.view.LayoutInflater
3
 import android.view.LayoutInflater
4
 import android.view.View
4
 import android.view.View
7
 import android.widget.TextView
7
 import android.widget.TextView
8
 import androidx.recyclerview.widget.RecyclerView
8
 import androidx.recyclerview.widget.RecyclerView
9
 import com.example.floradex20.R
9
 import com.example.floradex20.R
10
-import com.example.floradex20.models.Data
10
+import com.example.floradex20.models.Flower
11
 import com.squareup.picasso.Picasso
11
 import com.squareup.picasso.Picasso
12
 
12
 
13
-
14
-class FlowerAdapter(val flowers: List<Data>, private val listener: OnItemClickListener): RecyclerView.Adapter<FlowerAdapter.PlantViewHolder>() {
13
+class FlowerAdapter(val flowers: List<Flower>, private val listener: OnItemClickListener): RecyclerView.Adapter<FlowerAdapter.PlantViewHolder>() {
15
 
14
 
16
 //    var listen: onItemClickListener
15
 //    var listen: onItemClickListener
17
 //    this.listen = listener
16
 //    this.listen = listener
18
 //    val listen:OnItemClickListener = listener
17
 //    val listen:OnItemClickListener = listener
19
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PlantViewHolder {
18
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PlantViewHolder {
20
-        val view = LayoutInflater.from(parent.context).inflate(R.layout.layout, parent, false)
19
+        val view = LayoutInflater.from(parent.context).inflate(R.layout.row_flower, parent, false)
21
         return PlantViewHolder(view)
20
         return PlantViewHolder(view)
22
     }
21
     }
23
 
22
 
48
 
47
 
49
         }
48
         }
50
 
49
 
51
-        fun bind(plant: Data, plantviewer: PlantViewHolder) {
50
+        fun bind(plant: Flower, plantviewer: PlantViewHolder) {
52
             //Pone foto y nombre de la planta a la tarjeta
51
             //Pone foto y nombre de la planta a la tarjeta
53
             val imageurl: String = plant.image_url
52
             val imageurl: String = plant.image_url
54
             Picasso.get().load(imageurl).into(photo)
53
             Picasso.get().load(imageurl).into(photo)
60
 
59
 
61
     }
60
     }
62
 
61
 
63
-    public interface OnItemClickListener {
62
+    interface OnItemClickListener {
64
 
63
 
65
         //Metodo que va a usar el activity pa hacer cosas
64
         //Metodo que va a usar el activity pa hacer cosas
66
         fun onItemClick(position: Int)
65
         fun onItemClick(position: Int)

+ 9
- 8
Floradex20/app/src/main/java/com/example/floradex20/interfaces/RestApi.kt View File

1
 package com.example.floradex20.interfaces
1
 package com.example.floradex20.interfaces
2
 
2
 
3
-import com.example.floradex20.models.PlantListss
4
-import com.example.floradex20.models.UserInfo
3
+import com.example.floradex20.models.FlowersResponse
4
+import com.example.floradex20.models.User
5
 import retrofit2.Call
5
 import retrofit2.Call
6
 import retrofit2.http.*
6
 import retrofit2.http.*
7
 
7
 
9
 
9
 
10
     @Headers("Content-Type: application/json")
10
     @Headers("Content-Type: application/json")
11
     @POST("~victor.hernandez17/flowerdex/signup.php")
11
     @POST("~victor.hernandez17/flowerdex/signup.php")
12
-    fun addUser(@Body userData: UserInfo): Call<UserInfo>
12
+    fun addUser(@Body userData: User): Call<User>
13
 
13
 
14
     @Headers("Content-Type: application/json")
14
     @Headers("Content-Type: application/json")
15
     @POST("~victor.hernandez17/flowerdex/login.php")
15
     @POST("~victor.hernandez17/flowerdex/login.php")
16
-    fun logInUser(@Body UserData: UserInfo): Call<UserInfo>
16
+    fun logInUser(@Body userData: User): Call<User>
17
 
17
 
18
 
18
 
19
     @GET("~victor.hernandez17/flowerdex/listFlowers.php") // /api/v1/plants/
19
     @GET("~victor.hernandez17/flowerdex/listFlowers.php") // /api/v1/plants/
20
     //Quite el id de la planta para recibir mas cosas
20
     //Quite el id de la planta para recibir mas cosas
21
     //Posiblemente se puede overload la funcion para q funcione sin id y con id
21
     //Posiblemente se puede overload la funcion para q funcione sin id y con id
22
-    fun getPlants(@Query("user_id") user_id: String): Call<PlantListss>
22
+    fun getPlants(@Query("user_id") user_id: String): Call<FlowersResponse>
23
 
23
 
24
     //El Api Query que se usa cuando se hace un search
24
     //El Api Query que se usa cuando se hace un search
25
     @GET("~victor.hernandez17/flowerdex/listFlowers.php") // /api/v1/plants/search/
25
     @GET("~victor.hernandez17/flowerdex/listFlowers.php") // /api/v1/plants/search/
26
     fun getPlantsbyName(@Query("user_id") user_id: String,
26
     fun getPlantsbyName(@Query("user_id") user_id: String,
27
-                        @Query("q") q: String): Call<PlantListss>
27
+                        @Query("q") q: String): Call<FlowersResponse>
28
 
28
 
29
     //Api query para el filter
29
     //Api query para el filter
30
     @GET("~victor.hernandez17/flowerdex/listFlowers.php") // api/v1/plants/
30
     @GET("~victor.hernandez17/flowerdex/listFlowers.php") // api/v1/plants/
31
     fun getFiltered(@Query("user_id") user_id: String,
31
     fun getFiltered(@Query("user_id") user_id: String,
32
                     @Query("edible") edible: String,
32
                     @Query("edible") edible: String,
33
                     @Query("vegetable") vegetable: String,
33
                     @Query("vegetable") vegetable: String,
34
-                    @Query("flower_color") color: String,
35
-                    @Query("scientific_name") scientificName: String): Call<PlantListss>
34
+                    @Query("flower_color") color: String, // TODO: get rid of this, as it it's not used by ADA
35
+                    @Query("scientific_name") scientificName: String): Call<FlowersResponse>
36
+    
36
 }
37
 }

+ 4
- 4
Floradex20/app/src/main/java/com/example/floradex20/interfaces/TrefleService.kt View File

1
 package com.example.floradex20.interfaces
1
 package com.example.floradex20.interfaces
2
 
2
 
3
-import com.example.floradex20.models.PlantListss
3
+import com.example.floradex20.models.FlowersResponse
4
 import retrofit2.Call
4
 import retrofit2.Call
5
 import retrofit2.http.GET
5
 import retrofit2.http.GET
6
 import retrofit2.http.Query
6
 import retrofit2.http.Query
9
     @GET("/api/v1/plants/")
9
     @GET("/api/v1/plants/")
10
     //Quite el id de la planta para recibir mas cosas
10
     //Quite el id de la planta para recibir mas cosas
11
     //Posiblemente se puede overload la funcion para q funcione sin id y con id
11
     //Posiblemente se puede overload la funcion para q funcione sin id y con id
12
-    fun getPlants(@Query("token") token: String): Call<PlantListss>
12
+    fun getPlants(@Query("token") token: String): Call<FlowersResponse>
13
 
13
 
14
     //El Api Query que se usa cuando se hace un search
14
     //El Api Query que se usa cuando se hace un search
15
     @GET("/api/v1/plants/search/")
15
     @GET("/api/v1/plants/search/")
16
     fun getPlantsbyName(@Query("token") token: String,
16
     fun getPlantsbyName(@Query("token") token: String,
17
-                        @Query("q") q: String): Call<PlantListss>
17
+                        @Query("q") q: String): Call<FlowersResponse>
18
 
18
 
19
     //Api query para el filter
19
     //Api query para el filter
20
     @GET("api/v1/plants/")
20
     @GET("api/v1/plants/")
22
                     @Query("filter[edible]") edible: String,
22
                     @Query("filter[edible]") edible: String,
23
                     @Query("filter[vegetable]") vegetable: String,
23
                     @Query("filter[vegetable]") vegetable: String,
24
                     @Query("filter[flower_color]") color: String,
24
                     @Query("filter[flower_color]") color: String,
25
-                    @Query("filter[scientific_name]") cien_name: String): Call<PlantListss>
25
+                    @Query("filter[scientific_name]") cien_name: String): Call<FlowersResponse>
26
 }
26
 }
27
 
27
 
28
 //@Query("filter[id]") id: Int
28
 //@Query("filter[id]") id: Int

Floradex20/app/src/main/java/com/example/floradex20/models/Data.kt → Floradex20/app/src/main/java/com/example/floradex20/models/Flower.kt View File

1
 package com.example.floradex20.models
1
 package com.example.floradex20.models
2
 
2
 
3
-data class Data(
3
+data class Flower (
4
     val author: String,
4
     val author: String,
5
     val bibliography: String,
5
     val bibliography: String,
6
     val common_name: String,
6
     val common_name: String,
10
     val genus_id: Int,
10
     val genus_id: Int,
11
     val id: Int,
11
     val id: Int,
12
     val image_url: String,
12
     val image_url: String,
13
-    val links: Links,
13
+    val links: FlowerLinks,
14
     val rank: String,
14
     val rank: String,
15
     val scientific_name: String,
15
     val scientific_name: String,
16
     val slug: String,
16
     val slug: String,

Floradex20/app/src/main/java/com/example/floradex20/models/Links.kt → Floradex20/app/src/main/java/com/example/floradex20/models/FlowerLinks.kt View File

1
 package com.example.floradex20.models
1
 package com.example.floradex20.models
2
 
2
 
3
-data class Links(
3
+data class FlowerLinks (
4
     val genus: String,
4
     val genus: String,
5
     val plant: String,
5
     val plant: String,
6
     val self: String
6
     val self: String

+ 7
- 0
Floradex20/app/src/main/java/com/example/floradex20/models/FlowersResponse.kt View File

1
+package com.example.floradex20.models
2
+
3
+data class FlowersResponse (
4
+    val `data`: List<Flower>,
5
+    val links: FlowersResponseLinks,
6
+    val meta: FlowersResponseMetadata
7
+)

Floradex20/app/src/main/java/com/example/floradex20/models/LinksX.kt → Floradex20/app/src/main/java/com/example/floradex20/models/FlowersResponseLinks.kt View File

1
 package com.example.floradex20.models
1
 package com.example.floradex20.models
2
 
2
 
3
-data class LinksX(
3
+data class FlowersResponseLinks (
4
     val first: String,
4
     val first: String,
5
     val last: String,
5
     val last: String,
6
     val next: String,
6
     val next: String,

Floradex20/app/src/main/java/com/example/floradex20/models/Meta.kt → Floradex20/app/src/main/java/com/example/floradex20/models/FlowersResponseMetadata.kt View File

1
 package com.example.floradex20.models
1
 package com.example.floradex20.models
2
 
2
 
3
-data class Meta(
3
+data class FlowersResponseMetadata (
4
     val total: Int
4
     val total: Int
5
 )
5
 )

+ 0
- 11
Floradex20/app/src/main/java/com/example/floradex20/models/PlantListss.kt View File

1
-package com.example.floradex20.models
2
-
3
-import com.example.floradex20.models.Data
4
-import com.example.floradex20.models.LinksX
5
-import com.example.floradex20.models.Meta
6
-
7
-data class PlantListss(
8
-    val `data`: List<Data>,
9
-    val links: LinksX,
10
-    val meta: Meta
11
-)

+ 11
- 0
Floradex20/app/src/main/java/com/example/floradex20/models/User.kt View File

1
+package com.example.floradex20.models
2
+
3
+import com.google.gson.annotations.SerializedName
4
+
5
+data class User (
6
+   @SerializedName("username") val username: String?,
7
+   @SerializedName("email") val email: String?,
8
+   @SerializedName("password") val password: String?,
9
+   @SerializedName("id") val id: String?,
10
+   @SerializedName("error") val error: String?
11
+)

+ 0
- 11
Floradex20/app/src/main/java/com/example/floradex20/models/UserInfo.kt View File

1
-package com.example.floradex20.models
2
-
3
-import com.google.gson.annotations.SerializedName
4
-
5
-data class UserInfo (
6
-        @SerializedName("username") val user_name: String?,
7
-        @SerializedName("email") val user_email: String?,
8
-        @SerializedName("password") val user_password: String?,
9
-        @SerializedName("id") val id: String?,
10
-        @SerializedName("error") val error: String?
11
-)

+ 22
- 0
Floradex20/app/src/main/java/com/example/floradex20/services/ServiceBuilder.kt View File

1
+package com.example.floradex20.services
2
+
3
+import okhttp3.OkHttpClient
4
+import retrofit2.Retrofit
5
+import retrofit2.converter.gson.GsonConverterFactory
6
+
7
+private const val TOKEN_ANDRES: String = "cMyugCJvk-U_xoi31FVBgoEqZiuRnDYpP8fv8Vfiejg"
8
+private const val BASE_URL = "https://ada.uprrp.edu/" // "https://trefle.io/"
9
+
10
+object ServiceBuilder {
11
+    private val client = OkHttpClient.Builder().build()
12
+
13
+    private val retrofit = Retrofit.Builder()
14
+        .baseUrl(BASE_URL)
15
+        .addConverterFactory(GsonConverterFactory.create())
16
+        .client(client)
17
+        .build()
18
+
19
+    fun<T> buildService(service: Class<T>): T{
20
+        return retrofit.create(service)
21
+    }
22
+}

Floradex20/app/src/main/res/drawable/star.png → Floradex20/app/src/main/res/drawable/star_empty.png View File


Floradex20/app/src/main/res/drawable/star_1.png → Floradex20/app/src/main/res/drawable/star_filled.png View File


Floradex20/app/src/main/res/layout/discover_activity.xml → Floradex20/app/src/main/res/layout/activity_discover.xml View File

5
     android:id="@+id/discover_activity"
5
     android:id="@+id/discover_activity"
6
     android:layout_width="match_parent"
6
     android:layout_width="match_parent"
7
     android:layout_height="match_parent"
7
     android:layout_height="match_parent"
8
-    tools:context=".activities.MainActivity">
8
+    tools:context=".activities.RegisterActivity">
9
 
9
 
10
 
10
 
11
     <Button
11
     <Button
37
         android:layout_width="wrap_content"
37
         android:layout_width="wrap_content"
38
         android:layout_height="wrap_content"
38
         android:layout_height="wrap_content"
39
         android:layout_centerHorizontal="true"
39
         android:layout_centerHorizontal="true"
40
-        android:layout_margin="20dp"
41
-        android:text="Floradex"
40
+        android:layout_marginStart="20dp"
41
+        android:layout_marginTop="20dp"
42
+        android:layout_marginEnd="20dp"
43
+        android:layout_marginBottom="20dp"
44
+        android:text="Flowerdex"
42
         android:textSize="20sp" />
45
         android:textSize="20sp" />
43
 
46
 
44
     <androidx.recyclerview.widget.RecyclerView
47
     <androidx.recyclerview.widget.RecyclerView

Floradex20/app/src/main/res/layout/ventanita.xml → Floradex20/app/src/main/res/layout/activity_flower_detail.xml View File

6
     android:id="@+id/Plant_info"
6
     android:id="@+id/Plant_info"
7
     android:layout_width="match_parent"
7
     android:layout_width="match_parent"
8
     android:layout_height="match_parent"
8
     android:layout_height="match_parent"
9
-    tools:context=".activities.MainActivity">
9
+    tools:context=".activities.RegisterActivity">
10
 
10
 
11
     <TextView
11
     <TextView
12
         android:id="@+id/author"
12
         android:id="@+id/author"

Floradex20/app/src/main/res/layout/login.xml → Floradex20/app/src/main/res/layout/activity_login.xml View File


Floradex20/app/src/main/res/layout/register.xml → Floradex20/app/src/main/res/layout/activity_register.xml View File


Floradex20/app/src/main/res/layout/layout.xml → Floradex20/app/src/main/res/layout/row_flower.xml View File

43
                 android:layout_alignParentEnd="true"
43
                 android:layout_alignParentEnd="true"
44
                 android:layout_marginTop="21dp"
44
                 android:layout_marginTop="21dp"
45
                 android:layout_marginEnd="332dp"
45
                 android:layout_marginEnd="332dp"
46
-                app:srcCompat="@drawable/star" />
46
+                app:srcCompat="@drawable/star_empty" />
47
 
47
 
48
 
48
 
49
         </RelativeLayout>
49
         </RelativeLayout>

+ 1
- 7
Floradex20/app/src/main/res/values/strings.xml View File

1
 <resources>
1
 <resources>
2
-    <string name="app_name">Floradex20</string>
2
+    <string name="app_name">Flowerdex</string>
3
     <string name="TOKEN">-wNgf1Lzwh__BwM_7iGot107arhbUbkFtFsCWtZI8lY</string>
3
     <string name="TOKEN">-wNgf1Lzwh__BwM_7iGot107arhbUbkFtFsCWtZI8lY</string>
4
 
4
 
5
     <string name="BASE_URL">"https://trefle.io/"</string>
5
     <string name="BASE_URL">"https://trefle.io/"</string>
6
 
6
 
7
     <string name="plant_name">Plant Name</string>
7
     <string name="plant_name">Plant Name</string>
8
-    <string name="testuri">TestUri</string>
9
     <string name="scientific_name">Scientific Name</string>
8
     <string name="scientific_name">Scientific Name</string>
10
     <string name="year">Year</string>
9
     <string name="year">Year</string>
11
     <string name="author">Author</string>
10
     <string name="author">Author</string>
20
     <string name="not_vegetable">Not Vegetable</string>
19
     <string name="not_vegetable">Not Vegetable</string>
21
     <string name="vegetable">Vegetable</string>
20
     <string name="vegetable">Vegetable</string>
22
     <string name="apply">Apply</string>
21
     <string name="apply">Apply</string>
23
-    <string name="hello_blank_fragment">Hello blank fragment</string>
24
-    <string name="swipe_left_for_register">Swipe Left for Register</string>
25
-    <string name="login">Login</string>
26
     <string name="password">Password</string>
22
     <string name="password">Password</string>
27
     <string name="e_mail">Email</string>
23
     <string name="e_mail">Email</string>
28
-    <string name="tag">Lets look at flowers</string>
29
-    <string name="swipe_right_for_login">Swipe Right for Login</string>
30
     <string name="register">Register</string>
24
     <string name="register">Register</string>
31
     <string name="re_type_password">Re-type Password</string>
25
     <string name="re_type_password">Re-type Password</string>
32
     <string name="your_name">Full Name</string>
26
     <string name="your_name">Full Name</string>

+ 0
- 23
Planta_Display/AndroidManifest.xml View File

1
-<?xml version="1.0" encoding="utf-8"?>
2
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
-    package="com.example.trefletest">
4
-
5
-    <uses-permission android:name="android.permission.INTERNET"/>
6
-
7
-    <application
8
-        android:allowBackup="true"
9
-        android:icon="@mipmap/ic_launcher"
10
-        android:label="@string/app_name"
11
-        android:roundIcon="@mipmap/ic_launcher_round"
12
-        android:supportsRtl="true"
13
-        android:theme="@style/AppTheme">
14
-        <activity android:name=".MainActivity">
15
-            <intent-filter>
16
-                <action android:name="android.intent.action.MAIN" />
17
-
18
-                <category android:name="android.intent.category.LAUNCHER" />
19
-            </intent-filter>
20
-        </activity>
21
-    </application>
22
-
23
-</manifest>

+ 0
- 81
Planta_Display/MainActivity.kt View File

1
-package com.example.trefletest
2
-
3
-import android.os.Bundle
4
-import android.widget.ImageView
5
-import android.widget.TextView
6
-import android.widget.Toast
7
-import androidx.appcompat.app.AppCompatActivity
8
-import com.example.trefletest.models.Plant
9
-import com.squareup.picasso.Picasso
10
-import okhttp3.OkHttpClient
11
-import retrofit2.Call
12
-import retrofit2.Callback
13
-import retrofit2.Response
14
-import retrofit2.Retrofit
15
-import retrofit2.converter.gson.GsonConverterFactory
16
-
17
-private const val TOKEN = "cMyugCJvk-U_xoi31FVBgoEqZiuRnDYpP8fv8Vfiejg"
18
-private const val  BASE_URL = "https://trefle.io/"
19
-var slug: String = "prunella-vulgaris"
20
-
21
-object ServiceBuilder {
22
-
23
-    val client = OkHttpClient.Builder().build()
24
-
25
-    var retrofit: Retrofit = Retrofit.Builder()
26
-        .baseUrl(BASE_URL)
27
-        .addConverterFactory(GsonConverterFactory.create())
28
-        .client(client)
29
-        .build()
30
-
31
-    fun <T> buildService(service: Class<T>): T {
32
-        return retrofit.create(service)
33
-    }
34
-}
35
-
36
-class MainActivity : AppCompatActivity() {
37
-    override fun onCreate(savedInstanceState: Bundle?) {
38
-        super.onCreate(savedInstanceState)
39
-        setContentView(R.layout.activity_main)
40
-        val nom_planta = findViewById(R.id.plant_name) as TextView
41
-        //val uri_test = findViewById(R.id.uri) as TextView   Por si acaso
42
-        val nom_sci = findViewById(R.id.sci_name) as TextView
43
-        val year = findViewById(R.id.year) as TextView
44
-        val author = findViewById(R.id.author) as TextView
45
-        val imagen_planta = findViewById(R.id.plantview) as ImageView
46
-
47
-        nom_planta.text = ("Loading...")
48
-        nom_sci.text = ("Loading...")
49
-        year.text = ("Loading...")
50
-        author.text = ("Loading...")
51
-
52
-        val request = ServiceBuilder.buildService(TrefleService::class.java)
53
-        val call = request.getPlants(slug, TOKEN)
54
-        val uri = call.request().url.toString()
55
-
56
-        //uri_test.text = (uri)
57
-
58
-        call.enqueue(object : Callback<Plant> {
59
-            override fun onFailure(call: Call<Plant>, t: Throwable) {
60
-                Toast.makeText(this@MainActivity, t.message, Toast.LENGTH_LONG).show()
61
-            }
62
-
63
-            override fun onResponse(call: Call<Plant>, response: Response<Plant>) {
64
-                if (response.isSuccessful) {
65
-                    val planta: Plant = response.body()!!
66
-                    nom_planta.text = planta.data.commonName.toString()
67
-                    nom_sci.text = planta.data.scientificName
68
-                    year.text = planta.data.year.toString()
69
-                    author.text = planta.data.author
70
-                    Picasso.get().load(planta.data.imageUrl).into(imagen_planta)
71
-                }
72
-                else{
73
-                    Toast.makeText(this@MainActivity, response.message(), Toast.LENGTH_LONG).show()
74
-                }
75
-
76
-            }
77
-        })
78
-
79
-    }
80
-
81
-}

+ 0
- 468
Planta_Display/Plant.kt View File

1
-package com.example.trefletest.models
2
-import com.google.gson.annotations.SerializedName
3
-
4
-
5
-data class Plant(
6
-    @SerializedName("data")
7
-    val `data`: Data,
8
-    @SerializedName("meta")
9
-    val meta: Meta
10
-) {
11
-    data class Data(
12
-        @SerializedName("author")
13
-        val author: String,
14
-        @SerializedName("bibliography")
15
-        val bibliography: String,
16
-        @SerializedName("common_name")
17
-        val commonName: Any?,
18
-        @SerializedName("family")
19
-        val family: Family,
20
-        @SerializedName("family_common_name")
21
-        val familyCommonName: Any?,
22
-        @SerializedName("forms")
23
-        val forms: List<Any>,
24
-        @SerializedName("genus")
25
-        val genus: Genus,
26
-        @SerializedName("genus_id")
27
-        val genusId: Int,
28
-        @SerializedName("hybrids")
29
-        val hybrids: List<Any>,
30
-        @SerializedName("id")
31
-        val id: Int,
32
-        @SerializedName("image_url")
33
-        val imageUrl: String,
34
-        @SerializedName("links")
35
-        val links: Links,
36
-        @SerializedName("main_species")
37
-        val mainSpecies: MainSpecies,
38
-        @SerializedName("main_species_id")
39
-        val mainSpeciesId: Int,
40
-        @SerializedName("observations")
41
-        val observations: String,
42
-        @SerializedName("scientific_name")
43
-        val scientificName: String,
44
-        @SerializedName("slug")
45
-        val slug: String,
46
-        @SerializedName("sources")
47
-        val sources: List<Source>,
48
-        @SerializedName("species")
49
-        val species: List<Specy>,
50
-        @SerializedName("subspecies")
51
-        val subspecies: List<Any>,
52
-        @SerializedName("subvarieties")
53
-        val subvarieties: List<Any>,
54
-        @SerializedName("varieties")
55
-        val varieties: List<Any>,
56
-        @SerializedName("vegetable")
57
-        val vegetable: Boolean,
58
-        @SerializedName("year")
59
-        val year: Int
60
-    ) {
61
-        data class Family(
62
-            @SerializedName("common_name")
63
-            val commonName: Any?,
64
-            @SerializedName("id")
65
-            val id: Int,
66
-            @SerializedName("links")
67
-            val links: Links,
68
-            @SerializedName("name")
69
-            val name: String,
70
-            @SerializedName("slug")
71
-            val slug: String
72
-        ) {
73
-            data class Links(
74
-                @SerializedName("division_order")
75
-                val divisionOrder: String,
76
-                @SerializedName("genus")
77
-                val genus: String,
78
-                @SerializedName("self")
79
-                val self: String
80
-            )
81
-        }
82
-
83
-        data class Genus(
84
-            @SerializedName("id")
85
-            val id: Int,
86
-            @SerializedName("links")
87
-            val links: Links,
88
-            @SerializedName("name")
89
-            val name: String,
90
-            @SerializedName("slug")
91
-            val slug: String
92
-        ) {
93
-            data class Links(
94
-                @SerializedName("family")
95
-                val family: String,
96
-                @SerializedName("plants")
97
-                val plants: String,
98
-                @SerializedName("self")
99
-                val self: String,
100
-                @SerializedName("species")
101
-                val species: String
102
-            )
103
-        }
104
-
105
-        data class Links(
106
-            @SerializedName("genus")
107
-            val genus: String,
108
-            @SerializedName("self")
109
-            val self: String,
110
-            @SerializedName("species")
111
-            val species: String
112
-        )
113
-
114
-        data class MainSpecies(
115
-            @SerializedName("author")
116
-            val author: String,
117
-            @SerializedName("bibliography")
118
-            val bibliography: String,
119
-            @SerializedName("common_name")
120
-            val commonName: Any?,
121
-            @SerializedName("common_names")
122
-            val commonNames: CommonNames,
123
-            @SerializedName("distribution")
124
-            val distribution: Distribution,
125
-            @SerializedName("distributions")
126
-            val distributions: Distributions,
127
-            @SerializedName("duration")
128
-            val duration: Any?,
129
-            @SerializedName("edible")
130
-            val edible: Boolean,
131
-            @SerializedName("edible_part")
132
-            val ediblePart: Any?,
133
-            @SerializedName("family")
134
-            val family: String,
135
-            @SerializedName("family_common_name")
136
-            val familyCommonName: Any?,
137
-            @SerializedName("flower")
138
-            val flower: Flower,
139
-            @SerializedName("foliage")
140
-            val foliage: Foliage,
141
-            @SerializedName("fruit_or_seed")
142
-            val fruitOrSeed: FruitOrSeed,
143
-            @SerializedName("genus")
144
-            val genus: String,
145
-            @SerializedName("genus_id")
146
-            val genusId: Int,
147
-            @SerializedName("growth")
148
-            val growth: Growth,
149
-            @SerializedName("id")
150
-            val id: Int,
151
-            @SerializedName("image_url")
152
-            val imageUrl: String,
153
-            @SerializedName("images")
154
-            val images: Images,
155
-            @SerializedName("links")
156
-            val links: Links,
157
-            @SerializedName("observations")
158
-            val observations: String,
159
-            @SerializedName("rank")
160
-            val rank: String,
161
-            @SerializedName("scientific_name")
162
-            val scientificName: String,
163
-            @SerializedName("slug")
164
-            val slug: String,
165
-            @SerializedName("sources")
166
-            val sources: List<Source>,
167
-            @SerializedName("specifications")
168
-            val specifications: Specifications,
169
-            @SerializedName("status")
170
-            val status: String,
171
-            @SerializedName("synonyms")
172
-            val synonyms: List<Any>,
173
-            @SerializedName("vegetable")
174
-            val vegetable: Boolean,
175
-            @SerializedName("year")
176
-            val year: Int
177
-        ) {
178
-            class CommonNames(
179
-            )
180
-
181
-            data class Distribution(
182
-                @SerializedName("native")
183
-                val native: List<String>
184
-            )
185
-
186
-            data class Distributions(
187
-                @SerializedName("native")
188
-                val native: List<Native>
189
-            ) {
190
-                data class Native(
191
-                    @SerializedName("id")
192
-                    val id: Int,
193
-                    @SerializedName("links")
194
-                    val links: Links,
195
-                    @SerializedName("name")
196
-                    val name: String,
197
-                    @SerializedName("slug")
198
-                    val slug: String,
199
-                    @SerializedName("species_count")
200
-                    val speciesCount: Int,
201
-                    @SerializedName("tdwg_code")
202
-                    val tdwgCode: String,
203
-                    @SerializedName("tdwg_level")
204
-                    val tdwgLevel: Int
205
-                ) {
206
-                    data class Links(
207
-                        @SerializedName("plants")
208
-                        val plants: String,
209
-                        @SerializedName("self")
210
-                        val self: String,
211
-                        @SerializedName("species")
212
-                        val species: String
213
-                    )
214
-                }
215
-            }
216
-
217
-            data class Flower(
218
-                @SerializedName("color")
219
-                val color: Any?,
220
-                @SerializedName("conspicuous")
221
-                val conspicuous: Any?
222
-            )
223
-
224
-            data class Foliage(
225
-                @SerializedName("color")
226
-                val color: Any?,
227
-                @SerializedName("leaf_retention")
228
-                val leafRetention: Any?,
229
-                @SerializedName("texture")
230
-                val texture: Any?
231
-            )
232
-
233
-            data class FruitOrSeed(
234
-                @SerializedName("color")
235
-                val color: Any?,
236
-                @SerializedName("conspicuous")
237
-                val conspicuous: Any?,
238
-                @SerializedName("seed_persistence")
239
-                val seedPersistence: Any?,
240
-                @SerializedName("shape")
241
-                val shape: Any?
242
-            )
243
-
244
-            data class Growth(
245
-                @SerializedName("atmospheric_humidity")
246
-                val atmosphericHumidity: Any?,
247
-                @SerializedName("bloom_months")
248
-                val bloomMonths: Any?,
249
-                @SerializedName("days_to_harvest")
250
-                val daysToHarvest: Any?,
251
-                @SerializedName("description")
252
-                val description: Any?,
253
-                @SerializedName("fruit_months")
254
-                val fruitMonths: Any?,
255
-                @SerializedName("growth_months")
256
-                val growthMonths: Any?,
257
-                @SerializedName("light")
258
-                val light: Any?,
259
-                @SerializedName("maximum_precipitation")
260
-                val maximumPrecipitation: MaximumPrecipitation,
261
-                @SerializedName("maximum_temperature")
262
-                val maximumTemperature: MaximumTemperature,
263
-                @SerializedName("minimum_precipitation")
264
-                val minimumPrecipitation: MinimumPrecipitation,
265
-                @SerializedName("minimum_root_depth")
266
-                val minimumRootDepth: MinimumRootDepth,
267
-                @SerializedName("minimum_temperature")
268
-                val minimumTemperature: MinimumTemperature,
269
-                @SerializedName("ph_maximum")
270
-                val phMaximum: Any?,
271
-                @SerializedName("ph_minimum")
272
-                val phMinimum: Any?,
273
-                @SerializedName("row_spacing")
274
-                val rowSpacing: RowSpacing,
275
-                @SerializedName("soil_humidity")
276
-                val soilHumidity: Any?,
277
-                @SerializedName("soil_nutriments")
278
-                val soilNutriments: Any?,
279
-                @SerializedName("soil_salinity")
280
-                val soilSalinity: Any?,
281
-                @SerializedName("soil_texture")
282
-                val soilTexture: Any?,
283
-                @SerializedName("sowing")
284
-                val sowing: Any?,
285
-                @SerializedName("spread")
286
-                val spread: Spread
287
-            ) {
288
-                data class MaximumPrecipitation(
289
-                    @SerializedName("mm")
290
-                    val mm: Any?
291
-                )
292
-
293
-                data class MaximumTemperature(
294
-                    @SerializedName("deg_c")
295
-                    val degC: Any?,
296
-                    @SerializedName("deg_f")
297
-                    val degF: Any?
298
-                )
299
-
300
-                data class MinimumPrecipitation(
301
-                    @SerializedName("mm")
302
-                    val mm: Any?
303
-                )
304
-
305
-                data class MinimumRootDepth(
306
-                    @SerializedName("cm")
307
-                    val cm: Any?
308
-                )
309
-
310
-                data class MinimumTemperature(
311
-                    @SerializedName("deg_c")
312
-                    val degC: Any?,
313
-                    @SerializedName("deg_f")
314
-                    val degF: Any?
315
-                )
316
-
317
-                data class RowSpacing(
318
-                    @SerializedName("cm")
319
-                    val cm: Any?
320
-                )
321
-
322
-                data class Spread(
323
-                    @SerializedName("cm")
324
-                    val cm: Any?
325
-                )
326
-            }
327
-
328
-            data class Images(
329
-                @SerializedName("bark")
330
-                val bark: List<Any>,
331
-                @SerializedName("flower")
332
-                val flower: List<Flower>,
333
-                @SerializedName("fruit")
334
-                val fruit: List<Any>,
335
-                @SerializedName("habit")
336
-                val habit: List<Any>,
337
-                @SerializedName("leaf")
338
-                val leaf: List<Any>,
339
-                @SerializedName("other")
340
-                val other: List<Any>
341
-            ) {
342
-                data class Flower(
343
-                    @SerializedName("copyright")
344
-                    val copyright: String,
345
-                    @SerializedName("id")
346
-                    val id: Int,
347
-                    @SerializedName("image_url")
348
-                    val imageUrl: String
349
-                )
350
-            }
351
-
352
-            data class Links(
353
-                @SerializedName("genus")
354
-                val genus: String,
355
-                @SerializedName("plant")
356
-                val plant: String,
357
-                @SerializedName("self")
358
-                val self: String
359
-            )
360
-
361
-            data class Source(
362
-                @SerializedName("citation")
363
-                val citation: String?,
364
-                @SerializedName("id")
365
-                val id: String,
366
-                @SerializedName("last_update")
367
-                val lastUpdate: String,
368
-                @SerializedName("name")
369
-                val name: String,
370
-                @SerializedName("url")
371
-                val url: String
372
-            )
373
-
374
-            data class Specifications(
375
-                @SerializedName("average_height")
376
-                val averageHeight: AverageHeight,
377
-                @SerializedName("growth_form")
378
-                val growthForm: Any?,
379
-                @SerializedName("growth_habit")
380
-                val growthHabit: Any?,
381
-                @SerializedName("growth_rate")
382
-                val growthRate: Any?,
383
-                @SerializedName("ligneous_type")
384
-                val ligneousType: Any?,
385
-                @SerializedName("maximum_height")
386
-                val maximumHeight: MaximumHeight,
387
-                @SerializedName("nitrogen_fixation")
388
-                val nitrogenFixation: Any?,
389
-                @SerializedName("shape_and_orientation")
390
-                val shapeAndOrientation: Any?,
391
-                @SerializedName("toxicity")
392
-                val toxicity: Any?
393
-            ) {
394
-                data class AverageHeight(
395
-                    @SerializedName("cm")
396
-                    val cm: Any?
397
-                )
398
-
399
-                data class MaximumHeight(
400
-                    @SerializedName("cm")
401
-                    val cm: Any?
402
-                )
403
-            }
404
-        }
405
-
406
-        data class Source(
407
-            @SerializedName("citation")
408
-            val citation: String?,
409
-            @SerializedName("id")
410
-            val id: String,
411
-            @SerializedName("last_update")
412
-            val lastUpdate: String,
413
-            @SerializedName("name")
414
-            val name: String,
415
-            @SerializedName("url")
416
-            val url: String
417
-        )
418
-
419
-        data class Specy(
420
-            @SerializedName("author")
421
-            val author: String,
422
-            @SerializedName("bibliography")
423
-            val bibliography: String,
424
-            @SerializedName("common_name")
425
-            val commonName: Any?,
426
-            @SerializedName("family")
427
-            val family: String,
428
-            @SerializedName("family_common_name")
429
-            val familyCommonName: Any?,
430
-            @SerializedName("genus")
431
-            val genus: String,
432
-            @SerializedName("genus_id")
433
-            val genusId: Int,
434
-            @SerializedName("id")
435
-            val id: Int,
436
-            @SerializedName("image_url")
437
-            val imageUrl: String,
438
-            @SerializedName("links")
439
-            val links: Links,
440
-            @SerializedName("rank")
441
-            val rank: String,
442
-            @SerializedName("scientific_name")
443
-            val scientificName: String,
444
-            @SerializedName("slug")
445
-            val slug: String,
446
-            @SerializedName("status")
447
-            val status: String,
448
-            @SerializedName("synonyms")
449
-            val synonyms: List<Any>,
450
-            @SerializedName("year")
451
-            val year: Int
452
-        ) {
453
-            data class Links(
454
-                @SerializedName("genus")
455
-                val genus: String,
456
-                @SerializedName("plant")
457
-                val plant: String,
458
-                @SerializedName("self")
459
-                val self: String
460
-            )
461
-        }
462
-    }
463
-
464
-    data class Meta(
465
-        @SerializedName("last_modified")
466
-        val lastModified: String
467
-    )
468
-}

+ 0
- 14
Planta_Display/TrefleService.kt View File

1
-package com.example.trefletest
2
-
3
-import com.example.trefletest.models.Plant
4
-import retrofit2.Call
5
-import retrofit2.http.GET
6
-import retrofit2.http.Path
7
-import retrofit2.http.Query
8
-
9
-interface TrefleService {
10
-    @GET("/api/v1/plants/{id}")
11
-    fun getPlants(@Path("id") id: String, @Query("token") token: String): Call<Plant>
12
-}
13
-
14
-//@Query("filter[id]") id: Int

+ 0
- 73
Planta_Display/activity_main.xml View File

1
-<?xml version="1.0" encoding="utf-8"?>
2
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
-    xmlns:app="http://schemas.android.com/apk/res-auto"
4
-    xmlns:tools="http://schemas.android.com/tools"
5
-    android:id="@+id/Plant_info"
6
-    android:layout_width="match_parent"
7
-    android:layout_height="match_parent"
8
-    tools:context=".MainActivity">
9
-
10
-    <TextView
11
-        android:id="@+id/author"
12
-        android:layout_width="wrap_content"
13
-        android:layout_height="wrap_content"
14
-        android:text="@string/author"
15
-        android:textAppearance="@style/TextAppearance.AppCompat.Large"
16
-        app:layout_constraintBottom_toBottomOf="parent"
17
-        app:layout_constraintEnd_toEndOf="parent"
18
-        app:layout_constraintHorizontal_bias="0.506"
19
-        app:layout_constraintStart_toStartOf="parent"
20
-        app:layout_constraintTop_toBottomOf="@+id/year"
21
-        app:layout_constraintVertical_bias="0.239" />
22
-
23
-    <TextView
24
-        android:id="@+id/sci_name"
25
-        android:layout_width="wrap_content"
26
-        android:layout_height="wrap_content"
27
-        android:text="@string/scientific_name"
28
-        android:textAppearance="@style/TextAppearance.AppCompat.Large"
29
-        app:layout_constraintBottom_toBottomOf="parent"
30
-        app:layout_constraintEnd_toEndOf="parent"
31
-        app:layout_constraintHorizontal_bias="0.507"
32
-        app:layout_constraintStart_toStartOf="parent"
33
-        app:layout_constraintTop_toBottomOf="@+id/plant_name"
34
-        app:layout_constraintVertical_bias="0.155" />
35
-
36
-    <TextView
37
-        android:id="@+id/plant_name"
38
-        android:layout_width="wrap_content"
39
-        android:layout_height="wrap_content"
40
-        android:text="@string/plant_name"
41
-        android:textAppearance="@style/TextAppearance.AppCompat.Large"
42
-        app:layout_constraintBottom_toBottomOf="parent"
43
-        app:layout_constraintEnd_toEndOf="parent"
44
-        app:layout_constraintHorizontal_bias="0.511"
45
-        app:layout_constraintStart_toStartOf="parent"
46
-        app:layout_constraintTop_toTopOf="parent"
47
-        app:layout_constraintVertical_bias="0.57" />
48
-
49
-    <TextView
50
-        android:id="@+id/year"
51
-        android:layout_width="wrap_content"
52
-        android:layout_height="wrap_content"
53
-        android:text="@string/year"
54
-        android:textAppearance="@style/TextAppearance.AppCompat.Large"
55
-        app:layout_constraintBottom_toBottomOf="parent"
56
-        app:layout_constraintEnd_toEndOf="parent"
57
-        app:layout_constraintHorizontal_bias="0.506"
58
-        app:layout_constraintStart_toStartOf="parent"
59
-        app:layout_constraintTop_toBottomOf="@+id/sci_name"
60
-        app:layout_constraintVertical_bias="0.186" />
61
-
62
-    <ImageView
63
-        android:id="@+id/plantview"
64
-        android:layout_width="wrap_content"
65
-        android:layout_height="wrap_content"
66
-        android:contentDescription="@string/plant_display"
67
-        app:layout_constraintBottom_toTopOf="@+id/plant_name"
68
-        app:layout_constraintEnd_toEndOf="parent"
69
-        app:layout_constraintHorizontal_bias="0.498"
70
-        app:layout_constraintStart_toStartOf="parent"
71
-        app:layout_constraintTop_toTopOf="parent"
72
-        app:srcCompat="@drawable/ic_launcher_foreground" />
73
-</androidx.constraintlayout.widget.ConstraintLayout>

+ 0
- 54
Planta_Display/build.gradle View File

1
-apply plugin: 'com.android.application'
2
-apply plugin: 'kotlin-android'
3
-apply plugin: 'kotlin-android-extensions'
4
-
5
-android {
6
-    compileSdkVersion 30
7
-    buildToolsVersion "30.0.2"
8
-
9
-    compileOptions {
10
-        sourceCompatibility JavaVersion.VERSION_1_8
11
-        targetCompatibility JavaVersion.VERSION_1_8
12
-    }
13
-
14
-    kotlinOptions {
15
-        jvmTarget = JavaVersion.VERSION_1_8.toString()
16
-    }
17
-
18
-    defaultConfig {
19
-        applicationId "com.example.trefletest"
20
-        minSdkVersion 16
21
-        targetSdkVersion 30
22
-        versionCode 1
23
-        versionName "1.0"
24
-        vectorDrawables{
25
-            useSupportLibrary true
26
-        }
27
-
28
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
29
-    }
30
-
31
-    buildTypes {
32
-        release {
33
-            minifyEnabled false
34
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
35
-        }
36
-    }
37
-}
38
-
39
-dependencies {
40
-    implementation fileTree(dir: "libs", include: ["*.jar"])
41
-    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
42
-    implementation 'androidx.core:core-ktx:1.3.2'
43
-    implementation 'androidx.appcompat:appcompat:1.2.0'
44
-    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
45
-    //implementation 'org.junit.jupiter:junit-jupiter'
46
-    testImplementation 'junit:junit:4.13.1'
47
-    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
48
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
49
-    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
50
-    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
51
-    implementation "com.squareup.picasso:picasso:2.71828"
52
-    implementation "org.jetbrains.anko:anko-common:0.9"
53
-    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
54
-}

+ 0
- 9
Planta_Display/strings.xml View File

1
-<resources>
2
-    <string name="app_name">TrefleTest</string>
3
-    <string name="plant_name">Plant Name</string>
4
-    <string name="testuri">TestUri</string>
5
-    <string name="scientific_name">Scientific Name</string>
6
-    <string name="year">Year</string>
7
-    <string name="author">Author</string>
8
-    <string name="plant_display">Plant Display</string>
9
-</resources>

+ 0
- 10
Planta_Display/styles.xml View File

1
-<resources>
2
-    <!-- Base application theme. -->
3
-    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
4
-        <!-- Customize your theme here. -->
5
-        <item name="colorPrimary">@color/colorPrimary</item>
6
-        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
7
-        <item name="colorAccent">@color/colorAccent</item>
8
-    </style>
9
-
10
-</resources>

+ 4
- 7
README.md View File

1
-Este es el repositorio para el proyecto Flowerdex. Los miembros somos Andrés, Víctor, José e Ismael.
2
-
3
-Falta subir todos los detalles y especificaciones.
1
+# Flowerdex
4
 
2
 
5
-Saludos, dice Andrés
6
-
7
-Jose puso esto
3
+Este es el repositorio para el proyecto Flowerdex. Los miembros somos Andrés, Víctor, José e Ismael.
8
 
4
 
9
-Andres ahora si modifico
5
+`Flowerdex` es el folder que contiene el código de iOS (Swift)
6
+`Floradex20` es el folder que contiene el código de Android (Kotlin)

+ 0
- 1
README2.md View File

1
-esto es un nuevo test document