134142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux/* 234142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * Copyright (C) 2015 The Android Open Source Project 334142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * 434142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * Licensed under the Apache License, Version 2.0 (the "License"); 534142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * you may not use this file except in compliance with the License. 634142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * You may obtain a copy of the License at 734142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * 834142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * http://www.apache.org/licenses/LICENSE-2.0 934142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * 1034142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * Unless required by applicable law or agreed to in writing, software 1134142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * distributed under the License is distributed on an "AS IS" BASIS, 1234142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1334142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * See the License for the specific language governing permissions and 1434142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * limitations under the License. 1534142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux */ 1634142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 1734142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieuxpackage com.android.deskclock.data; 1834142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 1934142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieuximport android.content.Context; 20ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieuximport android.content.SharedPreferences; 21856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieuximport android.net.Uri; 2234142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 23856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieuximport com.android.deskclock.R; 24cdd3253d7395b4e405765ddd892cf1f7d1cb2f82James Lemieuximport com.android.deskclock.Utils; 250777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieuximport com.android.deskclock.data.DataModel.AlarmVolumeButtonBehavior; 2634142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieuximport com.android.deskclock.data.DataModel.CitySort; 2734142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieuximport com.android.deskclock.data.DataModel.ClockStyle; 2834142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 2934142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieuximport java.util.TimeZone; 3034142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 3134142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux/** 3234142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux * All settings data is accessed via this model. 3334142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux */ 3434142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieuxfinal class SettingsModel { 3534142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 3634142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux private final Context mContext; 3734142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 38ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux private final SharedPreferences mPrefs; 39ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux 4084b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux /** The model from which time data are fetched. */ 4184b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux private final TimeModel mTimeModel; 4284b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux 436a59a7b2c034557bc8bc7481544db5cd1105a891James Lemieux /** The uri of the default ringtone to use for timers until the user explicitly chooses one. */ 44856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux private Uri mDefaultTimerRingtoneUri; 45856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux 4684b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux SettingsModel(Context context, SharedPreferences prefs, TimeModel timeModel) { 4734142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux mContext = context; 48ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux mPrefs = prefs; 4984b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux mTimeModel = timeModel; 5084b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux 517b852b43db6d9e50814dd07366b025b3f9f9b758Christine Franks // Set the user's default display seconds preference if one has not yet been chosen. 52ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux SettingsDAO.setDefaultDisplayClockSeconds(mContext, prefs); 5334142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux } 5434142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 550777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux int getGlobalIntentId() { 560777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux return SettingsDAO.getGlobalIntentId(mPrefs); 570777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux } 580777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux 590777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux void updateGlobalIntentId() { 600777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux SettingsDAO.updateGlobalIntentId(mPrefs); 610777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux } 620777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux 6334142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux CitySort getCitySort() { 64ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux return SettingsDAO.getCitySort(mPrefs); 6534142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux } 6634142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 6734142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux void toggleCitySort() { 68ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux SettingsDAO.toggleCitySort(mPrefs); 6934142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux } 7034142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 7134142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux TimeZone getHomeTimeZone() { 72ef39939dd138628fb8d26a4842b0ab6ccb6725e8James Lemieux return SettingsDAO.getHomeTimeZone(mContext, mPrefs, TimeZone.getDefault()); 7334142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux } 7434142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 7534142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux ClockStyle getClockStyle() { 76ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux return SettingsDAO.getClockStyle(mContext, mPrefs); 7734142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux } 7834142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 797b852b43db6d9e50814dd07366b025b3f9f9b758Christine Franks boolean getDisplayClockSeconds() { 80ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux return SettingsDAO.getDisplayClockSeconds(mPrefs); 817b852b43db6d9e50814dd07366b025b3f9f9b758Christine Franks } 827b852b43db6d9e50814dd07366b025b3f9f9b758Christine Franks 837b852b43db6d9e50814dd07366b025b3f9f9b758Christine Franks void setDisplayClockSeconds(boolean shouldDisplaySeconds) { 84ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux SettingsDAO.setDisplayClockSeconds(mPrefs, shouldDisplaySeconds); 857b852b43db6d9e50814dd07366b025b3f9f9b758Christine Franks } 867b852b43db6d9e50814dd07366b025b3f9f9b758Christine Franks 8734142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux ClockStyle getScreensaverClockStyle() { 88ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux return SettingsDAO.getScreensaverClockStyle(mContext, mPrefs); 8934142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux } 9034142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 913af168c834d73487f8f614f0aaafbf6f9a850f0fJames Lemieux boolean getScreensaverNightModeOn() { 92ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux return SettingsDAO.getScreensaverNightModeOn(mPrefs); 933af168c834d73487f8f614f0aaafbf6f9a850f0fJames Lemieux } 943af168c834d73487f8f614f0aaafbf6f9a850f0fJames Lemieux 9534142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux boolean getShowHomeClock() { 96ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux if (!SettingsDAO.getAutoShowHomeClock(mPrefs)) { 9734142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux return false; 9834142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux } 9934142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux 10034142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux // Show the home clock if the current time and home time differ. 10134142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux // (By using UTC offset for this comparison the various DST rules are considered) 102ef39939dd138628fb8d26a4842b0ab6ccb6725e8James Lemieux final TimeZone defaultTZ = TimeZone.getDefault(); 103ef39939dd138628fb8d26a4842b0ab6ccb6725e8James Lemieux final TimeZone homeTimeZone = SettingsDAO.getHomeTimeZone(mContext, mPrefs, defaultTZ); 10434142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux final long now = System.currentTimeMillis(); 105ef39939dd138628fb8d26a4842b0ab6ccb6725e8James Lemieux return homeTimeZone.getOffset(now) != defaultTZ.getOffset(now); 10634142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux } 107856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux 108856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux Uri getDefaultTimerRingtoneUri() { 109856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux if (mDefaultTimerRingtoneUri == null) { 110cdd3253d7395b4e405765ddd892cf1f7d1cb2f82James Lemieux mDefaultTimerRingtoneUri = Utils.getResourceUri(mContext, R.raw.timer_expire); 111856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux } 112856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux 113856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux return mDefaultTimerRingtoneUri; 114856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux } 115856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux 1163101fcf76ff5c228d2e643395be03d6cbf97d47eDylan Phan void setTimerRingtoneUri(Uri uri) { 117ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux SettingsDAO.setTimerRingtoneUri(mPrefs, uri); 1183101fcf76ff5c228d2e643395be03d6cbf97d47eDylan Phan } 1193101fcf76ff5c228d2e643395be03d6cbf97d47eDylan Phan 120856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux Uri getTimerRingtoneUri() { 121ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux return SettingsDAO.getTimerRingtoneUri(mPrefs, getDefaultTimerRingtoneUri()); 122856483e7e18d5f042a338f7b3d472e28a386c4adJames Lemieux } 1236a59a7b2c034557bc8bc7481544db5cd1105a891James Lemieux 1240777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux AlarmVolumeButtonBehavior getAlarmVolumeButtonBehavior() { 1250777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux return SettingsDAO.getAlarmVolumeButtonBehavior(mPrefs); 1260777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux } 1270777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux 1280777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux int getAlarmTimeout() { 1290777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux return SettingsDAO.getAlarmTimeout(mPrefs); 1300777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux } 1310777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux 1320777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux int getSnoozeLength() { 1330777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux return SettingsDAO.getSnoozeLength(mPrefs); 1340777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux } 1350777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux 1366a59a7b2c034557bc8bc7481544db5cd1105a891James Lemieux Uri getDefaultAlarmRingtoneUri() { 137ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux return SettingsDAO.getDefaultAlarmRingtoneUri(mPrefs); 1386a59a7b2c034557bc8bc7481544db5cd1105a891James Lemieux } 1396a59a7b2c034557bc8bc7481544db5cd1105a891James Lemieux 1406a59a7b2c034557bc8bc7481544db5cd1105a891James Lemieux void setDefaultAlarmRingtoneUri(Uri uri) { 141ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux SettingsDAO.setDefaultAlarmRingtoneUri(mPrefs, uri); 1426a59a7b2c034557bc8bc7481544db5cd1105a891James Lemieux } 14309c1f0e96743fcde110ecd1160ab55cdfaec12c0Annie Chin 1440777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux long getAlarmCrescendoDuration() { 1450777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux return SettingsDAO.getAlarmCrescendoDuration(mPrefs); 1460777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux } 1470777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux 1480777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux long getTimerCrescendoDuration() { 1490777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux return SettingsDAO.getTimerCrescendoDuration(mPrefs); 1500777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux } 1510777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux 152ff17acface9b98eba868fff0e2d70ddc85c5e4dbJames Lemieux Weekdays.Order getWeekdayOrder() { 153ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux return SettingsDAO.getWeekdayOrder(mPrefs); 154458aa8b4ebb8b7c6fdc0680a1b687ea21a61bf35James Lemieux } 155458aa8b4ebb8b7c6fdc0680a1b687ea21a61bf35James Lemieux 1560777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux boolean isRestoreBackupFinished() { 1570777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux return SettingsDAO.isRestoreBackupFinished(mPrefs); 1580777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux } 1590777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux 1600777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux void setRestoreBackupFinished(boolean finished) { 1610777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux SettingsDAO.setRestoreBackupFinished(mPrefs, finished); 1620777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux } 1630777a082e248c33c2e5a32690bfcdbd5de7d3f9eJames Lemieux 16409c1f0e96743fcde110ecd1160ab55cdfaec12c0Annie Chin boolean getTimerVibrate() { 165ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux return SettingsDAO.getTimerVibrate(mPrefs); 16609c1f0e96743fcde110ecd1160ab55cdfaec12c0Annie Chin } 16709c1f0e96743fcde110ecd1160ab55cdfaec12c0Annie Chin 16809c1f0e96743fcde110ecd1160ab55cdfaec12c0Annie Chin void setTimerVibrate(boolean enabled) { 169ff62e7fa903e3b6b11d0443543725c1351ab289dJames Lemieux SettingsDAO.setTimerVibrate(mPrefs, enabled); 17009c1f0e96743fcde110ecd1160ab55cdfaec12c0Annie Chin } 17184b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux 17284b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux TimeZones getTimeZones() { 17384b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux return SettingsDAO.getTimeZones(mContext, mTimeModel.currentTimeMillis()); 17484b60fe3a95f07ee793d880ca754389159b4929eJames Lemieux } 17534142b1d0f2445bbd606bb490dfef6c078c630eaJames Lemieux}