1/* 2 * Copyright (C) 2015 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 */ 16 17package com.android.deskclock.data; 18 19import android.content.Context; 20import android.content.SharedPreferences; 21import android.net.Uri; 22 23import com.android.deskclock.R; 24import com.android.deskclock.Utils; 25import com.android.deskclock.data.DataModel.AlarmVolumeButtonBehavior; 26import com.android.deskclock.data.DataModel.CitySort; 27import com.android.deskclock.data.DataModel.ClockStyle; 28 29import java.util.TimeZone; 30 31/** 32 * All settings data is accessed via this model. 33 */ 34final class SettingsModel { 35 36 private final Context mContext; 37 38 private final SharedPreferences mPrefs; 39 40 /** The model from which time data are fetched. */ 41 private final TimeModel mTimeModel; 42 43 /** The uri of the default ringtone to use for timers until the user explicitly chooses one. */ 44 private Uri mDefaultTimerRingtoneUri; 45 46 SettingsModel(Context context, SharedPreferences prefs, TimeModel timeModel) { 47 mContext = context; 48 mPrefs = prefs; 49 mTimeModel = timeModel; 50 51 // Set the user's default display seconds preference if one has not yet been chosen. 52 SettingsDAO.setDefaultDisplayClockSeconds(mContext, prefs); 53 } 54 55 int getGlobalIntentId() { 56 return SettingsDAO.getGlobalIntentId(mPrefs); 57 } 58 59 void updateGlobalIntentId() { 60 SettingsDAO.updateGlobalIntentId(mPrefs); 61 } 62 63 CitySort getCitySort() { 64 return SettingsDAO.getCitySort(mPrefs); 65 } 66 67 void toggleCitySort() { 68 SettingsDAO.toggleCitySort(mPrefs); 69 } 70 71 TimeZone getHomeTimeZone() { 72 return SettingsDAO.getHomeTimeZone(mContext, mPrefs, TimeZone.getDefault()); 73 } 74 75 ClockStyle getClockStyle() { 76 return SettingsDAO.getClockStyle(mContext, mPrefs); 77 } 78 79 boolean getDisplayClockSeconds() { 80 return SettingsDAO.getDisplayClockSeconds(mPrefs); 81 } 82 83 void setDisplayClockSeconds(boolean shouldDisplaySeconds) { 84 SettingsDAO.setDisplayClockSeconds(mPrefs, shouldDisplaySeconds); 85 } 86 87 ClockStyle getScreensaverClockStyle() { 88 return SettingsDAO.getScreensaverClockStyle(mContext, mPrefs); 89 } 90 91 boolean getScreensaverNightModeOn() { 92 return SettingsDAO.getScreensaverNightModeOn(mPrefs); 93 } 94 95 boolean getShowHomeClock() { 96 if (!SettingsDAO.getAutoShowHomeClock(mPrefs)) { 97 return false; 98 } 99 100 // Show the home clock if the current time and home time differ. 101 // (By using UTC offset for this comparison the various DST rules are considered) 102 final TimeZone defaultTZ = TimeZone.getDefault(); 103 final TimeZone homeTimeZone = SettingsDAO.getHomeTimeZone(mContext, mPrefs, defaultTZ); 104 final long now = System.currentTimeMillis(); 105 return homeTimeZone.getOffset(now) != defaultTZ.getOffset(now); 106 } 107 108 Uri getDefaultTimerRingtoneUri() { 109 if (mDefaultTimerRingtoneUri == null) { 110 mDefaultTimerRingtoneUri = Utils.getResourceUri(mContext, R.raw.timer_expire); 111 } 112 113 return mDefaultTimerRingtoneUri; 114 } 115 116 void setTimerRingtoneUri(Uri uri) { 117 SettingsDAO.setTimerRingtoneUri(mPrefs, uri); 118 } 119 120 Uri getTimerRingtoneUri() { 121 return SettingsDAO.getTimerRingtoneUri(mPrefs, getDefaultTimerRingtoneUri()); 122 } 123 124 AlarmVolumeButtonBehavior getAlarmVolumeButtonBehavior() { 125 return SettingsDAO.getAlarmVolumeButtonBehavior(mPrefs); 126 } 127 128 int getAlarmTimeout() { 129 return SettingsDAO.getAlarmTimeout(mPrefs); 130 } 131 132 int getSnoozeLength() { 133 return SettingsDAO.getSnoozeLength(mPrefs); 134 } 135 136 Uri getDefaultAlarmRingtoneUri() { 137 return SettingsDAO.getDefaultAlarmRingtoneUri(mPrefs); 138 } 139 140 void setDefaultAlarmRingtoneUri(Uri uri) { 141 SettingsDAO.setDefaultAlarmRingtoneUri(mPrefs, uri); 142 } 143 144 long getAlarmCrescendoDuration() { 145 return SettingsDAO.getAlarmCrescendoDuration(mPrefs); 146 } 147 148 long getTimerCrescendoDuration() { 149 return SettingsDAO.getTimerCrescendoDuration(mPrefs); 150 } 151 152 Weekdays.Order getWeekdayOrder() { 153 return SettingsDAO.getWeekdayOrder(mPrefs); 154 } 155 156 boolean isRestoreBackupFinished() { 157 return SettingsDAO.isRestoreBackupFinished(mPrefs); 158 } 159 160 void setRestoreBackupFinished(boolean finished) { 161 SettingsDAO.setRestoreBackupFinished(mPrefs, finished); 162 } 163 164 boolean getTimerVibrate() { 165 return SettingsDAO.getTimerVibrate(mPrefs); 166 } 167 168 void setTimerVibrate(boolean enabled) { 169 SettingsDAO.setTimerVibrate(mPrefs, enabled); 170 } 171 172 TimeZones getTimeZones() { 173 return SettingsDAO.getTimeZones(mContext, mTimeModel.currentTimeMillis()); 174 } 175}