Skip to content

Instantly share code, notes, and snippets.

@malikkurosaki
Created May 26, 2019 16:32
Show Gist options
  • Save malikkurosaki/d8f58e580f986a0b62c0539a23c7b069 to your computer and use it in GitHub Desktop.
Save malikkurosaki/d8f58e580f986a0b62c0539a23c7b069 to your computer and use it in GitHub Desktop.
complete map
package dev.malikkurosaki.bestclean;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.os.Handler;
import android.os.PersistableBundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.daimajia.androidanimations.library.Techniques;
import com.daimajia.androidanimations.library.YoYo;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.tasks.OnSuccessListener;
import com.mapbox.android.gestures.MoveGestureDetector;
import com.mapbox.api.geocoding.v5.GeocodingCriteria;
import com.mapbox.api.geocoding.v5.MapboxGeocoding;
import com.mapbox.api.geocoding.v5.models.CarmenFeature;
import com.mapbox.api.geocoding.v5.models.GeocodingResponse;
import com.mapbox.geojson.Point;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.location.LocationComponent;
import com.mapbox.mapboxsdk.location.LocationComponentActivationOptions;
import com.mapbox.mapboxsdk.location.modes.CameraMode;
import com.mapbox.mapboxsdk.location.modes.RenderMode;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.maps.Style;

import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import timber.log.Timber;

public class MainActivity extends AppCompatActivity{

    private String TOKENNYA = "pk.eyJ1IjoibWFsaWtrdXJvc2FraSIsImEiOiJjancwcWNuMGYwZHVxNDhtdGRuNXBqdTYzIn0._FSW8xQn8U5-VORm722x3Q";
    private MapView mapView;
    private MapboxMap mapboxMap1;
    private FusedLocationProviderClient client;
    private LatLng latLng;
    private Style style1;

    private ImageView targetGps;
    private boolean angkat = false;

    private ImageView marker1;
    private ImageView marker2;

    private int tunggu = 0;
    private ProgressBar loadingAlamat;

    private FrameLayout alamatContainer;
    private TextView alamatKet;
    private Button alamatPilih;

    private Map<String,String> kirimAlamat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Mapbox.getInstance(this,TOKENNYA);
        setContentView(R.layout.activity_main);


