Java 放置自动完成片段,在我尝试键入任何内容时立即关闭
所以是的,我已经按照教程设置了API,我似乎发现了一个bug` 首先,我有一个问题,当我点击自动完成片段时,应用程序会崩溃, 我通过一个小小的修正,成功地超越了这一点Java 放置自动完成片段,在我尝试键入任何内容时立即关闭,java,android,google-maps,android-fragments,google-places-api,Java,Android,Google Maps,Android Fragments,Google Places Api,所以是的,我已经按照教程设置了API,我似乎发现了一个bug` 首先,我有一个问题,当我点击自动完成片段时,应用程序会崩溃, 我通过一个小小的修正,成功地超越了这一点 (private static final String YOUR_API_KEY = "@string/google_maps_key"; 就在教室里然后 然后 if (!Places.isInitialized()) { Places.initialize(getApplicationContext(
(private static final String YOUR_API_KEY = "@string/google_maps_key";
就在教室里然后
然后
if (!Places.isInitialized()) {
Places.initialize(getApplicationContext(), YOUR_API_KEY);
}
PlacesClient placesClient = Places.createClient(this);
在onCreate中
如果我不能设定一个目的地,我就无法前进。我已经设置了谷歌账单,因为我读到这可能是个问题,但这也不起作用
package com.rizwanqureshi.kevstaxiscanterbury;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.FragmentActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import com.firebase.geofire.GeoFire;
import com.firebase.geofire.GeoLocation;
import com.firebase.geofire.GeoQuery;
import com.firebase.geofire.GeoQueryEventListener;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.libraries.places.api.Places;
import com.google.android.libraries.places.api.model.Place;
import com.google.android.libraries.places.api.net.PlacesClient;
import com.google.android.libraries.places.widget.AutocompleteSupportFragment;
import com.google.android.libraries.places.widget.listener.PlaceSelectionListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
public class CustomerMapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener {
private static final String YOUR_API_KEY = "@string/google_maps_key";
private GoogleMap mMap;
GoogleApiClient mGoogleApiClient;
Location mLastLocation;
LocationRequest mLocationRequest;
private Button mButtonLogout, mButtonRequest, mButtonSettings, mButtonHistory;
private LatLng pickupLocation;
private Boolean requestMadeBoolean = false;
private Marker pickupMarker;
private SupportMapFragment mapFragment;
private String destination, requestService;
//this is the coordinates of the destination the customer is going to go to
private LatLng destinationLatLng;
//This is for the dialogue that will appear when a driver has been assigned.
private LinearLayout mDriverInfo;
private TextView mDriverName, mDriverPhone, mDriverCar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_customer_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
//check if the necessary permissions have been granted, if not then ask for them to be granted
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(CustomerMapsActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE);
}else{
mapFragment.getMapAsync(this);
}
if (!Places.isInitialized()) {
Places.initialize(getApplicationContext(), YOUR_API_KEY);
}
PlacesClient placesClient = Places.createClient(this);
//set the coordinates to 0.0, 0.0, this is done to prepare th
destinationLatLng = new LatLng(0.0,0.0);
mDriverInfo = findViewById(R.id.driverInfo);
mDriverName = findViewById(R.id.driverName);
mDriverPhone = findViewById(R.id.driverPhone);
mDriverCar = findViewById(R.id.driverCar);
mButtonLogout = findViewById(R.id.cma_Logout);
mButtonRequest = findViewById(R.id.cma_Request);
mButtonSettings = findViewById(R.id.cma_Settings);
mButtonHistory = findViewById(R.id.cma_History);
mButtonLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Signs the current instance of user out and send them to the main activity
FirebaseAuth.getInstance().signOut();
Intent intent = new Intent(CustomerMapsActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
});
mButtonRequest.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@SuppressLint("SetTextI18n")
@Override
public void onClick(View v) {
if (requestMadeBoolean){
endRide();
}else{
requestMadeBoolean = true;
String userID = Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("customerRequest");
GeoFire geoFire = new GeoFire(ref);
geoFire.setLocation(userID, new GeoLocation(mLastLocation.getLatitude(), mLastLocation.getLongitude()));
pickupLocation = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
pickupMarker = mMap.addMarker(new MarkerOptions().position(pickupLocation).title("Pickup Location"));
mButtonRequest.setText("Finding your Driver...");
getClosestDriver();
}
}
});
mButtonSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(CustomerMapsActivity.this, CustomerSettings.class);
startActivity(intent);
}
});
mButtonHistory.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(CustomerMapsActivity.this, CustomerHistory.class);
intent.putExtra("customerOrDriver", "Customers");
startActivity(intent);
}
});
///https://developers.google.com/places/android-sdk/autocomplete#option_1_embed_an_autocompletesupportfragment
// Initialize the AutocompleteSupportFragment.
AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);
// Specify the types of place data to return.
assert autocompleteFragment != null;
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));
// Set up a PlaceSelectionListener to handle the response.
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(@NonNull Place place) {
// TODO: Get info about the selected place.
destination = place.getName().toString();
}
@Override
public void onError(@NonNull Status status) {
// TODO: Handle the error.
}
});
}
private int radius = 1;
private Boolean driverFound = false;
private String driverFoundID;
GeoQuery geoQuery;
private void getClosestDriver(){
DatabaseReference driverLocation = FirebaseDatabase.getInstance().getReference().child("driversAvailable");
GeoFire geoFire = new GeoFire(driverLocation);
geoQuery = geoFire.queryAtLocation(new GeoLocation(pickupLocation.latitude, pickupLocation.longitude), radius);
geoQuery.removeAllListeners();
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
if (!driverFound && requestMadeBoolean){
DatabaseReference mCustomerDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child(key);
mCustomerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists() && dataSnapshot.getChildrenCount()>0){
Map<String, Object> driverMap = (Map<String, Object>) dataSnapshot.getValue();
if (driverFound){
return;
}
assert driverMap != null;
if(Objects.equals(driverMap.get("service"), requestService)){
driverFound = true;
driverFoundID = dataSnapshot.getKey();
DatabaseReference driverRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child(driverFoundID).child("customerRequest");
String customerID = Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid();
HashMap<String, Object> map = new HashMap<>();
map.put("customerJourneyID", customerID);
map.put("destination", destination);
map.put("destinationLat", destinationLatLng.latitude);
map.put("destinationLng", destinationLatLng.longitude);
driverRef.updateChildren(map);
getDriverLocation();
getDriverInfo();
getHasRideEnded();
mButtonRequest.setText("Looking for Driver Location...");
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onKeyExited(String key) {
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
if (!driverFound)
{
radius++;
getClosestDriver();
}
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
}
private Marker mDriverMarker;
private DatabaseReference driverLocationRef;
private ValueEventListener driverLocationRefListener;
private void getDriverLocation(){
driverLocationRef = FirebaseDatabase.getInstance().getReference().child("driversWorking").child(driverFoundID).child("l");
driverLocationRefListener = driverLocationRef.addValueEventListener(new ValueEventListener() {
@SuppressLint("SetTextI18n")
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists() && requestMadeBoolean){
List<Object> map = (List<Object>) dataSnapshot.getValue();
double locationLat = 0;
double locationLng = 0;
assert map != null;
if(map.get(0) != null){
locationLat = Double.parseDouble(map.get(0).toString());
}
if(map.get(1) != null){
locationLng = Double.parseDouble(map.get(1).toString());
}
LatLng driverLatLng = new LatLng(locationLat,locationLng);
if(mDriverMarker != null){
mDriverMarker.remove();
}
Location loc1 = new Location("");
loc1.setLatitude(pickupLocation.latitude);
loc1.setLongitude(pickupLocation.longitude);
Location loc2 = new Location("");
loc2.setLatitude(driverLatLng.latitude);
loc2.setLongitude(driverLatLng.longitude);
float distance = loc1.distanceTo(loc2);
if (distance<100){
mButtonRequest.setText("Driver Arrived");
}else{
mButtonRequest.setText("Driver Found: " + distance);
}
mDriverMarker = mMap.addMarker(new MarkerOptions().position(driverLatLng).title("Your Driver"));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void getDriverInfo(){
mDriverInfo.setVisibility(View.VISIBLE);
DatabaseReference mCustomerDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child(driverFoundID);
mCustomerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists() && dataSnapshot.getChildrenCount()>0){
if(dataSnapshot.child("name")!=null){
mDriverName.setText(dataSnapshot.child("name").getValue().toString());
}
if(dataSnapshot.child("phone")!=null){
mDriverPhone.setText(dataSnapshot.child("phone").getValue().toString());
}
if(dataSnapshot.child("car")!=null){
mDriverCar.setText(dataSnapshot.child("car").getValue().toString());
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private DatabaseReference driveHasEndedRef;
private ValueEventListener driveHasEndedRefListener;
private void getHasRideEnded(){
driveHasEndedRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child(driverFoundID).child("customerRequest").child("customerJourneyID");
driveHasEndedRefListener = driveHasEndedRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
}else{
endRide();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@SuppressLint("SetTextI18n")
private void endRide(){
requestMadeBoolean = false;
geoQuery.removeAllListeners();
driverLocationRef.removeEventListener(driverLocationRefListener);
driveHasEndedRef.removeEventListener(driveHasEndedRefListener);
if (driverFoundID != null){
DatabaseReference driverRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child(driverFoundID).child("customerRequest");
driverRef.removeValue();
driverFoundID = null;
}
driverFound = false;
radius = 1;
String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("customerRequest");
GeoFire geoFire = new GeoFire(ref);
geoFire.removeLocation(userID);
if(pickupMarker != null){
pickupMarker.remove();
}
if (mDriverMarker != null){
mDriverMarker.remove();
}
mButtonRequest.setText("call Uber");
mDriverInfo.setVisibility(View.GONE);
mDriverName.setText("");
mDriverPhone.setText("");
mDriverCar.setText("Destination: ...");
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(CustomerMapsActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE);
}
buildGoogleApiClient();
mMap.setMyLocationEnabled(true);
}
protected synchronized void buildGoogleApiClient(){
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
}
@Override
public void onLocationChanged(Location location) {
if(getApplicationContext()!=null){
mLastLocation = location;
LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(11));
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(1000);
mLocationRequest.setFastestInterval(1000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(CustomerMapsActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE);
}
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
final int LOCATION_REQUEST_CODE = 1;
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case LOCATION_REQUEST_CODE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
mapFragment.getMapAsync(this);
} else {
Toast.makeText(getApplicationContext(), "Please provide permissions", Toast.LENGTH_LONG).show();
}
break;
}
}
}
}
package com.rizwanqureshi.kevstaxiscanterbury;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.annotation.RequiresApi;
导入androidx.core.app.ActivityCompat;
导入androidx.fragment.app.FragmentActivity;
导入android.annotation.SuppressLint;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.location.location;
导入com.firebase.geofire.geofire;
导入com.firebase.geofire.GeoLocation;
导入com.firebase.geofire.GeoQuery;
导入com.firebase.geofire.GeoQueryEventListener;
导入android.os.Build;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.LinearLayout;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.common.ConnectionResult;
导入com.google.android.gms.common.api.GoogleAppClient;
导入com.google.android.gms.common.api.Status;
导入com.google.android.gms.location.LocationRequest;
导入com.google.android.gms.location.LocationServices;
导入com.google.android.gms.location.places.ui.PlaceAutocompleteFragment;
导入com.google.android.gms.maps.CameraUpdateFactory;
导入com.google.android.gms.maps.GoogleMap;
导入com.google.android.gms.maps.OnMapReadyCallback;
导入com.google.android.gms.maps.SupportMapFragment;
导入com.google.android.gms.maps.model.LatLng;
导入com.google.android.gms.maps.model.Marker;
导入com.google.android.gms.maps.model.MarkerOptions;
导入com.google.android.libraries.places.api.places;
导入com.google.android.libraries.places.api.model.Place;
导入com.google.android.libraries.places.api.net.PlacesClient;
导入com.google.android.libraries.places.widget.AutocompleteSupportFragment;
导入com.google.android.libraries.places.widget.listener.PlaceSelectionListener;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.ValueEventListener;
导入java.util.array;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.Objects;
公共类CustomerMapActivity扩展了FragmentActivity在MapreadyCallback、GoogleAppClient.ConnectionCallbacks、GoogleAppClient.OnConnectionFailedListener、com.google.android.gms.location.LocationListener上的实现{
私有静态最终字符串您的_API_KEY=“@String/google_maps_KEY”;
私有谷歌地图;
GoogleapClient MGoogleapClient;
位置mLastLocation;
位置请求mLocationRequest;
私有按钮MButonLout、MButonRequest、MButonSettings、MButonHistory;
私家车扒窃;
私有布尔requestMadeBoolean=false;
专用标记拾取标记;
私有支持mapFragment mapFragment;
私有字符串目的地,requestService;
//这是客户要去的目的地的坐标
私家车目的地;
//这是用于分配驾驶员后出现的对话。
私人线路布局mDriverInfo;
私有文本视图mDriverName、mDriverPhone、mDriverCar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u customer\u maps);
//获取SupportMapFragment,并在地图准备好使用时收到通知。
mapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
//检查是否已授予必要的权限,如果未授予,则要求授予这些权限
if(ActivityCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
ActivityCompat.requestPermissions(CustomerMapActivity.this,新字符串[]{android.Manifest.permission.ACCESS\u FINE\u LOCATION},LOCATION\u REQUEST\u CODE);
}否则{
getMapAsync(这个);
}
如果(!Places.isInitialized()){
初始化(getApplicationContext(),您的API密钥);
}
PlacesClient PlacesClient=Places.createClient(此);
//将坐标设置为0.0,0.0,这样做是为了准备
destinationLatLng=新车床(0.0,0.0);
mDriverInfo=findviewbyd(R.id.driverInfo);
mDriverName=findviewbyd(R.id.driverName);
mDriverPhone=findviewbyd(R.id.driverPhone);
mDriverCar=findViewById(R.id.driverCar);
mbuttonlougout=findviewbyd(R.id.cma_注销);
mButtonRequest=findViewById(R.id.cma_请求);
mButtonSettings=findviewbyd(R.id.cma_设置);
mButtonHistory=findviewbyd(R.id.cma_历史);
mbuttonlougout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//签出用户的当前实例并将其发送到主活动
FirebaseAuth.getInstance().signOut();
意向意向=新意向(CustomerMapActivity.this、MainActivity.class);
星触觉
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DriverMapActivity" >
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/logout"
android:text="logout"/>
<Button
android:layout_weight="1"
android:layout_gravity="end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/settings"
android:text="Settings"/>
</LinearLayout>
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Working"
android:layout_margin="10sp"
android:id="@+id/workingSwitch"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/customerInfo"
android:layout_gravity="bottom"
android:orientation="vertical"
android:background="@android:color/white"
android:visibility="gone"
android:elevation="1dp"
android:translationZ="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="40sp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/customerDestination"
android:paddingBottom="10sp"
android:text="Destination: --"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/customerName"
android:paddingBottom="10sp"
android:paddingTop="20sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/customerPhone"
android:paddingBottom="10sp"
android:paddingTop="20sp"/>
</LinearLayout>
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="picked customer"
android:id="@+id/journeyStatus"/>
</LinearLayout>
</FrameLayout>