package android.example.com.visualizerpreferences;

/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * 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.
 */

import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.EditTextPreference;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.support.v7.preference.PreferenceScreen;
import android.widget.Toast;

// TODO (1) Implement OnSharedPreferenceChangeListener
public class SettingsFragment extends PreferenceFragmentCompat {

    @Override
    public void onCreatePreferences(Bundle bundle, String s) {

        // Add visualizer preferences, defined in the XML file in res->xml->pref_visualizer
        addPreferencesFromResource(R.xml.pref_visualizer);

        // TODO (3) Get the preference screen, get the number of preferences and iterate through
        // all of the preferences if it is not a checkbox preference, call the setSummary method
        // passing in a preference and the value of the preference
    }

    // TODO (4) Override onSharedPreferenceChanged and, if it is not a checkbox preference,
    // call setPreferenceSummary on the changed preference

    // TODO (2) Create a setPreferenceSummary which takes a Preference and String value as parameters.
    // This method should check if the preference is a ListPreference and, if so, find the label
    // associated with the value. You can do this by using the findIndexOfValue and getEntries methods
    // of Preference.

    // TODO (5) Register and unregister the OnSharedPreferenceChange listener (this class) in
    // onCreate and onDestroy respectively.



}
@@ -1176,20 +1176,25 @@
 st;%0A%0A// 
-TODO
+COMPLETED
  (1) Imp
@@ -1296,16 +1296,59 @@
 tCompat 
+implements OnSharedPreferenceChangeListener
 %7B%0A%0A    @
@@ -1583,20 +1583,25 @@
      // 
-TODO
+COMPLETED
  (3) Get
@@ -1838,16 +1838,947 @@
 ference%0A
+        SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();%0A        PreferenceScreen prefScreen = getPreferenceScreen();%0A        int count = prefScreen.getPreferenceCount();%0A%0A        for(int i=0; i %3C count; i++) %7B%0A            Preference p = prefScreen.getPreference(i);%0A            if(!(p instanceof CheckBoxPreference)) %7B%0A                String value = sharedPreferences.getString(p.getKey(), %22%22);%0A                setPreferenceSummary(p, value);%0A            %7D%0A        %7D%0A    %7D%0A%0A    @Override%0A    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) %7B%0A        Preference preference = findPreference(key);%0A        if(preference != null) %7B%0A            if(!(preference instanceof CheckBoxPreference)) %7B%0A                String value = sharedPreferences.getString(preference.getKey(), %22%22);%0A                setPreferenceSummary(preference, value);%0A            %7D%0A        %7D%0A
     %7D%0A%0A 
@@ -2783,20 +2783,25 @@
 %0A    // 
-TODO
+COMPLETED
  (4) Ove
@@ -2940,20 +2940,25 @@
 %0A    // 
-TODO
+COMPLETED
  (2) Cre
@@ -3272,142 +3272,993 @@
     
-// TODO (5) Register and unregister the OnSharedPreferenceChange listener (this class) in%0A    // onCreate and onDestroy respectively.%0A%0A%0A
+private void setPreferenceSummary(Preference preference, String value) %7B%0A        if(preference instanceof ListPreference) %7B%0A            ListPreference listPreference = (ListPreference) preference;%0A            int prefIndex = listPreference.findIndexOfValue(value);%0A            if(prefIndex%3E=0) %7B%0A                listPreference.setSummary(listPreference.getEntries()%5BprefIndex%5D);%0A            %7D%0A        %7D%0A    %7D%0A%0A    // COMPLETED (5) Register and unregister the OnSharedPreferenceChange listener (this class) in%0A    // onCreate and onDestroy respectively.%0A%0A    @Override%0A    public void onCreate(Bundle savedInstanceState) %7B%0A        super.onCreate(savedInstanceState);%0A        getPreferenceScreen().getSharedPreferences()%0A                .registerOnSharedPreferenceChangeListener(this);%0A    %7D%0A%0A    @Override%0A    public void onDestroy() %7B%0A        super.onDestroy();%0A        getPreferenceScreen().getSharedPreferences()%0A                .unregisterOnSharedPreferenceChangeListener(this);%0A    %7D
 %0A%7D

Complete Exercise 6.08