        int FINE_LOCATION = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
        int EXTERNAL = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);

        if (FINE_LOCATION != PackageManager.PERMISSION_GRANTED || EXTERNAL != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.READ_EXTERNAL_STORAGE},55);
        }

        mapView = findViewById(R.id.mapView);
        targetGps = findViewById(R.id.targetGps);
        marker1 = findViewById(R.id.marker1);
        marker2 = findViewById(R.id.marker2);
        loadingAlamat = findViewById(R.id.loadingAlamat);
        alamatContainer = findViewById(R.id.alamatContainer);
        alamatKet = findViewById(R.id.alamatKet);
        alamatPilih = findViewById(R.id.alamatPilih);

        marker1.setVisibility(View.GONE);
        marker2.setVisibility(View.GONE);
        targetGps.setVisibility(View.GONE);
        alamatContainer.setVisibility(View.GONE);

        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(@NonNull MapboxMap mapboxMap) {
                mapboxMap1 = mapboxMap;
                mapboxMap1.setStyle(Style.MAPBOX_STREETS, new Style.OnStyleLoaded() {
                    @Override
                    public void onStyleLoaded(@NonNull Style style) {
                        style1 = style;
                        client = LocationServices.getFusedLocationProviderClient(MainActivity.this);

                        mapView.addOnDidFinishLoadingMapListener(new MapView.OnDidFinishLoadingMapListener() {
                            @SuppressLint("MissingPermission")
                            @Override
                            public void onDidFinishLoadingMap() {
                                client.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {
                                    @Override
                                    public void onSuccess(Location location) {
                                        latLng = new LatLng(location.getLatitude(),location.getLongitude());
                                        CameraPosition position = new CameraPosition.Builder()
                                                .target(new LatLng(location.getLatitude(), location.getLongitude())) // Sets the new camera position
                                                .zoom(15) // Sets the zoom
                                                .bearing(180) // Rotate the camera
                                                .tilt(30) // Set the camera tilt
                                                .build(); // Creates a CameraPosition from the builder

                                        mapboxMap1.animateCamera(CameraUpdateFactory.newCameraPosition(position), 7000);
                                    }
                                });
                            }
                        });
                    }
                });


                //camera bergerak
                mapboxMap.addOnMoveListener(new MapboxMap.OnMoveListener() {
                    @Override
                    public void onMoveBegin(@NonNull MoveGestureDetector detector) {
                       Timber.i("onMoveBegin: %s", +detector.getMoveThreshold());
                       marker1.setVisibility(View.VISIBLE);
                       marker2.setVisibility(View.GONE);
                       YoYo.with(Techniques.BounceIn).duration(1000).repeat(5).playOn(marker1);
                       alamatContainer.setVisibility(View.GONE);
                       angkat = true;
                    }

                    @Override
                    public void onMove(@NonNull MoveGestureDetector detector) {

                    }

                    @Override
                    public void onMoveEnd(@NonNull MoveGestureDetector detector) {

                    }
                });

                // camera diam
                mapboxMap1.addOnCameraIdleListener(new MapboxMap.OnCameraIdleListener() {
                    @Override
                    public void onCameraIdle() {
                        marker1.setVisibility(View.GONE);
                        marker2.setVisibility(View.VISIBLE);
                        targetGps.setVisibility(View.VISIBLE);
                        YoYo.with(Techniques.ZoomInUp).duration(500).playOn(marker2);

                        if (angkat){
                            tunggu += 2000;
                            alamatContainer.setVisibility(View.VISIBLE);
                            loadingAlamat.setVisibility(View.VISIBLE);
                            alamatKet.setText("");

                            new Handler().postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    cariLokasi();
                                }
                            },tunggu);
                        }

                    }
                });

            }


        });

        mapView.addOnDidFinishLoadingMapListener(new MapView.OnDidFinishLoadingMapListener() {
            @Override
            public void onDidFinishLoadingMap() {
                Toast.makeText(getApplicationContext(),"selesai",Toast.LENGTH_LONG).show();
            }
        });


        targetGps.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("MissingPermission")
            @Override
            public void onClick(View v) {
                LocationComponent locationComponent = mapboxMap1.getLocationComponent();
                locationComponent.activateLocationComponent(LocationComponentActivationOptions.builder(MainActivity.this,style1).build());
                locationComponent.setLocationComponentEnabled(true);
                locationComponent.setCameraMode(CameraMode.TRACKING);
                locationComponent.setRenderMode(RenderMode.COMPASS);
            }
        });

    }

    void cariLokasi(){
        LatLng lokasi = mapboxMap1.getCameraPosition().target;
        double lat = lokasi.getLatitude();
        double lang = lokasi.getLongitude();

        try {
            Geocoder geocoder;
            List<Address> addresses;
            geocoder = new Geocoder(MainActivity.this, Locale.getDefault());
            addresses = geocoder.getFromLocation(lat, lang, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
            String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
            String city = addresses.get(0).getLocality();
            String state = addresses.get(0).getAdminArea();
            String country = addresses.get(0).getCountryName();
            String postalCode = addresses.get(0).getPostalCode();
            String knownName = addresses.get(0).getFeatureName(); // Only if available else return NULL

            loadingAlamat.setVisibility(View.GONE);
            alamatKet.setText(address);
            angkat = false;
            tunggu = 0;

            kirimAlamat = new HashMap<>();
            kirimAlamat.put("address",address);
            kirimAlamat.put("city",city);
            kirimAlamat.put("state",state);
            kirimAlamat.put("country",country);
            kirimAlamat.put("postalCode",postalCode);

            alamatPilih.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                    intent.putExtra("alamat", (Serializable) kirimAlamat);
                    startActivity(intent);

                }
            });

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 55){
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Toast.makeText(getApplicationContext(),"ijin telah diberikan",Toast.LENGTH_LONG).show();
            }
        }

    }

    @Override
    protected void onStart() {
        super.onStart();
        mapView.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mapView.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        mapView.onSaveInstanceState(outState);
    }


}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="dev.malikkurosaki.bestclean">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Main2Activity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.mapbox.mapboxsdk.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </com.mapbox.mapboxsdk.maps.MapView>
    <ImageView
        android:id="@+id/targetGps"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon_target"
        android:layout_margin="16dp"
        android:layout_gravity="center_vertical|right"/>
    <FrameLayout
        android:id="@+id/markerContainer"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_gravity="center">
        <ImageView
            android:id="@+id/marker1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon_target1"
            android:layout_gravity="center"/>
        <ImageView
            android:id="@+id/marker2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon_target2"
            android:layout_gravity="center_horizontal"/>
    </FrameLayout>

    <FrameLayout
        android:id="@+id/alamatContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="8dp"
            android:layout_margin="8dp"
            android:background="@color/colorBlueGrey">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/alamatKet"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="end">
                <Button
                    android:id="@+id/alamatPilih"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="gunakan"
                    android:textColor="@color/colorPutih"
                    android:backgroundTint="@color/colorBlueGrey2"/>
            </LinearLayout>
        </LinearLayout>
        <ProgressBar
            android:id="@+id/loadingAlamat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"/>
    </FrameLayout>
</FrameLayout>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment