/* * This file is part of WhereYouGo. * * WhereYouGo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WhereYouGo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WhereYouGo. If not, see <http://www.gnu.org/licenses/>. * * Copyright (C) 2012 Menion <whereyougo@asamm.cz> */ package menion.android.whereyougo.gui.location; import java.util.ArrayList; import locus.api.objects.extra.Location; import menion.android.whereyougo.R; import menion.android.whereyougo.gui.extension.CustomActivity; import menion.android.whereyougo.gui.extension.CustomDialog; import menion.android.whereyougo.hardware.location.LocationEventListener; import menion.android.whereyougo.hardware.location.LocationState; import menion.android.whereyougo.hardware.location.SatellitePosition; import menion.android.whereyougo.hardware.sensors.Orientation; import menion.android.whereyougo.settings.SettingValues; import menion.android.whereyougo.settings.Settings; import menion.android.whereyougo.utils.A; import menion.android.whereyougo.utils.Logger; import menion.android.whereyougo.utils.ManagerNotify; import menion.android.whereyougo.utils.Utils; import menion.android.whereyougo.utils.UtilsFormat; import menion.android.whereyougo.utils.geometry.Point2D; import android.os.Bundle; import android.view.ViewGroup.LayoutParams; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ToggleButton; /** * @author menion * @since 25.1.2010 2010 */ public class SatelliteScreen extends CustomActivity implements LocationEventListener { private static final String TAG = "SatelliteScreen"; private Satellite2DView satelliteView; private ToggleButton buttonGps; protected static ArrayList<SatellitePosition> satellites = new ArrayList<SatellitePosition>(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.satellite_screen_activity); createLayout(); } private void createLayout() { LinearLayout llSkyplot = (LinearLayout) findViewById(R.id.linear_layout_skyplot); llSkyplot.removeAllViews(); // return and add view to first linearLayout satelliteView = new Satellite2DView(SatelliteScreen.this); llSkyplot.addView(satelliteView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); // change colors for 3.0+ if (Utils.isAndroid30OrMore()) { findViewById(R.id.linear_layout_bottom_3).setBackgroundColor( CustomDialog.BOTTOM_COLOR_A3); } // and final bottom buttons buttonGps = (ToggleButton) findViewById(R.id.btn_gps_on_off); buttonGps.setChecked(LocationState.isActuallyHardwareGpsOn()); buttonGps.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (!isChecked) { LocationState.setGpsOff(SatelliteScreen.this); // disable satellites on screen satellites.clear(); satelliteView.invalidate(); } else { LocationState.setGpsOn(SatelliteScreen.this); } onGpsStatusChanged(0, null); Settings.enableWakeLock(); } }); ToggleButton buttonCompass = (ToggleButton) findViewById(R.id.btn_compass_on_off); buttonCompass.setChecked(Settings.getPrefBoolean(this, Settings.KEY_B_HARDWARE_COMPASS_SENSOR, Settings.DEFAULT_HARDWARE_COMPASS_SENSOR)); buttonCompass.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { ManagerNotify.toastLongMessage(R.string.pref_sensors_compass_hardware_desc); Settings.setPrefBoolean(SatelliteScreen.this, Settings.KEY_B_HARDWARE_COMPASS_SENSOR, isChecked); SettingValues.SENSOR_HARDWARE_COMPASS = Utils.parseBoolean(isChecked); A.getRotator().manageSensors(); } }); } public void notifyGpsDisable() { buttonGps.setChecked(false); } @Override protected void onResume() { super.onResume(); onLocationChanged(LocationState.getLocation()); onGpsStatusChanged(0, null); } public void onStart() { super.onStart(); LocationState.addLocationChangeListener(this); } public void onStop() { super.onStop(); LocationState.removeLocationChangeListener(this); } public void onLocationChanged(final Location location) { runOnUiThread(new Runnable() { @Override public void run() { ((TextView) findViewById(R.id.text_view_latitude)) .setText(UtilsFormat.formatLatitude(location.getLatitude())); ((TextView) findViewById(R.id.text_view_longitude)) .setText(UtilsFormat.formatLongitude(location.getLongitude())); ((TextView) findViewById(R.id.text_view_altitude)) .setText(UtilsFormat.formatAltitude(location.getAltitude(), true)); ((TextView) findViewById(R.id.text_view_accuracy)) .setText(UtilsFormat.formatDistance(location.getAccuracy(), false)); ((TextView) findViewById(R.id.text_view_speed)) .setText(UtilsFormat.formatSpeed(location.getSpeed(), false)); ((TextView) findViewById(R.id.text_view_declination)) .setText(UtilsFormat.formatAngle(Orientation.getDeclination())); long lastFix = LocationState.getLastFixTime(); if (lastFix > 0) { ((TextView) findViewById(R.id.text_view_time_gps)).setText(UtilsFormat.formatDate(lastFix)); } else { ((TextView) findViewById(R.id.text_view_time_gps)).setText("~"); } } }); } private Point2D.Int setSatellites(ArrayList<SatellitePosition> sats) { synchronized (satellites) { Point2D.Int satCount = new Point2D.Int(); satellites.clear(); if (sats != null && satellites != null) { for (int i = 0; i < sats.size(); i++) { SatellitePosition sat = sats.get(i); if (sat.isFixed()) satCount.x++; satCount.y++; satellites.add(sat); } } return satCount; } } public void onGpsStatusChanged(int event, ArrayList<SatellitePosition> gpsStatus) { try { Point2D.Int num = setSatellites(gpsStatus); satelliteView.invalidate(); ((TextView) findViewById(R.id.text_view_satellites)). setText(num.x + " | " + num.y); } catch (Exception e) { Logger.e(TAG, "onGpsStatusChanged(" + event + ", " + gpsStatus + "), e:" + e.toString()); } } public void onStatusChanged(String provider, int state, Bundle extra) { } public int getPriority() { return LocationEventListener.PRIORITY_MEDIUM; } @Override public boolean isRequired() { return false; } @Override public String getName() { return TAG; } }