package com.databases.example.features.settings;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.databases.example.R;
import com.databases.example.app.BackupActivity;
import com.databases.example.database.DatabaseUtils;
import com.databases.example.features.home.MainActivity;
import haibison.android.lockpattern.LockPatternActivity;
import haibison.android.lockpattern.utils.AlpSettings;
import timber.log.Timber;
/**
* Created by kwelsh on 3/9/17.
* <p>
* Inspiration From <a href="http://stackoverflow.com/a/27422401/2128921">
* StackOverflow</a>
*/
public class SettingsFragment extends PreferenceFragment {
private static final int REQUEST_CREATE_PATTERN = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getActivity().setTheme(R.style...);
// ((SettingsActivity)getActivity()).bindPreferenceSummaryToValue(
// getPreferenceScreen().findPreference(getResources().getString(R.string.pref_key_account_default_appearance)));
if (getArguments() != null) {
String page = getArguments().getString("page");
if (page != null)
switch (page) {
case "appearance":
addPreferencesFromResource(R.xml.preference_appearance_accounts);
addPreferencesFromResource(R.xml.preference_appearance_transactions);
addPreferencesFromResource(R.xml.preference_appearance_plans);
addPreferencesFromResource(R.xml.preference_appearance_categories);
addPreferencesFromResource(R.xml.preference_appearance_subcategories);
PreferenceManager.setDefaultValues(getActivity(), R.xml.preference_appearance_accounts, false);
PreferenceManager.setDefaultValues(getActivity(), R.xml.preference_appearance_transactions, false);
PreferenceManager.setDefaultValues(getActivity(), R.xml.preference_appearance_plans, false);
PreferenceManager.setDefaultValues(getActivity(), R.xml.preference_appearance_categories, false);
PreferenceManager.setDefaultValues(getActivity(), R.xml.preference_appearance_subcategories, false);
break;
case "behavior":
addPreferencesFromResource(R.xml.preference_behavior);
PreferenceManager.setDefaultValues(getActivity(), R.xml.preference_behavior, false);
//Draw Pattern
Preference prefDraw = findPreference("pref_setlock");
prefDraw
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
drawPattern();
return true;
}
});
//Local Backup OptionsActivity
Preference prefSD = findPreference("pref_sd");
prefSD
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
sdOptions();
return true;
}
});
break;
case "misc":
addPreferencesFromResource(R.xml.preference_misc);
PreferenceManager.setDefaultValues(getActivity(), R.xml.preference_misc, false);
//Reset Preferences
Preference prefReset = findPreference(getString(R.string.pref_key_reset));
prefReset
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
prefsReset();
return true;
}
});
//Add Dummy Data
Preference prefAddDummyData = findPreference(getString(R.string.pref_key_add_dummy_data));
prefAddDummyData
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
DatabaseUtils.addTestData(getActivity());
return true;
}
});
//Clear Database
Preference prefBackupDB = findPreference(getString(R.string.pref_key_backup_database));
prefBackupDB
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
DatabaseUtils.exportDB(getActivity().getApplicationContext());
return true;
}
});
//Clear Database
Preference prefClearDB = findPreference(getString(R.string.pref_key_clear_database));
prefClearDB
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
clearDB();
return true;
}
});
break;
}
}
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.settings_page, container, false);
if (layout != null) {
AppCompatPreferenceActivity activity = (AppCompatPreferenceActivity) getActivity();
Toolbar toolbar = (Toolbar) layout.findViewById(R.id.toolbar);
activity.setSupportActionBar(toolbar);
ActionBar bar = activity.getSupportActionBar();
bar.setHomeButtonEnabled(true);
bar.setDisplayHomeAsUpEnabled(true);
bar.setDisplayShowTitleEnabled(true);
//bar.setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
bar.setTitle(getPreferenceScreen().getTitle());
}
return layout;
}
@Override
public void onResume() {
super.onResume();
if (getView() != null) {
View frame = (View) getView().getParent();
if (frame != null)
frame.setPadding(0, 0, 0, 0);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CREATE_PATTERN:
if (resultCode == getActivity().RESULT_OK) {
//String savedPattern = data.getStringExtra(LockPatternActivity._Pattern);
//char[] savedPattern = data.getCharArrayExtra(LockPatternActivity.EXTRA_PATTERN);
//SharedPreferences preferences = getPreferenceManager().getSharedPreferences();
//preferences.edit().putString("myPattern", savedPattern).commit();
//preferences.edit().putString("myPattern", String.valueOf(savedPattern)).commit();
Toast.makeText(this.getActivity(), "Saved Pattern", Toast.LENGTH_SHORT).show();
Timber.d("Saved a lockscreen pattern");
} else {
Toast.makeText(this.getActivity(), "Could not save pattern", Toast.LENGTH_LONG).show();
Timber.e("Failed to save a lockscreen pattern");
}
break;
}
}
//Draw a lockscreen pattern
public void drawPattern() {
AlpSettings.Security.setAutoSavePattern(getActivity(), true);
Intent intent = new Intent(LockPatternActivity.ACTION_CREATE_PATTERN, null, getActivity(), LockPatternActivity.class);
startActivityForResult(intent, REQUEST_CREATE_PATTERN);
}
//Launch BackupActivity OptionsActivity screen
public void sdOptions() {
Intent intentSD = new Intent(getActivity(), BackupActivity.class);
startActivity(intentSD);
}
//Reset Preferences
public void prefsReset() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setTitle("Reset Preferences?");
alertDialogBuilder
.setMessage("Do you wish to reset all the preferences?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
prefs.edit().clear().commit();
AlpSettings.Security.setPattern(getActivity(), null);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialogReset = alertDialogBuilder.create();
alertDialogReset.show();
}
//Ask if user wants to delete checkbook
public void clearDB() {
AlertDialog.Builder builderDelete;
builderDelete = new AlertDialog.Builder(getActivity());
builderDelete.setTitle("Delete Your CheckbookActivity?");
builderDelete.setMessage(
"Do you want to completely delete the database?\n\nTHIS IS PERMANENT.")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0,
int arg1) {
DatabaseUtils.deleteDatabase(getActivity());
//Navigate User back home
Intent intentDashboard = new Intent(getActivity(), MainActivity.class);
intentDashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentDashboard);
}
}
)
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
// no action taken
}
}
).show();
}
}