/* * Copyright (C) 2012-2016 The Android Money Manager Ex Project Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.money.manager.ex.settings; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceFragmentCompat; import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; import android.widget.Toast; import com.money.manager.ex.PasscodeActivity; import com.money.manager.ex.R; import com.money.manager.ex.core.UIHelper; import com.money.manager.ex.core.Passcode; /** */ public class SecuritySettingsFragment extends PreferenceFragmentCompat { private static final int REQUEST_INSERT_PASSCODE = 1; private static final int REQUEST_EDIT_PASSCODE = 2; private static final int REQUEST_DELETE_PASSCODE = 3; private static final int REQUEST_REINSERT_PASSCODE = 10; private String passcode = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences_security); PreferenceManager.getDefaultSharedPreferences(getActivity()); // active passcode final PreferenceScreen psActivePasscode = (PreferenceScreen) findPreference(getString(PreferenceConstants.PREF_ACTIVE_PASSCODE)); psActivePasscode.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { passcode = null; startActivityPasscode(getString(R.string.enter_your_passcode), REQUEST_INSERT_PASSCODE); return false; } }); final PreferenceScreen psEditPasscode = (PreferenceScreen) findPreference(getString(PreferenceConstants.PREF_EDIT_PASSCODE)); psEditPasscode.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { passcode = null; startActivityPasscode(getString(R.string.enter_your_previous_passcode), REQUEST_EDIT_PASSCODE); return false; } }); final PreferenceScreen psDisablePasscode = (PreferenceScreen) findPreference(getString(PreferenceConstants.PREF_DISABLE_PASSCODE)); psDisablePasscode.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { passcode = null; startActivityPasscode(getString(R.string.enter_your_passcode), REQUEST_DELETE_PASSCODE); return false; } }); } @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { // Timber.d("creating"); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != Activity.RESULT_OK) return; if (data == null) return; Passcode pass = new Passcode(getActivity()); switch (requestCode) { case REQUEST_INSERT_PASSCODE: // check if reinsert passcode = data.getStringExtra(PasscodeActivity.INTENT_RESULT_PASSCODE); startActivityPasscode(getString(R.string.reinsert_your_passcode), REQUEST_REINSERT_PASSCODE); break; case REQUEST_REINSERT_PASSCODE: UIHelper uiHelper = new UIHelper(getActivity()); String sentPasscode = data.getStringExtra(PasscodeActivity.INTENT_RESULT_PASSCODE); if (sentPasscode == null) { uiHelper.showToast("passcode not retrieved"); return; } if (passcode != null && passcode.equals(sentPasscode)) { if (!pass.setPasscode(passcode)) { uiHelper.showToast(R.string.passcode_not_update); } } else { uiHelper.showToast(R.string.passocde_no_macth, Toast.LENGTH_LONG); } break; case REQUEST_EDIT_PASSCODE: // check if reinsert passcode = data.getStringExtra(PasscodeActivity.INTENT_RESULT_PASSCODE); String passcodedb = pass.getPasscode(); if (passcodedb != null && passcode != null) { if (passcodedb.equals(passcode)) { startActivityPasscode(getString(R.string.enter_your_passcode), REQUEST_INSERT_PASSCODE); } else Toast.makeText(getActivity(), R.string.passocde_no_macth, Toast.LENGTH_LONG).show(); } break; case REQUEST_DELETE_PASSCODE: // check if reinsert passcode = data.getStringExtra(PasscodeActivity.INTENT_RESULT_PASSCODE); String passcodeDelete = pass.getPasscode(); if (passcodeDelete != null && passcode != null) { if (passcodeDelete.equals(passcode)) { if (!pass.clearPasscode()) { Toast.makeText(getActivity(), R.string.passcode_not_update, Toast.LENGTH_LONG).show(); } } else Toast.makeText(getActivity(), R.string.passocde_no_macth, Toast.LENGTH_LONG).show(); } break; } } @Override public void onResume() { super.onResume(); // check if has passcode Passcode passcode = new Passcode(getActivity()); if (findPreference(getString(PreferenceConstants.PREF_ACTIVE_PASSCODE)) != null) findPreference(getString(PreferenceConstants.PREF_ACTIVE_PASSCODE)).setEnabled(!passcode.hasPasscode()); if (findPreference(getString(PreferenceConstants.PREF_EDIT_PASSCODE)) != null) findPreference(getString(PreferenceConstants.PREF_EDIT_PASSCODE)).setEnabled(passcode.hasPasscode()); if (findPreference(getString(PreferenceConstants.PREF_DISABLE_PASSCODE)) != null) findPreference(getString(PreferenceConstants.PREF_DISABLE_PASSCODE)).setEnabled(passcode.hasPasscode()); } private void startActivityPasscode(CharSequence message, int request) { Intent intent = new Intent(getActivity(), PasscodeActivity.class); intent.setAction(PasscodeActivity.INTENT_REQUEST_PASSWORD); intent.putExtra(PasscodeActivity.INTENT_MESSAGE_TEXT, message); startActivityForResult(intent, request); } }