Prechádzať zdrojové kódy

set location picker icon over map

show location when clicked on button

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 4 rokov pred
rodič
commit
965692ce7e

+ 26 - 11
app/src/main/java/com/nextcloud/talk/controllers/LocationController.kt

@@ -9,6 +9,7 @@ import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.Button
 import android.widget.ImageButton
 import android.widget.Toast
 import androidx.core.content.PermissionChecker
@@ -47,9 +48,13 @@ class LocationController(args: Bundle) : BaseController(args) {
     @JvmField
     var btCenterMap: ImageButton? = null
 
+    @BindView(R.id.btn_select_location)
+    @JvmField
+    var btnSelectLocation: Button? = null
+
     init {
         NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
-        getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context));
+        getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context))
     }
 
     override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
@@ -61,24 +66,34 @@ class LocationController(args: Bundle) : BaseController(args) {
         drawMap()
     }
 
+    override fun onViewBound(view: View) {
+        btnSelectLocation?.setOnClickListener {
+            val selectedLat: Double? = map?.mapCenter?.latitude
+            val selectedLon: Double? = map?.mapCenter?.longitude
+            Toast.makeText(activity, "Lat: $selectedLat Lon: $selectedLon", Toast.LENGTH_LONG).show()
+        }
+    }
+
     fun drawMap(){
         if (!isFineLocationPermissionGranted()) {
-            requestFineLocationPermission();
+            requestFineLocationPermission()
         }
 
-        map?.setTileSource(TileSourceFactory.MAPNIK);
+        map?.setTileSource(TileSourceFactory.MAPNIK)
 
-        map?.onResume();
+        map?.onResume()
 
-        val copyrightOverlay = CopyrightOverlay(context);
-        map?.overlays?.add(copyrightOverlay);
+        val copyrightOverlay = CopyrightOverlay(context)
+        map?.overlays?.add(copyrightOverlay)
 
-        map?.setMultiTouchControls(true);
-        map?.isTilesScaledToDpi = true;
+        map?.setMultiTouchControls(true)
+        map?.isTilesScaledToDpi = true
 
-        val locationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(context), map);
-        locationOverlay.enableFollowLocation();
-        locationOverlay.enableMyLocation();
+        val locationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(context), map)
+        locationOverlay.enableFollowLocation()
+        locationOverlay.enableMyLocation()
+        // locationOverlay.setPersonIcon(
+        //     DisplayUtils.getBitmap(ResourcesCompat.getDrawable(resources!!, R.drawable.current_location_circle, null)))
         map?.overlays?.add(locationOverlay)
 
         val mapController = map?.controller

+ 14 - 14
app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java

@@ -55,19 +55,6 @@ import android.view.Window;
 import android.widget.EditText;
 import android.widget.TextView;
 
-import androidx.annotation.ColorInt;
-import androidx.annotation.ColorRes;
-import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.XmlRes;
-import androidx.appcompat.widget.AppCompatDrawableManager;
-import androidx.appcompat.widget.SearchView;
-import androidx.core.content.ContextCompat;
-import androidx.core.graphics.ColorUtils;
-import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.emoji.text.EmojiCompat;
-
 import com.facebook.common.executors.UiThreadImmediateExecutorService;
 import com.facebook.common.references.CloseableReference;
 import com.facebook.datasource.DataSource;
@@ -102,6 +89,19 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import androidx.annotation.ColorInt;
+import androidx.annotation.ColorRes;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.XmlRes;
+import androidx.appcompat.widget.AppCompatDrawableManager;
+import androidx.appcompat.widget.SearchView;
+import androidx.core.content.ContextCompat;
+import androidx.core.graphics.ColorUtils;
+import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.emoji.text.EmojiCompat;
+
 public class DisplayUtils {
 
     private static final String TAG = "DisplayUtils";
@@ -160,7 +160,7 @@ public class DisplayUtils {
         return new BitmapDrawable(getRoundedBitmapFromVectorDrawableResource(resources, resource));
     }
 
-    private static Bitmap getBitmap(Drawable drawable) {
+    public static Bitmap getBitmap(Drawable drawable) {
         Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                 drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
         Canvas canvas = new Canvas(bitmap);

+ 12 - 0
app/src/main/res/drawable/current_location_circle.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+
+    <selector xmlns:android="http://schemas.android.com/apk/res/android">
+        <item>
+            <shape android:shape="oval">
+                <solid android:color="#0039C9"/>
+                <stroke android:color="#FFFFFF" android:width="0.1dp"/>
+                <size android:width="6dp" android:height="6dp"/>
+            </shape>
+        </item>
+    </selector>

+ 9 - 0
app/src/main/res/drawable/ic_baseline_location_on_red_24.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <path
+      android:fillColor="#FF0000"
+      android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
+</vector>

+ 68 - 20
app/src/main/res/layout/controller_location.xml

@@ -1,24 +1,72 @@
 <?xml version="1.0" encoding="utf-8"?>
 
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/parent_container"
     android:layout_width="match_parent"
-    android:layout_height="match_parent" >
-
-    <org.osmdroid.views.MapView android:id="@+id/map"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent" />
-
-    <ImageButton
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:id="@+id/ic_center_map"
-        android:src="@drawable/ic_baseline_gps_fixed_24"
-        android:layout_alignParentTop="true"
-        android:layout_alignParentEnd="true"
-        android:layout_marginTop="10dp"
-        android:layout_marginEnd="10dp"
-        android:background="#00ffffff"
-        android:cropToPadding="true" />
-
-</RelativeLayout>
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="80dp">
+        <SearchView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:queryHint="Search for places">
+        </SearchView>
+
+    </LinearLayout>
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1">
+
+        <org.osmdroid.views.MapView android:id="@+id/map"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent" />
+
+        <ImageButton
+            android:layout_width="80dp"
+            android:layout_height="80dp"
+            android:id="@+id/ic_center_map"
+            android:src="@drawable/ic_baseline_gps_fixed_24"
+            android:layout_alignParentTop="true"
+            android:layout_alignParentEnd="true"
+            android:layout_marginTop="10dp"
+            android:layout_marginEnd="10dp"
+            android:background="#00ffffff"
+            android:cropToPadding="true"
+            android:contentDescription="go to current location" />
+
+        <View
+            android:id="@+id/locationpicker_anchor"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_centerInParent="true" />
+
+        <ImageView
+            android:layout_width="30dp"
+            android:layout_height="50dp"
+            android:src="@drawable/ic_baseline_location_on_red_24"
+            android:layout_centerHorizontal="true"
+            android:layout_marginBottom="0dp"
+            android:layout_above="@id/locationpicker_anchor"
+            android:contentDescription="your location">
+        </ImageView>
+    </RelativeLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="80dp">
+        <Button
+            android:id="@+id/btn_select_location"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:text="Share location">
+
+        </Button>
+
+    </LinearLayout>
+
+</LinearLayout>