diff options
Diffstat (limited to 'src/com/android/calendar/month/SimpleWeeksAdapter.kt')
-rw-r--r-- | src/com/android/calendar/month/SimpleWeeksAdapter.kt | 314 |
1 files changed, 0 insertions, 314 deletions
diff --git a/src/com/android/calendar/month/SimpleWeeksAdapter.kt b/src/com/android/calendar/month/SimpleWeeksAdapter.kt deleted file mode 100644 index 164f05c5..00000000 --- a/src/com/android/calendar/month/SimpleWeeksAdapter.kt +++ /dev/null @@ -1,314 +0,0 @@ -/* - * 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.month -// TODO Remove calendar imports when the required methods have been -// refactored into the public api -import com.android.calendar.CalendarController -import com.android.calendar.Utils -import android.content.Context -import android.text.format.Time -import android.util.Log -import android.view.GestureDetector -import android.view.MotionEvent -import android.view.View -import android.view.View.OnTouchListener -import android.view.ViewGroup -import android.widget.AbsListView.LayoutParams -import android.widget.BaseAdapter -import android.widget.ListView -import java.util.Calendar -import java.util.HashMap -import java.util.Locale - -/** - * - * - * This is a specialized adapter for creating a list of weeks with selectable - * days. It can be configured to display the week number, start the week on a - * given day, show a reduced number of days, or display an arbitrary number of - * weeks at a time. See [SimpleDayPickerFragment] for usage. - * - */ -open class SimpleWeeksAdapter(context: Context, params: HashMap<String?, Int?>?) : BaseAdapter(), - OnTouchListener { - protected var mContext: Context - - // The day to highlight as selected - protected var mSelectedDay: Time? = null - - // The week since 1970 that the selected day is in - protected var mSelectedWeek = 0 - - // When the week starts; numbered like Time.<WEEKDAY> (e.g. SUNDAY=0). - protected var mFirstDayOfWeek: Int - protected var mShowWeekNumber = false - protected var mGestureDetector: GestureDetector? = null - protected var mNumWeeks = DEFAULT_NUM_WEEKS - protected var mDaysPerWeek = DEFAULT_DAYS_PER_WEEK - protected var mFocusMonth = DEFAULT_MONTH_FOCUS - - /** - * Set up the gesture detector and selected time - */ - protected open fun init() { - mGestureDetector = GestureDetector(mContext, CalendarGestureListener()) - mSelectedDay = Time() - mSelectedDay?.setToNow() - } - - /** - * Parse the parameters and set any necessary fields. See - * [.WEEK_PARAMS_NUM_WEEKS] for parameter details. - * - * @param params A list of parameters for this adapter - */ - fun updateParams(params: HashMap<String?, Int?>?) { - if (params == null) { - Log.e(TAG, "WeekParameters are null! Cannot update adapter.") - return - } - if (params.containsKey(WEEK_PARAMS_FOCUS_MONTH)) { - // Casting from Int? --> Int - mFocusMonth = params.get(WEEK_PARAMS_FOCUS_MONTH) as Int - } - if (params.containsKey(WEEK_PARAMS_FOCUS_MONTH)) { - // Casting from Int? --> Int - mNumWeeks = params.get(WEEK_PARAMS_NUM_WEEKS) as Int - } - if (params.containsKey(WEEK_PARAMS_SHOW_WEEK)) { - // Casting from Int? --> Int - mShowWeekNumber = params.get(WEEK_PARAMS_SHOW_WEEK) as Int != 0 - } - if (params.containsKey(WEEK_PARAMS_WEEK_START)) { - // Casting from Int? --> Int - mFirstDayOfWeek = params.get(WEEK_PARAMS_WEEK_START) as Int - } - if (params.containsKey(WEEK_PARAMS_JULIAN_DAY)) { - // Casting from Int? --> Int - val julianDay: Int = params.get(WEEK_PARAMS_JULIAN_DAY) as Int - mSelectedDay?.setJulianDay(julianDay) - mSelectedWeek = Utils.getWeeksSinceEpochFromJulianDay(julianDay, mFirstDayOfWeek) - } - if (params.containsKey(WEEK_PARAMS_DAYS_PER_WEEK)) { - // Casting from Int? --> Int - mDaysPerWeek = params.get(WEEK_PARAMS_DAYS_PER_WEEK) as Int - } - refresh() - } - - /** - * Updates the selected day and related parameters. - * - * @param selectedTime The time to highlight - */ - open fun setSelectedDay(selectedTime: Time?) { - mSelectedDay?.set(selectedTime) - val millis: Long = mSelectedDay!!.normalize(true) - mSelectedWeek = Utils.getWeeksSinceEpochFromJulianDay( - Time.getJulianDay(millis, mSelectedDay!!.gmtoff), mFirstDayOfWeek - ) - notifyDataSetChanged() - } - - /** - * Returns the currently highlighted day - * - * @return - */ - fun getSelectedDay(): Time? { - return mSelectedDay - } - - /** - * updates any config options that may have changed and refreshes the view - */ - internal open fun refresh() { - notifyDataSetChanged() - } - - @Override - override fun getCount(): Int { - return WEEK_COUNT - } - - @Override - override fun getItem(position: Int): Any? { - return null - } - - @Override - override fun getItemId(position: Int): Long { - return position.toLong() - } - - @SuppressWarnings("unchecked") - @Override - override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { - val v: SimpleWeekView - var drawingParams: HashMap<String?, Int?>? = null - if (convertView != null) { - v = convertView as SimpleWeekView - // We store the drawing parameters in the view so it can be recycled - drawingParams = v.getTag() as HashMap<String?, Int?> - } else { - v = SimpleWeekView(mContext) - // Set up the new view - val params = LayoutParams( - LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT - ) - v.setLayoutParams(params) - v.setClickable(true) - v.setOnTouchListener(this) - } - if (drawingParams == null) { - drawingParams = HashMap<String?, Int?>() - } - drawingParams.clear() - var selectedDay = -1 - if (mSelectedWeek == position) { - selectedDay = mSelectedDay!!.weekDay - } - - // pass in all the view parameters - drawingParams.put( - SimpleWeekView.VIEW_PARAMS_HEIGHT, - (parent.getHeight() - WEEK_7_OVERHANG_HEIGHT) / mNumWeeks - ) - drawingParams.put(SimpleWeekView.VIEW_PARAMS_SELECTED_DAY, selectedDay) - drawingParams.put(SimpleWeekView.VIEW_PARAMS_SHOW_WK_NUM, if (mShowWeekNumber) 1 else 0) - drawingParams.put(SimpleWeekView.VIEW_PARAMS_WEEK_START, mFirstDayOfWeek) - drawingParams.put(SimpleWeekView.VIEW_PARAMS_NUM_DAYS, mDaysPerWeek) - drawingParams.put(SimpleWeekView.VIEW_PARAMS_WEEK, position) - drawingParams.put(SimpleWeekView.VIEW_PARAMS_FOCUS_MONTH, mFocusMonth) - v.setWeekParams(drawingParams, mSelectedDay!!.timezone) - v.invalidate() - return v - } - - /** - * Changes which month is in focus and updates the view. - * - * @param month The month to show as in focus [0-11] - */ - fun updateFocusMonth(month: Int) { - mFocusMonth = month - notifyDataSetChanged() - } - - @Override - override fun onTouch(v: View, event: MotionEvent): Boolean { - if (mGestureDetector!!.onTouchEvent(event)) { - val view: SimpleWeekView = v as SimpleWeekView - val day: Time? = (v as SimpleWeekView).getDayFromLocation(event.getX()) - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Touched day at Row=" + view.mWeek.toString() + " day=" + - day?.toString()) - } - if (day != null) { - onDayTapped(day) - } - return true - } - return false - } - - /** - * Maintains the same hour/min/sec but moves the day to the tapped day. - * - * @param day The day that was tapped - */ - protected open fun onDayTapped(day: Time) { - day.hour = mSelectedDay!!.hour - day.minute = mSelectedDay!!.minute - day.second = mSelectedDay!!.second - setSelectedDay(day) - } - - /** - * This is here so we can identify single tap events and set the selected - * day correctly - */ - protected inner class CalendarGestureListener : GestureDetector.SimpleOnGestureListener() { - @Override - override fun onSingleTapUp(e: MotionEvent): Boolean { - return true - } - } - - var mListView: ListView? = null - fun setListView(lv: ListView?) { - mListView = lv - } - - companion object { - private const val TAG = "MonthByWeek" - - /** - * The number of weeks to display at a time. - */ - const val WEEK_PARAMS_NUM_WEEKS = "num_weeks" - - /** - * Which month should be in focus currently. - */ - const val WEEK_PARAMS_FOCUS_MONTH = "focus_month" - - /** - * Whether the week number should be shown. Non-zero to show them. - */ - const val WEEK_PARAMS_SHOW_WEEK = "week_numbers" - - /** - * Which day the week should start on. [Time.SUNDAY] through - * [Time.SATURDAY]. - */ - const val WEEK_PARAMS_WEEK_START = "week_start" - - /** - * The Julian day to highlight as selected. - */ - const val WEEK_PARAMS_JULIAN_DAY = "selected_day" - - /** - * How many days of the week to display [1-7]. - */ - const val WEEK_PARAMS_DAYS_PER_WEEK = "days_per_week" - protected const val WEEK_COUNT = CalendarController.MAX_CALENDAR_WEEK - - CalendarController.MIN_CALENDAR_WEEK - protected var DEFAULT_NUM_WEEKS = 6 - protected var DEFAULT_MONTH_FOCUS = 0 - protected var DEFAULT_DAYS_PER_WEEK = 7 - protected var DEFAULT_WEEK_HEIGHT = 32 - protected var WEEK_7_OVERHANG_HEIGHT = 7 - protected var mScale = 0f - } - - init { - mContext = context - - // Get default week start based on locale, subtracting one for use with android Time. - val cal: Calendar = Calendar.getInstance(Locale.getDefault()) - mFirstDayOfWeek = cal.getFirstDayOfWeek() - 1 - if (mScale == 0f) { - mScale = context.getResources().getDisplayMetrics().density - if (mScale != 1f) { - WEEK_7_OVERHANG_HEIGHT *= mScale.toInt() - } - } - init() - updateParams(params) - } -}
\ No newline at end of file |