Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8fde4f24 authored by Sean Stout's avatar Sean Stout
Browse files

Use ListPreference for Gradually increase volume and snooze.

Bug: 26442008
Test: Manually make sure preferences work
Change-Id: I2748e502fdc665d797ab1d9c4f47dd99904cbc5e
parent bbaaf99d
Loading
Loading
Loading
Loading
+105 −0
Original line number Diff line number Diff line
@@ -277,6 +277,111 @@
        <item>-1</item> <!-- Off -->
    </string-array>

    <!-- Entries listed in the ListPreference when invoking gradually increase
     volume preferences. -->
    <string-array name="crescendo_entries">
        <item>Off</item>
        <item>5 seconds</item>
        <item>10 seconds</item>
        <item>15 seconds</item>
        <item>20 seconds</item>
        <item>25 seconds</item>
        <item>30 seconds</item>
        <item>35 seconds</item>
        <item>40 seconds</item>
        <item>45 seconds</item>
        <item>50 seconds</item>
        <item>55 seconds</item>
        <item>60 seconds</item>
    </string-array>

    <!-- Values that are retrieved from the ListPreference. These must match
         the crescendo_entries above. -->
    <string-array name="crescendo_values" translatable="false">
        <item>0</item>
        <item>5</item>
        <item>10</item>
        <item>15</item>
        <item>20</item>
        <item>25</item>
        <item>30</item>
        <item>35</item>
        <item>40</item>
        <item>45</item>
        <item>50</item>
        <item>55</item>
        <item>60</item>
    </string-array>

    <!-- Entries listed in the ListPreference when invoking the snooze duration preference -->
    <string-array name="snooze_duration_entries">
        <item>1 minute</item>
        <item>2 minutes</item>
        <item>3 minutes</item>
        <item>4 minutes</item>
        <item>5 minutes</item>
        <item>6 minutes</item>
        <item>7 minutes</item>
        <item>8 minutes</item>
        <item>9 minutes</item>
        <item>10 minutes</item>
        <item>11 minutes</item>
        <item>12 minutes</item>
        <item>13 minutes</item>
        <item>14 minutes</item>
        <item>15 minutes</item>
        <item>16 minutes</item>
        <item>17 minutes</item>
        <item>18 minutes</item>
        <item>19 minutes</item>
        <item>20 minutes</item>
        <item>21 minutes</item>
        <item>22 minutes</item>
        <item>23 minutes</item>
        <item>24 minutes</item>
        <item>25 minutes</item>
        <item>26 minutes</item>
        <item>27 minutes</item>
        <item>28 minutes</item>
        <item>29 minutes</item>
        <item>30 minutes</item>
    </string-array>

    <!-- Values that are retrieved from the ListPreference. These must match
         the snooze_duration_entries above. -->
    <string-array name="snooze_duration_values" translatable="false">
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
        <item>6</item>
        <item>7</item>
        <item>8</item>
        <item>9</item>
        <item>10</item>
        <item>11</item>
        <item>12</item>
        <item>13</item>
        <item>14</item>
        <item>15</item>
        <item>16</item>
        <item>17</item>
        <item>18</item>
        <item>19</item>
        <item>20</item>
        <item>21</item>
        <item>22</item>
        <item>23</item>
        <item>24</item>
        <item>25</item>
        <item>26</item>
        <item>27</item>
        <item>28</item>
        <item>29</item>
        <item>30</item>
    </string-array>

    <!-- Week start day preference title. -->
    <string name="week_start_title">Start week on</string>

+41 −31
Original line number Diff line number Diff line
@@ -18,24 +18,24 @@
    <PreferenceCategory
        android:title="@string/clock_settings">
        <ListPreference
            android:key="clock_style"
            android:title="@string/clock_style"
            android:defaultValue="@string/default_clock_style"
            android:dialogTitle="@string/clock_style"
            android:entries="@array/clock_style_entries"
            android:entryValues="@array/clock_style_values"
            android:defaultValue="@string/default_clock_style"
            android:dialogTitle="@string/clock_style" />
            android:key="clock_style"
            android:title="@string/clock_style" />

        <SwitchPreferenceCompat
            android:defaultValue="true"
            android:key="automatic_home_clock"
            android:title="@string/automatic_home_clock"
            android:summary="@string/automatic_home_clock_summary"
            android:defaultValue="true" />
            android:title="@string/automatic_home_clock" />

        <ListPreference
            android:key="home_time_zone"
            android:dialogTitle="@string/home_time_zone_title"
            android:entries="@array/timezone_labels"
            android:entryValues="@array/timezone_values"
            android:dialogTitle="@string/home_time_zone_title"
            android:key="home_time_zone"
            android:title="@string/home_time_zone" />

        <Preference
