package com.nightonke.githubwidget;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.GradientDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
public class SettingsActivity extends AppCompatActivity
implements
View.OnClickListener,
LanguageDialog.OnLanguageSelectedListener {
private LinearLayout userNameLayout;
private EditText userNameEditText;
private RelativeLayout mottoLayout;
private LimitedEditText mottoEditText;
private ImageView imageView3D;
private ImageView imageView2D;
private ImageView colorImageView;
private TextView colorText;
private MySeekBar seekBarA;
private MySeekBar seekBarR;
private MySeekBar seekBarG;
private MySeekBar seekBarB;
private Button resetBaseColorButton;
private LinearLayout showToastLayout;
private CheckBox showToastCheckBox;
private LinearLayout showMonthDashIn3DLayout;
private CheckBox showMonthDashIn3DCheckBox;
private LinearLayout showWeekdayDashIn3DLayout;
private CheckBox showWeekdayDashIn3DCheckBox;
private Button loginButton;
private LinearLayout startFromLayout;
private RadioButton startFromSunday;
private RadioButton startFromMonday;
private SeekBar updateTimeSeekBar;
private TextView updateTimeText;
private SeekBar receivedEventPerPageSeekBar;
private TextView receivedEventPerPageTextView;
private RadioGroup contentTypeRadioGroup;
private Button languageButton;
private String oldUserName;
private String oldMotto;
private int oldBaseColor;
private boolean oldUserLogin;
private boolean oldShowToast;
private boolean oldShowMonthDashIn3D;
private boolean oldShowWeekdayDashIn3D;
private Weekday oldWeekday;
private int oldUpdateTime;
private int oldReceivedEventPerPage;
private ListViewContent oldListViewContent;
private Language oldLanguage;
private int newBaseColor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
userNameLayout = findView(R.id.user_name_layout);
userNameEditText = findView(R.id.user_name_title);
userNameEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
SettingsManager.setUserName(userNameEditText.getText().toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
userNameLayout.setOnClickListener(this);
mottoLayout = findView(R.id.motto_layout);
mottoEditText = findView(R.id.motto_title);
mottoEditText.setMaxLines(2);
mottoEditText.setOnTextChangedListener(new LimitedEditText.OnTextChangedListener() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
SettingsManager.setMotto(mottoEditText.getText().toString());
}
});
mottoLayout.setOnClickListener(this);
imageView3D = findView(R.id.three_d);
imageView2D = findView(R.id.two_d);
colorImageView = findView(R.id.color);
colorText = findView(R.id.color_edit_text);
seekBarA = findView(R.id.seek_bar_a);
seekBarA.setOnSeekBarChangeListener(onSeekBarChangeListener);
seekBarR = findView(R.id.seek_bar_r);
seekBarR.setOnSeekBarChangeListener(onSeekBarChangeListener);
seekBarG = findView(R.id.seek_bar_g);
seekBarG.setOnSeekBarChangeListener(onSeekBarChangeListener);
seekBarB = findView(R.id.seek_bar_b);
seekBarB.setOnSeekBarChangeListener(onSeekBarChangeListener);
resetBaseColorButton = findView(R.id.reset_base_color);
resetBaseColorButton.setOnClickListener(this);
loginButton = findView(R.id.login);
showToastLayout = findView(R.id.show_toast_layout);
showToastCheckBox = findView(R.id.show_toast_checkbox);
showToastLayout.setOnClickListener(this);
showToastCheckBox.setOnClickListener(this);
showToastCheckBox.setChecked(SettingsManager.getShowToast());
showMonthDashIn3DLayout = findView(R.id.show_month_dash_in_3d_layout);
showMonthDashIn3DCheckBox = findView(R.id.show_month_dash_in_3d_checkbox);
showMonthDashIn3DLayout.setOnClickListener(this);
showMonthDashIn3DCheckBox.setOnClickListener(this);
showMonthDashIn3DCheckBox.setChecked(SettingsManager.getShowMonthDashIn3D());
showWeekdayDashIn3DLayout = findView(R.id.show_weekday_dash_in_3d_layout);
showWeekdayDashIn3DCheckBox = findView(R.id.show_weekday_dash_in_3d_checkbox);
showWeekdayDashIn3DLayout.setOnClickListener(this);
showWeekdayDashIn3DCheckBox.setOnClickListener(this);
showWeekdayDashIn3DCheckBox.setChecked(SettingsManager.getShowWeekdayDashIn3D());
startFromLayout = findView(R.id.start_from_layout);
startFromSunday = findView(R.id.start_from_sunday);
startFromMonday = findView(R.id.start_from_monday);
startFromLayout.setOnClickListener(this);
startFromSunday.setOnClickListener(this);
startFromMonday.setOnClickListener(this);
startFromSunday.setChecked(SettingsManager.getStartWeekDay().equals(Weekday.SUN));
startFromMonday.setChecked(SettingsManager.getStartWeekDay().equals(Weekday.MON));
updateTimeSeekBar = findView(R.id.seek_bar_update_time);
updateTimeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
if (progress == updateTimeSeekBar.getMax()) {
SettingsManager.setUpdateTime(Integer.MAX_VALUE);
} else {
SettingsManager.setUpdateTime(
Util.HALF_AN_HOUR * (updateTimeSeekBar.getProgress() + 1));
}
setUpdateText();
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
if (SettingsManager.getUpdateTime() == Integer.MAX_VALUE) {
updateTimeSeekBar.setProgress(updateTimeSeekBar.getMax());
} else {
updateTimeSeekBar.setProgress(SettingsManager.getUpdateTime() / Util.HALF_AN_HOUR - 1);
}
updateTimeText = findView(R.id.update_time_text);
setUpdateText();
receivedEventPerPageSeekBar = findView(R.id.seek_bar_received_event_per_page);
receivedEventPerPageSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
SettingsManager.setReceivedEventPerPage(progress + 1);
setReceivedEventPerPageText();
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
receivedEventPerPageSeekBar.setProgress(SettingsManager.getReceivedEventPerPage() - 1);
receivedEventPerPageTextView = findView(R.id.received_event_per_page_text);
setReceivedEventPerPageText();
contentTypeRadioGroup = findView(R.id.list_view_content_radio_group);
contentTypeRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.trending_daily_radio_button:
SettingsManager.setListViewContent(ListViewContent.TRENDING_DAILY);
break;
case R.id.trending_weekly_radio_button:
SettingsManager.setListViewContent(ListViewContent.TRENDING_WEEKLY);
break;
case R.id.trending_monthly_radio_button:
SettingsManager.setListViewContent(ListViewContent.TRENDING_MONTHLY);
break;
case R.id.received_event_radio_button:
SettingsManager.setListViewContent(ListViewContent.EVENT);
break;
}
}
});
setContentType();
languageButton = findView(R.id.language);
languageButton.setOnClickListener(this);
setLanguageText();
findView(R.id.view_source_code).setOnClickListener(this);
findView(R.id.follow_nightonke).setOnClickListener(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
private void setContentType() {
switch (SettingsManager.getListViewContent()) {
case TRENDING_DAILY:
((RadioButton)findView(R.id.trending_daily_radio_button)).setChecked(true);
break;
case TRENDING_WEEKLY:
((RadioButton)findView(R.id.trending_weekly_radio_button)).setChecked(true);
break;
case TRENDING_MONTHLY:
((RadioButton)findView(R.id.trending_monthly_radio_button)).setChecked(true);
break;
case EVENT:
((RadioButton)findView(R.id.received_event_radio_button)).setChecked(true);
break;
}
}
private void setLanguageText() {
languageButton.setText(R.string.set_language);
languageButton.setText(languageButton.getText().toString()
+ SettingsManager.getLanguage().v);
}
private void setLoginButtonText() {
if (!Util.getLoggedIn()) {
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent().setClassName(SettingsActivity.this, "com.nightonke.githubwidget.LoginActivity");
startActivity(intent);
}
});
loginButton.setText(R.string.login);
} else {
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Util.clearCookies();
setLoginButtonText();
}
});
loginButton.setText(R.string.logout);
}
}
private void setUpdateText() {
if (updateTimeSeekBar.getProgress() == updateTimeSeekBar.getMax()) {
updateTimeText.setText(R.string.dont_update);
} else {
updateTimeText.setText(
Util.getString(R.string.update_every)
+ String.format("%.1f",
(updateTimeSeekBar.getProgress() / 2f + 0.5f)) + "h"
+ Util.getString(R.string.dot));
}
}
private void setReceivedEventPerPageText() {
if (receivedEventPerPageSeekBar.getProgress() == 0) {
receivedEventPerPageTextView.setText("1" + Util.getString(R.string.event_per_page));
} else {
receivedEventPerPageTextView.setText((receivedEventPerPageSeekBar.getProgress() + 1)
+ Util.getString(R.string.events_per_page));
}
}
private void setColor() {
newBaseColor = Color.argb(
seekBarA.getProgress(), seekBarR.getProgress(),
seekBarG.getProgress(), seekBarB.getProgress());
imageView3D.setImageBitmap(
Util.get3DBitmap(this, Util.SHOW_DATA, Weekday.SUN,
newBaseColor, Color.parseColor("#000000"), false, false, true));
imageView2D.setImageBitmap(
Util.get2DBitmap(this, Util.SHOW_DATA, Weekday.SUN,
newBaseColor, Color.parseColor("#000000"),
Util.getScreenWidth(this), 0, false));
((GradientDrawable)colorImageView.getBackground()).setColor(newBaseColor);
colorText.setText(""
+ Util.decToHex(seekBarA.getProgress())
+ Util.decToHex(seekBarR.getProgress())
+ Util.decToHex(seekBarG.getProgress())
+ Util.decToHex(seekBarB.getProgress()));
setSeekBarColor(seekBarA, newBaseColor);
setSeekBarColor(seekBarR, newBaseColor);
setSeekBarColor(seekBarG, newBaseColor);
setSeekBarColor(seekBarB, newBaseColor);
}
public void setSeekBarColor(MySeekBar seekBar, int newColor){
seekBar.getProgressDrawable().setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
seekBar.getSeekBarThumb().setColorFilter(newColor, PorterDuff.Mode.SRC_IN);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (SettingsManager.getUserName() != null) {
hideSoftKeyboard();
userNameEditText.setText(SettingsManager.getUserName());
userNameEditText.setSelection(userNameEditText.getText().toString().length());
} else {
// showSoftKeyboard(userNameEditText);
}
mottoEditText.setText(SettingsManager.getMotto());
mottoEditText.setSelection(mottoEditText.getText().toString().length());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.user_name_layout:
showSoftKeyboard(userNameEditText);
break;
case R.id.motto_layout:
showSoftKeyboard(mottoEditText);
break;
case R.id.reset_base_color:
newBaseColor = SettingsManager.getDefaultBaseColor();
seekBarA.setProgress(Color.alpha(newBaseColor));
seekBarR.setProgress(Color.red(newBaseColor));
seekBarG.setProgress(Color.green(newBaseColor));
seekBarB.setProgress(Color.blue(newBaseColor));
setColor();
break;
case R.id.show_toast_layout:
showToastCheckBox.toggle();
SettingsManager.setShowToast(showToastCheckBox.isChecked());
break;
case R.id.show_toast_checkbox:
SettingsManager.setShowToast(showToastCheckBox.isChecked());
break;
case R.id.show_month_dash_in_3d_layout:
showMonthDashIn3DCheckBox.toggle();
SettingsManager.setShowMonthDashIn3D(showMonthDashIn3DCheckBox.isChecked());
break;
case R.id.show_month_dash_in_3d_checkbox:
SettingsManager.setShowMonthDashIn3D(showMonthDashIn3DCheckBox.isChecked());
break;
case R.id.show_weekday_dash_in_3d_layout:
showWeekdayDashIn3DCheckBox.toggle();
SettingsManager.setShowWeekdayDashIn3D(showWeekdayDashIn3DCheckBox.isChecked());
break;
case R.id.show_weekday_dash_in_3d_checkbox:
SettingsManager.setShowWeekdayDashIn3D(showWeekdayDashIn3DCheckBox.isChecked());
break;
case R.id.start_from_layout:
SettingsManager.setStartWeekDay(1 - SettingsManager.getStartWeekDay().v);
startFromSunday.setChecked(SettingsManager.getStartWeekDay().equals(Weekday.SUN));
startFromMonday.setChecked(SettingsManager.getStartWeekDay().equals(Weekday.MON));
break;
case R.id.start_from_sunday:
SettingsManager.setStartWeekDay(Weekday.SUN.v);
startFromSunday.setChecked(SettingsManager.getStartWeekDay().equals(Weekday.SUN));
startFromMonday.setChecked(SettingsManager.getStartWeekDay().equals(Weekday.MON));
break;
case R.id.start_from_monday:
SettingsManager.setStartWeekDay(Weekday.MON.v);
startFromSunday.setChecked(SettingsManager.getStartWeekDay().equals(Weekday.SUN));
startFromMonday.setChecked(SettingsManager.getStartWeekDay().equals(Weekday.MON));
break;
case R.id.language:
new LanguageDialog(this).show();
break;
case R.id.view_source_code:
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://github.com/Nightonke/GithubWidget"));
browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(browserIntent);
break;
case R.id.follow_nightonke:
browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://github.com/Nightonke"));
browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(browserIntent);
break;
}
}
private <T extends View> T findView(int id) {
return (T) findViewById(id);
}
@Override
protected void onStart() {
super.onStart();
oldUserName = SettingsManager.getUserName();
oldMotto = SettingsManager.getMotto();
oldBaseColor = SettingsManager.getBaseColor();
oldUserLogin = Util.getLoggedIn();
oldShowToast = SettingsManager.getShowToast();
oldShowMonthDashIn3D = SettingsManager.getShowMonthDashIn3D();
oldShowWeekdayDashIn3D = SettingsManager.getShowWeekdayDashIn3D();
oldWeekday = SettingsManager.getStartWeekDay();
oldUpdateTime = SettingsManager.getUpdateTime();
oldReceivedEventPerPage = SettingsManager.getReceivedEventPerPage();
oldListViewContent = SettingsManager.getListViewContent();
oldLanguage = SettingsManager.getLanguage();
userNameLayout.post(new Runnable() {
@Override
public void run() {
newBaseColor = oldBaseColor;
seekBarA.setProgress(Color.alpha(newBaseColor));
seekBarR.setProgress(Color.red(newBaseColor));
seekBarG.setProgress(Color.green(newBaseColor));
seekBarB.setProgress(Color.blue(newBaseColor));
setColor();
}
});
setLoginButtonText();
}
@Override
protected void onStop() {
super.onStop();
boolean changed = false;
boolean mottoChanged = false;
boolean receivedEventPerPageChanged = false;
if (oldUserName == null) {
if (SettingsManager.getUserName() != null) changed = true;
} else {
if (!oldUserName.equals(SettingsManager.getUserName())) {
SettingsManager.setUserId(-1);
changed = true;
}
}
if (oldMotto == null) {
if (SettingsManager.getMotto() != null) mottoChanged = true;
} else {
if (!oldMotto.equals(SettingsManager.getMotto())) mottoChanged = true;
}
if (oldBaseColor != newBaseColor) {
SettingsManager.setBaseColor(newBaseColor);
changed = true;
}
if (oldShowToast != SettingsManager.getShowToast()) changed = true;
if (oldShowMonthDashIn3D != SettingsManager.getShowMonthDashIn3D()) changed = true;
if (oldShowWeekdayDashIn3D != SettingsManager.getShowWeekdayDashIn3D()) changed = true;
if (!oldWeekday.equals(SettingsManager.getStartWeekDay())) changed = true;
if (oldUpdateTime != SettingsManager.getUpdateTime()) changed = true;
if (oldReceivedEventPerPage != SettingsManager.getReceivedEventPerPage())
receivedEventPerPageChanged = true;
if (!oldListViewContent.equals(SettingsManager.getListViewContent())) changed = true;
if (oldLanguage != SettingsManager.getLanguage()) changed = true;
if (receivedEventPerPageChanged) {
SettingsManager.setLastUpdateStarsDate(null);
SettingsManager.setLastUpdateStarsId(null);
changed = true;
}
if (changed) {
Util.showToast(R.string.refreshing);
Intent intent = new Intent();
intent.setAction(Actions.CLICK_AVATAR);
sendBroadcast(intent);
} else {
if (mottoChanged) {
Util.showToast(R.string.refreshing_motto);
Intent intent = new Intent();
intent.setAction(Actions.UPDATE_MOTTO);
sendBroadcast(intent);
}
}
finish();
}
public void hideSoftKeyboard() {
if(getCurrentFocus() != null) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
public void showSoftKeyboard(View view) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
view.requestFocus();
inputMethodManager.showSoftInput(view, 0);
}
private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener
= new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) setColor();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
};
@Override
public void onLanguageSelected() {
setLanguageText();
}
}