ZenModeVoiceActivity.java revision c55ea15bc0d9297417a4f1d886b9c188b6bf19b5
1c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James/* 2c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * Copyright (C) 2015 The Android Open Source Project 3c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * 4c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * Licensed under the Apache License, Version 2.0 (the "License"); 5c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * you may not use this file except in compliance with the License. 6c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * You may obtain a copy of the License at 7c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * 8c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * http://www.apache.org/licenses/LICENSE-2.0 9c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * 10c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * Unless required by applicable law or agreed to in writing, software 11c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * distributed under the License is distributed on an "AS IS" BASIS, 12c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * See the License for the specific language governing permissions and 14c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * limitations under the License. 15c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James */ 16c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 17c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamespackage com.android.settings.notification; 18c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 19c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport static android.provider.Settings.EXTRA_DO_NOT_DISTURB_MODE_MINUTES; 20c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport static android.provider.Settings.EXTRA_DO_NOT_DISTURB_MODE_ENABLED; 21c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 22c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport com.android.settings.R; 23c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport com.android.settings.utils.VoiceSelectionAdapter; 24c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport com.android.settings.utils.VoiceSelection; 25c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport com.android.settings.utils.VoiceSelectionFragment; 26c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport com.android.settings.utils.VoiceSettingsActivity; 27c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 28c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.app.Fragment; 29c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.app.NotificationManager; 30c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.content.Context; 31c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.content.Intent; 32c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.content.res.Resources; 33c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.os.UserHandle; 34c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.provider.Settings.Global; 35c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.service.notification.Condition; 36c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.service.notification.ZenModeConfig; 37c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport android.text.format.DateFormat; 38c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 39c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport java.util.ArrayList; 40c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport java.util.List; 41c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamesimport java.util.Locale; 42c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 43c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James/** 44c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * Activity for modifying the Zen mode (Do not disturb) by voice 45c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * using the Voice Interaction API. 46c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James */ 47c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby Jamespublic class ZenModeVoiceActivity extends VoiceSettingsActivity { 48c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private static final String TAG = "ZenModeVoiceActivity"; 49c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private static final int MINUTES_MS = 60 * 1000; 50c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 51c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James @Override 52c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James protected boolean onVoiceSettingInteraction(Intent intent) { 53c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James setContentView(R.layout.voice_interaction); 54c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James pickNotificationMode(intent); 55c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James return false; 56c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 57c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 58c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James /** 59c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * Start a voice interaction to ask what kind of interruptions should 60c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * be permitted. The intent can optionally include extra information about the type 61c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * of interruptions desired or how long interruptions should be limited to that are 62c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * used as hints. 63c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James */ 64c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private void pickNotificationMode(final Intent intent) { 65c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James boolean enabled = intent.getBooleanExtra(EXTRA_DO_NOT_DISTURB_MODE_ENABLED, false); 66c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James boolean specified = intent.hasExtra(EXTRA_DO_NOT_DISTURB_MODE_ENABLED); 67c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 68c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James List<VoiceSelection> states = new ArrayList<VoiceSelection>(); 69c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James if (!specified || enabled) { 70c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James states.add(new ModeSelection(this, Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, 71c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James R.string.zen_mode_option_important_interruptions, 72c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James R.string.zen_mode_option_important_voice_synonyms)); 73c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James states.add(new ModeSelection(this, Global.ZEN_MODE_ALARMS, 74c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James R.string.zen_mode_option_alarms, 75c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James R.string.zen_mode_option_alarms_voice_synonyms)); 76c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James states.add(new ModeSelection(this, Global.ZEN_MODE_NO_INTERRUPTIONS, 77c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James R.string.zen_mode_option_no_interruptions, 78c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James R.string.zen_mode_option_no_interruptions_voice_synonyms)); 79c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 80c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James if (!specified || !enabled) { 81c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James states.add(new ModeSelection(this, Global.ZEN_MODE_OFF, 82c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James R.string.zen_mode_option_off, 83c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James R.string.zen_mode_option_off_voice_synonyms)); 84c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 85c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James VoiceSelectionFragment fragment = new VoiceSelectionFragment(); 86c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James fragment.setArguments(VoiceSelectionFragment.createArguments( 87c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James getString(R.string.zen_mode_interruptions_voice_prompt))); 88c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James fragment.setListAdapter( 89c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James new VoiceSelectionAdapter(this, R.layout.voice_item_row, states)); 90c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James fragment.setOnItemSelectedHandler(new VoiceSelection.OnItemSelectedListener() { 91c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James @Override 92c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James public void onItemSelected(int index, VoiceSelection selection) { 93c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James int mode = ((ModeSelection) selection).mMode; 94c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James ConditionSelection conditionSelection = getConditionSelection( 95c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James intent.getIntExtra(EXTRA_DO_NOT_DISTURB_MODE_MINUTES, 0)); 96c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James if (mode != Global.ZEN_MODE_OFF) { 97c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James if (conditionSelection == null) { 98c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James pickDuration(selection.getLabel(), mode); 99c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James return; 100c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 101c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 102c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James setZenModeConfig(mode, conditionSelection.mCondition); 103c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James notifySuccess(getChangeSummary(mode, conditionSelection)); 104c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James finish(); 105c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 106c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James }); 107c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James showFragment(fragment, "pick_mode_fragment"); 108c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 109c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 110c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James /** 111c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * Start a voice interaction to ask for the zen mode duration. 112c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James */ 113c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private void pickDuration(CharSequence label, final int mode) { 114c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James setTitle(label.toString()); 115c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James List<VoiceSelection> states = new ArrayList<VoiceSelection>(); 116c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James states.add(new ConditionSelection(null, -1, 117c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James getString(R.string.zen_mode_duration_indefinte_voice_label), 118c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James getString(R.string.zen_mode_duration_indefinite_voice_synonyms))); 119c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James for (int i = ZenModeConfig.MINUTE_BUCKETS.length - 1; i >= 0; --i) { 120c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James states.add(getConditionSelection(ZenModeConfig.MINUTE_BUCKETS[i])); 121c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 122c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 123c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James VoiceSelectionFragment fragment = new VoiceSelectionFragment(); 124c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James fragment.setArguments(VoiceSelectionFragment.createArguments( 125c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James getString(R.string.zen_mode_duration_voice_prompt))); 126c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James fragment.setListAdapter( 127c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James new VoiceSelectionAdapter(this, R.layout.voice_item_row, states)); 128c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James fragment.setOnItemSelectedHandler(new VoiceSelection.OnItemSelectedListener() { 129c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James @Override 130c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James public void onItemSelected(int index, VoiceSelection item) { 131c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James ConditionSelection selection = ((ConditionSelection) item); 132c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James setZenModeConfig(mode, selection.mCondition); 133c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James notifySuccess(getChangeSummary(mode, selection)); 134c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James finish(); 135c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 136c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James }); 137c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James showFragment(fragment, "pick_duration_fragment"); 138c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 139c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 140c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private void showFragment(Fragment fragment, String tag) { 141c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James getFragmentManager() 142c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James .beginTransaction() 143c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James .replace(R.id.fragment_root, fragment, tag) 144c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James .commit(); 145c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 146c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 147c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private void setZenModeConfig(int mode, Condition condition) { 148c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James if (condition != null) { 149c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James NotificationManager.from(this).setZenMode(mode, condition.id, TAG); 150c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } else { 151c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James NotificationManager.from(this).setZenMode(mode, null, TAG); 152c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 153c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 154c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 155c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James /** 156c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James * Produce a summary of the Zen mode change to be read aloud as TTS. 157c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James */ 158c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private CharSequence getChangeSummary(int mode, ConditionSelection duration) { 159c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James int indefinite = -1; 160c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James int byMinute = -1; 161c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James int byHour = -1; 162c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 163c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James switch (mode) { 164c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James case Global.ZEN_MODE_ALARMS: 165c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James indefinite = R.string.zen_mode_summary_alarams_only_indefinite; 166c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James byMinute = R.plurals.zen_mode_summary_alarms_only_by_minute; 167c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James byHour = R.plurals.zen_mode_summary_alarms_only_by_hour; 168c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James break; 169c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James case Global.ZEN_MODE_NO_INTERRUPTIONS: 170c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James indefinite = R.string.zen_mode_summary_no_interruptions_indefinite; 171c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James byMinute = R.plurals.zen_mode_summary_no_interruptions_by_minute; 172c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James byHour = R.plurals.zen_mode_summary_no_interruptions_by_hour; 173c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James break; 174c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS: 175c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James indefinite = R.string.zen_mode_summary_priority_indefinitely; 176c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James byMinute = R.plurals.zen_mode_summary_priority_by_minute; 177c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James byHour = R.plurals.zen_mode_summary_priority_by_hour; 178c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James break; 179c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James default: 180c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James case Global.ZEN_MODE_OFF: 181c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James indefinite = R.string.zen_mode_summary_always; 182c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James break; 183c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James }; 184c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 185c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James if (duration == null || duration.mCondition == null) { 186c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James return getString(indefinite); 187c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 188c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 189c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James long time = System.currentTimeMillis() + duration.mMinutes * MINUTES_MS; 190c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James String skeleton = DateFormat.is24HourFormat(this, UserHandle.myUserId()) ? "Hm" : "hma"; 191c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton); 192c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James CharSequence formattedTime = DateFormat.format(pattern, time); 193c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James Resources res = getResources(); 194c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 195c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James if (duration.mMinutes < 60) { 196c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James return res.getQuantityString(byMinute, 197c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James duration.mMinutes, duration.mMinutes, formattedTime); 198c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } else { 199c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James int hours = duration.mMinutes / 60; 200c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James return res.getQuantityString(byHour, hours, hours, formattedTime); 201c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 202c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 203c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 204c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private ConditionSelection getConditionSelection(int minutes) { 205c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James Condition condition = ZenModeConfig.toTimeCondition(this, minutes, UserHandle.myUserId()); 206c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James Resources res = getResources(); 207c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James if (minutes <= 0) { 208c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James return null; 209c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } else if (minutes < 60) { 210c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James String label = res.getQuantityString(R.plurals.zen_mode_duration_minutes_voice_label, 211c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James minutes, minutes); 212c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James return new ConditionSelection(condition, minutes, label, Integer.toString(minutes)); 213c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } else { 214c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James int hours = minutes / 60; 215c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James String label = res.getQuantityString(R.plurals.zen_mode_duration_hours_voice_label, 216c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James hours, hours); 217c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James return new ConditionSelection(condition, minutes, label, Integer.toString(hours)); 218c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 219c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 220c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 221c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private static class ConditionSelection extends VoiceSelection { 222c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James Condition mCondition; 223c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James int mMinutes; 224c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 225c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James public ConditionSelection(Condition condition, int minutes, CharSequence label, 226c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James CharSequence synonyms) { 227c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James super(label, synonyms); 228c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James mMinutes = minutes; 229c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James mCondition = condition; 230c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 231c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 232c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 233c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James private static class ModeSelection extends VoiceSelection { 234c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James int mMode; 235c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James 236c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James public ModeSelection(Context context, int mode, int label, int synonyms) { 237c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James super(context.getString(label), context.getString(synonyms)); 238c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James mMode = mode; 239c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 240c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James } 241c55ea15bc0d9297417a4f1d886b9c188b6bf19b5Barnaby James} 242