@@ -46,42 +46,48 @@
    <PreferenceCategory
        android:title="@string/alarm_settings">
        <ListPreference
            android:key="auto_silence"
            android:title="@string/auto_silence_title"
            android:defaultValue="10"
            android:dialogTitle="@string/auto_silence_title"
            android:entries="@array/auto_silence_entries"
            android:entryValues="@array/auto_silence_values"
            android:defaultValue="10"
            android:dialogTitle="@string/auto_silence_title" />
            android:key="auto_silence"
            android:title="@string/auto_silence_title" />

        <com.android.deskclock.settings.SnoozeLengthDialogPreference
        <ListPreference
            android:defaultValue="10"
            android:dialogTitle="@string/snooze_duration_title"
            android:entries="@array/snooze_duration_entries"
            android:entryValues="@array/snooze_duration_values"
            android:key="snooze_duration"
            android:title="@string/snooze_duration_title"
            android:dialogLayout="@layout/snooze_length_picker" />
            android:title="@string/snooze_duration_title" />

        <com.android.deskclock.settings.AlarmVolumePreference
            android:key="volume_setting"
            android:title="@string/alarm_volume_title"
            android:layout="@layout/alarm_volume_preference" />
            android:layout="@layout/alarm_volume_preference"
            android:title="@string/alarm_volume_title" />

        <com.android.deskclock.settings.CrescendoLengthDialogPreference
        <ListPreference
            android:defaultValue="0"
            android:dialogTitle="@string/crescendo_duration_title"
            android:entries="@array/crescendo_entries"
            android:entryValues="@array/crescendo_values"
            android:key="alarm_crescendo_duration"
            android:title="@string/crescendo_duration_title"
            android:dialogLayout="@layout/crescendo_length_picker" />
            android:title="@string/crescendo_duration_title" />

        <ListPreference
            android:key="volume_button_setting"
            android:title="@string/volume_button_setting_title"
            android:defaultValue="0"
            android:dialogTitle="@string/volume_button_setting_title"
            android:entries="@array/volume_button_setting_entries"
            android:entryValues="@array/volume_button_setting_values"
            android:defaultValue="0" />
            android:key="volume_button_setting"
            android:title="@string/volume_button_setting_title" />

        <ListPreference
            android:key="week_start"
            android:title="@string/week_start_title"
            android:dialogTitle="@string/week_start_title"
            android:entries="@array/week_start_entries"
            android:entryValues="@array/week_start_values" />
            android:entryValues="@array/week_start_values"
            android:key="week_start"
            android:title="@string/week_start_title" />
    </PreferenceCategory>

    <PreferenceCategory
@@ -90,15 +96,19 @@
            android:key="timer_ringtone"
            android:title="@string/timer_ringtone_title" />

        <com.android.deskclock.settings.CrescendoLengthDialogPreference
        <ListPreference
            android:defaultValue="0"
            android:dialogTitle="@string/crescendo_duration_title"
            android:entries="@array/crescendo_entries"
            android:entryValues="@array/crescendo_values"
            android:key="timer_crescendo_duration"
            android:title="@string/crescendo_duration_title"
            android:dialogLayout="@layout/crescendo_length_picker" />
            android:title="@string/crescendo_duration_title" />


        <SwitchPreferenceCompat
            android:defaultValue="false"
            android:key="timer_vibrate"
            android:title="@string/timer_vibrate_title"
            android:defaultValue="false" />
            android:title="@string/timer_vibrate_title" />
    </PreferenceCategory>

</PreferenceScreen>
+0 −105
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 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.
 */

package com.android.deskclock.settings;

import android.os.Bundle;
import android.support.v14.preference.PreferenceDialogFragment;
import android.support.v7.preference.Preference;
import android.view.View;
import android.widget.NumberPicker;
import android.widget.TextView;

import com.android.deskclock.NumberPickerCompat;
import com.android.deskclock.R;
import com.android.deskclock.uidata.UiDataModel;

public class CrescendoLengthDialogFragment extends PreferenceDialogFragment {

    private static final int CRESCENDO_TIME_STEP = 5;

    private NumberPickerCompat mNumberPickerView;

