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}