X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosdroid%2Fapp%2Fsrc%2Fmain%2Fjava%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosDroid.java;h=46709f0f7f3c9bff417aad335ac6d85270ac08f5;hp=2854836c44069fa3552d51e0dbb686bd9681cda2;hb=6e3c4493cfa8d92d96808d14d1c12abb35ecb442;hpb=4696687ef84181e363ac79f43016d347d7e14a23 diff --git a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java index 2854836c..46709f0f 100644 --- a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java @@ -21,6 +21,7 @@ package org.altusmetrum.AltosDroid; import java.lang.ref.WeakReference; import java.util.*; +import android.Manifest; import android.app.Activity; import android.app.PendingIntent; import android.bluetooth.BluetoothAdapter; @@ -44,7 +45,8 @@ import android.location.Location; import android.location.LocationManager; import android.location.LocationListener; import android.hardware.usb.*; - +import android.content.pm.PackageManager; +import androidx.core.app.ActivityCompat; import org.altusmetrum.altoslib_13.*; class SavedState { @@ -139,7 +141,7 @@ class Tracker implements CharSequence, Comparable { } } -public class AltosDroid extends FragmentActivity implements AltosUnitsListener, LocationListener { +public class AltosDroid extends FragmentActivity implements AltosUnitsListener, LocationListener, ActivityCompat.OnRequestPermissionsResultCallback { // Actions sent to the telemetry server at startup time @@ -170,6 +172,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, public static final int SETUP_UNITS = 2; public static final int SETUP_MAP_SOURCE = 4; public static final int SETUP_MAP_TYPE = 8; + public static final int SETUP_FONT_SIZE = 16; public static FragmentManager fm; @@ -594,7 +597,6 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, for (AltosDroidTab mTab : mTabs) mTab.update_ui(telem_state, state, from_receiver, location, mTab == mTabsAdapter.currentItem()); - AltosDebug.debug("quiet %b\n", quiet); if (mAltosVoice != null && mTabsAdapter.currentItem() != null) mAltosVoice.tell(telem_state, state, from_receiver, location, (AltosDroidTab) mTabsAdapter.currentItem(), quiet); @@ -617,7 +619,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, } int deg = (int) Math.floor(p); double min = (p - Math.floor(p)) * 60.0; - return String.format("%d°%9.4f\" %s", deg, min, h); + return String.format("%d° %7.4f\" %s", deg, min, h); } static String number(String format, double value) { @@ -640,14 +642,29 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, return tab_view; } + static public int[] themes = { + R.style.Small, + R.style.Medium, + R.style.Large, + R.style.Extra + }; + + static public int[] dialog_themes = { + R.style.Small_Dialog, + R.style.Medium_Dialog, + R.style.Large_Dialog, + R.style.Extra_Dialog + }; + @Override public void onCreate(Bundle savedInstanceState) { + // Initialise preferences + AltosDroidPreferences.init(this); + setTheme(themes[AltosDroidPreferences.font_size()]); super.onCreate(savedInstanceState); AltosDebug.init(this); AltosDebug.debug("+++ ON CREATE +++"); - // Initialise preferences - AltosDroidPreferences.init(this); fm = getSupportFragmentManager(); @@ -682,7 +699,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, mStateView = (TextView) findViewById(R.id.state_value); mAgeView = (TextView) findViewById(R.id.age_value); mAgeNewColor = mAgeView.getTextColors().getDefaultColor(); - mAgeOldColor = getResources().getColor(R.color.old_color); + mAgeOldColor = getResources().getColor(R.color.old_color, getTheme()); } private void ensureBluetooth() { @@ -791,11 +808,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, noticeIntent(intent); } - @Override - public void onResume() { - super.onResume(); - AltosDebug.debug("+ ON RESUME +"); - + private void enable_location_updates() { // Listen for GPS and Network position updates LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this); @@ -810,12 +823,81 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, update_ui(telemetry_state, state, true); } + static final int MY_PERMISSION_REQUEST = 1001; + + public boolean have_location_permission = false; + public boolean have_storage_permission = false; + public boolean asked_permission = false; + + AltosMapOnline map_online; + + void + tell_map_permission(AltosMapOnline map_online) { + this.map_online = map_online; + } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, + int[] grantResults) { + if (requestCode == MY_PERMISSION_REQUEST) { + for (int i = 0; i < grantResults.length; i++) { + if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { + if (permissions[i].equals(Manifest.permission.ACCESS_FINE_LOCATION)) { + have_location_permission = true; + enable_location_updates(); + if (map_online != null) + map_online.position_permission(); + } + if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + have_storage_permission = true; + } + } + } + } + } + + @Override + public void onResume() { + super.onResume(); + AltosDebug.debug("+ ON RESUME +"); + + if (!asked_permission) { + asked_permission = true; + if (ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED) + { + have_location_permission = true; + } + if (ActivityCompat.checkSelfPermission(this, + Manifest.permission.WRITE_EXTERNAL_STORAGE) + == PackageManager.PERMISSION_GRANTED) + { + have_storage_permission = true; + } + int count = (have_location_permission ? 0 : 1) + (have_storage_permission ? 0 : 1); + if (count > 0) + { + String[] permissions = new String[count]; + int i = 0; + if (!have_location_permission) + permissions[i++] = Manifest.permission.ACCESS_FINE_LOCATION; + if (!have_location_permission) + permissions[i++] = Manifest.permission.WRITE_EXTERNAL_STORAGE; + ActivityCompat.requestPermissions(this, permissions, MY_PERMISSION_REQUEST); + } + } + if (have_location_permission) + enable_location_updates(); + } + @Override public void onPause() { super.onPause(); AltosDebug.debug("- ON PAUSE -"); // Stop listening for location updates - ((LocationManager) getSystemService(Context.LOCATION_SERVICE)).removeUpdates(this); + if (have_location_permission) + ((LocationManager) getSystemService(Context.LOCATION_SERVICE)).removeUpdates(this); } @Override @@ -838,7 +920,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, } protected void onActivityResult(int requestCode, int resultCode, Intent data) { - AltosDebug.debug("onActivityResult " + resultCode); + AltosDebug.debug("onActivityResult request %d result %d", requestCode, resultCode); switch (requestCode) { case REQUEST_CONNECT_DEVICE: // When DeviceListActivity returns with a device to connect to @@ -874,6 +956,8 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, private void note_setup_changes(Intent data) { int changes = data.getIntExtra(SetupActivity.EXTRA_SETUP_CHANGES, 0); + AltosDebug.debug("note_setup_changes changes %d\n", changes); + if ((changes & SETUP_BAUD) != 0) { try { mService.send(Message.obtain(null, TelemetryService.MSG_SETBAUD, @@ -891,6 +975,11 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, /* nothing to do here */ } set_switch_time(); + if ((changes & SETUP_FONT_SIZE) != 0) { + AltosDebug.debug(" ==== Recreate to switch font sizes ==== "); + finish(); + startActivity(getIntent()); + } } private void connectUsb(UsbDevice device) { @@ -908,10 +997,12 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, } private void bluetoothEnabled(Intent data) { - try { - mService.send(Message.obtain(null, TelemetryService.MSG_BLUETOOTH_ENABLED, null)); - } catch (RemoteException e) { - AltosDebug.debug("send BT enabled message failed"); + if (mService != null) { + try { + mService.send(Message.obtain(null, TelemetryService.MSG_BLUETOOTH_ENABLED, null)); + } catch (RemoteException e) { + AltosDebug.debug("send BT enabled message failed"); + } } }