diff --git a/app/src/main/java/com/example/rehabilitation/Calendare/CalendareAdapter.kt b/app/src/main/java/com/example/rehabilitation/Calendare/CalendareAdapter.kt new file mode 100644 index 0000000..a185dac --- /dev/null +++ b/app/src/main/java/com/example/rehabilitation/Calendare/CalendareAdapter.kt @@ -0,0 +1,39 @@ +package com.example.calendarev2 + +import android.annotation.SuppressLint +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.example.calendarev2.databinding.Example5EventItemViewv2Binding + + +class CalendareAdapter : + RecyclerView.Adapter() { + + val flights = mutableListOf() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Example5FlightsViewHolder { + return Example5FlightsViewHolder( + Example5EventItemViewv2Binding.inflate(parent.context.layoutInflater, parent, false), + ) + } + + override fun onBindViewHolder(viewHolder: Example5FlightsViewHolder, position: Int) { + viewHolder.bind(flights[position]) + } + + override fun getItemCount(): Int = flights.size + + inner class Example5FlightsViewHolder(val binding: Example5EventItemViewv2Binding) : + RecyclerView.ViewHolder(binding.root) { + + @SuppressLint("NewApi") + fun bind(flight: Flight) { + binding.itemFlightDateText.apply { + text = flightDateTimeFormatter.format(flight.time) + setBackgroundColor(itemView.context.getColorCompat(flight.color)) + } + + binding.txtItem.text = flight.item + } + } +} diff --git a/app/src/main/java/com/example/rehabilitation/Calendare/MonthCalendarViewHolder.kt b/app/src/main/java/com/example/rehabilitation/Calendare/MonthCalendarViewHolder.kt deleted file mode 100644 index 18bef86..0000000 --- a/app/src/main/java/com/example/rehabilitation/Calendare/MonthCalendarViewHolder.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.example.rehabilitation.Calendare - -class MonthCalendarViewHolder { - -} \ No newline at end of file diff --git a/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/Utils.kt b/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/Utils.kt new file mode 100644 index 0000000..78a7b69 --- /dev/null +++ b/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/Utils.kt @@ -0,0 +1,58 @@ +package com.example.calendarev2 + +import android.content.Context +import android.graphics.drawable.Drawable +import android.util.TypedValue +import android.view.LayoutInflater +import android.view.View +import android.view.inputmethod.InputMethodManager +import android.widget.TextView +import androidx.annotation.ColorRes +import androidx.annotation.DrawableRes +import androidx.core.content.ContextCompat +import androidx.fragment.app.Fragment +import androidx.lifecycle.findViewTreeLifecycleOwner +import com.example.calendarev2.sample.shared.StatusBarColorLifecycleObserver + +fun View.makeVisible() { + visibility = View.VISIBLE +} + +fun View.makeInVisible() { + visibility = View.INVISIBLE +} + +fun View.makeGone() { + visibility = View.GONE +} + +fun dpToPx(dp: Int, context: Context): Int = + TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, + dp.toFloat(), + context.resources.displayMetrics, + ).toInt() + +internal val Context.layoutInflater: LayoutInflater + get() = LayoutInflater.from(this) + +internal val Context.inputMethodManager + get() = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + +internal fun Context.getDrawableCompat(@DrawableRes drawable: Int): Drawable = + requireNotNull(ContextCompat.getDrawable(this, drawable)) + +internal fun Context.getColorCompat(@ColorRes color: Int) = + ContextCompat.getColor(this, color) + +internal fun TextView.setTextColorRes(@ColorRes color: Int) = + setTextColor(context.getColorCompat(color)) + +fun Fragment.addStatusBarColorUpdate(@ColorRes colorRes: Int) { + view?.findViewTreeLifecycleOwner()?.lifecycle?.addObserver( + StatusBarColorLifecycleObserver( + requireActivity(), + requireContext().getColorCompat(colorRes), + ), + ) +} diff --git a/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/shared/Flight.kt b/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/shared/Flight.kt new file mode 100644 index 0000000..41510c3 --- /dev/null +++ b/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/shared/Flight.kt @@ -0,0 +1,108 @@ +package com.example.calendarev2 + +import android.annotation.SuppressLint +import androidx.annotation.ColorRes +import com.example.calendarev2.R +import java.time.LocalDateTime +import java.time.YearMonth +import java.time.format.DateTimeFormatter + + + +data class Flight( + val time: LocalDateTime, + val item: String, + @ColorRes val color: Int, +) { + data class Airport(val city: String, val code: String) +} + +@SuppressLint("NewApi") +fun generateFlights(): List = buildList { + val currentMonth = YearMonth.now() + + currentMonth.atDay(17).also { date -> + add( + Flight( + date.atTime(14, 0), + "Lagos", + R.color.blue_800, + ), + ) + add( + Flight( + date.atTime(21, 30), + "Enugu", + R.color.red_800, + ), + ) + } + + currentMonth.atDay(22).also { date -> + add( + Flight( + date.atTime(13, 20), + "Ibadan", + R.color.brown_700, + ), + ) + add( + Flight( + date.atTime(17, 40), + "Sokoto", + R.color.blue_grey_700, + ), + ) + } + + currentMonth.atDay(3).also { date -> + add( + Flight( + date.atTime(20, 0), + "Makurdi", + R.color.teal_700, + ), + ) + } + + currentMonth.atDay(12).also { date -> + add( + Flight( + date.atTime(18, 15), + "Kaduna", + R.color.cyan_700, + ), + ) + } + + currentMonth.plusMonths(1).atDay(13).also { date -> + add( + Flight( + date.atTime(7, 30), + "Kano", + R.color.pink_700, + ), + ) + add( + Flight( + date.atTime(10, 50), + "Minna", + R.color.green_700, + ), + ) + } + + currentMonth.minusMonths(1).atDay(9).also { date -> + add( + Flight( + date.atTime(20, 15), + "Asaba", + R.color.orange_800, + ), + ) + } +} + +@SuppressLint("NewApi") +val flightDateTimeFormatter: DateTimeFormatter = + DateTimeFormatter.ofPattern("EEE'\n'dd MMM'\n'HH:mm") diff --git a/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/shared/StatusBarColorLifecycleObserver.kt b/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/shared/StatusBarColorLifecycleObserver.kt new file mode 100644 index 0000000..285065b --- /dev/null +++ b/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/shared/StatusBarColorLifecycleObserver.kt @@ -0,0 +1,43 @@ +package com.example.calendarev2.sample.shared + +import android.annotation.SuppressLint +import android.app.Activity +import android.graphics.Color +import android.os.Build +import android.view.View +import androidx.annotation.ColorInt +import androidx.core.content.ContextCompat +import androidx.core.graphics.ColorUtils +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import com.example.calendarev2.R + +import java.lang.ref.WeakReference + +class StatusBarColorLifecycleObserver( + activity: Activity, + @ColorInt private val color: Int, +) : DefaultLifecycleObserver { + private val isLightColor = ColorUtils.calculateLuminance(color) > 0.5 + private val defaultStatusBarColor = R.color.colorPrimaryDark + private val activity = WeakReference(activity) + + override fun onStart(owner: LifecycleOwner) { + activity.get()?.window?.apply { + statusBarColor = color + if (isLightColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR + } + } + } + + @SuppressLint("ResourceAsColor") + override fun onStop(owner: LifecycleOwner) { + activity.get()?.window?.apply { + statusBarColor = defaultStatusBarColor + if (isLightColor) decorView.systemUiVisibility = 0 + } + } + + override fun onDestroy(owner: LifecycleOwner) = activity.clear() +} diff --git a/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/shared/Utils.kt b/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/shared/Utils.kt new file mode 100644 index 0000000..ec09abe --- /dev/null +++ b/app/src/main/java/com/example/rehabilitation/User/fragmentUser/Calendare/shared/Utils.kt @@ -0,0 +1,57 @@ +package com.example.calendarev2.sample.shared + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Context +import android.content.ContextWrapper +import com.kizitonwose.calendar.core.Week +import com.kizitonwose.calendar.core.yearMonth +import java.time.DayOfWeek +import java.time.Month +import java.time.YearMonth +import java.time.format.TextStyle +import java.util.* + +@SuppressLint("NewApi") +fun YearMonth.displayText(short: Boolean = false): String { + return "${this.month.displayText(short = short)} ${this.year}" +} + +@SuppressLint("NewApi") +fun Month.displayText(short: Boolean = true): String { + val style = if (short) TextStyle.SHORT else TextStyle.FULL + return getDisplayName(style, Locale.ENGLISH) +} + +@SuppressLint("NewApi") +fun DayOfWeek.displayText(uppercase: Boolean = false): String { + return getDisplayName(TextStyle.SHORT, Locale.ENGLISH).let { value -> + if (uppercase) value.uppercase(Locale.ENGLISH) else value + } +} + +fun Context.findActivity(): Activity { + var context = this + while (context is ContextWrapper) { + if (context is Activity) return context + context = context.baseContext + } + throw IllegalStateException("no activity") +} + +@SuppressLint("NewApi") +fun getWeekPageTitle(week: Week): String { + val firstDate = week.days.first().date + val lastDate = week.days.last().date + return when { + firstDate.yearMonth == lastDate.yearMonth -> { + firstDate.yearMonth.displayText() + } + firstDate.year == lastDate.year -> { + "${firstDate.month.displayText(short = false)} - ${lastDate.yearMonth.displayText()}" + } + else -> { + "${firstDate.yearMonth.displayText()} - ${lastDate.yearMonth.displayText()}" + } + } +} diff --git a/app/src/main/java/com/example/rehabilitation/User/fragmentUser/DayViewContainer.kt b/app/src/main/java/com/example/rehabilitation/User/fragmentUser/DayViewContainer.kt deleted file mode 100644 index e8afb41..0000000 --- a/app/src/main/java/com/example/rehabilitation/User/fragmentUser/DayViewContainer.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.example.rehabilitation.User.fragmentUser - -class DayViewContainer { -} \ No newline at end of file diff --git a/app/src/main/java/com/example/rehabilitation/model_adapter/Calendare/CalendareAdapter.kt b/app/src/main/java/com/example/rehabilitation/model_adapter/Calendare/CalendareAdapter.kt new file mode 100644 index 0000000..a185dac --- /dev/null +++ b/app/src/main/java/com/example/rehabilitation/model_adapter/Calendare/CalendareAdapter.kt @@ -0,0 +1,39 @@ +package com.example.calendarev2 + +import android.annotation.SuppressLint +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.example.calendarev2.databinding.Example5EventItemViewv2Binding + + +class CalendareAdapter : + RecyclerView.Adapter() { + + val flights = mutableListOf() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Example5FlightsViewHolder { + return Example5FlightsViewHolder( + Example5EventItemViewv2Binding.inflate(parent.context.layoutInflater, parent, false), + ) + } + + override fun onBindViewHolder(viewHolder: Example5FlightsViewHolder, position: Int) { + viewHolder.bind(flights[position]) + } + + override fun getItemCount(): Int = flights.size + + inner class Example5FlightsViewHolder(val binding: Example5EventItemViewv2Binding) : + RecyclerView.ViewHolder(binding.root) { + + @SuppressLint("NewApi") + fun bind(flight: Flight) { + binding.itemFlightDateText.apply { + text = flightDateTimeFormatter.format(flight.time) + setBackgroundColor(itemView.context.getColorCompat(flight.color)) + } + + binding.txtItem.text = flight.item + } + } +} diff --git a/app/src/main/res/drawable/calendar_day_legend_container.xml b/app/src/main/res/drawable/calendar_day_legend_container.xml new file mode 100644 index 0000000..3edf338 --- /dev/null +++ b/app/src/main/res/drawable/calendar_day_legend_container.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/calendar_day_legend_text.xml b/app/src/main/res/drawable/calendar_day_legend_text.xml new file mode 100644 index 0000000..522eb03 --- /dev/null +++ b/app/src/main/res/drawable/calendar_day_legend_text.xml @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/src/main/res/drawable/calendar_view_activity.xml b/app/src/main/res/drawable/calendar_view_activity.xml new file mode 100644 index 0000000..d001e1a --- /dev/null +++ b/app/src/main/res/drawable/calendar_view_activity.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/calendar_view_options_item_view.xml b/app/src/main/res/drawable/calendar_view_options_item_view.xml new file mode 100644 index 0000000..dc1a21e --- /dev/null +++ b/app/src/main/res/drawable/calendar_view_options_item_view.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/example_5_selected_bg.xml b/app/src/main/res/drawable/example_5_selected_bg.xml new file mode 100644 index 0000000..3619ce8 --- /dev/null +++ b/app/src/main/res/drawable/example_5_selected_bg.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add.png b/app/src/main/res/drawable/ic_add.png deleted file mode 100644 index 2526b2a..0000000 Binary files a/app/src/main/res/drawable/ic_add.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml new file mode 100644 index 0000000..0258249 --- /dev/null +++ b/app/src/main/res/drawable/ic_add.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_airplane_landing.xml b/app/src/main/res/drawable/ic_airplane_landing.xml new file mode 100644 index 0000000..21fc0c9 --- /dev/null +++ b/app/src/main/res/drawable/ic_airplane_landing.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_airplane_takeoff.xml b/app/src/main/res/drawable/ic_airplane_takeoff.xml new file mode 100644 index 0000000..c0f531a --- /dev/null +++ b/app/src/main/res/drawable/ic_airplane_takeoff.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 0000000..6541ee3 --- /dev/null +++ b/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_chevron_left.xml b/app/src/main/res/drawable/ic_chevron_left.xml new file mode 100644 index 0000000..e6bb3ca --- /dev/null +++ b/app/src/main/res/drawable/ic_chevron_left.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_chevron_right.xml b/app/src/main/res/drawable/ic_chevron_right.xml new file mode 100644 index 0000000..2483512 --- /dev/null +++ b/app/src/main/res/drawable/ic_chevron_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml new file mode 100644 index 0000000..ede4b71 --- /dev/null +++ b/app/src/main/res/drawable/ic_close.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/calendar_day_layout.xml b/app/src/main/res/layout/calendar_day_layout.xml deleted file mode 100644 index cdc89f2..0000000 --- a/app/src/main/res/layout/calendar_day_layout.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/calendar_day_legend_container.xml b/app/src/main/res/layout/calendar_day_legend_container.xml new file mode 100644 index 0000000..3edf338 --- /dev/null +++ b/app/src/main/res/layout/calendar_day_legend_container.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/calendar_day_legend_text.xml b/app/src/main/res/layout/calendar_day_legend_text.xml new file mode 100644 index 0000000..522eb03 --- /dev/null +++ b/app/src/main/res/layout/calendar_day_legend_text.xml @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/src/main/res/layout/calendar_day_title_text.xml b/app/src/main/res/layout/calendar_day_title_text.xml deleted file mode 100644 index cdc89f2..0000000 --- a/app/src/main/res/layout/calendar_day_title_text.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/calendar_day_titles_container.xml b/app/src/main/res/layout/calendar_day_titles_container.xml deleted file mode 100644 index cdc89f2..0000000 --- a/app/src/main/res/layout/calendar_day_titles_container.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/calendar_view_activity.xml b/app/src/main/res/layout/calendar_view_activity.xml new file mode 100644 index 0000000..d001e1a --- /dev/null +++ b/app/src/main/res/layout/calendar_view_activity.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/calendar_view_options_item_view.xml b/app/src/main/res/layout/calendar_view_options_item_view.xml new file mode 100644 index 0000000..dc1a21e --- /dev/null +++ b/app/src/main/res/layout/calendar_view_options_item_view.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/example_5_calendar_day.xml b/app/src/main/res/layout/example_5_calendar_day.xml new file mode 100644 index 0000000..2de558a --- /dev/null +++ b/app/src/main/res/layout/example_5_calendar_day.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/example_5_calendar_header.xml b/app/src/main/res/layout/example_5_calendar_header.xml new file mode 100644 index 0000000..58a7c6b --- /dev/null +++ b/app/src/main/res/layout/example_5_calendar_header.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/src/main/res/layout/example_5_event_item_viewv2.xml b/app/src/main/res/layout/example_5_event_item_viewv2.xml new file mode 100644 index 0000000..11e4b4f --- /dev/null +++ b/app/src/main/res/layout/example_5_event_item_viewv2.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..4b3787a --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +