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 17 package com.android.deskclock.data; 18 19 import android.content.Context; 20 import android.content.SharedPreferences; 21 import android.net.Uri; 22 23 import com.android.deskclock.R; 24 import com.android.deskclock.Utils; 25 import com.android.deskclock.data.DataModel.AlarmVolumeButtonBehavior; 26 import com.android.deskclock.data.DataModel.CitySort; 27 import com.android.deskclock.data.DataModel.ClockStyle; 28 29 import java.util.TimeZone; 30 31 /** 32 * All settings data is accessed via this model. 33 */ 34 final 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 SettingsModel(Context context, SharedPreferences prefs, TimeModel timeModel)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 getGlobalIntentId()55 int getGlobalIntentId() { 56 return SettingsDAO.getGlobalIntentId(mPrefs); 57 } 58 updateGlobalIntentId()59 void updateGlobalIntentId() { 60 SettingsDAO.updateGlobalIntentId(mPrefs); 61 } 62 getCitySort()63 CitySort getCitySort() { 64 return SettingsDAO.getCitySort(mPrefs); 65 } 66 toggleCitySort()67 void toggleCitySort() { 68 SettingsDAO.toggleCitySort(mPrefs); 69 } 70 getHomeTimeZone()71 TimeZone getHomeTimeZone() { 72 return SettingsDAO.getHomeTimeZone(mContext, mPrefs, TimeZone.getDefault()); 73 } 74 getClockStyle()75 ClockStyle getClockStyle() { 76 return SettingsDAO.getClockStyle(mContext, mPrefs); 77 } 78 getDisplayClockSeconds()79 boolean getDisplayClockSeconds() { 80 return SettingsDAO.getDisplayClockSeconds(mPrefs); 81 } 82 setDisplayClockSeconds(boolean shouldDisplaySeconds)83 void setDisplayClockSeconds(boolean shouldDisplaySeconds) { 84 SettingsDAO.setDisplayClockSeconds(mPrefs, shouldDisplaySeconds); 85 } 86 getScreensaverClockStyle()87 ClockStyle getScreensaverClockStyle() { 88 return SettingsDAO.getScreensaverClockStyle(mContext, mPrefs); 89 } 90 getScreensaverNightModeOn()91 boolean getScreensaverNightModeOn() { 92 return SettingsDAO.getScreensaverNightModeOn(mPrefs); 93 } 94 getShowHomeClock()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 getDefaultTimerRingtoneUri()108 Uri getDefaultTimerRingtoneUri() { 109 if (mDefaultTimerRingtoneUri == null) { 110 mDefaultTimerRingtoneUri = Utils.getResourceUri(mContext, R.raw.timer_expire); 111 } 112 113 return mDefaultTimerRingtoneUri; 114 } 115 setTimerRingtoneUri(Uri uri)116 void setTimerRingtoneUri(Uri uri) { 117 SettingsDAO.setTimerRingtoneUri(mPrefs, uri); 118 } 119 getTimerRingtoneUri()120 Uri getTimerRingtoneUri() { 121 return SettingsDAO.getTimerRingtoneUri(mPrefs, getDefaultTimerRingtoneUri()); 122 } 123 getAlarmVolumeButtonBehavior()124 AlarmVolumeButtonBehavior getAlarmVolumeButtonBehavior() { 125 return SettingsDAO.getAlarmVolumeButtonBehavior(mPrefs); 126 } 127 getAlarmTimeout()128 int getAlarmTimeout() { 129 return SettingsDAO.getAlarmTimeout(mPrefs); 130 } 131 getSnoozeLength()132 int getSnoozeLength() { 133 return SettingsDAO.getSnoozeLength(mPrefs); 134 } 135 getDefaultAlarmRingtoneUri()136 Uri getDefaultAlarmRingtoneUri() { 137 return SettingsDAO.getDefaultAlarmRingtoneUri(mPrefs); 138 } 139 setDefaultAlarmRingtoneUri(Uri uri)140 void setDefaultAlarmRingtoneUri(Uri uri) { 141 SettingsDAO.setDefaultAlarmRingtoneUri(mPrefs, uri); 142 } 143 getAlarmCrescendoDuration()144 long getAlarmCrescendoDuration() { 145 return SettingsDAO.getAlarmCrescendoDuration(mPrefs); 146 } 147 getTimerCrescendoDuration()148 long getTimerCrescendoDuration() { 149 return SettingsDAO.getTimerCrescendoDuration(mPrefs); 150 } 151 getWeekdayOrder()152 Weekdays.Order getWeekdayOrder() { 153 return SettingsDAO.getWeekdayOrder(mPrefs); 154 } 155 isRestoreBackupFinished()156 boolean isRestoreBackupFinished() { 157 return SettingsDAO.isRestoreBackupFinished(mPrefs); 158 } 159 setRestoreBackupFinished(boolean finished)160 void setRestoreBackupFinished(boolean finished) { 161 SettingsDAO.setRestoreBackupFinished(mPrefs, finished); 162 } 163 getTimerVibrate()164 boolean getTimerVibrate() { 165 return SettingsDAO.getTimerVibrate(mPrefs); 166 } 167 setTimerVibrate(boolean enabled)168 void setTimerVibrate(boolean enabled) { 169 SettingsDAO.setTimerVibrate(mPrefs, enabled); 170 } 171 getTimeZones()172 TimeZones getTimeZones() { 173 return SettingsDAO.getTimeZones(mContext, mTimeModel.currentTimeMillis()); 174 } 175 }