diff --git a/app/src/main/java/hpsaturn/pollutionreporter/BaseActivity.java b/app/src/main/java/hpsaturn/pollutionreporter/BaseActivity.java index f8b1e1f..5a36146 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/BaseActivity.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/BaseActivity.java @@ -1,5 +1,6 @@ package hpsaturn.pollutionreporter; +import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; import android.content.Context; @@ -9,6 +10,8 @@ import android.view.MenuItem; import android.widget.Toast; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -24,20 +27,39 @@ public abstract class BaseActivity extends RxAppCompatActivity { public static String TAG = BaseActivity.class.getSimpleName(); + + private void enableBLE() { + Logger.i(TAG,"[BLE] enableBLE: starting..."); + + ActivityResultLauncher someActivityResultLauncher = registerForActivityResult( + new ActivityResultContracts.StartActivityForResult(), + result -> { + + if (result.getResultCode() == Activity.RESULT_OK) { + //Intent data = result.getData(); + Logger.i(TAG,"[BLE] enableBLE: enabled!"); + } else { + Logger.i(TAG,"[BLE] enableBLE: not enabled!"); + } + }); + + Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); + someActivityResultLauncher.launch(enableBtIntent); + } - public void checkBluetoohtBle() { + public void checkBLE() { // Use this check to determine whether BLE is supported on the device. BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter(); if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { Toast.makeText(this, R.string.msg_ble_not_supported, Toast.LENGTH_SHORT).show(); } else if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) { - Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); - startActivityForResult(enableBtIntent, 0); + this.enableBLE(); } - else Logger.i(TAG,"[BLE] checkBluetoohtBle: ready!"); + else Logger.i(TAG,"[BLE] checkBLE: ready!"); } + public void showFragment(Fragment fragment){ if(fragment!=null) { try { @@ -187,8 +209,7 @@ public boolean isFragmentInStack(String tag) { if (getSupportFragmentManager().getBackStackEntryCount() == 0) return false; FragmentManager fm = getSupportFragmentManager(); Fragment match = fm.findFragmentByTag(tag); - if (match != null) return true; - else return false; + return match != null; } catch (Exception e) { e.printStackTrace(); return false; diff --git a/app/src/main/java/hpsaturn/pollutionreporter/MainActivity.java b/app/src/main/java/hpsaturn/pollutionreporter/MainActivity.java index 47aceef..27b889d 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/MainActivity.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/MainActivity.java @@ -110,7 +110,7 @@ protected void onCreate(Bundle savedInstanceState) { startDataBase(); setSupportActionBar(toolbar); - checkBluetoohtBle(); + checkBLE(); setupUI(); recordTrackManager = new RecordTrackManager(this, recordTrackListener); @@ -433,7 +433,8 @@ private void startDataBase(){ } private View.OnClickListener onFabClickListener = view -> { - if(!isGPSGranted() || !isBLEGranted()) showDisclosureFragment(R.string.msg_gps_title,R.string.msg_gps_desc,R.drawable.ic_bicycle); + if(!isGPSGranted() || !isBLEGranted()) + showDisclosureFragment(R.string.msg_gps_title,R.string.msg_gps_desc,R.drawable.ic_bicycle); else startPermissionsGPSFlow(); }; diff --git a/app/src/main/java/hpsaturn/pollutionreporter/common/Storage.java b/app/src/main/java/hpsaturn/pollutionreporter/common/Storage.java index f5e6235..9a35404 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/common/Storage.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/common/Storage.java @@ -31,6 +31,9 @@ public static void setSensorData(Context ctx, ArrayList items) { } public static ArrayList getSensorData(Context ctx) { + if (ctx == null) + return new ArrayList<>(); + SharedPreferences preferences = ctx.getSharedPreferences(KEYS_TRACKS_PREFERENCES,0); String ringJson = preferences.getString(Keys.SENSOR_DATA, ""); if (ringJson.equals("")) return new ArrayList<>(); diff --git a/app/src/main/java/hpsaturn/pollutionreporter/models/SensorTrack.java b/app/src/main/java/hpsaturn/pollutionreporter/models/SensorTrack.java index c2acc30..e7517fa 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/models/SensorTrack.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/models/SensorTrack.java @@ -33,8 +33,8 @@ public String getDate() { return date; } - public void setDate(String email) { - this.date = email; + public void setDate(String date) { + this.date = date; } public String getName() { diff --git a/app/src/main/java/hpsaturn/pollutionreporter/view/ChartFragment.java b/app/src/main/java/hpsaturn/pollutionreporter/view/ChartFragment.java index 392e79a..03c5fdb 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/view/ChartFragment.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/view/ChartFragment.java @@ -39,6 +39,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import butterknife.BindView; @@ -257,7 +258,7 @@ private void calculateReferenceTime(){ */ private void addData(ArrayList data){ if(data==null){ - chart.setNoDataText("No data."); + chart.setNoDataText(getString(R.string.msg_chart_no_data)); loadingData = false; return; } @@ -349,19 +350,19 @@ private void updateMap() { private void setTrackDescription(SensorTrack track, boolean isPublishedData){ chart_name.setText("ID:"+track.getName()); - chart_name.setClickable(false); // we need fix it (heroku issue) + chart_name.setClickable(true); // we need fix it (heroku issue) if(!isPublishedData) { chart_name.setTextColor(getResources().getColor(R.color.black)); } chart_date.setText(track.getDate()); - chart_desc.setText("Points: "+track.size); + chart_desc.setText(getString(R.string.msg_chart_points)+": "+track.size); if (track.kms != 0 || track.hours !=0 || track.mins !=0) { String time = String.format("%02d:%02d:%02d",track.hours,track.mins,track.secs); - chart_loc.setText("Track: "+track.kms+" Kms ("+time+")"); + chart_loc.setText(getString(R.string.msg_chart_track)+": "+track.kms+" Kms ("+time+")"); } else chart_loc.setVisibility(View.GONE); - chart_meta.setText("Metadata: "+ track.metadata); + chart_meta.setText(getString(R.string.msg_chart_metadata)+": "+ track.metadata); rl_separator.setVisibility(View.VISIBLE); } @@ -370,9 +371,10 @@ private void setTrackDescription(SensorTrack track, boolean isPublishedData){ private View.OnClickListener onChartIdClickListener = new View.OnClickListener() { @Override public void onClick(View v) { + Logger.w(TAG, "[CHART] onChartIdClick"); if(recordId!=null) UITools.viewLink( - getActivity(), - getString(R.string.url_chart_get_data)+recordId+"?output=json" + requireContext(), + getString(R.string.url_chart_get_data)+recordId ); } }; diff --git a/app/src/main/java/hpsaturn/pollutionreporter/view/MapFragment.java b/app/src/main/java/hpsaturn/pollutionreporter/view/MapFragment.java index ac328d2..8362ee6 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/view/MapFragment.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/view/MapFragment.java @@ -42,7 +42,7 @@ public class MapFragment extends Fragment { public static final String TAG = MapFragment.class.getSimpleName(); - private MapView mapView; + private static MapView mapView; public static MapFragment newInstance() { return new MapFragment(); diff --git a/app/src/main/java/hpsaturn/pollutionreporter/view/PostsFragment.java b/app/src/main/java/hpsaturn/pollutionreporter/view/PostsFragment.java index 39e0bd8..0ab3a39 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/view/PostsFragment.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/view/PostsFragment.java @@ -1,6 +1,7 @@ package hpsaturn.pollutionreporter.view; +import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.view.LayoutInflater; @@ -38,6 +39,8 @@ public class PostsFragment extends Fragment { private FirebaseRecyclerAdapter mAdapter; + private Context ctx; + public static PostsFragment newInstance() { PostsFragment fragment = new PostsFragment(); return fragment; @@ -45,6 +48,7 @@ public static PostsFragment newInstance() { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + this.ctx=container.getContext(); View view = inflater.inflate(R.layout.fragment_records, container, false); mEmptyMessage = view.findViewById(R.id.tv_records_empty_list); @@ -87,14 +91,14 @@ protected void onBindViewHolder(@NonNull PostsViewHolder viewHolder, int positio getMain().showTrackInfoFragment(recordId); }); // Bind Post to ViewHolder, setting OnClickListener for the star button - viewHolder.bindToPost(trackInfo); + viewHolder.bindToPost(ctx, trackInfo); } }; mRecordsList.setAdapter(mAdapter); mAdapter.notifyDataSetChanged(); mAdapter.startListening(); - mUpdateTimeTask.run(); // TODO: fucking workaround, firebase recycler wasn't update in fist time + mUpdateTimeTask.run(); // TODO: fucking workaround, firebase recycler wasn't update in first time } diff --git a/app/src/main/java/hpsaturn/pollutionreporter/view/PostsViewHolder.java b/app/src/main/java/hpsaturn/pollutionreporter/view/PostsViewHolder.java index 0822f6c..6e238b8 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/view/PostsViewHolder.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/view/PostsViewHolder.java @@ -1,6 +1,8 @@ package hpsaturn.pollutionreporter.view; import androidx.recyclerview.widget.RecyclerView; + +import android.content.Context; import android.view.View; import android.widget.TextView; @@ -25,11 +27,11 @@ public PostsViewHolder(View itemView) { record_location = itemView.findViewById(R.id.tv_record_location); } - public void bindToPost(SensorTrackInfo sensorTrack){ + public void bindToPost(Context ctx, SensorTrackInfo sensorTrack){ record_name.setText(sensorTrack.getName()); record_date.setText(sensorTrack.getDate()); // TODO: geocode inverse for location - record_location.setText(""+sensorTrack.getSize()+" points"); + record_location.setText(""+sensorTrack.getSize()+" "+ctx.getString(R.string.text_unit_points)); } } diff --git a/app/src/main/java/hpsaturn/pollutionreporter/view/RecordsAdapter.java b/app/src/main/java/hpsaturn/pollutionreporter/view/RecordsAdapter.java index 32f27b9..752218a 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/view/RecordsAdapter.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/view/RecordsAdapter.java @@ -2,13 +2,21 @@ import android.content.Context; import androidx.recyclerview.widget.RecyclerView; + +import android.text.format.DateFormat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; +import com.hpsaturn.tools.Logger; + +import java.text.SimpleDateFormat; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; import hpsaturn.pollutionreporter.R; @@ -35,13 +43,19 @@ public RecordViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { @Override public void onBindViewHolder(RecordViewHolder holder, int position) { - + java.text.DateFormat dateFormat = android.text.format.DateFormat.getMediumDateFormat(ctx); final SensorTrack sensorTrack = mRecords.get(position); holder.record_name.setText(sensorTrack.name); - holder.record_date.setText(sensorTrack.date); + try { + Date sensorTrackDate = new SimpleDateFormat("yyyyMMddkkmmss").parse(sensorTrack.getName()); + holder.record_date.setText(dateFormat.format(sensorTrackDate)); + } catch (Exception e) { + holder.record_date.setText(""); + } + //holder.record_date.setText(sensorTrack.date); // TODO: geocode inverse for location - holder.record_location.setText(""+sensorTrack.size+" points"); + holder.record_location.setText(""+sensorTrack.size+" "+ctx.getString(R.string.text_unit_points)); } diff --git a/app/src/main/java/hpsaturn/pollutionreporter/view/ScanFragment.java b/app/src/main/java/hpsaturn/pollutionreporter/view/ScanFragment.java index de863ee..e43b5f0 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/view/ScanFragment.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/view/ScanFragment.java @@ -1,5 +1,6 @@ package hpsaturn.pollutionreporter.view; +import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -56,6 +57,7 @@ public class ScanFragment extends Fragment { private RxBleClient rxBleClient; private ScanResultsAdapter resultsAdapter; + private Context ctx; public static ScanFragment newInstance() { ScanFragment fragment = new ScanFragment(); @@ -65,6 +67,7 @@ public static ScanFragment newInstance() { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + this.ctx=container.getContext(); View view = inflater.inflate(R.layout.fragment_devices, container, false); ButterKnife.bind(this,view); return view; @@ -188,35 +191,44 @@ public void onPause() { } private void handleBleScanException(BleScanException bleScanException) { - final String text; + final String text, msg; switch (bleScanException.getReason()) { case BleScanException.BLUETOOTH_NOT_AVAILABLE: text = "Bluetooth is not available"; + msg = ctx.getString(R.string.msg_ble_scan_bluetooth_not_available); break; case BleScanException.BLUETOOTH_DISABLED: text = "Enable bluetooth and try again"; + msg = ctx.getString(R.string.msg_ble_scan_bluetooth_disabled); break; case BleScanException.LOCATION_PERMISSION_MISSING: text = "On Android 6.0 location permission is required. Implement Runtime Permissions"; + msg = ctx.getString(R.string.msg_ble_scan_location_permission_missing); break; case BleScanException.LOCATION_SERVICES_DISABLED: text = "Location services needs to be enabled on Android 6.0"; + msg = ctx.getString(R.string.msg_ble_scan_location_services_disabled); break; case BleScanException.SCAN_FAILED_ALREADY_STARTED: text = "Scan with the same filters is already started"; + msg = ctx.getString(R.string.msg_ble_scan_scan_failed_already_started); break; case BleScanException.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED: text = "Failed to register application for bluetooth scan"; + msg = ctx.getString(R.string.msg_ble_scan_scan_failed_application_registration_failed); break; case BleScanException.SCAN_FAILED_FEATURE_UNSUPPORTED: text = "Scan with specified parameters is not supported"; + msg = ctx.getString(R.string.msg_ble_scan_scan_failed_feature_unsupported); break; case BleScanException.SCAN_FAILED_INTERNAL_ERROR: text = "Scan failed due to internal error"; + msg = ctx.getString(R.string.msg_ble_scan_scan_failed_internal_error); break; case BleScanException.SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES: text = "Scan cannot start due to limited hardware resources"; + msg = ctx.getString(R.string.msg_ble_scan_scan_failed_out_of_hardware_resources); break; case BleScanException.UNDOCUMENTED_SCAN_THROTTLE: text = String.format( @@ -224,15 +236,18 @@ private void handleBleScanException(BleScanException bleScanException) { "Android 7+ does not allow more scans. Try in %d seconds", secondsTill(bleScanException.getRetryDateSuggestion()) ); + msg = ctx.getString(R.string.msg_ble_scan_undocumented_scan_throttle, + secondsTill(bleScanException.getRetryDateSuggestion())); break; case BleScanException.UNKNOWN_ERROR_CODE: case BleScanException.BLUETOOTH_CANNOT_START: default: text = "Unable to start btnScanning"; + msg = ctx.getString(R.string.msg_ble_scan_bluetooth_cannot_start); break; } Logger.w(TAG, "EXCEPTION: " + text + " " + bleScanException.getMessage()); - UITools.showToast(getActivity(), text); + UITools.showToast(getActivity(), msg); } private long secondsTill(Date retryDateSuggestion) { diff --git a/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsBaseFragment.java b/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsBaseFragment.java index a4b0df2..9cf201b 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsBaseFragment.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsBaseFragment.java @@ -82,7 +82,9 @@ private SwitchPreference getStatusSwitch() { } void updateStatusSummary(boolean status){ - updateSummary(R.string.key_device_status, status ? "Connected":"Disconnected"); + updateSummary(R.string.key_device_status, + status ? getString(R.string.summary_key_device_status_connected) : + getString(R.string.summary_key_device_status_disconnected)); } void updateSummary(int key){ diff --git a/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsFixedStation.java b/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsFixedStation.java index 6c84172..21375a2 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsFixedStation.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsFixedStation.java @@ -278,7 +278,7 @@ private void launchAnaireInit() { private void updateAnaireSummary(){ String anaireId = getSharedPreference(R.string.key_anaire_id); - String summary = getString(R.string.summary_anaire_timeseries)+"\nYour station: "+anaireId; + String summary = getString(R.string.summary_anaire_timeseries)+" "+anaireId; updateSummary(R.string.key_anaire_id,summary); } @@ -338,7 +338,7 @@ else if (geoHash.length() >=2 ) { name = name.replace("_",""); name = name.replace(":",""); name = name.toUpperCase(); - name = getString(R.string.summary_fixed_stations_map)+"\nYour station: "+name; + name = getString(R.string.summary_fixed_stations_map)+" "+name; updateSummary(R.string.key_fixed_stations_map,name); } catch (Exception e) { EasyPreference.Builder prefBuilder = AppData.getPrefBuilder(getContext()); diff --git a/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsMobileStation.java b/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsMobileStation.java index 6019a10..6fb3b4f 100644 --- a/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsMobileStation.java +++ b/app/src/main/java/hpsaturn/pollutionreporter/view/SettingsMobileStation.java @@ -134,7 +134,7 @@ private void resetStimeValue(int stime) { } String getStimeFormat(int time){ - return "" + time + " seconds"; + return "" + time + " " + getString(R.string.text_unit_seconds); } private void updateStimeSummary() { @@ -155,20 +155,20 @@ private float getCurrentTempOffset() { } private void saveTempOffset(float offset) { - Logger.v(TAG, "[Config] sending temperature offset : "+offset); + Logger.v(TAG, "[Config] sending temperature offset : "+offset+" ºC"); TempOffsetConfig config = new TempOffsetConfig(); config.toffset = offset; - updateSummary(R.string.key_setting_temp_offset,""+offset); + updateSummary(R.string.key_setting_temp_offset,""+offset+" ºC"); sendSensorConfig(config); } private void resetTempOffsetValue(float offset) { saveSharedPreference(R.string.key_setting_temp_offset, "" + offset); - updateSummary(R.string.key_setting_temp_offset,""+offset); + updateSummary(R.string.key_setting_temp_offset,""+offset+" ºC"); } private void updateTempOffsetSummary() { - updateSummary(R.string.key_setting_temp_offset,""+getCurrentTempOffset()); + updateSummary(R.string.key_setting_temp_offset,""+getCurrentTempOffset()+" ºC"); } @@ -197,7 +197,8 @@ private void resetDeepSleepTime(int seconds) { private void updateDeepSleepTimeSummary(int seconds){ if(seconds==0)updateSummary(R.string.key_setting_deepsleep_time,R.string.summary_deepsleep_time); - else updateSummary(R.string.key_setting_deepsleep_time,""+seconds); + else updateSummary(R.string.key_setting_deepsleep_time,""+seconds+" "+ + getString(R.string.text_unit_seconds)); } private void updateDeepSleepTimeSummary(){ @@ -214,10 +215,11 @@ private float getCurrentAltitudeOffset() { } private void saveAltitudeOffset(float offset) { - Logger.v(TAG, "[Config] sending altitude offset : "+offset); + Logger.v(TAG, "[Config] sending altitude offset : "+offset+" meters"); AltitudeOffsetConfig config = new AltitudeOffsetConfig(); config.altoffset = offset; - updateSummary(R.string.key_setting_altitude_offset,""+offset); + updateSummary(R.string.key_setting_altitude_offset,""+offset+" "+ + getString(R.string.text_unit_meters)); sendSensorConfig(config); } @@ -231,7 +233,8 @@ private void updateAltitudeOffsetSummary() { if (altitude == 0) updateSummary(R.string.key_setting_altitude_offset,R.string.summary_altitude_offset); else - updateSummary(R.string.key_setting_altitude_offset,""+getCurrentAltitudeOffset()); + updateSummary(R.string.key_setting_altitude_offset,""+getCurrentAltitudeOffset()+ + " "+getString(R.string.text_unit_meters)); } /*********************************************************************************************** @@ -244,14 +247,14 @@ private void resetAltitudeOffsetValue(float offset) { } private void updateSeaLevelSummary() { - updateSummary(R.string.key_setting_sealevel,""+getCurrentSeaLevel()); + updateSummary(R.string.key_setting_sealevel,""+getCurrentSeaLevel()+" hPa"); } private void saveSeaLevel(float sealevel) { - Logger.v(TAG, "[Config] sending sealevel: "+ sealevel); + Logger.v(TAG, "[Config] sending sealevel: "+ sealevel + " hPa"); SeaLevelConfig config = new SeaLevelConfig(); config.sealevel = sealevel; - updateSummary(R.string.key_setting_sealevel,""+sealevel); + updateSummary(R.string.key_setting_sealevel,""+sealevel+" hPa"); sendSensorConfig(config); } diff --git a/app/src/main/res/layout/fragment_chart.xml b/app/src/main/res/layout/fragment_chart.xml index 1d140f2..9b2691e 100644 --- a/app/src/main/res/layout/fragment_chart.xml +++ b/app/src/main/res/layout/fragment_chart.xml @@ -2,6 +2,7 @@ + android:text="@string/bt_device_connect" /> diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 6b3e5bf..1db1507 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -25,6 +25,7 @@ Actualmente sin registros Cargando informes públicos… Por favor, detén la grabación del recorrido + Intervalo de tiempo del sampleado 5 segundos Enviar configuración WiFi Guardando configuración del dispositivo… @@ -80,6 +81,10 @@ https://canair.io/#three Cargando datos, espera por favor… cargando… + No hay datos. + Puntos + Recorrido + Metadatos Por favor, reinicia la aplicación después LIMPIAR Limpiando dispositivo CanAirio… @@ -101,8 +106,7 @@ key_device_status key_device_info key_settings_vars - Estado Bluetooth: - http://canairio.herokuapp.com/tracks/get/ + Estado bluetooth: Compartiendo datos en la pestaña público… Cancelar Estoy de acuerdo @@ -117,14 +121,14 @@ Variables que se muestran en los gráficos Filtro de variables Desconectado - Configuración del dispositivo CanAirIO + Configuración del Dispositivo CanAirIO Configuración estación móvil Bluetooth - Estación Móvil + Estación móvil Configuración estación fija WiFi - Estación Fija + Estación fija Información dispositivo: Informar de errores o sugerir nuevas características - Enviar Comentarios + Enviar comentarios Acerca de canairio Nombre Base de Datos @@ -143,7 +147,7 @@ Para actualizaciones remotas o estaciones fijas key_fixed_stations_map Mapa mundial de CanAirIO - Clic para iniciar (puede tomar algunos minutos) + Clic para iniciar (puede tomar algunos minutos)\nEstación: http://influxdb.canair.io:8000 Por favor, establece primero la localización key_setting_send_co2_calibration @@ -153,8 +157,8 @@ Enviar comando de calibración Por favor, espera unos minutos key_setting_altitude_offset - Especificar Altitud para activar. 0 desactivar. - Compensación de la Altitud para CO2 + 0 metros (desactivado) + Compensación de la altitud para CO2 Variables… Por favor, escoge una Por favor, espera… @@ -163,7 +167,7 @@ Pulsa para desactivar el WiFi Estado: desconectado Estado: conectado - Configuración nube personalizada + Configuración de la nube personalizada Descubrimiento Home Assistant key_setting_hassip IP del broker MQTT @@ -177,26 +181,26 @@ key_setting_hasspt Puerto key_anaire_id - Mostrar tu dispositivo en la nube Anaire + Mostrar tu dispositivo en la nube Anaire\nEstación: CanAirIO en Anaire https://portal.anaire.org/admin/ - Tipo Dispositivo UART + Tipo dispositivo UART compartir Sólo exportar :( ¡Gracias por Compartir! Diálogo Compartir de CanAirIO "El recorrido actual se compartirá en el Mapa Móvil de CanAirIO. ¡Gracias por tu contribución! " Metadatos adicionales que quieras compartir con nosotros - Altitud nivel del mar + Presión al nivel del mar key_setting_sealevel 1013.25 Modo ECO Sueño profundo entre muestras key_solarstation_enable key_setting_deepsleep_time - 0 (desactivado) - Tiempo de sueño en segundos - Configuración de la aplicación + 0 segundos (desactivado) + Tiempo de sueño + Configuración de la Aplicación Mapa Informes Dispositivo @@ -204,4 +208,27 @@ Config. Colaboradores: Donantes: + Conectado + No conectado + segundos + metros + puntos + Configuración Ahorro de Energía + Utilidades Dispositivo + Reiniciar dispositivo + Establecer valores de fábrica + Configuración avanzada + Contraseña + Conectar + El bluetooth no está disponible + Activa el bluetooth y vuelve a probar + En Android 6.0 se necesita el permiso de localización + Los servicios de localización deben estar activos en Android 6.0 + El escaneo con los mismos filtros ya se había iniciado + No se ha podido registrar la aplicación para el escaneo bluetooth + No se soporta el escaneo con los parámetros especificados + Falló el escaneo debido a un error interno + El escaneo no puede empezar debido a los recursos de hardware limitados + Imposible iniciar el escaneo bluetooth + Android 7+ no permite más escaneos. Prueba en %1$d segundos diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 69e2ed8..6b08956 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -25,6 +25,7 @@ No records for now Loading public reports… Please stop the current recording track + Sample time interval 5 seconds Send WiFi settings Saving device setting… @@ -80,6 +81,10 @@ https://canair.io/#three Loading data, please wait… loading… + No data. + Points + Track + Metadata Please restart the app after this CLEAR Cleaning CanAirio device… @@ -101,8 +106,8 @@ key_device_status key_device_info key_settings_vars - Bluetooth Status: - http://canairio.herokuapp.com/tracks/get/ + Bluetooth status: + http://api.canair.io:8080/tracks/ Sharing data to public tab.. Cancel I agree @@ -119,12 +124,12 @@ Disconnected CanAirIO Device Settings Bluetooth mobile station settings - Mobile Station + Mobile station WiFi fixed station settings - Fixed Station + Fixed station Device info: Report issues or suggest new features - Send Feedback + Send feedback About canairio Database Name @@ -137,24 +142,24 @@ WiFi name (SSID) Enable publication Publish to CanAirIO or custom server - Share CanAirIO fixed station + Share CanAirIO Fixed Station Optional for fixed stations (WiFi mode) - WiFi preferences + WiFi Preferences For remote updates or fixed stations key_fixed_stations_map CanAirIO Worldmap - Click to launch (take some minutes) + Click to launch (take some minutes)\nYour station: http://influxdb.canair.io:8000 Please set first the location key_setting_send_co2_calibration Send CO2 calibration command - CO2 Calibration + CO2 calibration CALIBRATE Send calibration command Please wait some minutes key_setting_altitude_offset - Set Altitude to enable. 0 disable. - CO2 Altitude compensation + 0 meters (disabled) + CO2 altitude compensation Variables… Please select one Please wait… @@ -177,26 +182,26 @@ key_setting_hasspt Port key_anaire_id - Show your device on Anaire Cloud + Show your device on Anaire Cloud\nYour station: CanAirIO in Anaire https://portal.anaire.org/admin/ - UART Device Type + UART device type share Only export :( Thanks for Sharing! CanAirIO Share Dialog "The current track will be shared to the CanAirIO Mobile Map. Thanks for you contribution!" Additional metadata that you want share with us - Sea level altitude + Pressure at sea level key_setting_sealevel 1013.25 - ECO Mode + ECO mode Deep sleep into samples key_solarstation_enable key_setting_deepsleep_time - 0 (disabled) - Sleep time in seconds - App settings + 0 seconds (disabled) + Sleep time + App Settings Map Reports MyDevice @@ -208,4 +213,27 @@ \@Nelpin @arhuaco @arttesano @brolin @cedancp @danielbernalb @eljuguetero @epatarroyo @fjospinas @gaguevaras @hpsaturn @ikks @juandavideth @juanpa097 @melkati @roberbike @sebastian-code @trecetp Donors: \@arhuaco @baerchiathomei @cedancp @davegriffiths @hpsaturn @ikks @josedavid @Karisma @kleper @roberbike + Connected + Disconnected + seconds + meters + points + Power Saving Settings + Some Device Tools + Reboot device + Factory reset + Advanced settings + Password + Connect + Bluetooth is not available + Enable bluetooth and try again + On Android 6.0 location permission is required. + Location services needs to be enabled on Android 6.0 + Scan with the same filters is already started + Failed to register application for bluetooth scan + Scan with specified parameters is not supported + Scan failed due to internal error + Scan cannot start due to limited hardware resources + Unable to start bluetooth scanning + Android 7+ does not allow more scans. Try in %1$d seconds diff --git a/app/src/main/res/xml/settings_fixed_station.xml b/app/src/main/res/xml/settings_fixed_station.xml index ef784b9..700cc98 100644 --- a/app/src/main/res/xml/settings_fixed_station.xml +++ b/app/src/main/res/xml/settings_fixed_station.xml @@ -27,7 +27,7 @@ android:inputType="textPassword" app:key="@string/key_setting_pass" app:summary="WiFi password" - app:title="Password" /> + app:title="@string/title_password" /> + app:title="@string/title_advanced_settings" /> + app:title="@string/title_device_settings"> + app:title="@string/title_stime" /> + app:title="@string/title_force_i2c_sensors" /> + app:title="@string/title_power_saving_settings"> + app:title="@string/title_some_device_tools"> + app:title="@string/title_reboot_device" /> + app:title="@string/title_factory_reset" />