diff --git a/.idea/misc.xml b/.idea/misc.xml index 29bb4c5..8a8f75b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,7 +5,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 7127e6c..b12eebc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,6 +21,16 @@ android { } } + compileOptions { + sourceCompatibility = '1.8' + targetCompatibility = '1.8' + } + + tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = "1.8" + } + } } dependencies { @@ -42,16 +52,10 @@ dependencies { androidTestImplementation "androidx.test:core:$androidx_test" androidTestImplementation "androidx.test.ext:junit-ktx:$androidx_test" - // androidx.fragment - def fragment_version = "1.2.0-rc01" // must use for new factory stuff - debugImplementation "androidx.fragment:fragment-testing:$fragment_version" - implementation "androidx.fragment:fragment:$fragment_version" - - - //glide - def glide_version = "4.9.0" - implementation "com.github.bumptech.glide:glide:$glide_version" - annotationProcessor "com.github.bumptech.glide:compiler:$glide_version" + // material dialogs + def matieral_dialogs_version = "3.3.0" + implementation "com.afollestad.material-dialogs:core:$matieral_dialogs_version" + implementation "com.afollestad.material-dialogs:input:$matieral_dialogs_version" } diff --git a/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/MainActivityTest.kt b/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/MainActivityTest.kt new file mode 100644 index 0000000..01c4fe7 --- /dev/null +++ b/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/MainActivityTest.kt @@ -0,0 +1,58 @@ +package com.codingwithmitch.espressouitestexamples + +import androidx.test.core.app.ActivityScenario +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.action.ViewActions.typeText +import androidx.test.espresso.assertion.ViewAssertions.doesNotExist +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.* +import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner +import org.junit.Test + +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4ClassRunner::class) +class MainActivityTest{ + + + @Test + fun test_showDialog_captureNameInput() { + + // GIVEN + val activityScenario = ActivityScenario.launch(MainActivity::class.java) + val NAME = "Mitch" + + // Execute and Verify + onView(withId(R.id.button_launch_dialog)).perform(click()) + + onView(withText(R.string.text_enter_name)).check(matches(isDisplayed())) + + onView(withText(R.string.text_ok)).perform(click()) + + // make sure dialog is still visible (can't click ok without entering a name) + onView(withText(R.string.text_enter_name)).check(matches(isDisplayed())) + + // enter a name + onView(withId(R.id.md_input_message)).perform(typeText(NAME)) + + onView(withText(R.string.text_ok)).perform(click()) + + // make sure dialog is gone + onView(withText(R.string.text_enter_name)).check(doesNotExist()) + + onView(withId(R.id.text_name)).check(matches(withText(NAME))) + } +} + + + + + + + + + + + + diff --git a/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/ui/movie/ActivityTestSuite.kt b/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/ui/movie/ActivityTestSuite.kt deleted file mode 100644 index 3eaef3c..0000000 --- a/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/ui/movie/ActivityTestSuite.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.ui.movie - -import org.junit.runner.RunWith -import org.junit.runners.Suite - -@RunWith(Suite::class) -@Suite.SuiteClasses( - MainActivityTest::class, - SecondaryActivityTest::class - ) -class ActivityTestSuite \ No newline at end of file diff --git a/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/ui/movie/MainActivityTest.kt b/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/ui/movie/MainActivityTest.kt deleted file mode 100644 index 739679d..0000000 --- a/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/ui/movie/MainActivityTest.kt +++ /dev/null @@ -1,63 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.ui.movie - -import androidx.test.core.app.ActivityScenario -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.matcher.ViewMatchers.* -import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner -import com.codingwithmitch.espressouitestexamples.R -import org.junit.Test - -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4ClassRunner::class) -class MainActivityTest{ - - @Test - fun testActivity_inView() { - val activityScenario = ActivityScenario.launch(MainActivity::class.java) - - onView(withId(R.id.main)).check(matches(isDisplayed())) - } - - // Visibility - @Test - fun testVisibility_title_nextButton() { - val activityScenario = ActivityScenario.launch(MainActivity::class.java) - - onView(withId(R.id.activity_main_title)) - .check(matches(isDisplayed())) // method 1 - - onView(withId(R.id.activity_main_title)) - .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) // method 2 - - onView(withId(R.id.button_next_activity)) - .check(matches(isDisplayed())) - } - - // Text - @Test - fun testTitleTextDisplayed() { - val activityScenario = ActivityScenario.launch(MainActivity::class.java) - - onView(withId(R.id.activity_main_title)) - .check(matches(withText(R.string.text_mainactivity))) - } - -} - - - - - - - - - - - - - - - - diff --git a/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/ui/movie/SecondaryActivityTest.kt b/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/ui/movie/SecondaryActivityTest.kt deleted file mode 100644 index 563626a..0000000 --- a/app/src/androidTest/java/com/codingwithmitch/espressouitestexamples/ui/movie/SecondaryActivityTest.kt +++ /dev/null @@ -1,67 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.ui.movie - -import androidx.lifecycle.Lifecycle -import androidx.test.espresso.Espresso.* -import androidx.test.espresso.assertion.ViewAssertions.* -import androidx.test.espresso.matcher.ViewMatchers.* -import androidx.test.ext.junit.rules.ActivityScenarioRule -import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner -import com.codingwithmitch.espressouitestexamples.R -import org.junit.Rule -import org.junit.Test - -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4ClassRunner::class) -class SecondaryActivityTest{ - - /** - * ActivityScenarioRule: - * https://developer.android.com/reference/androidx/test/ext/junit/rules/ActivityScenarioRule.html - */ - @get:Rule - val activityRule = ActivityScenarioRule(SecondaryActivity::class.java) - - @Test - fun testActivity_inView() { - - onView(withId(R.id.secondary)) - .check(matches(isDisplayed())) - - // Notice this does not effect the next test - activityRule.scenario.moveToState(Lifecycle.State.DESTROYED) - } - - // Visibility - @Test - fun testVisibility_title_nextButton() { - onView(withId(R.id.activity_secondary_title)) - .check(matches(isDisplayed())) - - onView(withId(R.id.button_back)) - .check(matches(isDisplayed())) - } - - // Text - @Test - fun testTitleTextDisplayed() { - onView(withId(R.id.activity_secondary_title)) - .check(matches(withText(R.string.text_secondaryactivity))) - } - -} - - - - - - - - - - - - - - - diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 535cd01..8f34717 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,6 @@ - - + diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/MainActivity.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/MainActivity.kt new file mode 100644 index 0000000..3699b9b --- /dev/null +++ b/app/src/main/java/com/codingwithmitch/espressouitestexamples/MainActivity.kt @@ -0,0 +1,58 @@ +package com.codingwithmitch.espressouitestexamples + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.input.input +import kotlinx.android.synthetic.main.activity_main.* + + +class MainActivity : AppCompatActivity(){ + + private val TAG: String = "AppDebug" + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + button_launch_dialog.setOnClickListener { + showDialog() + } + + } + + private fun showDialog(){ + MaterialDialog(this) + .show { + input ( + waitForPositiveButton = true, + allowEmpty = false + ){ dialog, name -> + setNameToTextView(name.toString()) + } + title(R.string.text_enter_name) + positiveButton(R.string.text_ok) + } + } + + private fun setNameToTextView(name: String){ + text_name.text = name + } + +} + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/data/Movie.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/data/Movie.kt deleted file mode 100644 index 15729c6..0000000 --- a/app/src/main/java/com/codingwithmitch/espressouitestexamples/data/Movie.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.data - -data class Movie ( - val id: Int, - val title: String, - val image: String, - val description: String, - val directors: ArrayList?, - val star_actors: ArrayList? -) \ No newline at end of file diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/data/source/MoviesDataSource.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/data/source/MoviesDataSource.kt deleted file mode 100644 index 15fa5a2..0000000 --- a/app/src/main/java/com/codingwithmitch/espressouitestexamples/data/source/MoviesDataSource.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.data.source - -import com.codingwithmitch.espressouitestexamples.data.Movie - -interface MoviesDataSource { - - fun getMovie(movieId: Int): Movie? -} \ No newline at end of file diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/data/source/MoviesRemoteDataSource.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/data/source/MoviesRemoteDataSource.kt deleted file mode 100644 index 0b8b549..0000000 --- a/app/src/main/java/com/codingwithmitch/espressouitestexamples/data/source/MoviesRemoteDataSource.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.data.source - -import com.codingwithmitch.espressouitestexamples.data.Movie - -object MoviesRemoteDataSource: MoviesDataSource { - - private var MOVIES_REMOTE_DATA = LinkedHashMap(2) - - init { - addMovie( - 0, - "Avengers: Infinity War", - "https://nyc3.digitaloceanspaces.com/open-api-spaces/open-api-static/blog/1/Infinity_War-infinity_war.png", - "The Avengers and their allies must be willing to sacrifice all in an attempt to " + - "defeat the powerful Thanos before his blitz of devastation and ruin puts an end to " + - "the universe.", - arrayListOf("Anthony Russo", "Joe Russo"), - arrayListOf("Robert Downey Jr.", "Chris Hemsworth", "Mark Ruffalo", "+ more...") - ) - - addMovie( - 1, - "The Rundown", - "https://nyc3.digitaloceanspaces.com/open-api-spaces/open-api-static/blog/1/The_Rundown-the_rundown.png", - "A tough aspiring chef is hired to bring home a mobster's son from the Amazon but " + - "becomes involved in the fight against an oppressive town operator and the search " + - "for a legendary treasure.", - arrayListOf("R.J. Stewart", "James Vanderbilt"), - arrayListOf("Dwayne Johnson", "Seann William Scott", "Rosario Dawson", "Christopher Walken") - ) - } - - override fun getMovie(movieId: Int): Movie? { - return MOVIES_REMOTE_DATA[movieId] - } - - private fun addMovie( - id: Int, - title: String, - image: String, - description: String, - directors: ArrayList?, - star_actors: ArrayList? - ){ - val movie = Movie( - id = id, - title = title, - image = image, - description = description, - directors = directors, - star_actors = star_actors - ) - MOVIES_REMOTE_DATA.put(id, movie) - } - - -} - - - - - - - - - - - - - - diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/factory/MovieFragmentFactory.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/factory/MovieFragmentFactory.kt deleted file mode 100644 index 5e0ac9c..0000000 --- a/app/src/main/java/com/codingwithmitch/espressouitestexamples/factory/MovieFragmentFactory.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.factory - -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentFactory -import com.bumptech.glide.RequestManager -import com.codingwithmitch.espressouitestexamples.ui.ErrorFragment -import com.codingwithmitch.espressouitestexamples.ui.movie.DirectorsFragment -import com.codingwithmitch.espressouitestexamples.ui.movie.MovieDetailFragment -import com.codingwithmitch.espressouitestexamples.ui.movie.StarActorsFragment - -class MovieFragmentFactory( - private val requestManager: RequestManager -) : FragmentFactory(){ - - override fun instantiate(classLoader: ClassLoader, className: String): Fragment { - - val fragmentClass = loadFragmentClass(classLoader, className) - var fragment: Fragment? = null - var errorDescription: String? = null - - when(fragmentClass){ - - MovieDetailFragment::class.java -> { - fragment = MovieDetailFragment(requestManager) - } - - DirectorsFragment::class.java -> { - fragment = DirectorsFragment() - } - - StarActorsFragment::class.java -> { - fragment = StarActorsFragment() - } - - else -> errorDescription = "Something went wrong." - } - - fragment?.let{ nonNullFragment -> - return nonNullFragment - } - fragment = ErrorFragment(errorDescription) - - return fragment - } - - - -} - - - - - - - - - - - - - diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/ErrorFragment.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/ErrorFragment.kt deleted file mode 100644 index f485f73..0000000 --- a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/ErrorFragment.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.ui - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import com.codingwithmitch.espressouitestexamples.R -import kotlinx.android.synthetic.main.fragment_error.* - -class ErrorFragment -constructor( - val errorDescription: String? = null -) : Fragment(){ - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_error, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - errorDescription?.let{description -> - fragment_error_description.text = description - } - } -} - - - - - - - - - - - diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/DirectorsFragment.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/DirectorsFragment.kt deleted file mode 100644 index 1d653eb..0000000 --- a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/DirectorsFragment.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.ui.movie - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import com.codingwithmitch.espressouitestexamples.R -import com.codingwithmitch.espressouitestexamples.ui.ErrorFragment -import kotlinx.android.synthetic.main.fragment_directors.* - -class DirectorsFragment : Fragment(){ - - private val directors: ArrayList = ArrayList() - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - arguments?.let { args -> - directors.addAll(args.get("args_directors") as List) - }?:activity?.supportFragmentManager?.beginTransaction() - ?.replace(R.id.container, ErrorFragment::class.java, null) - ?.commit() - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_directors, container, false) - } - - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - setDirectors() - } - - private fun setDirectors(){ - for(director in directors){ - directors_text.append(director + "\n") - } - } -} - - - - - - - - - - - - - - - - - diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/MainActivity.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/MainActivity.kt deleted file mode 100644 index 50f04c5..0000000 --- a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/MainActivity.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.ui.movie - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import com.bumptech.glide.Glide -import com.bumptech.glide.RequestManager -import com.bumptech.glide.request.RequestOptions -import com.codingwithmitch.espressouitestexamples.R -import com.codingwithmitch.espressouitestexamples.factory.MovieFragmentFactory - -class MainActivity : AppCompatActivity() { - - // dependency (typically would be injected with dagger) - lateinit var requestManager: RequestManager - - override fun onCreate(savedInstanceState: Bundle?) { - initGlideInstance() - supportFragmentManager.fragmentFactory = MovieFragmentFactory(requestManager) - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - - init() - } - - private fun init(){ - supportFragmentManager.beginTransaction() - .replace(R.id.container, MovieDetailFragment::class.java, null) - .commit() - } - - private fun initGlideInstance(){ - val requestOptions = RequestOptions - .placeholderOf(R.drawable.default_image) - .error(R.drawable.default_image) - requestManager = Glide.with(application) - .setDefaultRequestOptions(requestOptions) - } - -} - - - - - - - diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/MovieDetailFragment.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/MovieDetailFragment.kt deleted file mode 100644 index cbb3a7d..0000000 --- a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/MovieDetailFragment.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.ui.movie - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import com.bumptech.glide.RequestManager -import com.codingwithmitch.espressouitestexamples.R -import com.codingwithmitch.espressouitestexamples.data.Movie -import com.codingwithmitch.espressouitestexamples.data.source.MoviesRemoteDataSource -import kotlinx.android.synthetic.main.fragment_movie_detail.* - -class MovieDetailFragment -constructor( - val requestManager: RequestManager -): Fragment(){ - - private var movie: Movie? = null - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_movie_detail, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - setMovieDetails() - - movie_directiors.setOnClickListener { - val bundle = Bundle() - bundle.putStringArrayList("args_directors", movie?.directors) - activity?.supportFragmentManager?.beginTransaction() - ?.replace(R.id.container, DirectorsFragment::class.java, bundle) - ?.addToBackStack("DirectorsFragment") - ?.commit() - } - - movie_star_actors.setOnClickListener { - val bundle = Bundle() - bundle.putStringArrayList("args_actors", movie?.star_actors) - activity?.supportFragmentManager?.beginTransaction() - ?.replace(R.id.container, StarActorsFragment::class.java, bundle) - ?.addToBackStack("StarActorsFragment") - ?.commit() - } - } - - private fun setMovieDetails(){ - movie = MoviesRemoteDataSource.getMovie(1) - movie?.let{nonNullMovie -> - requestManager - .load(nonNullMovie.image) - .into(movie_image) - movie_title.text = nonNullMovie.title - movie_description.text = nonNullMovie.description - } - } - -} - - - - - - - - - - - - - - - - - diff --git a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/StarActorsFragment.kt b/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/StarActorsFragment.kt deleted file mode 100644 index c20190c..0000000 --- a/app/src/main/java/com/codingwithmitch/espressouitestexamples/ui/movie/StarActorsFragment.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.codingwithmitch.espressouitestexamples.ui.movie - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import com.codingwithmitch.espressouitestexamples.R -import com.codingwithmitch.espressouitestexamples.ui.ErrorFragment -import kotlinx.android.synthetic.main.fragment_star_actors.* - -class StarActorsFragment : Fragment(){ - - private val starActors: ArrayList = ArrayList() - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - arguments?.let { args -> - starActors.addAll(args.get("args_actors") as List) - }?:activity?.supportFragmentManager?.beginTransaction() - ?.replace(R.id.container, ErrorFragment::class.java, null) - ?.commit() - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_star_actors, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - setActors() - } - - private fun setActors(){ - for(actor in starActors){ - star_actors_text.append(actor + "\n") - } - } -} - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_star.xml b/app/src/main/res/drawable/ic_star.xml deleted file mode 100644 index f7946e4..0000000 --- a/app/src/main/res/drawable/ic_star.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index fa88eee..b52e2be 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,16 +6,33 @@ android:id="@+id/main"> - + +