Skip to content

Commit

Permalink
Beta release (#35)
Browse files Browse the repository at this point in the history
* Update gradle version

* Update to Jetpack and resolve code inspection warnings

* Separate details by newlines and random fixes

* Update version code for beta
  • Loading branch information
robert-w-gries committed Aug 25, 2019
1 parent bbdf0c2 commit 850bd07
Show file tree
Hide file tree
Showing 23 changed files with 143 additions and 124 deletions.
28 changes: 14 additions & 14 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,17 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
compileSdkVersion 28
compileSdkVersion 29
dataBinding {
enabled = true
}
defaultConfig {
applicationId "org.endhungerdurham.pantries"
minSdkVersion 19
targetSdkVersion 28
versionCode 6
targetSdkVersion 29
versionCode 7
versionName "0.1-alpha"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
Expand All @@ -51,8 +51,8 @@ ext {
coroutines_version = '1.1.0'
serialization_version = '0.9.1'
lifecycle_version = "1.1.1"
playServicesLocation = '16.0.0'
playServicesMaps = '16.1.0'
playServicesLocation = '17.0.0'
playServicesMaps = '17.0.0'
supportLibVersion = '28.0.0'
}

Expand All @@ -63,18 +63,18 @@ repositories {

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:${serialization_version}"
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation "com.android.support:appcompat-v7:${supportLibVersion}"
implementation "com.android.support:design:${supportLibVersion}"
implementation "com.android.support:recyclerview-v7:${supportLibVersion}"
implementation "com.android.support:support-v4:${supportLibVersion}"
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation "com.google.android.gms:play-services-location:${playServicesLocation}"
implementation "com.google.android.gms:play-services-maps:${playServicesMaps}"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.endhungerdurham.pantries

import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4
import androidx.test.InstrumentationRegistry
import androidx.test.runner.AndroidJUnit4

import org.junit.Test
import org.junit.runner.RunWith
Expand Down
1 change: 1 addition & 0 deletions app/src/main/java/org/endhungerdurham/pantries/Pantry.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ data class Pantry(val organizations: String, val address: String, val city: Stri
override fun describeContents() = 0

companion object {
@Suppress("unused")
@JvmField val CREATOR = object : Parcelable.Creator<Pantry> {
override fun createFromParcel(parcel: Parcel) = Pantry(parcel)
override fun newArray(size: Int): Array<Pantry?> = arrayOfNulls(size)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,32 @@
package org.endhungerdurham.pantries.ui

import android.arch.lifecycle.ViewModelProviders
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.*
import android.widget.Button
import android.widget.ProgressBar
import android.widget.TextView
import androidx.lifecycle.ViewModelProviders
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.MapView
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions
import android.content.Intent
import android.net.Uri
import android.support.design.widget.TabLayout
import android.view.*
import android.widget.ProgressBar
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.material.tabs.TabLayout
import org.endhungerdurham.pantries.Pantry
import org.endhungerdurham.pantries.R
import org.endhungerdurham.pantries.ui.viewmodel.PantriesViewModel

private const val ARG_PANTRY = "pantry"
private const val DEFAULT_ZOOM = 16.0f

class DetailsFragment : Fragment(), OnMapReadyCallback {
class DetailsFragment : androidx.fragment.app.Fragment(), OnMapReadyCallback {

private lateinit var model: PantriesViewModel
private var mMapView: MapView ?= null
private var mPantry: Pantry?= null
private var mPantry: Pantry ?= null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -43,24 +42,24 @@ class DetailsFragment : Fragment(), OnMapReadyCallback {
val view = inflater.inflate(R.layout.fragment_details, container, false)

mPantry = arguments?.getParcelable(ARG_PANTRY)
val pantry = mPantry ?: throw RuntimeException("Pantry was not provided when it was required")

mMapView = view.findViewById(R.id.fragment_details_map_view)
mMapView?.onCreate(savedInstanceState)
mMapView?.visibility = View.INVISIBLE
mMapView?.getMapAsync(this)

val phoneButton = view?.findViewById<Button>(R.id.phone)
val phoneData = mPantry?.phone
if (phoneData.isNullOrBlank()) {
if (pantry.phone.isNullOrBlank()) {
phoneButton?.visibility = View.GONE
} else {
phoneButton?.text = phoneData
phoneButton?.text = pantry.phone
phoneButton?.setOnClickListener{
startActivity(Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phoneData, null)))
startActivity(Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", pantry.phone, null)))
}
}

fillDetails(view, mPantry)
fillDetails(view, pantry)

return view
}
Expand Down Expand Up @@ -94,18 +93,28 @@ class DetailsFragment : Fragment(), OnMapReadyCallback {
}
}

private fun fillDetails(view: View?, pantry: Pantry?) {
private fun fillDetails(view: View?, pantry: Pantry) {
fun buildDetailsText(list: List<String?>, separator: String = "\n"): String {
return mutableListOf<String>().apply {
for (str in list) {
if (!str.isNullOrBlank()) {
add(str)
}
}
}.joinToString(separator)
}

val addressText = view?.findViewById<TextView>(R.id.address_field)
addressText?.append("${pantry?.address} ${pantry?.city}")
addressText?.append(buildDetailsText(listOf(pantry.address, pantry.city)))

val availabilityText = view?.findViewById<TextView>(R.id.availability_field)
availabilityText?.append("${pantry?.days} ${pantry?.hours}")
availabilityText?.append(buildDetailsText(listOf(pantry.days, pantry.hours)))

val qualificationsText = view?.findViewById<TextView>(R.id.qualifications_field)
qualificationsText?.append("${pantry?.prereq}")
qualificationsText?.append(pantry.prereq)

val infoText = view?.findViewById<TextView>(R.id.info_field)
infoText?.append("${pantry?.info}")
infoText?.append(pantry.info)
}

override fun onResume() {
Expand Down Expand Up @@ -141,7 +150,7 @@ class DetailsFragment : Fragment(), OnMapReadyCallback {

companion object {
@JvmStatic
fun newInstance(item: Pantry?) : DetailsFragment {
fun newInstance(item: Pantry) : DetailsFragment {
val args = Bundle()
args.putParcelable(ARG_PANTRY, item)
val fragment = DetailsFragment()
Expand Down
30 changes: 14 additions & 16 deletions app/src/main/java/org/endhungerdurham/pantries/ui/ListFragment.kt
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
package org.endhungerdurham.pantries.ui

import android.arch.lifecycle.Observer
import android.arch.lifecycle.ViewModelProviders
import android.content.Context
import android.os.Bundle
import android.support.design.widget.TabLayout
import android.support.v4.app.Fragment
import android.support.v4.widget.SwipeRefreshLayout
import android.support.v7.widget.DividerItemDecoration
import android.support.v7.widget.DividerItemDecoration.VERTICAL
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.view.*
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.DividerItemDecoration.VERTICAL
import com.google.android.material.tabs.TabLayout
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
Expand All @@ -31,7 +28,7 @@ private const val REFRESH_ANIMATION_DELAY: Long = 1000
* [ListFragment.OnListFragmentInteractionListener] interface.
*/
// TODO: Sort by distance
class ListFragment : Fragment() {
class ListFragment : androidx.fragment.app.Fragment() {

private var listener: OnListFragmentInteractionListener? = null
private lateinit var model: PantriesViewModel
Expand All @@ -46,16 +43,16 @@ class ListFragment : Fragment() {
val view = inflater.inflate(R.layout.fragment_list, container, false)


val recyclerView = view?.findViewById<RecyclerView>(R.id.list)?.apply {
addItemDecoration(DividerItemDecoration(requireContext(), VERTICAL))
layoutManager = LinearLayoutManager(context)
val recyclerView = view?.findViewById<androidx.recyclerview.widget.RecyclerView>(R.id.list)?.apply {
addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(requireContext(), VERTICAL))
layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
}

model.pantries.observe(viewLifecycleOwner, Observer<List<Pantry>> { pantries ->
recyclerView?.adapter = MyItemRecyclerViewAdapter(pantries ?: emptyList(), listener)
})

view?.findViewById<SwipeRefreshLayout>(R.id.list_refresh)?.let {
view?.findViewById<androidx.swiperefreshlayout.widget.SwipeRefreshLayout>(R.id.list_refresh)?.let {
it.setOnRefreshListener {
model.reloadPantries()
it.isRefreshing = false
Expand All @@ -70,6 +67,7 @@ class ListFragment : Fragment() {
Toast.makeText(view?.context, requireContext().getString(R.string.error_loading), Toast.LENGTH_SHORT).show()
setRefreshing(false)
}
else -> {}
}
})

Expand Down Expand Up @@ -97,7 +95,7 @@ class ListFragment : Fragment() {
}

private fun setRefreshing(isRefreshing: Boolean) {
view?.findViewById<SwipeRefreshLayout>(R.id.list_refresh)?.let {
view?.findViewById<androidx.swiperefreshlayout.widget.SwipeRefreshLayout>(R.id.list_refresh)?.let {
when (isRefreshing) {
false -> {
CoroutineScope(Dispatchers.Main).launch {
Expand Down
37 changes: 24 additions & 13 deletions app/src/main/java/org/endhungerdurham/pantries/ui/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package org.endhungerdurham.pantries.ui

import android.arch.lifecycle.ViewModelProviders
import android.graphics.BlendMode
import android.graphics.BlendModeColorFilter
import android.graphics.PorterDuff
import android.support.v7.app.AppCompatActivity
import android.graphics.drawable.Drawable
import android.os.Build
import android.os.Bundle
import android.support.design.widget.TabLayout
import android.support.v4.app.FragmentTransaction
import android.support.v4.content.ContextCompat
import android.support.v4.view.ViewPager
import android.support.v7.widget.SearchView
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SearchView
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProviders
import com.google.android.material.tabs.TabLayout
import org.endhungerdurham.pantries.Pantry
import org.endhungerdurham.pantries.R
import org.endhungerdurham.pantries.ui.ListFragment.OnListFragmentInteractionListener
Expand Down Expand Up @@ -38,7 +40,7 @@ class MainActivity : AppCompatActivity(), OnListFragmentInteractionListener {
val shouldEnableBack: Boolean = supportFragmentManager.backStackEntryCount > 0
supportActionBar?.setDisplayHomeAsUpEnabled(shouldEnableBack)

val viewPager: ViewPager = findViewById(R.id.viewpager)
val viewPager: androidx.viewpager.widget.ViewPager = findViewById(R.id.viewpager)
viewPager.adapter = MyFragmentPagerAdapter(supportFragmentManager, this)

val tabLayout: TabLayout = findViewById(R.id.sliding_tabs)
Expand All @@ -53,7 +55,7 @@ class MainActivity : AppCompatActivity(), OnListFragmentInteractionListener {
override fun onListFragmentInteraction(item: Pantry) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.root_list_fragment, DetailsFragment.newInstance(item))
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
fragmentTransaction.setTransition(androidx.fragment.app.FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
}
Expand All @@ -76,12 +78,12 @@ class MainActivity : AppCompatActivity(), OnListFragmentInteractionListener {

val refreshItem = menu?.findItem(R.id.action_refresh)
val refreshIcon = ContextCompat.getDrawable(this, R.drawable.ic_baseline_cached_24px)
refreshIcon?.setColorFilter(ContextCompat.getColor(this, R.color.menu), PorterDuff.Mode.SRC_ATOP)
setColorFilter(refreshIcon, ContextCompat.getColor(this, R.color.menu))
refreshItem?.icon = refreshIcon

val searchItem = menu?.findItem(R.id.action_search)
val searchIcon = ContextCompat.getDrawable(this, R.drawable.ic_baseline_search_24px)
searchIcon?.setColorFilter(ContextCompat.getColor(this, R.color.menu), PorterDuff.Mode.SRC_ATOP)
setColorFilter(searchIcon, ContextCompat.getColor(this, R.color.menu))
searchItem?.icon = searchIcon

val searchView = searchItem?.actionView as SearchView
Expand Down Expand Up @@ -126,10 +128,19 @@ class MainActivity : AppCompatActivity(), OnListFragmentInteractionListener {
return super.onCreateOptionsMenu(menu)
}

override fun onSaveInstanceState(outState: Bundle?) {
override fun onSaveInstanceState(outState: Bundle) {
if (!mSearchQuery.isNullOrEmpty()) {
outState?.putString(KEY_SEARCH_QUERY, mSearchQuery)
outState.putString(KEY_SEARCH_QUERY, mSearchQuery)
}
super.onSaveInstanceState(outState)
}

private fun setColorFilter(drawable: Drawable?, color: Int) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
drawable?.colorFilter = BlendModeColorFilter(color, BlendMode.SRC_ATOP)
} else {
@Suppress("DEPRECATION")
drawable?.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
}
}
}
Loading

0 comments on commit 850bd07

Please sign in to comment.