Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.56 KB | None | 0 0
  1. MainActivity.java
  2. package com.sourcey.materiallogindemo;
  3.  
  4. import android.Manifest;
  5. import android.annotation.SuppressLint;
  6. import android.app.AlertDialog;
  7. import android.content.DialogInterface;
  8. import android.content.Intent;
  9. import android.database.Cursor;
  10. import android.database.sqlite.SQLiteDatabase;
  11. import android.location.Location;
  12. import android.location.LocationListener;
  13. import android.location.LocationManager;
  14. import android.os.Build;
  15. import android.os.Bundle;
  16. import android.provider.Settings;
  17. import android.support.annotation.NonNull;
  18. import android.support.annotation.Nullable;
  19. import android.support.design.widget.FloatingActionButton;
  20. import android.support.design.widget.Snackbar;
  21. import android.support.v7.app.AppCompatActivity;
  22. import android.util.Log;
  23. import android.view.View;
  24. import android.widget.Button;
  25. import android.widget.EditText;
  26. import android.widget.TextView;
  27. import android.widget.Toast;
  28.  
  29. import com.google.android.gms.common.ConnectionResult;
  30. import com.google.android.gms.common.api.GoogleApiClient;
  31. import com.google.android.gms.location.LocationServices;
  32. import com.google.android.gms.maps.CameraUpdateFactory;
  33. import com.google.android.gms.maps.GoogleMap;
  34. import com.google.android.gms.maps.OnMapReadyCallback;
  35. import com.google.android.gms.maps.SupportMapFragment;
  36. import com.google.android.gms.maps.model.LatLng;
  37. import com.google.android.gms.maps.model.Marker;
  38. import com.google.android.gms.maps.model.MarkerOptions;
  39. import com.google.gson.Gson;
  40. import com.karumi.dexter.Dexter;
  41. import com.karumi.dexter.PermissionToken;
  42. import com.karumi.dexter.listener.PermissionDeniedResponse;
  43. import com.karumi.dexter.listener.PermissionGrantedResponse;
  44. import com.karumi.dexter.listener.PermissionRequest;
  45. import com.karumi.dexter.listener.single.PermissionListener;
  46.  
  47. import butterknife.BindView;
  48. import butterknife.ButterKnife;
  49. import butterknife.OnClick;
  50.  
  51.  
  52. public class MainActivity extends AppCompatActivity implements OnMapReadyCallback,
  53. GoogleApiClient.ConnectionCallbacks,
  54. GoogleApiClient.OnConnectionFailedListener,
  55. GoogleMap.OnInfoWindowClickListener,
  56. LocationListener {
  57.  
  58. private final int LOCATION_REQUEST_CODE = 101;
  59. private final String TAG = MainActivity.class.getSimpleName();
  60. private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
  61. private static final long MIN_TIME_BW_UPDATES = 1000 * 60; // 1 minute
  62.  
  63. @BindView(R.id.fab)
  64. FloatingActionButton FAB;
  65.  
  66. @BindView(R.id.preview)
  67. FloatingActionButton PREVIEW;
  68.  
  69. private GoogleMap mMap;
  70. private GoogleApiClient googleApiClient;
  71. private DataHelper dbHelper;
  72. protected Cursor cursor;
  73. private LatLng position;
  74. private String[] daftar;
  75. private Location location; // location
  76. protected LocationManager locationManager;
  77.  
  78. private boolean isGPSEnabled = false;
  79. private boolean isNetworkEnabled = false;
  80. private boolean canGetLocation = false;
  81. private double latitude; // latitude
  82. private double longitude; // longitude
  83.  
  84. @Override
  85. protected void onCreate(Bundle savedInstanceState) {
  86. super.onCreate(savedInstanceState);
  87. setContentView(R.layout.activity_main);
  88. Intent intent = new Intent(this, LoginActivity.class);
  89. startActivity(intent);
  90. ButterKnife.bind(this);
  91. findLocation();
  92. dbHelper = new DataHelper(this);
  93. googleApiClient = new GoogleApiClient.Builder(this)
  94. .addApi(LocationServices.API)
  95. .addConnectionCallbacks(this)
  96. .addOnConnectionFailedListener(this)
  97. .build();
  98. }
  99.  
  100. public void findLocation() {
  101. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  102. Dexter.withActivity(this)
  103. .withPermission(Manifest.permission.ACCESS_FINE_LOCATION)
  104. .withListener(new PermissionListener() {
  105. @Override
  106. public void onPermissionGranted(PermissionGrantedResponse response) {
  107. getLocation();
  108. if (isLocationEnable()) {
  109. double latitude = getLatitude();
  110. double longitude = getLongitude();
  111. Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
  112. } else {
  113. showSettingsAlert();
  114. }
  115. }
  116.  
  117. @Override
  118. public void onPermissionDenied(PermissionDeniedResponse response) {
  119. Toast.makeText(getApplicationContext(), R.string.permission_location_description, Toast.LENGTH_SHORT).show();
  120. }
  121.  
  122. @Override
  123. public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
  124. Toast.makeText(getApplicationContext(), R.string.permission_location_description, Toast.LENGTH_SHORT).show();
  125. }
  126. })
  127. .check();
  128. } else {
  129. getLocation();
  130. if (isLocationEnable()) {
  131. double latitude = getLatitude();
  132. double longitude = getLongitude();
  133. Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
  134. } else {
  135. showSettingsAlert();
  136. }
  137. }
  138. }
  139.  
  140. public double getLatitude(){
  141. if(location != null){
  142. latitude = location.getLatitude();
  143. }
  144.  
  145. // return latitude
  146. return latitude;
  147. }
  148.  
  149. public double getLongitude(){
  150. if(location != null){
  151. longitude = location.getLongitude();
  152. }
  153.  
  154. // return longitude
  155. return longitude;
  156. }
  157.  
  158. @SuppressLint("MissingPermission")
  159. private void getLocation () {
  160. try {
  161. locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
  162.  
  163. // getting GPS status
  164. isGPSEnabled = locationManager
  165. .isProviderEnabled(LocationManager.GPS_PROVIDER);
  166.  
  167. // getting network status
  168. isNetworkEnabled = locationManager
  169. .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
  170.  
  171. if (!isGPSEnabled && !isNetworkEnabled) {
  172. // no network provider is enabled
  173. canGetLocation = false;
  174. } else {
  175. canGetLocation = true;
  176. // First get location from Network Provider
  177. if (isNetworkEnabled) {
  178. locationManager.requestLocationUpdates(
  179. LocationManager.NETWORK_PROVIDER,
  180. MIN_TIME_BW_UPDATES,
  181. MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
  182. Log.d("Network", "Network");
  183. if (locationManager != null) {
  184. location = locationManager
  185. .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
  186. if (location != null) {
  187. latitude = location.getLatitude();
  188. longitude = location.getLongitude();
  189. }
  190. }
  191. }
  192. // if GPS Enabled get lat/long using GPS Services
  193. if (isGPSEnabled) {
  194. if (location == null) {
  195. locationManager.requestLocationUpdates(
  196. LocationManager.GPS_PROVIDER,
  197. MIN_TIME_BW_UPDATES,
  198. MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
  199. Log.d("GPS Enabled", "GPS Enabled");
  200. if (locationManager != null) {
  201. location = locationManager
  202. .getLastKnownLocation(LocationManager.GPS_PROVIDER);
  203. if (location != null) {
  204. latitude = location.getLatitude();
  205. longitude = location.getLongitude();
  206. }
  207. }
  208. }
  209. }
  210. }
  211.  
  212. } catch (Exception e) {
  213. e.printStackTrace();
  214. }
  215. }
  216.  
  217. public boolean isLocationEnable() {
  218. return this.canGetLocation;
  219. }
  220.  
  221. public void setLocationEnable(boolean enable) {
  222. if (enable) {
  223. canGetLocation = true;
  224. } else {
  225. canGetLocation = false;
  226. }
  227. }
  228.  
  229. public void showSettingsAlert(){
  230. AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
  231. alertDialog.setTitle("GPS is settings");
  232. alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
  233. alertDialog.setPositiveButton("Settings", (dialog, which) -> {
  234. Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
  235. startActivity(intent);
  236. });
  237. alertDialog.setNegativeButton("Cancel", (dialog, which) -> dialog.cancel());
  238. alertDialog.show();
  239. }
  240.  
  241. public void onStart() {
  242. super.onStart();
  243. googleApiClient.connect();
  244. }
  245.  
  246. public void onStop() {
  247. super.onStop();
  248. googleApiClient.disconnect();
  249.  
  250. }
  251.  
  252. @OnClick(R.id.fab)
  253. public void mButton() {
  254. final View view = View.inflate(MainActivity.this, R.layout.dialog_input, null);
  255. final EditText nama = ButterKnife.findById(view, R.id.nama);
  256. final EditText luas = ButterKnife.findById(view, R.id.luas);
  257. final EditText keterangan = ButterKnife.findById(view, R.id.keterangan);
  258.  
  259. final AlertDialog builder = new AlertDialog.Builder(MainActivity.this, R.style.AppTheme_Dark)
  260. .setView(view)
  261. .setPositiveButton(android.R.string.ok, null)
  262. .setNegativeButton("Batal", null)
  263. .create();
  264.  
  265. ButterKnife.bind(builder, view);
  266.  
  267. builder.setOnShowListener(dialog -> {
  268. Button b = builder.getButton(AlertDialog.BUTTON_POSITIVE);
  269. b.setOnClickListener(v -> {
  270. SQLiteDatabase db = dbHelper.getWritableDatabase();
  271. db.execSQL("insert into markers(nama, luas, longitude, latitude, keterangan) values('" +
  272. nama.getText().toString() + "','" +
  273. luas.getText().toString() + "','" +
  274. String.valueOf(position.longitude) + "','" +
  275. String.valueOf(position.latitude) + "','" +
  276. keterangan.getText().toString() + "')");
  277. Snackbar.make(view, "Tersimpan", Snackbar.LENGTH_LONG).show();
  278. builder.dismiss();
  279. });
  280. });
  281. builder.show();
  282. }
  283.  
  284. public class MarkerInfo {
  285. private String title;
  286. private String luas;
  287. private String keterangan;
  288.  
  289. public MarkerInfo() {
  290. }
  291.  
  292. public String getTitle() {
  293. return title;
  294. }
  295.  
  296. public void setTitle(String title) {
  297. this.title = title;
  298. }
  299.  
  300. public String getLuas() {
  301. return luas;
  302. }
  303.  
  304. public void setLuas(String luas) {
  305. this.luas = luas;
  306. }
  307.  
  308. public String getKeterangan() {
  309. return keterangan;
  310. }
  311.  
  312. public void setKeterangan(String keterangan) {
  313. this.keterangan = keterangan;
  314. }
  315.  
  316. }
  317.  
  318. @OnClick(R.id.preview)
  319. public void previewClick() {
  320. SQLiteDatabase db = dbHelper.getReadableDatabase();
  321. String tableString = String.format("Table %s:\n", "markers");
  322. Cursor allRows = db.rawQuery("SELECT * FROM markers", null);
  323.  
  324. if (allRows.moveToFirst()) {
  325. String[] columnNames = allRows.getColumnNames();
  326. do {
  327. for (final String name : columnNames) {
  328.  
  329. double latitude = Double.parseDouble(allRows.getString(allRows.getColumnIndex("latitude")));
  330. double longitude = Double.parseDouble(allRows.getString(allRows.getColumnIndex("longitude")));
  331. LatLng latLng = new LatLng(latitude, longitude);
  332.  
  333. MarkerInfo markerInfo = new MarkerInfo();
  334. markerInfo.setTitle(allRows.getString(allRows.getColumnIndex("nama")));
  335. markerInfo.setKeterangan(allRows.getString(allRows.getColumnIndex("keterangan")));
  336. markerInfo.setLuas(allRows.getString(allRows.getColumnIndex("luas")));
  337. Gson gson = new Gson();
  338. String markerInfoString = gson.toJson(markerInfo);
  339. mMap.addMarker(new MarkerOptions().position(latLng).snippet(markerInfoString));
  340. tableString += String.format("%s: %s\n", name, allRows.getString(allRows.getColumnIndex(name)));
  341. }
  342. tableString += "\n";
  343.  
  344. } while (allRows.moveToNext());
  345. }
  346.  
  347. Log.d("TAG", tableString);
  348. }
  349.  
  350. /**
  351. * Manipulates the map once available.
  352. * This callback is triggered when the map is ready to be used.
  353. * This is where we can add markers or lines, add listeners or move the camera. In this case,
  354. * we just add a marker near Sydney, Australia.
  355. * If Google Play services is not installed on the device, the user will be prompted to install
  356. * it inside the SupportMapFragment. This method will only be triggered once the user has
  357. * installed Google Play services and returned to the app.
  358. */
  359. @SuppressLint("MissingPermission")
  360. @Override
  361. public void onMapReady(GoogleMap googleMap) {
  362. mMap = googleMap;
  363. if (isLocationEnable()) {
  364. mMap.setMyLocationEnabled(true);
  365. checkLocationandAddToMap();
  366. if (mMap != null) {
  367. mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
  368. @Override
  369. public View getInfoWindow(Marker marker) {
  370. return null;
  371. }
  372.  
  373. @Override
  374. public View getInfoContents(Marker marker) {
  375. Gson gson = new Gson();
  376. MarkerInfo aMarkerInfo = gson.fromJson(marker.getSnippet(), MarkerInfo.class);
  377.  
  378. View v = getLayoutInflater().inflate(R.layout.info_window, null);
  379. TextView tvName = v.findViewById(R.id.namaTempat);
  380. TextView tvLuas = v.findViewById(R.id.luas);
  381. TextView tvKete = v.findViewById(R.id.keterangan);
  382.  
  383. tvName.setText(aMarkerInfo.getTitle());
  384. tvLuas.setText("Luas :" + aMarkerInfo.getLuas());
  385. tvKete.setText(aMarkerInfo.getKeterangan());
  386. return v;
  387. }
  388. });
  389. }
  390. }
  391. }
  392.  
  393. @Override
  394. public void onConnected(@Nullable Bundle bundle) {
  395. SupportMapFragment mapFragment = (SupportMapFragment)
  396. getSupportFragmentManager().findFragmentById(R.id.map);
  397. mapFragment.getMapAsync(this);
  398. }
  399.  
  400. @Override
  401. public void onConnectionSuspended(int i) {
  402.  
  403. }
  404.  
  405. @Override
  406. public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
  407.  
  408. }
  409.  
  410. @SuppressLint("MissingPermission")
  411. private void checkLocationandAddToMap() {
  412. if (isLocationEnable()) {
  413. location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
  414. position = new LatLng(location.getLatitude(), location.getLongitude());
  415. //MarkerOptions are used to create a new Marker.You can specify location, title etc with MarkerOptions
  416. MarkerInfo markerInfo = new MarkerInfo();
  417. markerInfo.setTitle("Current Position");
  418. markerInfo.setKeterangan("Keberadaan Anda Sekarang");
  419. markerInfo.setLuas("200");
  420. Gson gson = new Gson();
  421. String markerInfoString = gson.toJson(markerInfo);
  422. final MarkerOptions markerOptions = new MarkerOptions().position(position).draggable(true).snippet(markerInfoString);
  423. //Adding the created the marker on the map
  424. mMap.addMarker(markerOptions);
  425. mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(position, 12.0f));
  426. mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
  427. @Override
  428. public void onMarkerDragStart(Marker marker) {
  429. Toast.makeText(MainActivity.this, "Memilih Tempat..",
  430. Toast.LENGTH_SHORT).show();
  431. }
  432. @Override
  433. public void onMarkerDrag(Marker marker) {
  434. System.out.println("Draagging");
  435. }
  436. @Override
  437. public void onMarkerDragEnd(Marker marker) {
  438. position = marker.getPosition();
  439. }
  440. });
  441. }
  442. }
  443.  
  444. @Override
  445. public void onInfoWindowClick(Marker marker) {
  446.  
  447. }
  448.  
  449. @Override
  450. public void onLocationChanged(Location location) {
  451. this.location = location;
  452. checkLocationandAddToMap();
  453. }
  454.  
  455. @Override
  456. public void onStatusChanged(String provider, int status, Bundle extras) {
  457.  
  458. }
  459.  
  460. @Override
  461. public void onProviderEnabled(String provider) {
  462. setLocationEnable(true);
  463. }
  464.  
  465. @Override
  466. public void onProviderDisabled(String provider) {
  467. setLocationEnable(false);
  468. }
  469.  
  470. }
  471.  
  472. string.xml
  473. <resources>
  474. <string name="app_name">Material Login Example</string>
  475. <string name="hello_world">Hello world!</string>
  476. <string name="action_settings">Settings</string>
  477. <string name="title_activity_maps">Map</string>
  478. <string name="submit">Submit</string>
  479. <string name="cancel">Cancel</string>
  480. <string name="permission_location_description">We need permission to Access your Location</string>
  481. <string name="permission_location_title">Permission required</string>
  482. <string name="permission_location_yes">Yes</string>
  483. <string name="permission_location_no">No</string>
  484. </resources>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement