package com.google.android.stardroid.activities; import android.content.SharedPreferences; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.view.View; import android.webkit.WebView; import android.widget.CheckBox; import android.widget.TextView; import com.google.android.stardroid.R; import com.google.android.stardroid.activities.util.SensorAccuracyDecoder; import com.google.android.stardroid.util.Analytics; import com.google.android.stardroid.util.MiscUtil; import javax.inject.Inject; public class CompassCalibrationActivity extends InjectableActivity implements SensorEventListener { public static final String HIDE_CHECKBOX = "hide checkbox"; public static final String DONT_SHOW_CALIBRATION_DIALOG = "no calibration dialog"; private static final String TAG = MiscUtil.getTag(CompassCalibrationActivity.class); private Sensor magneticSensor; private CheckBox checkBoxView; @Inject SensorManager sensorManager; @Inject SensorAccuracyDecoder accuracyDecoder; @Inject SharedPreferences sharedPreferences; @Inject Analytics analytics; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DaggerCompassCalibrationComponent.builder() .applicationComponent(getApplicationComponent()) .compassCalibrationModule(new CompassCalibrationModule(this)).build().inject(this); setContentView(R.layout.activity_compass_calibration); WebView web = (WebView) findViewById(R.id.compass_calib_activity_webview); web.loadUrl("file:///android_asset/html/how_to_calibrate.html"); checkBoxView = (CheckBox) findViewById(R.id.compass_calib_activity_donotshow); boolean hideCheckbox = getIntent().getBooleanExtra(HIDE_CHECKBOX, false); if (hideCheckbox) { checkBoxView.setVisibility(View.GONE); View reasonText = findViewById(R.id.compass_calib_activity_explain_why); reasonText.setVisibility(View.GONE); } magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); if (magneticSensor == null) { ((TextView) findViewById(R.id.compass_calib_activity_compass_accuracy)).setText( getString(R.string.sensor_absent)); } } @Override public void onResume() { super.onResume(); if (magneticSensor != null) { sensorManager.registerListener(this, magneticSensor, SensorManager.SENSOR_DELAY_UI); } } @Override public void onPause() { super.onPause(); sensorManager.unregisterListener(this); if (checkBoxView.isChecked()) { sharedPreferences.edit().putBoolean(DONT_SHOW_CALIBRATION_DIALOG, true).commit(); } } private boolean accuracyReceived = false; @Override public void onSensorChanged(SensorEvent event) { if (!accuracyReceived) { onAccuracyChanged(event.sensor, event.accuracy); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { accuracyReceived = true; String accuracyText = accuracyDecoder.getTextForAccuracy(accuracy); ((TextView) findViewById(R.id.compass_calib_activity_compass_accuracy)).setText(accuracyText); } public void onOkClicked(View unused) { finish(); } @Override public void onStart() { super.onStart(); analytics.trackPageView(Analytics.COMPASS_CALIBRATION_ACTIVITY); } }