1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.emergency.edit;
17
18import android.app.DialogFragment;
19import android.app.Fragment;
20import android.os.Bundle;
21import android.support.v14.preference.PreferenceFragment;
22import android.support.v7.preference.Preference;
23import android.text.TextUtils;
24
25import com.android.emergency.PreferenceKeys;
26import com.android.emergency.R;
27import com.android.emergency.ReloadablePreferenceInterface;
28import com.android.emergency.preferences.AutoCompleteEditTextPreference;
29import com.android.emergency.util.PreferenceUtils;
30import com.android.internal.logging.MetricsLogger;
31import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
32import com.android.settingslib.CustomEditTextPreference;
33
34/**
35 * Fragment that displays personal and medical information.
36 */
37public class EditMedicalInfoFragment extends PreferenceFragment {
38    @Override
39    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
40        setPreferencesFromResource(R.xml.edit_medical_info, rootKey);
41
42        for (int i = 0; i < PreferenceKeys.KEYS_EDIT_EMERGENCY_INFO.length; i++) {
43            final int index = i;
44            String preferenceKey = PreferenceKeys.KEYS_EDIT_EMERGENCY_INFO[i];
45
46            Preference preference = findPreference(preferenceKey);
47            preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
48                @Override
49                public boolean onPreferenceChange(Preference preference, Object value) {
50                    // Log settings changes.
51                    boolean notSet = TextUtils.isEmpty((String) value);
52                    // 0 is the default subtype. In DP1 and DP2 we had no explicit subtype.
53                    // Start at 30 to differentiate between before and after.
54                    MetricsLogger.action(
55                            preference.getContext(),
56                            MetricsEvent.ACTION_EDIT_EMERGENCY_INFO_FIELD,
57                            30 + index * 2 + (notSet ? 0 : 1));
58                    // Enable or disable settings suggestion, as appropriate.
59                    PreferenceUtils.updateSettingsSuggestionState(getActivity());
60                    // If the preference implements OnPreferenceChangeListener, notify it of the
61                    // change as well.
62                    if (Preference.OnPreferenceChangeListener.class.isInstance(preference)) {
63                        return ((Preference.OnPreferenceChangeListener) preference)
64                                .onPreferenceChange(preference, value);
65                    }
66                    return true;
67                }
68            });
69        }
70    }
71
72    @Override
73    public void onResume() {
74        super.onResume();
75        reloadFromPreference();
76    }
77
78    @Override
79    public void onDisplayPreferenceDialog(Preference preference) {
80        DialogFragment fragment = null;
81        if (preference instanceof CustomEditTextPreference) {
82            fragment = CustomEditTextPreference.CustomPreferenceDialogFragment
83                    .newInstance(preference.getKey());
84        } else if (preference instanceof AutoCompleteEditTextPreference) {
85            fragment = AutoCompleteEditTextPreference.AutoCompleteEditTextPreferenceDialogFragment
86                    .newInstance(preference.getKey());
87        }
88        if (fragment != null) {
89            fragment.setTargetFragment(this, 0);
90            fragment.show(getFragmentManager(), "dialog_preference");
91        } else {
92            super.onDisplayPreferenceDialog(preference);
93        }
94    }
95
96    /** Reloads all the preferences by reading the value from the shared preferences. */
97    public void reloadFromPreference() {
98        for (String preferenceKey : PreferenceKeys.KEYS_EDIT_EMERGENCY_INFO) {
99            ReloadablePreferenceInterface preference = (ReloadablePreferenceInterface)
100                    findPreference(preferenceKey);
101            if (preference != null) {
102                preference.reloadFromPreference();
103            }
104        }
105    }
106
107    public static Fragment newInstance() {
108        return new EditMedicalInfoFragment();
109    }
110}
111