diff options
Diffstat (limited to 'src/com/android/calendar/OtherPreferences.kt')
-rw-r--r-- | src/com/android/calendar/OtherPreferences.kt | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/src/com/android/calendar/OtherPreferences.kt b/src/com/android/calendar/OtherPreferences.kt new file mode 100644 index 00000000..f1507ccf --- /dev/null +++ b/src/com/android/calendar/OtherPreferences.kt @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.calendar + +import android.app.Activity +import android.app.Dialog +import android.app.TimePickerDialog +import android.content.ComponentName +import android.content.Intent +import android.content.SharedPreferences +import android.os.Bundle +import android.preference.CheckBoxPreference +import android.preference.ListPreference +import android.preference.Preference +import android.preference.Preference.OnPreferenceChangeListener +import android.preference.PreferenceFragment +import android.preference.PreferenceManager +import android.preference.PreferenceScreen +import android.text.format.DateFormat +import android.text.format.Time +import android.util.Log +import android.widget.TimePicker + +class OtherPreferences : PreferenceFragment(), OnPreferenceChangeListener { + private var mCopyDb: Preference? = null + private var mQuietHours: CheckBoxPreference? = null + private var mQuietHoursStart: Preference? = null + private var mQuietHoursEnd: Preference? = null + private var mTimePickerDialog: TimePickerDialog? = null + private var mQuietHoursStartListener: TimeSetListener? = null + private var mQuietHoursStartDialog: TimePickerDialog? = null + private var mQuietHoursEndListener: TimeSetListener? = null + private var mQuietHoursEndDialog: TimePickerDialog? = null + private var mIs24HourMode = false + + @Override + override fun onCreate(icicle: Bundle?) { + super.onCreate(icicle) + val manager: PreferenceManager = getPreferenceManager() + manager.setSharedPreferencesName(SHARED_PREFS_NAME) + val prefs: SharedPreferences = manager.getSharedPreferences() + addPreferencesFromResource(R.xml.other_preferences) + mCopyDb = findPreference(KEY_OTHER_COPY_DB) + val activity: Activity = getActivity() + if (activity == null) { + Log.d(TAG, "Activity was null") + } + mIs24HourMode = DateFormat.is24HourFormat(activity) + mQuietHours = findPreference(KEY_OTHER_QUIET_HOURS) as CheckBoxPreference? + val startHour: Int = prefs.getInt(KEY_OTHER_QUIET_HOURS_START_HOUR, + QUIET_HOURS_DEFAULT_START_HOUR) + val startMinute: Int = prefs.getInt(KEY_OTHER_QUIET_HOURS_START_MINUTE, + QUIET_HOURS_DEFAULT_START_MINUTE) + mQuietHoursStart = findPreference(KEY_OTHER_QUIET_HOURS_START) + mQuietHoursStartListener = TimeSetListener(START_LISTENER) + mQuietHoursStartDialog = TimePickerDialog( + activity, mQuietHoursStartListener, + startHour, startMinute, mIs24HourMode) + mQuietHoursStart?.setSummary(formatTime(startHour, startMinute)) + val endHour: Int = prefs.getInt(KEY_OTHER_QUIET_HOURS_END_HOUR, + QUIET_HOURS_DEFAULT_END_HOUR) + val endMinute: Int = prefs.getInt(KEY_OTHER_QUIET_HOURS_END_MINUTE, + QUIET_HOURS_DEFAULT_END_MINUTE) + mQuietHoursEnd = findPreference(KEY_OTHER_QUIET_HOURS_END) + mQuietHoursEndListener = TimeSetListener(END_LISTENER) + mQuietHoursEndDialog = TimePickerDialog( + activity, mQuietHoursEndListener, + endHour, endMinute, mIs24HourMode) + mQuietHoursEnd?.setSummary(formatTime(endHour, endMinute)) + } + + @Override + override fun onPreferenceChange(preference: Preference?, objValue: Any?): Boolean { + return true + } + + @Override + override fun onPreferenceTreeClick(screen: PreferenceScreen?, preference: Preference): Boolean { + if (preference === mCopyDb) { + val intent = Intent(Intent.ACTION_MAIN) + intent.setComponent(ComponentName("com.android.providers.calendar", + "com.android.providers.calendar.CalendarDebugActivity")) + startActivity(intent) + } else if (preference === mQuietHoursStart) { + if (mTimePickerDialog == null) { + mTimePickerDialog = mQuietHoursStartDialog + mTimePickerDialog?.show() + } else { + Log.v(TAG, "not null") + } + } else if (preference === mQuietHoursEnd) { + if (mTimePickerDialog == null) { + mTimePickerDialog = mQuietHoursEndDialog + mTimePickerDialog?.show() + } else { + Log.v(TAG, "not null") + } + } else { + return super.onPreferenceTreeClick(screen, preference) + } + return true + } + + private inner class TimeSetListener(private val mListenerId: Int) : + TimePickerDialog.OnTimeSetListener { + @Override + override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) { + mTimePickerDialog = null + val prefs: SharedPreferences = getPreferenceManager().getSharedPreferences() + val editor: SharedPreferences.Editor = prefs.edit() + val summary = formatTime(hourOfDay, minute) + when (mListenerId) { + START_LISTENER -> { + mQuietHoursStart?.setSummary(summary) + editor.putInt(KEY_OTHER_QUIET_HOURS_START_HOUR, hourOfDay) + editor.putInt(KEY_OTHER_QUIET_HOURS_START_MINUTE, minute) + } + END_LISTENER -> { + mQuietHoursEnd?.setSummary(summary) + editor.putInt(KEY_OTHER_QUIET_HOURS_END_HOUR, hourOfDay) + editor.putInt(KEY_OTHER_QUIET_HOURS_END_MINUTE, minute) + } + else -> Log.d(TAG, "Set time for unknown listener: $mListenerId") + } + editor.commit() + } + } + + /** + * @param hourOfDay the hour of the day (0-24) + * @param minute + * @return human-readable string formatted based on 24-hour mode. + */ + private fun formatTime(hourOfDay: Int, minute: Int): String { + val time = Time() + time.hour = hourOfDay + time.minute = minute + val format = if (mIs24HourMode) format24Hour else format12Hour + return time.format(format) + } + + companion object { + private const val TAG = "CalendarOtherPreferences" + + // The name of the shared preferences file. This name must be maintained for + // historical reasons, as it's what PreferenceManager assigned the first + // time the file was created. + const val SHARED_PREFS_NAME = "com.android.calendar_preferences" + + // Must be the same keys that are used in the other_preferences.xml file. + const val KEY_OTHER_COPY_DB = "preferences_copy_db" + const val KEY_OTHER_QUIET_HOURS = "preferences_reminders_quiet_hours" + const val KEY_OTHER_REMINDERS_RESPONDED = "preferences_reminders_responded" + const val KEY_OTHER_QUIET_HOURS_START = "preferences_reminders_quiet_hours_start" + const val KEY_OTHER_QUIET_HOURS_START_HOUR = "preferences_reminders_quiet_hours_start_hour" + const val KEY_OTHER_QUIET_HOURS_START_MINUTE = + "preferences_reminders_quiet_hours_start_minute" + const val KEY_OTHER_QUIET_HOURS_END = "preferences_reminders_quiet_hours_end" + const val KEY_OTHER_QUIET_HOURS_END_HOUR = "preferences_reminders_quiet_hours_end_hour" + const val KEY_OTHER_QUIET_HOURS_END_MINUTE = "preferences_reminders_quiet_hours_end_minute" + const val KEY_OTHER_1 = "preferences_tardis_1" + const val QUIET_HOURS_DEFAULT_START_HOUR = 22 + const val QUIET_HOURS_DEFAULT_START_MINUTE = 0 + const val QUIET_HOURS_DEFAULT_END_HOUR = 8 + const val QUIET_HOURS_DEFAULT_END_MINUTE = 0 + private const val START_LISTENER = 1 + private const val END_LISTENER = 2 + private const val format24Hour = "%H:%M" + private const val format12Hour = "%I:%M%P" + } +}
\ No newline at end of file |