Java tutorial
/* * ShoppingList - A simple shopping list for Android * * Copyright (C) 2016 Wolfgang Popp * * 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 de.wolfgang_popp.shoppinglist.activity; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.v13.app.FragmentCompat; import android.support.v4.content.ContextCompat; import android.widget.Toast; import de.wolfgang_popp.shoppinglist.R; /** * @author Wolfgang Popp. */ public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { public static final String KEY_FILE_LOCATION = "FILE_LOCATION"; private static final int REQUEST_CODE_EXT_STORAGE = 32537; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(this); // show the current value in the settings screen for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { initSummary(getPreferenceScreen().getPreference(i)); } } @Override public void onDestroy() { super.onDestroy(); PreferenceManager.getDefaultSharedPreferences(getActivity()) .unregisterOnSharedPreferenceChangeListener(this); } private void initSummary(Preference p) { if (p instanceof PreferenceCategory) { PreferenceCategory cat = (PreferenceCategory) p; for (int i = 0; i < cat.getPreferenceCount(); i++) { initSummary(cat.getPreference(i)); } } else { updatePreferences(p); } } private void updatePreferences(Preference p) { if (p instanceof EditTextPreference) { EditTextPreference editTextPref = (EditTextPreference) p; p.setSummary(editTextPref.getText()); } } private void requestExternalStoragePermission() { int result = ContextCompat.checkSelfPermission(getActivity(), "android.permission.WRITE_EXTERNAL_STORAGE"); if (result == PackageManager.PERMISSION_DENIED) { FragmentCompat.requestPermissions(this, new String[] { "android.permission.WRITE_EXTERNAL_STORAGE" }, REQUEST_CODE_EXT_STORAGE); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_CODE_EXT_STORAGE) { if (grantResults.length == 0 || grantResults[0] == PackageManager.PERMISSION_DENIED) { Toast.makeText(getActivity(), "permisson denied", Toast.LENGTH_SHORT).show(); PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().putString(KEY_FILE_LOCATION, "") .commit(); } } } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals(KEY_FILE_LOCATION)) { Preference p = findPreference(key); updatePreferences(p); if (!sharedPreferences.getString(KEY_FILE_LOCATION, "").equals("")) { requestExternalStoragePermission(); } else { p.setSummary(""); } } } }