package com.tevinjeffrey.rutgersct.ui.settings;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.tevinjeffrey.rutgersct.BuildConfig;
import com.tevinjeffrey.rutgersct.R;
import com.tevinjeffrey.rutgersct.RutgersCTApp;
import com.tevinjeffrey.rutgersct.services.Alarm;
import com.tevinjeffrey.rutgersct.ui.utils.AppCompatPreferenceActivity;
import com.tevinjeffrey.rutgersct.utils.PreferenceUtils;
import com.tevinjeffrey.rutgersct.utils.Utils;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.List;
import javax.inject.Inject;
import butterknife.ButterKnife;
public class SettingsActivity extends AppCompatPreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_preference);
Utils.setWindowColor(ContextCompat.getColor(this, R.color.primary_dark), this);
setToolbar();
getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
}
private void setToolbar() {
Toolbar toolbar = ButterKnife.findById(this, R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle(getString(R.string.settings));
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
}
toolbar.setTitleTextAppearance(this, R.style.ToolbarTitleStyle);
toolbar.setSubtitleTextAppearance(this, R.style.ToolbarSubtitleStyle_TextApperance);
}
public static class SettingsFragment extends PreferenceFragment {
@Inject
PreferenceUtils mPreferenceUtils;
private Preference syncInterval;
private SettingsActivity getParentActivity() {
return (SettingsActivity) getActivity();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RutgersCTApp.getObjectGraph(getParentActivity()).inject(this);
addPreferencesFromResource(R.xml.settings);
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setupIntervalPref();
setupAboutPref();
setupLicensesPref();
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
ListView list = (ListView) getView().findViewById(android.R.id.list);
list.setDivider(new ColorDrawable(Color.parseColor("#f5f5f5")));
list.setDividerHeight((int) getParentActivity().getResources().getDisplayMetrics().density);
super.onActivityCreated(savedInstanceState);
}
private void setupAboutPref() {
final Preference about = findPreference("about");
about.setSummary("v" + BuildConfig.VERSION_NAME);
about.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
TextView tv = new TextView(getParentActivity());
tv.setMovementMethod(new LinkMovementMethod());
tv.setLinkTextColor(ContextCompat.getColor(getParentActivity(), R.color.accent));
tv.setTextSize(18);
tv.setTextColor(ContextCompat.getColor(getParentActivity(), R.color.secondary_text));
tv.setText(Html.fromHtml("Designed and developed by <b> Tevin Jeffrey</b> <br><br>" +
"<a href=\"http://tevinjeffrey.com/\">Website</a>" + " <a href=\"mailto:tev.jeffrey@gmail.com\">Email</a>"));
new MaterialDialog.Builder(getParentActivity())
.title(getResources().getString(R.string.application_name))
.iconRes(R.mipmap.ic_launcher)
.positiveColorRes(R.color.accent)
.customView(tv, true)
.positiveText("OK")
.show();
return true;
}
});
}
private void setupIntervalPref() {
syncInterval = findPreference(getString(R.string.pref_sync_interval_key));
setSummary(syncInterval, getResources().getStringArray(R.array.intervals)[getInterval()]);
syncInterval.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
new MaterialDialog.Builder(getParentActivity())
.title("Set sync interval")
.items(R.array.intervals).alwaysCallSingleChoiceCallback()
.itemsCallbackSingleChoice(getInterval(), new MaterialDialog.ListCallbackSingleChoice() {
@Override
public boolean onSelection(MaterialDialog materialDialog, View view, int which, CharSequence charSequence) {
setInterval(which);
setSummary(syncInterval, String.format("%s",
getResources().getStringArray(R.array.intervals)[getInterval()]));
RutgersCTApp.getObjectGraph(getParentActivity()).get(Alarm.class).setAlarm();
return true;
}
})
.positiveColorRes(R.color.accent)
.positiveText("DONE")
.show();
return true;
}
});
}
private void setupLicensesPref() {
Preference licenses = findPreference("licenses");
licenses.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.create();
String licenses = null;
try {
licenses = Utils.parseResource(getParentActivity(), R.raw.open_source_licenses);
} catch (IOException e) {
e.printStackTrace();
}
LinearLayout linearLayout = new LinearLayout(getParentActivity());
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
Type listType = new TypeToken<List<License>>() {
}.getType();
List<License> licenseList = gson.fromJson(licenses, listType);
for (final License license : licenseList) {
View licenseView = LayoutInflater.from(getParentActivity()).inflate(R.layout.license, null);
TextView name = ButterKnife.findById(licenseView, R.id.name);
TextView author = ButterKnife.findById(licenseView, R.id.author);
TextView content = ButterKnife.findById(licenseView, R.id.content);
View openInBrowser = ButterKnife.findById(licenseView, R.id.open_in_browser);
openInBrowser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Utils.openLink(getParentActivity(), license.getWebsite());
}
});
name.setText(license.getName());
author.setText(license.getAuthor());
content.setText(license.getContent());
linearLayout.addView(licenseView);
}
new MaterialDialog.Builder(getParentActivity())
.title("Open Source Licenses")
.titleColor(ContextCompat.getColor(getParentActivity(), R.color.primary))
.positiveText("Ok")
.positiveColor(ContextCompat.getColor(getParentActivity(), R.color.primary))
.customView(linearLayout, true)
.show();
return true;
}
});
}
private void setSummary(Preference preference, CharSequence summary) {
preference.setSummary(summary);
}
private int getInterval() {
return mPreferenceUtils.getSyncInterval();
}
private void setInterval(int intervalIndex) {
mPreferenceUtils.setSyncInterval(intervalIndex);
}
}
}