    public static PreferenceDialogFragment newInstance(Preference preference) {
        final PreferenceDialogFragment fragment = new CrescendoLengthDialogFragment();

        final Bundle bundle = new Bundle();
        bundle.putString(ARG_KEY, preference.getKey());
        fragment.setArguments(bundle);

        return fragment;
    }

    @Override
    protected void onBindDialogView(View view) {
        final CrescendoLengthDialogPreference preference =
                (CrescendoLengthDialogPreference) getPreference();
        final int crescendoSeconds = preference.getPersistedCrescendoLength();

        final TextView unitView = (TextView) view.findViewById(R.id.title);
        unitView.setText(R.string.crescendo_picker_label);
        updateUnits(unitView, crescendoSeconds);

        final String[] displayedValues = new String[13];
        displayedValues[0] = getString(R.string.no_crescendo_duration);
        for (int i = 1; i < displayedValues.length; i++) {
            final int length = i * CRESCENDO_TIME_STEP;
            displayedValues[i] = UiDataModel.getUiDataModel().getFormattedNumber(length);
        }

        mNumberPickerView = (NumberPickerCompat) view.findViewById(R.id.seconds_picker);
        mNumberPickerView.setDisplayedValues(displayedValues);
        mNumberPickerView.setMinValue(0);
        mNumberPickerView.setMaxValue(displayedValues.length - 1);
        mNumberPickerView.setValue(crescendoSeconds / CRESCENDO_TIME_STEP);

        mNumberPickerView.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
            @Override
            public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
                updateUnits(unitView, newVal);
            }
        });
        mNumberPickerView.setOnAnnounceValueChangedListener(
                new NumberPickerCompat.OnAnnounceValueChangedListener() {
            @Override
            public void onAnnounceValueChanged(NumberPicker picker, int value,
                    String displayedValue) {
                final String announceString;
                if (value == 0) {
                    announceString = getString(R.string.no_crescendo_duration);
                } else {
                    announceString = getString(R.string.crescendo_duration, displayedValue);
                }
                picker.announceForAccessibility(announceString);
            }
        });
    }

    @Override
    public void onDialogClosed(boolean positiveResult) {
        if (positiveResult) {
            final CrescendoLengthDialogPreference preference =
                    (CrescendoLengthDialogPreference) getPreference();
            preference.persistCrescendoLength(mNumberPickerView.getValue() * CRESCENDO_TIME_STEP);
            preference.updateSummary();
        }
    }

    private void updateUnits(TextView unitView, int crescendoSeconds) {
        final int visibility = crescendoSeconds == 0 ? View.INVISIBLE : View.VISIBLE;
        unitView.setVisibility(visibility);
    }
}
+0 −51
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 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.
 */

package com.android.deskclock.settings;

import android.content.Context;
import android.support.v7.preference.DialogPreference;
import android.util.AttributeSet;

import com.android.deskclock.R;
import com.android.deskclock.uidata.UiDataModel;

public class CrescendoLengthDialogPreference extends DialogPreference {

    private static final String DEFAULT_CRESCENDO_TIME = "0";

    public CrescendoLengthDialogPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public int getPersistedCrescendoLength() {
        return Integer.parseInt(getPersistedString(DEFAULT_CRESCENDO_TIME));
    }

    public void persistCrescendoLength(int crescendoSeconds) {
        persistString(Integer.toString(crescendoSeconds));
    }

