/*
* Copyright (c) 2014 - 2015 Oleksandr Tyshkovets <olexandr.tyshkovets@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gnucash.android.ui.settings;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.widget.Toast;
import org.gnucash.android.R;
import org.gnucash.android.ui.common.UxArgument;
import org.gnucash.android.ui.passcode.PasscodeLockScreenActivity;
import org.gnucash.android.ui.passcode.PasscodePreferenceActivity;
/**
* Fragment for general preferences. Currently caters to the passcode and reporting preferences
* @author Oleksandr Tyshkovets <olexandr.tyshkovets@gmail.com>
*/
public class GeneralPreferenceFragment extends PreferenceFragmentCompat implements
android.support.v7.preference.Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
/**
* Request code for retrieving passcode to store
*/
public static final int PASSCODE_REQUEST_CODE = 0x2;
/**
* Request code for disabling passcode
*/
public static final int REQUEST_DISABLE_PASSCODE = 0x3;
/**
* Request code for changing passcode
*/
public static final int REQUEST_CHANGE_PASSCODE = 0x4;
private SharedPreferences.Editor mEditor;
private CheckBoxPreference mCheckBoxPreference;
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.fragment_general_preferences);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(R.string.title_general_prefs);
}
@Override
public void onResume() {
super.onResume();
final Intent intent = new Intent(getActivity(), PasscodePreferenceActivity.class);
mCheckBoxPreference = (CheckBoxPreference) findPreference(getString(R.string.key_enable_passcode));
mCheckBoxPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if ((Boolean) newValue) {
startActivityForResult(intent, PASSCODE_REQUEST_CODE);
} else {
Intent passIntent = new Intent(getActivity(), PasscodeLockScreenActivity.class);
passIntent.putExtra(UxArgument.DISABLE_PASSCODE, UxArgument.DISABLE_PASSCODE);
startActivityForResult(passIntent, REQUEST_DISABLE_PASSCODE);
}
return true;
}
});
findPreference(getString(R.string.key_change_passcode)).setOnPreferenceClickListener(this);
}
@Override
public boolean onPreferenceClick(Preference preference) {
String key = preference.getKey();
if (key.equals(getString(R.string.key_change_passcode))) {
startActivityForResult(
new Intent(getActivity(), PasscodePreferenceActivity.class),
REQUEST_CHANGE_PASSCODE
);
return true;
}
return false;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference.getKey().equals(getString(R.string.key_enable_passcode))) {
if ((Boolean) newValue) {
startActivityForResult(new Intent(getActivity(), PasscodePreferenceActivity.class),
GeneralPreferenceFragment.PASSCODE_REQUEST_CODE);
} else {
Intent passIntent = new Intent(getActivity(), PasscodeLockScreenActivity.class);
passIntent.putExtra(UxArgument.DISABLE_PASSCODE, UxArgument.DISABLE_PASSCODE);
startActivityForResult(passIntent, GeneralPreferenceFragment.REQUEST_DISABLE_PASSCODE);
}
}
if (preference.getKey().equals(getString(R.string.key_use_account_color))) {
getPreferenceManager().getSharedPreferences()
.edit()
.putBoolean(getString(R.string.key_use_account_color), Boolean.valueOf(newValue.toString()))
.commit();
}
return true;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mEditor == null){
mEditor = getPreferenceManager().getSharedPreferences().edit();
}
switch (requestCode) {
case PASSCODE_REQUEST_CODE:
if (resultCode == Activity.RESULT_OK && data != null) {
mEditor.putString(UxArgument.PASSCODE, data.getStringExtra(UxArgument.PASSCODE));
mEditor.putBoolean(UxArgument.ENABLED_PASSCODE, true);
Toast.makeText(getActivity(), R.string.toast_passcode_set, Toast.LENGTH_SHORT).show();
}
if (resultCode == Activity.RESULT_CANCELED) {
mEditor.putBoolean(UxArgument.ENABLED_PASSCODE, false);
mCheckBoxPreference.setChecked(false);
}
break;
case REQUEST_DISABLE_PASSCODE:
boolean flag = resultCode != Activity.RESULT_OK;
mEditor.putBoolean(UxArgument.ENABLED_PASSCODE, flag);
mCheckBoxPreference.setChecked(flag);
break;
case REQUEST_CHANGE_PASSCODE:
if (resultCode == Activity.RESULT_OK && data != null) {
mEditor.putString(UxArgument.PASSCODE, data.getStringExtra(UxArgument.PASSCODE));
mEditor.putBoolean(UxArgument.ENABLED_PASSCODE, true);
Toast.makeText(getActivity(), R.string.toast_passcode_set, Toast.LENGTH_SHORT).show();
}
break;
}
mEditor.commit();
}
}