package com.morristaedt.mirror;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.morristaedt.mirror.configuration.ConfigurationSettings;
public class SetUpActivity extends Activity {
private static final long HOUR_MILLIS = 60 * 60 * 1000;
private static final int METERS_MIN = 500;
@NonNull
private ConfigurationSettings mConfigSettings;
private LocationManager mLocationManager;
@Nullable
private LocationListener mLocationListener;
@Nullable
private Location mLocation;
private RadioGroup mTemperatureChoice;
private CheckBox mBikingCheckbox;
private CheckBox mMoodDetectionCheckbox;
private CheckBox mShowNextCaledarEventCheckbox;
private CheckBox mShowNewsHeadlineCheckbox;
private CheckBox mXKCDCheckbox;
private CheckBox mXKCDInvertCheckbox;
private CheckBox mCountdownCheckbox;
private CheckBox mNewCountdownCheckbox;
private View mNewCountdownView;
private View mLocationView;
private View mColorShowView;
private EditText mLatitude;
private EditText mLongitude;
private EditText mStockTickerSymbol;
private EditText mCountdownDays;
private EditText mCountdownHours;
private EditText mCountdownMins;
private EditText mCountdownSecs;
private SeekBar mColorPickerRed;
private SeekBar mColorPickerGreen;
private SeekBar mColorPickerBlue;
private TextView mColorShowerRed;
private TextView mColorShowerGreen;
private TextView mColorShowerBlue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_configuration);
mConfigSettings = new ConfigurationSettings(this);
mTemperatureChoice = (RadioGroup) findViewById(R.id.temperature_group);
mTemperatureChoice.check(mConfigSettings.getIsCelsius() ? R.id.celsius : R.id.farenheit);
mColorPickerRed = (SeekBar) findViewById(R.id.ColorPickerRed);
mColorPickerRed.setProgress(Color.red(mConfigSettings.getTextColor()));
mColorPickerGreen = (SeekBar) findViewById(R.id.ColorPickerGreen);
mColorPickerGreen.setProgress(Color.green(mConfigSettings.getTextColor()));
mColorPickerBlue = (SeekBar) findViewById(R.id.ColorPickerBlue);
mColorPickerBlue.setProgress(Color.blue(mConfigSettings.getTextColor()));
mColorShowerRed = (TextView) findViewById(R.id.ColorShowerRed);
mColorShowerRed.setText(String.format("%d", Color.red(mConfigSettings.getTextColor())));
mColorShowerGreen = (TextView) findViewById(R.id.ColorShowerGreen);
mColorShowerGreen.setText(String.format("%d", Color.green(mConfigSettings.getTextColor())));
mColorShowerBlue = (TextView) findViewById(R.id.ColorShowerBlue);
mColorShowerBlue.setText(String.format("%d", Color.blue(mConfigSettings.getTextColor())));
mColorShowView = findViewById(R.id.colored_bar);
mColorShowView.setBackgroundColor(mConfigSettings.getTextColor());
mColorPickerRed.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mConfigSettings.setTextColorRed(progress);
mColorShowerRed.setText(String.format("%d", progress));
mColorShowView.setBackgroundColor(mConfigSettings.getTextColor());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mColorPickerGreen.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mConfigSettings.setTextColorGreen(progress);
mColorShowerGreen.setText(String.format("%d", progress));
mColorShowView.setBackgroundColor(mConfigSettings.getTextColor());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
mColorPickerBlue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mConfigSettings.setTextColorBlue(progress);
mColorShowerBlue.setText(String.format("%d", progress));
mColorShowView.setBackgroundColor(mConfigSettings.getTextColor());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
mBikingCheckbox = (CheckBox) findViewById(R.id.biking_checkbox);
mBikingCheckbox.setChecked(mConfigSettings.showBikingHint());
mMoodDetectionCheckbox = (CheckBox) findViewById(R.id.mood_detection_checkbox);
mMoodDetectionCheckbox.setChecked(mConfigSettings.showMoodDetection());
mShowNextCaledarEventCheckbox = (CheckBox) findViewById(R.id.calendar_checkbox);
mShowNextCaledarEventCheckbox.setChecked(mConfigSettings.showNextCalendarEvent());
mShowNewsHeadlineCheckbox = (CheckBox) findViewById(R.id.headline_checkbox);
mShowNewsHeadlineCheckbox.setChecked(mConfigSettings.showNewsHeadline());
mXKCDCheckbox = (CheckBox) findViewById(R.id.xkcd_checkbox);
mXKCDCheckbox.setChecked(mConfigSettings.showXKCD());
mXKCDInvertCheckbox = (CheckBox) findViewById(R.id.xkcd_invert_checkbox);
mXKCDInvertCheckbox.setChecked(mConfigSettings.invertXKCD());
mLatitude = (EditText) findViewById(R.id.latitude);
mLongitude = (EditText) findViewById(R.id.longitude);
mLatitude.setText(String.valueOf(mConfigSettings.getLatitude()));
mLongitude.setText(String.valueOf(mConfigSettings.getLongitude()));
mLocationView = findViewById(R.id.location_view);
setUpLocationMonitoring();
mStockTickerSymbol = (EditText) findViewById(R.id.stock_name);
mStockTickerSymbol.setText(mConfigSettings.getStockTickerSymbol());
mCountdownCheckbox = (CheckBox) findViewById(R.id.countdown_checkbox);
mCountdownCheckbox.setChecked(mConfigSettings.showCountdown());
mNewCountdownCheckbox = (CheckBox) findViewById(R.id.countdown_new_checkbox);
mNewCountdownCheckbox.setChecked(false);
if (!mConfigSettings.showCountdown()) {
mNewCountdownCheckbox.setVisibility(View.GONE);
}
mNewCountdownView = findViewById(R.id.new_countdown_view);
mNewCountdownView.setVisibility(View.GONE);
mCountdownDays = (EditText) findViewById(R.id.countdown_days);
mCountdownHours = (EditText) findViewById(R.id.countdown_hours);
mCountdownMins = (EditText) findViewById(R.id.countdown_mins);
mCountdownSecs = (EditText) findViewById(R.id.countdown_secs);
mCountdownCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked){
mNewCountdownCheckbox.setVisibility(View.VISIBLE);
} else {
mNewCountdownCheckbox.setChecked(false);
mNewCountdownCheckbox.setVisibility(View.GONE);
mNewCountdownView.setVisibility(View.GONE);
}
}
});
mNewCountdownCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked){
mNewCountdownView.setVisibility(View.VISIBLE);
} else {
mNewCountdownView.setVisibility(View.GONE);
}
}
});
findViewById(R.id.launch_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
saveFields();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mStockTickerSymbol.getWindowToken(), 0);
Intent intent = new Intent(SetUpActivity.this, MirrorActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mLocationManager != null && mLocationListener != null) {
mLocationManager.removeUpdates(mLocationListener);
}
}
private void setUpLocationMonitoring() {
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
String provider = mLocationManager.getBestProvider(criteria, true);
try {
mLocation = mLocationManager.getLastKnownLocation(provider);
if (mLocation == null) {
mLocationView.setVisibility(View.VISIBLE);
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
Toast.makeText(SetUpActivity.this, R.string.found_location, Toast.LENGTH_SHORT).show();
mLocation = location;
mConfigSettings.setLatLon(String.valueOf(mLocation.getLatitude()), String.valueOf(mLocation.getLongitude()));
mLocationManager.removeUpdates(this);
if (mLocationView != null) {
mLocationView.setVisibility(View.GONE);
}
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
mLocationManager.requestLocationUpdates(provider, HOUR_MILLIS, METERS_MIN, mLocationListener);
} else {
mLocationView.setVisibility(View.GONE);
}
} catch (IllegalArgumentException e) {
Log.e("SetUpActivity", "Location manager could not use provider", e);
}
}
private void saveFields() {
mConfigSettings.setIsCelsius(mTemperatureChoice.getCheckedRadioButtonId() == R.id.celsius);
mConfigSettings.setShowBikingHint(mBikingCheckbox.isChecked());
mConfigSettings.setShowMoodDetection(mMoodDetectionCheckbox.isChecked());
mConfigSettings.setShowNextCalendarEvent(mShowNextCaledarEventCheckbox.isChecked());
mConfigSettings.setShowNewsHeadline(mShowNewsHeadlineCheckbox.isChecked());
mConfigSettings.setXKCDPreference(mXKCDCheckbox.isChecked(), mXKCDInvertCheckbox.isChecked());
mConfigSettings.setShowCountdown(mCountdownCheckbox.isChecked());
if (mNewCountdownCheckbox.isChecked()){
mConfigSettings.setCountdownTime(
Integer.parseInt("0"+mCountdownDays.getText().toString()),
Integer.parseInt("0"+mCountdownHours.getText().toString()),
Integer.parseInt("0"+mCountdownMins.getText().toString()),
Integer.parseInt("0"+mCountdownSecs.getText().toString()));
mNewCountdownCheckbox.setChecked(false);
mNewCountdownView.setVisibility(View.GONE);
}
if (mLocation == null) {
mConfigSettings.setLatLon(mLatitude.getText().toString(), mLongitude.getText().toString());
} else {
mConfigSettings.setLatLon(String.valueOf(mLocation.getLatitude()), String.valueOf(mLocation.getLongitude()));
}
mConfigSettings.setStockTickerSymbol(mStockTickerSymbol.getText().toString());
}
}