    public void updateSummary() {
        final int crescendoSeconds = getPersistedCrescendoLength();
        if (crescendoSeconds == 0) {
            setSummary(getContext().getString(R.string.no_crescendo_duration));
        } else {
            final String length = UiDataModel.getUiDataModel().getFormattedNumber(crescendoSeconds);
            setSummary(getContext().getString(R.string.crescendo_duration, length));
        }
    }
}
+21 −47
Original line number Diff line number Diff line
@@ -166,54 +166,28 @@ public final class SettingsActivity extends BaseActivity {
        }

        @Override
        public void onDisplayPreferenceDialog(Preference preference) {
            final String key = preference.getKey();
            switch (key) {
                case KEY_ALARM_SNOOZE:
                    showDialog(SnoozeLengthDialogFragment.newInstance(preference));
                    break;
        public boolean onPreferenceChange(Preference pref, Object newValue) {
            switch (pref.getKey()) {
                case KEY_ALARM_CRESCENDO:
                case KEY_VOLUME_BUTTONS:
                case KEY_CLOCK_STYLE:
                case KEY_HOME_TZ:
                case KEY_WEEK_START:
                case KEY_ALARM_SNOOZE:
                case KEY_TIMER_CRESCENDO:
                    showDialog(CrescendoLengthDialogFragment.newInstance(preference));
                    final ListPreference preference = (ListPreference) pref;
                    final int index = preference.findIndexOfValue((String) newValue);
                    preference.setSummary(preference.getEntries()[index]);
                    break;
                default:
                    super.onDisplayPreferenceDialog(preference);
            }
        }

        @Override
        public boolean onPreferenceChange(Preference pref, Object newValue) {
            final int idx;
            switch (pref.getKey()) {
                case KEY_AUTO_SILENCE:
                    String delay = (String) newValue;
                    final String delay = (String) newValue;
                    updateAutoSnoozeSummary((ListPreference) pref, delay);
                    break;
                case KEY_CLOCK_STYLE:
                    final ListPreference clockStylePref = (ListPreference) pref;
                    idx = clockStylePref.findIndexOfValue((String) newValue);
                    clockStylePref.setSummary(clockStylePref.getEntries()[idx]);
                    break;
                case KEY_HOME_TZ:
                    final ListPreference homeTimezonePref = (ListPreference) pref;
                    idx = homeTimezonePref.findIndexOfValue((String) newValue);
                    homeTimezonePref.setSummary(homeTimezonePref.getEntries()[idx]);
                    break;
                case KEY_AUTO_HOME_CLOCK:
                    final boolean autoHomeClockEnabled = ((TwoStatePreference) pref).isChecked();
                    final Preference homeTimeZonePref = findPreference(KEY_HOME_TZ);
                    homeTimeZonePref.setEnabled(!autoHomeClockEnabled);
                    break;
                case KEY_VOLUME_BUTTONS:
                    final ListPreference volumeButtonsPref = (ListPreference) pref;
                    final int index = volumeButtonsPref.findIndexOfValue((String) newValue);
                    volumeButtonsPref.setSummary(volumeButtonsPref.getEntries()[index]);
                    break;
                case KEY_WEEK_START:
                    final ListPreference weekStartPref = (ListPreference) pref;
                    idx = weekStartPref.findIndexOfValue((String) newValue);
                    weekStartPref.setSummary(weekStartPref.getEntries()[idx]);
                    break;
                case KEY_TIMER_VIBRATE:
                    final TwoStatePreference timerVibratePref = (TwoStatePreference) pref;
                    DataModel.getDataModel().setTimerVibrate(timerVibratePref.isChecked());
@@ -327,17 +301,12 @@ public final class SettingsActivity extends BaseActivity {

            final ListPreference homeTimezonePref = (ListPreference) findPreference(KEY_HOME_TZ);
            homeTimezonePref.setEnabled(autoHomeClockEnabled);
            homeTimezonePref.setSummary(homeTimezonePref.getEntry());
            homeTimezonePref.setOnPreferenceChangeListener(this);
            refreshListPreference(homeTimezonePref);

            final ListPreference volumeButtonsPref =
                    (ListPreference) findPreference(KEY_VOLUME_BUTTONS);
            volumeButtonsPref.setSummary(volumeButtonsPref.getEntry());
            volumeButtonsPref.setOnPreferenceChangeListener(this);

            ((SnoozeLengthDialogPreference) findPreference(KEY_ALARM_SNOOZE)).updateSummary();
            ((CrescendoLengthDialogPreference) findPreference(KEY_ALARM_CRESCENDO)).updateSummary();
            ((CrescendoLengthDialogPreference) findPreference(KEY_TIMER_CRESCENDO)).updateSummary();
            refreshListPreference((ListPreference) findPreference(KEY_ALARM_CRESCENDO));
            refreshListPreference((ListPreference) findPreference(KEY_TIMER_CRESCENDO));
            refreshListPreference((ListPreference) findPreference(KEY_ALARM_SNOOZE));
            refreshListPreference((ListPreference) findPreference(KEY_VOLUME_BUTTONS));

            final Preference dateAndTimeSetting = findPreference(KEY_DATE_TIME);
            dateAndTimeSetting.setOnPreferenceClickListener(this);
@@ -357,6 +326,11 @@ public final class SettingsActivity extends BaseActivity {
            timerRingtonePref.setSummary(DataModel.getDataModel().getTimerRingtoneTitle());
        }

        private void refreshListPreference(ListPreference preference) {
            preference.setSummary(preference.getEntry());
            preference.setOnPreferenceChangeListener(this);
        }

        private void updateAutoSnoozeSummary(ListPreference listPref, String delay) {
            int i = Integer.parseInt(delay);
            if (i == -1) {
Loading