package me.devsaki.hentoid.activities; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; import android.support.v7.widget.AppCompatCheckBox; import android.support.v7.widget.AppCompatCheckedTextView; import android.support.v7.widget.AppCompatEditText; import android.support.v7.widget.AppCompatRadioButton; import android.support.v7.widget.AppCompatSpinner; import android.text.InputType; import android.util.AttributeSet; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.widget.EditText; import me.devsaki.hentoid.HentoidApp; import me.devsaki.hentoid.R; import me.devsaki.hentoid.abstracts.BaseActivity; import me.devsaki.hentoid.updater.UpdateCheck; import me.devsaki.hentoid.util.ConstsPrefs; import me.devsaki.hentoid.util.FileHelper; import me.devsaki.hentoid.util.Helper; import me.devsaki.hentoid.util.LogHelper; /** * Created by DevSaki on 20/05/2015. * Set up and present preferences. */ public class PrefsActivity extends BaseActivity { private static final String TAG = LogHelper.makeLogTag(PrefsActivity.class); @Override protected void onCreate(Bundle savedInstanceState) { getDelegate().installViewFactory(); getDelegate().onCreate(savedInstanceState); super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit(); } @Override public View onCreateView(String name, Context context, AttributeSet attrs) { // Allow super to try and create a view first final View result = super.onCreateView(name, context, attrs); if (result != null) { return result; } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { // If we're running pre-L, we need to 'inject' our tint aware Views in place of the // standard framework versions switch (name) { case "EditText": return new AppCompatEditText(this, attrs); case "Spinner": return new AppCompatSpinner(this, attrs); case "CheckBox": return new AppCompatCheckBox(this, attrs); case "RadioButton": return new AppCompatRadioButton(this, attrs); case "CheckedTextView": return new AppCompatCheckedTextView(this, attrs); default: // do nothing break; } } return null; } public static class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); Preference recentVisibility = getPreferenceScreen() .findPreference(ConstsPrefs.PREF_HIDE_RECENT); SharedPreferences prefs = HentoidApp.getSharedPrefs(); boolean hideRecent = prefs.getBoolean( ConstsPrefs.PREF_HIDE_RECENT, ConstsPrefs.PREF_HIDE_RECENT_DEFAULT); recentVisibility.setOnPreferenceChangeListener((preference, newValue) -> { if (!newValue.equals(hideRecent)) { Helper.toast(R.string.restart_needed); return true; } else { return true; } }); Preference addNoMediaFile = getPreferenceScreen() .findPreference(ConstsPrefs.PREF_ADD_NO_MEDIA_FILE); addNoMediaFile.setOnPreferenceClickListener(preference -> FileHelper.createNoMedia()); Preference appLock = getPreferenceScreen().findPreference(ConstsPrefs.PREF_APP_LOCK); appLock.setOnPreferenceClickListener(preference -> { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.app_lock_pin_prefs); final EditText input = new EditText(getActivity()); input.setGravity(Gravity.CENTER); input.setInputType(InputType.TYPE_CLASS_NUMBER); builder.setView(input); builder.setOnKeyListener((dialog, keyCode, event) -> { if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { saveKey(dialog, input); return true; } return false; }); builder.setPositiveButton(android.R.string.ok, (dialog, which) -> saveKey(dialog, input)); builder.setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.cancel()); builder.show(); return true; }); Preference mUpdateCheck = getPreferenceScreen() .findPreference(ConstsPrefs.PREF_CHECK_UPDATE_MANUAL); mUpdateCheck.setOnPreferenceClickListener(preference -> { Helper.toast("Checking for updates..."); new UpdateCheck().checkForUpdate(HentoidApp.getAppContext(), false, true, new UpdateCheck.UpdateCheckCallback() { @Override public void noUpdateAvailable() { LogHelper.d(TAG, "Update Check: No update."); } @Override public void onUpdateAvailable() { LogHelper.d(TAG, "Update Check: Update!"); } }); return true; }); } private void saveKey(DialogInterface dialog, EditText input) { String lock = input.getText().toString(); SharedPreferences.Editor editor = HentoidApp.getSharedPrefs().edit(); editor.putString(ConstsPrefs.PREF_APP_LOCK, lock); editor.apply(); if (lock.isEmpty()) { Helper.toast(getActivity(), R.string.app_lock_disabled); } else { Helper.toast(getActivity(), R.string.app_lock_enable); } dialog.cancel(); } } }