ui improvements
This commit is contained in:
parent
316fbb4fdb
commit
2bf18064f7
|
@ -2,7 +2,10 @@ package hendrikschutter.com.externgnss;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.location.LocationListener;
|
import android.location.LocationListener;
|
||||||
import android.location.LocationManager;
|
import android.location.LocationManager;
|
||||||
|
|
||||||
|
@ -10,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
@ -19,6 +23,8 @@ import pub.devrel.easypermissions.EasyPermissions;
|
||||||
|
|
||||||
import static java.lang.Thread.sleep;
|
import static java.lang.Thread.sleep;
|
||||||
|
|
||||||
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
|
|
||||||
import java.util.concurrent.BlockingQueue;
|
import java.util.concurrent.BlockingQueue;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
|
||||||
|
@ -34,7 +40,7 @@ public class MainActivity extends AppCompatActivity {
|
||||||
private boolean bChange = true;
|
private boolean bChange = true;
|
||||||
private BlockingQueue<Byte> rawSerialByteDataQueue = null;
|
private BlockingQueue<Byte> rawSerialByteDataQueue = null;
|
||||||
private double lastInternFixLat, lastInternFixLon;
|
private double lastInternFixLat, lastInternFixLon;
|
||||||
|
private MainActivity activity = this;
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -45,17 +51,6 @@ public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
// start extern GNSS and display stats on UI
|
// start extern GNSS and display stats on UI
|
||||||
startExternGNSS();
|
startExternGNSS();
|
||||||
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), "no signal");
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), "no signal");
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), "no signal");
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), "no signal");
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), "no signal");
|
|
||||||
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), "no signal");
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), "no signal");
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), "no signal");
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), "no signal");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// From https://github.com/googlesamples/easypermissions
|
// From https://github.com/googlesamples/easypermissions
|
||||||
|
@ -70,12 +65,29 @@ public class MainActivity extends AppCompatActivity {
|
||||||
private void startExternGNSS() {
|
private void startExternGNSS() {
|
||||||
rawSerialByteDataQueue = new LinkedBlockingQueue<>();
|
rawSerialByteDataQueue = new LinkedBlockingQueue<>();
|
||||||
serialUSB = new SerialUSB(this, rawSerialByteDataQueue);
|
serialUSB = new SerialUSB(this, rawSerialByteDataQueue);
|
||||||
|
nmeaParser = new NMEAParser();
|
||||||
|
|
||||||
if (serialUSB.findSerialDevice()) {
|
if (serialUSB.findSerialDevice()) {
|
||||||
serialUSB.connect(9600, 0);
|
serialUSB.connect(9600, 0);
|
||||||
if (serialUSB.isConnected()) {
|
if (serialUSB.isConnected()) {
|
||||||
nmeaParser = new NMEAParser();
|
|
||||||
nmeaParser.setReceiveByteStream(rawSerialByteDataQueue);
|
nmeaParser.setReceiveByteStream(rawSerialByteDataQueue);
|
||||||
|
|
||||||
|
((FloatingActionButton)findViewById(R.id.floatingActionButtonExternGnssInfo)).setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
String otgInfo = "OTG-Info:\n Vendor: " + serialUSB.getUsbDeviceVendorId()+ "" +
|
||||||
|
"\n Device: " + serialUSB.getDeviceId() +
|
||||||
|
"\n Baudrate: " + String.valueOf(serialUSB.getBaudRate() +
|
||||||
|
"\n\nNMEA:\n Sentences: " + String.valueOf(nmeaParser.getSentenceCounter()));
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||||
|
builder.setMessage(otgInfo)
|
||||||
|
.setPositiveButton("Close", new DialogInterface.OnClickListener() {
|
||||||
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builder.create().show();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,10 +115,26 @@ public class MainActivity extends AppCompatActivity {
|
||||||
runOnUiThread(myRun);
|
runOnUiThread(myRun);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setTextViewLabel(final TextView v, final String str) {
|
||||||
|
Runnable myRun = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
v.setText(str);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
runOnUiThread(myRun);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
setInternGnssUiNoSignal();
|
||||||
|
setExternGnssUiNoSignal();
|
||||||
|
setInternGnssUiColor(Color.GRAY);
|
||||||
|
setExternGnssUiColor(Color.GRAY);
|
||||||
|
|
||||||
if (!EasyPermissions.hasPermissions(this, perms)) {
|
if (!EasyPermissions.hasPermissions(this, perms)) {
|
||||||
// Dummy thread ...
|
// Dummy thread ...
|
||||||
new Thread(new Runnable() {
|
new Thread(new Runnable() {
|
||||||
|
@ -131,6 +159,7 @@ public class MainActivity extends AppCompatActivity {
|
||||||
public void run() {
|
public void run() {
|
||||||
while (doRun) {
|
while (doRun) {
|
||||||
if (locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null) {
|
if (locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null) {
|
||||||
|
setInternGnssUiColor(Color.BLACK);
|
||||||
lastInternFixLat = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude();
|
lastInternFixLat = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude();
|
||||||
lastInternFixLon = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude();
|
lastInternFixLon = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude();
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), String.format("%.6f", lastInternFixLat));
|
setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), String.format("%.6f", lastInternFixLat));
|
||||||
|
@ -140,26 +169,27 @@ public class MainActivity extends AppCompatActivity {
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), Integer.toString(locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getExtras().getInt("satellites")));
|
setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), Integer.toString(locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getExtras().getInt("satellites")));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), "no signal");
|
setInternGnssUiColor(Color.GRAY);
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), "no signal");
|
setInternGnssUiNoSignal();
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), "no signal");
|
setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), "no data");
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), "no signal");
|
|
||||||
setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), "no signal");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((serialUSB != null) && (nmeaParser != null)) {
|
if ((serialUSB != null) && (nmeaParser != null)) {
|
||||||
if (serialUSB.isConnected()) {
|
if (serialUSB.isConnected()) {
|
||||||
|
setTextViewLabel((TextView) findViewById(R.id.externgnssNameTextView), "Extern GNSS receiver");
|
||||||
nmeaParser.handleReceiveByteStream();
|
nmeaParser.handleReceiveByteStream();
|
||||||
if (nmeaParser.checkFix() == true) {
|
if (nmeaParser.checkFix() == true) {
|
||||||
|
setExternGnssUiColor(Color.BLACK);
|
||||||
//Log.i("ExternGNSS", "Fix! Lat: " + String.valueOf(nmeaParser.getLatitude()) + " Lon: " + String.valueOf(nmeaParser.getLongitude()));
|
//Log.i("ExternGNSS", "Fix! Lat: " + String.valueOf(nmeaParser.getLatitude()) + " Lon: " + String.valueOf(nmeaParser.getLongitude()));
|
||||||
setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), String.format("%.6f", nmeaParser.getLatitude()));
|
setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), String.format("%.6f", nmeaParser.getLatitude()));
|
||||||
setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), String.format("%.6f", nmeaParser.getLongitude()));
|
setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), String.format("%.6f", nmeaParser.getLongitude()));
|
||||||
setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), Integer.toString(nmeaParser.getSatCount()));
|
setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), Integer.toString(nmeaParser.getSatCount()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), "no signal");
|
setTextViewLabel((TextView) findViewById(R.id.externgnssNameTextView), "Extern GNSS receiver (offline)");
|
||||||
setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), "no signal");
|
setExternGnssUiColor(Color.GRAY);
|
||||||
setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), "no signal");
|
setExternGnssUiNoSignal();
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), "no data");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null) && (serialUSB != null) && (nmeaParser != null)) {
|
if ((locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null) && (serialUSB != null) && (nmeaParser != null)) {
|
||||||
|
@ -171,7 +201,7 @@ public class MainActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
sleep(10000);
|
sleep(1000);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -190,6 +220,45 @@ public class MainActivity extends AppCompatActivity {
|
||||||
doRun = false;
|
doRun = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setInternGnssUiColor(int color){
|
||||||
|
((TextView) findViewById(R.id.interngnssLatTextView)).setTextColor(color);
|
||||||
|
((TextView) findViewById(R.id.interngnssLongTextView)).setTextColor(color);
|
||||||
|
((TextView) findViewById(R.id.interngnssAccuracyTextView)).setTextColor(color);
|
||||||
|
((TextView) findViewById(R.id.interngnssAltitudeTextView)).setTextColor(color);
|
||||||
|
((TextView) findViewById(R.id.interngnssSatCountTextView)).setTextColor(color);
|
||||||
|
|
||||||
|
((EditText) findViewById(R.id.interngnssLatNumber)).setTextColor(color);
|
||||||
|
((EditText) findViewById(R.id.interngnssLongNumber)).setTextColor(color);
|
||||||
|
((EditText) findViewById(R.id.interngnssAccuracyNumber)).setTextColor(color);
|
||||||
|
((EditText) findViewById(R.id.interngnssAltitudeNumber)).setTextColor(color);
|
||||||
|
((EditText) findViewById(R.id.interngnssSatCountNumber)).setTextColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setExternGnssUiColor(int color){
|
||||||
|
((TextView) findViewById(R.id.externgnssLatTextView)).setTextColor(color);
|
||||||
|
((TextView) findViewById(R.id.externgnssLongTextView)).setTextColor(color);
|
||||||
|
((TextView) findViewById(R.id.externgnssSatCountTextView)).setTextColor(color);
|
||||||
|
|
||||||
|
((EditText) findViewById(R.id.externgnssLatNumber)).setTextColor(color);
|
||||||
|
((EditText) findViewById(R.id.externgnssLongNumber)).setTextColor(color);
|
||||||
|
((EditText) findViewById(R.id.externgnssSatCountNumber)).setTextColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setInternGnssUiNoSignal(){
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), "no signal");
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), "no signal");
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), "no signal");
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), "no signal");
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), "no signal");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setExternGnssUiNoSignal(){
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), "no signal");
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), "no signal");
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), "no signal");
|
||||||
|
setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), "no signal");
|
||||||
|
}
|
||||||
|
|
||||||
LocationListener locationListener = new LocationListener() {
|
LocationListener locationListener = new LocationListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onLocationChanged(android.location.Location location) {
|
public void onLocationChanged(android.location.Location location) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ public class NMEAParser {
|
||||||
private double longitude;
|
private double longitude;
|
||||||
private boolean fix;
|
private boolean fix;
|
||||||
private int satCount;
|
private int satCount;
|
||||||
|
private int sentenceCounter;
|
||||||
private BlockingQueue<Byte> rawByteData = null;
|
private BlockingQueue<Byte> rawByteData = null;
|
||||||
|
|
||||||
public NMEAParser() {
|
public NMEAParser() {
|
||||||
|
@ -24,6 +25,7 @@ public class NMEAParser {
|
||||||
this.satCount = 0;
|
this.satCount = 0;
|
||||||
this.latitude = 0;
|
this.latitude = 0;
|
||||||
this.longitude = 0;
|
this.longitude = 0;
|
||||||
|
this.sentenceCounter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setReceiveByteStream(BlockingQueue<Byte> rawData) {
|
public void setReceiveByteStream(BlockingQueue<Byte> rawData) {
|
||||||
|
@ -60,7 +62,12 @@ public class NMEAParser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSentenceCounter(){
|
||||||
|
return this.sentenceCounter;
|
||||||
|
}
|
||||||
|
|
||||||
public void parseSentence(String sentence) {
|
public void parseSentence(String sentence) {
|
||||||
|
this.sentenceCounter++;
|
||||||
if (sentence.startsWith("$GNGLL")) {
|
if (sentence.startsWith("$GNGLL")) {
|
||||||
parseGNGLL(sentence);
|
parseGNGLL(sentence);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,8 @@ public class SerialUSB implements SerialInputOutputManager.Listener{
|
||||||
private UsbPermission usbPermission = UsbPermission.Unknown;
|
private UsbPermission usbPermission = UsbPermission.Unknown;
|
||||||
private BlockingQueue<Byte> dataBytesQueue = null;
|
private BlockingQueue<Byte> dataBytesQueue = null;
|
||||||
private boolean connected = false;
|
private boolean connected = false;
|
||||||
|
private int deviceVendorId;
|
||||||
|
private int productID;
|
||||||
|
|
||||||
public SerialUSB(MainActivity mainActivity, BlockingQueue<Byte> dataBytesQueue){
|
public SerialUSB(MainActivity mainActivity, BlockingQueue<Byte> dataBytesQueue){
|
||||||
this.mainActivity = mainActivity;
|
this.mainActivity = mainActivity;
|
||||||
|
@ -38,6 +40,18 @@ public class SerialUSB implements SerialInputOutputManager.Listener{
|
||||||
return connected;
|
return connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getDeviceId(){
|
||||||
|
return this.deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBaudRate(){
|
||||||
|
return this.baudRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getUsbDeviceVendorId(){
|
||||||
|
return this.deviceVendorId;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean findSerialDevice(){
|
public boolean findSerialDevice(){
|
||||||
// Find all available drivers from attached devices.
|
// Find all available drivers from attached devices.
|
||||||
UsbManager usbManager = (UsbManager) this.mainActivity.getSystemService(Context.USB_SERVICE);
|
UsbManager usbManager = (UsbManager) this.mainActivity.getSystemService(Context.USB_SERVICE);
|
||||||
|
@ -55,6 +69,7 @@ public class SerialUSB implements SerialInputOutputManager.Listener{
|
||||||
if(driver != null) {
|
if(driver != null) {
|
||||||
Log.i("SerialUSB", "ExternGNSS: device/driver found!");
|
Log.i("SerialUSB", "ExternGNSS: device/driver found!");
|
||||||
this.deviceId = device.getDeviceId();
|
this.deviceId = device.getDeviceId();
|
||||||
|
this.deviceVendorId = device.getVendorId();
|
||||||
deviceFound = true;
|
deviceFound = true;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
|
@ -88,13 +103,24 @@ public class SerialUSB implements SerialInputOutputManager.Listener{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
usbSerialPort = driver.getPorts().get(portNum);
|
usbSerialPort = driver.getPorts().get(portNum);
|
||||||
UsbDeviceConnection usbConnection = usbManager.openDevice(driver.getDevice());
|
UsbDeviceConnection usbConnection = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
usbConnection = usbManager.openDevice(driver.getDevice());
|
||||||
|
} catch (Exception e){
|
||||||
|
usbPermission = UsbPermission.Requested;
|
||||||
|
PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(this.mainActivity, 0, new Intent(INTENT_ACTION_GRANT_USB), 0);
|
||||||
|
usbManager.requestPermission(driver.getDevice(), usbPermissionIntent);
|
||||||
|
}
|
||||||
|
|
||||||
|
usbConnection = usbManager.openDevice(driver.getDevice());
|
||||||
if(usbConnection == null && usbPermission == UsbPermission.Unknown && !usbManager.hasPermission(driver.getDevice())) {
|
if(usbConnection == null && usbPermission == UsbPermission.Unknown && !usbManager.hasPermission(driver.getDevice())) {
|
||||||
usbPermission = UsbPermission.Requested;
|
usbPermission = UsbPermission.Requested;
|
||||||
PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(this.mainActivity, 0, new Intent(INTENT_ACTION_GRANT_USB), 0);
|
PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(this.mainActivity, 0, new Intent(INTENT_ACTION_GRANT_USB), 0);
|
||||||
usbManager.requestPermission(driver.getDevice(), usbPermissionIntent);
|
usbManager.requestPermission(driver.getDevice(), usbPermissionIntent);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(usbConnection == null) {
|
if(usbConnection == null) {
|
||||||
if (!usbManager.hasPermission(driver.getDevice()))
|
if (!usbManager.hasPermission(driver.getDevice()))
|
||||||
Log.i("connect", "connection failed: permission denied");
|
Log.i("connect", "connection failed: permission denied");
|
||||||
|
|
|
@ -284,4 +284,16 @@
|
||||||
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck"
|
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck"
|
||||||
tools:text="no signal" />
|
tools:text="no signal" />
|
||||||
|
|
||||||
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
|
android:id="@+id/floatingActionButtonExternGnssInfo"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="23dp"
|
||||||
|
android:layout_marginBottom="45dp"
|
||||||
|
android:clickable="true"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:srcCompat="@android:drawable/ic_dialog_info"
|
||||||
|
tools:ignore="SpeakableTextPresentCheck" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
Reference in New Issue