parent
ed2c3a9f04
commit
8049ef8628
@ -0,0 +1,40 @@ |
|||||||
|
package net.pokeranalytics.android.ui.fragment.components |
||||||
|
|
||||||
|
import androidx.appcompat.app.AlertDialog |
||||||
|
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity |
||||||
|
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate |
||||||
|
import net.pokeranalytics.android.ui.view.RowRepresentable |
||||||
|
|
||||||
|
/** |
||||||
|
* Display a dialog with a list of places around the user |
||||||
|
*/ |
||||||
|
class PlacePickerManager { |
||||||
|
|
||||||
|
companion object { |
||||||
|
|
||||||
|
fun create( |
||||||
|
activity: PokerAnalyticsActivity, |
||||||
|
row: RowRepresentable, |
||||||
|
delegate: RowRepresentableDelegate, |
||||||
|
maxResults: Int? = 2 |
||||||
|
) { |
||||||
|
activity.askForPlacesRequest { success, places -> |
||||||
|
if (success && places.size > 0) { |
||||||
|
val placesArray = ArrayList<CharSequence>() |
||||||
|
for ((index, place) in places.withIndex()) { |
||||||
|
placesArray.add(place.place.name.toString()) |
||||||
|
if (index == maxResults) { |
||||||
|
break |
||||||
|
} |
||||||
|
} |
||||||
|
val builder = AlertDialog.Builder(activity) |
||||||
|
builder.setItems(placesArray.toTypedArray()) { _, which -> |
||||||
|
delegate.onRowValueChanged(places[which].place, row) |
||||||
|
} |
||||||
|
builder.show() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,57 @@ |
|||||||
|
package net.pokeranalytics.android.util |
||||||
|
|
||||||
|
import android.Manifest.permission.ACCESS_FINE_LOCATION |
||||||
|
import android.content.Context |
||||||
|
import android.content.pm.PackageManager |
||||||
|
import androidx.core.content.ContextCompat |
||||||
|
import com.google.android.gms.common.api.ApiException |
||||||
|
import com.google.android.libraries.places.api.Places |
||||||
|
import com.google.android.libraries.places.api.model.Place |
||||||
|
import com.google.android.libraries.places.api.model.PlaceLikelihood |
||||||
|
import com.google.android.libraries.places.api.net.FindCurrentPlaceRequest |
||||||
|
import timber.log.Timber |
||||||
|
import java.util.* |
||||||
|
|
||||||
|
class LocationManager(private var context: Context) { |
||||||
|
|
||||||
|
/** |
||||||
|
* Return the [places] around the user |
||||||
|
*/ |
||||||
|
fun askForPlacesRequest(callback: ((success: Boolean, places: ArrayList<PlaceLikelihood>) -> Unit)?) { |
||||||
|
|
||||||
|
// Initialize Places. |
||||||
|
Places.initialize(context, context.getString(net.pokeranalytics.android.R.string.google_places_api)) |
||||||
|
|
||||||
|
// Create a new Places client instance. |
||||||
|
val placesClient = Places.createClient(context) |
||||||
|
|
||||||
|
// Use fields to define the data types to return. |
||||||
|
val placeFields = Arrays.asList(Place.Field.NAME, Place.Field.ADDRESS, Place.Field.LAT_LNG) |
||||||
|
|
||||||
|
// Use the builder to create a FindCurrentPlaceRequest. |
||||||
|
val request = FindCurrentPlaceRequest.builder(placeFields).build() |
||||||
|
|
||||||
|
// Call findCurrentPlace and handle the response (first check that the user has granted permission). |
||||||
|
if (ContextCompat.checkSelfPermission(context, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { |
||||||
|
val placeResponse = placesClient.findCurrentPlace(request) |
||||||
|
placeResponse.addOnCompleteListener { task -> |
||||||
|
val places = ArrayList<PlaceLikelihood>() |
||||||
|
if (task.isSuccessful) { |
||||||
|
val response = task.result |
||||||
|
response?.placeLikelihoods?.let { |
||||||
|
places.addAll(it) |
||||||
|
} |
||||||
|
} else { |
||||||
|
val exception = task.exception |
||||||
|
if (exception is ApiException) { |
||||||
|
Timber.d("Error: ${"Place not found: " + exception.statusCode}") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
callback?.invoke(task.isSuccessful, places) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue