From dc0036d9264bf1d71faa10ae8112066c8d389dc7 Mon Sep 17 00:00:00 2001 From: Christian S Date: Thu, 5 May 2016 23:43:19 +0200 Subject: add share location --- .gitignore | 1 + build.gradle | 6 + src/main/AndroidManifest.xml | 28 ++++ src/main/java/eu/siacs/conversations/Config.java | 3 +- .../conversations/ui/ShareLocationActivity.java | 171 +++++++++++++++++++++ .../conversations/ui/ShowLocationActivity.java | 101 ++++++++++++ src/main/res/layout/share_locaction_activity.xml | 99 ++++++++++++ src/main/res/layout/show_locaction_activity.xml | 23 +++ src/main/res/values/strings.xml | 3 + 9 files changed, 434 insertions(+), 1 deletion(-) create mode 100644 src/main/java/eu/siacs/conversations/ui/ShareLocationActivity.java create mode 100644 src/main/java/eu/siacs/conversations/ui/ShowLocationActivity.java create mode 100644 src/main/res/layout/share_locaction_activity.xml create mode 100644 src/main/res/layout/show_locaction_activity.xml diff --git a/.gitignore b/.gitignore index 9f1d29fe9..6261699b6 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ proguard/ import-summary.txt .navigation/ +src/main/res/values/api_keys.xml diff --git a/build.gradle b/build.gradle index 4dbac4eaa..774d66125 100644 --- a/build.gradle +++ b/build.gradle @@ -42,6 +42,9 @@ dependencies { compile 'jetty:javax.servlet:5.1.12' compile 'com.google.code.gson:gson:2.3.1' compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' + compile 'com.google.android.gms:play-services:6.5.87' + compile 'com.android.support:appcompat-v7:21.0.3' + compile 'com.android.support:multidex:1.0.0' playstoreCompile 'com.google.android.gms:play-services-gcm:8.4.0' } @@ -62,6 +65,9 @@ android { versionName "1.12.1" archivesBaseName += "-$versionName" applicationId "eu.siacs.conversations" + + // Enabling multidex support. + multiDexEnabled true } dexOptions { diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 9b85f1a4d..38789976c 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -15,6 +15,9 @@ + + + tools:replace="android:label"> @@ -172,6 +176,30 @@ + + + + + + + + + + + + + + + + = Build.VERSION_CODES.KITKAT){ + return isLocationEnabledKitkat(); + }else{ + return isLocationEnabledLegacy(); + } + } +} diff --git a/src/main/java/eu/siacs/conversations/ui/ShowLocationActivity.java b/src/main/java/eu/siacs/conversations/ui/ShowLocationActivity.java new file mode 100644 index 000000000..79219a01c --- /dev/null +++ b/src/main/java/eu/siacs/conversations/ui/ShowLocationActivity.java @@ -0,0 +1,101 @@ +package eu.siacs.conversations.ui; + +import android.app.ActionBar; +import android.app.Activity; +import android.content.Intent; +import android.location.Location; +import android.os.Bundle; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; + +import eu.siacs.conversations.Config; +import eu.siacs.conversations.R; + +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.api.GoogleApiClient; +import com.google.android.gms.location.LocationListener; +import com.google.android.gms.location.LocationRequest; +import com.google.android.gms.location.LocationServices; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.MapFragment; +import com.google.android.gms.maps.OnMapReadyCallback; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.MarkerOptions; + +public class ShowLocationActivity extends Activity implements OnMapReadyCallback { + + private GoogleMap mGoogleMap; + private LatLng mLocation; + private String mLocationName; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + + setContentView(R.layout.show_locaction_activity); + MapFragment fragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map_fragment); + fragment.getMapAsync(this); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + protected void onResume() { + super.onResume(); + Intent intent = getIntent(); + + this.mLocationName = intent != null ? intent.getStringExtra("name") : null; + + if (intent != null && intent.hasExtra("longitude") && intent.hasExtra("latitude")) { + double longitude = intent.getDoubleExtra("longitude",0); + double latitude = intent.getDoubleExtra("latitude",0); + this.mLocation = new LatLng(latitude,longitude); + if (this.mGoogleMap != null) { + markAndCenterOnLocation(this.mLocation, this.mLocationName); + } + } + } + + @Override + protected void onPause() { + super.onPause(); + } + + @Override + public void onMapReady(GoogleMap googleMap) { + this.mGoogleMap = googleMap; + this.mGoogleMap.setMyLocationEnabled(true); + if (this.mLocation != null) { + this.markAndCenterOnLocation(this.mLocation,this.mLocationName); + } + } + + private void markAndCenterOnLocation(LatLng location, String name) { + this.mGoogleMap.clear(); + MarkerOptions options = new MarkerOptions(); + options.position(location); + if (name != null) { + options.title(name); + this.mGoogleMap.addMarker(options).showInfoWindow(); + } else { + this.mGoogleMap.addMarker(options); + } + this.mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(location, Config.DEFAULT_ZOOM)); + } + +} diff --git a/src/main/res/layout/share_locaction_activity.xml b/src/main/res/layout/share_locaction_activity.xml new file mode 100644 index 000000000..a52632666 --- /dev/null +++ b/src/main/res/layout/share_locaction_activity.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + +