diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index 064938201..fef8b9ba1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -12,32 +12,24 @@ import android.os.Bundle import android.os.Handler import android.provider.ContactsContract import android.support.v4.view.MenuItemCompat -import android.support.v4.view.ViewPager import android.support.v7.widget.SearchView import android.util.SparseIntArray import android.view.Menu import android.view.MenuItem -import android.widget.TextView import android.widget.Toast import com.simplemobiletools.calendar.BuildConfig import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.adapters.EventListAdapter -import com.simplemobiletools.calendar.adapters.MyMonthPagerAdapter -import com.simplemobiletools.calendar.adapters.MyWeekPagerAdapter -import com.simplemobiletools.calendar.adapters.MyYearPagerAdapter import com.simplemobiletools.calendar.dialogs.ExportEventsDialog import com.simplemobiletools.calendar.dialogs.FilterEventTypesDialog import com.simplemobiletools.calendar.dialogs.ImportEventsDialog import com.simplemobiletools.calendar.extensions.* -import com.simplemobiletools.calendar.fragments.EventListFragment -import com.simplemobiletools.calendar.fragments.WeekFragment +import com.simplemobiletools.calendar.fragments.* import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.helpers.Formatter -import com.simplemobiletools.calendar.interfaces.NavigationListener import com.simplemobiletools.calendar.models.Event import com.simplemobiletools.calendar.models.EventType import com.simplemobiletools.calendar.models.ListEvent -import com.simplemobiletools.calendar.views.MyScrollView import com.simplemobiletools.commons.dialogs.FilePickerDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* @@ -52,11 +44,8 @@ import java.text.SimpleDateFormat import java.util.* import kotlin.collections.ArrayList -class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewListener { +class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { private val CALDAV_SYNC_DELAY = 1000L - private val PREFILLED_MONTHS = 97 - private val PREFILLED_YEARS = 31 - private val PREFILLED_WEEKS = 61 private var showCalDAVRefreshToast = false private var mIsMonthSelected = false @@ -65,11 +54,10 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi private var mLatestSearchQuery = "" private var mCalDAVSyncHandler = Handler() private var mSearchMenuItem: MenuItem? = null - private var mIsGoToTodayVisible = true - - private var mDefaultWeeklyPage = 0 - private var mDefaultMonthlyPage = 0 - private var mDefaultYearlyPage = 0 + private var currentFragment: MyFragmentHolder? = null + private var shouldGoToTodayBeVisible = false + private var eventTypeColors = SparseIntArray() + private var goToTodayButton: MenuItem? = null private var mStoredTextColor = 0 private var mStoredBackgroundColor = 0 @@ -79,19 +67,15 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi private var mStoredUse24HourFormat = false private var mStoredUseEnglish = false - companion object { - var mWeekScrollY = 0 - var eventTypeColors = SparseIntArray() - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) appLaunched() checkWhatsNewDialog() - if (resources.getBoolean(R.bool.portrait_only)) + if (resources.getBoolean(R.bool.portrait_only)) { requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + } if (intent?.action == Intent.ACTION_VIEW && intent.data != null) { val uri = intent.data @@ -145,7 +129,7 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi if (config.storedView == WEEKLY_VIEW) { if (mStoredIsSundayFirst != config.isSundayFirst || mStoredUse24HourFormat != config.use24hourFormat) { - fillWeeklyViewPager() + } } @@ -169,10 +153,10 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_main, menu) - mIsGoToTodayVisible = shouldGoToTodayBeVisible() menu.apply { + goToTodayButton = findItem(R.id.go_to_today) findItem(R.id.filter).isVisible = mShouldFilterBeVisible - findItem(R.id.go_to_today).isVisible = mIsGoToTodayVisible + findItem(R.id.go_to_today).isVisible = shouldGoToTodayBeVisible && config.storedView != EVENTS_LIST_VIEW findItem(R.id.refresh_caldav_calendars).isVisible = config.caldavSync } @@ -286,31 +270,23 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi RadioItem(EVENTS_LIST_VIEW, res.getString(R.string.simple_event_list))) RadioGroupDialog(this, items, config.storedView) { + mIsMonthSelected = false + calendar_fab.beVisibleIf(it as Int != YEARLY_VIEW) + resetActionBarTitle() closeSearch() - updateView(it as Int) + updateView(it) + shouldGoToTodayBeVisible = false invalidateOptionsMenu() } } private fun goToToday() { - if (config.storedView == WEEKLY_VIEW) { - week_view_view_pager.currentItem = mDefaultWeeklyPage - } else if (config.storedView == MONTHLY_VIEW) { - main_view_pager.currentItem = mDefaultMonthlyPage - } else if (config.storedView == YEARLY_VIEW) { - if (mIsMonthSelected) { - openMonthlyToday() - } else { - main_view_pager.currentItem = mDefaultYearlyPage - } - } + currentFragment?.goToToday() } - private fun shouldGoToTodayBeVisible() = when (config.storedView) { - WEEKLY_VIEW -> week_view_view_pager.currentItem != mDefaultWeeklyPage - MONTHLY_VIEW -> main_view_pager.currentItem != mDefaultMonthlyPage - YEARLY_VIEW -> main_view_pager.currentItem != mDefaultYearlyPage - else -> false + private fun resetActionBarTitle() { + supportActionBar?.title = getString(R.string.app_launcher_name) + supportActionBar?.subtitle = "" } private fun showFilterDialog() { @@ -319,6 +295,11 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi } } + fun toggleGoToTodayVisibility(beVisible: Boolean) { + shouldGoToTodayBeVisible = beVisible + invalidateOptionsMenu() + } + private fun refreshCalDAVCalendars(showRefreshToast: Boolean) { showCalDAVRefreshToast = showRefreshToast if (showRefreshToast) { @@ -357,6 +338,7 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi val eventType = EventType(0, holidays, resources.getColor(R.color.default_holidays_color)) eventTypeId = dbHelper.insertEventType(eventType) } + val result = IcsImporter(this).importEvents(it as String, eventTypeId, 0) handleParseResult(result) if (result != IcsImporter.ImportResult.IMPORT_FAIL) { @@ -499,32 +481,43 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi mIsMonthSelected = view == MONTHLY_VIEW config.storedView = view updateViewPager() + if (goToTodayButton?.isVisible == true) { + shouldGoToTodayBeVisible = false + invalidateOptionsMenu() + } } private fun updateViewPager() { - resetTitle() - when { - config.storedView == YEARLY_VIEW -> fillYearlyViewPager() - config.storedView == EVENTS_LIST_VIEW -> fillEventsList() - config.storedView == WEEKLY_VIEW -> fillWeeklyViewPager() - else -> openMonthlyToday() + val fragment = getFragmentsHolder() + currentFragment = fragment + val bundle = Bundle() + + when (config.storedView) { + MONTHLY_VIEW -> bundle.putString(DAY_CODE, Formatter.getTodayCode(applicationContext)) + WEEKLY_VIEW -> bundle.putString(WEEK_START_DATE_TIME, getThisWeekDateTime()) } - mWeekScrollY = 0 + fragment.arguments = bundle + supportFragmentManager.beginTransaction().replace(R.id.fragments_holder, fragment, "").commit() } - private fun openMonthlyToday() { - val targetDay = DateTime().toString(Formatter.DAYCODE_PATTERN) - fillMonthlyViewPager(targetDay) + private fun getThisWeekDateTime(): String { + var thisweek = DateTime().withDayOfWeek(1).withTimeAtStartOfDay().minusDays(if (config.isSundayFirst) 1 else 0) + if (DateTime().minusDays(7).seconds() > thisweek.seconds()) { + thisweek = thisweek.plusDays(7) + } + return thisweek.toString() + } + + private fun getFragmentsHolder() = when (config.storedView) { + MONTHLY_VIEW -> MonthFragmentsHolder() + YEARLY_VIEW -> YearFragmentsHolder() + EVENTS_LIST_VIEW -> EventListFragment() + else -> WeekFragmentsHolder() } private fun refreshViewPager() { - when { - config.storedView == YEARLY_VIEW && !mIsMonthSelected -> (main_view_pager.adapter as? MyYearPagerAdapter)?.refreshEvents(main_view_pager.currentItem) - config.storedView == EVENTS_LIST_VIEW -> fillEventsList() - config.storedView == WEEKLY_VIEW -> (week_view_view_pager.adapter as? MyWeekPagerAdapter)?.refreshEvents(week_view_view_pager.currentItem) - else -> (main_view_pager.adapter as? MyMonthPagerAdapter)?.refreshEvents(main_view_pager.currentItem) - } + currentFragment?.refreshEvents() } private fun tryImportEvents() { @@ -609,188 +602,6 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi BuildConfig.VERSION_NAME) } - private fun resetTitle() { - supportActionBar?.title = getString(R.string.app_launcher_name) - supportActionBar?.subtitle = "" - } - - private fun fillMonthlyViewPager(targetDay: String) { - main_weekly_scrollview.beGone() - calendar_fab.beVisible() - val codes = getMonths(targetDay) - val monthlyAdapter = MyMonthPagerAdapter(supportFragmentManager, codes, this) - mDefaultMonthlyPage = codes.size / 2 - - main_view_pager.apply { - adapter = monthlyAdapter - beVisible() - addOnPageChangeListener(object : ViewPager.OnPageChangeListener { - override fun onPageScrollStateChanged(state: Int) { - } - - override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { - } - - override fun onPageSelected(position: Int) { - if (mIsGoToTodayVisible != shouldGoToTodayBeVisible()) { - invalidateOptionsMenu() - } - - if (config.storedView == YEARLY_VIEW) { - val dateTime = Formatter.getDateTimeFromCode(codes[position]) - supportActionBar?.title = "${getString(R.string.app_launcher_name)} - ${Formatter.getYear(dateTime)}" - } - } - }) - currentItem = mDefaultMonthlyPage - } - calendar_event_list_holder.beGone() - } - - private fun getMonths(code: String): List { - val months = ArrayList(PREFILLED_MONTHS) - val today = Formatter.getDateTimeFromCode(code) - for (i in -PREFILLED_MONTHS / 2..PREFILLED_MONTHS / 2) { - months.add(Formatter.getDayCodeFromDateTime(today.plusMonths(i))) - } - - return months - } - - private fun fillWeeklyViewPager() { - var thisweek = DateTime().withDayOfWeek(1).withTimeAtStartOfDay().minusDays(if (config.isSundayFirst) 1 else 0) - if (DateTime().minusDays(7).seconds() > thisweek.seconds()) { - thisweek = thisweek.plusDays(7) - } - val weekTSs = getWeekTimestamps(thisweek.seconds()) - val weeklyAdapter = MyWeekPagerAdapter(supportFragmentManager, weekTSs, object : WeekFragment.WeekScrollListener { - override fun scrollTo(y: Int) { - week_view_hours_scrollview.scrollY = y - mWeekScrollY = y - } - }) - main_view_pager.beGone() - calendar_event_list_holder.beGone() - main_weekly_scrollview.beVisible() - - week_view_hours_holder.removeAllViews() - val hourDateTime = DateTime().withDate(2000, 1, 1).withTime(0, 0, 0, 0) - for (i in 1..23) { - val formattedHours = Formatter.getHours(applicationContext, hourDateTime.withHourOfDay(i)) - (layoutInflater.inflate(R.layout.weekly_view_hour_textview, null, false) as TextView).apply { - text = formattedHours - setTextColor(mStoredTextColor) - week_view_hours_holder.addView(this) - } - } - - mDefaultWeeklyPage = weekTSs.size / 2 - week_view_view_pager.apply { - adapter = weeklyAdapter - addOnPageChangeListener(object : ViewPager.OnPageChangeListener { - override fun onPageScrollStateChanged(state: Int) { - } - - override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { - } - - override fun onPageSelected(position: Int) { - if (mIsGoToTodayVisible != shouldGoToTodayBeVisible()) { - invalidateOptionsMenu() - } - - setupWeeklyActionbarTitle(weekTSs[position]) - } - }) - currentItem = mDefaultWeeklyPage - } - - week_view_hours_scrollview.setOnScrollviewListener(object : MyScrollView.ScrollViewListener { - override fun onScrollChanged(scrollView: MyScrollView, x: Int, y: Int, oldx: Int, oldy: Int) { - mWeekScrollY = y - weeklyAdapter.updateScrollY(week_view_view_pager.currentItem, y) - } - }) - week_view_hours_scrollview.setOnTouchListener { view, motionEvent -> true } - } - - fun updateHoursTopMargin(margin: Int) { - week_view_hours_divider.layoutParams.height = margin - week_view_hours_scrollview.requestLayout() - } - - private fun getWeekTimestamps(targetWeekTS: Int): List { - val weekTSs = ArrayList(PREFILLED_WEEKS) - for (i in -PREFILLED_WEEKS / 2..PREFILLED_WEEKS / 2) { - weekTSs.add(Formatter.getDateTimeFromTS(targetWeekTS).plusWeeks(i).seconds()) - } - return weekTSs - } - - private fun setupWeeklyActionbarTitle(timestamp: Int) { - val startDateTime = Formatter.getDateTimeFromTS(timestamp) - val endDateTime = Formatter.getDateTimeFromTS(timestamp + WEEK_SECONDS) - val startMonthName = Formatter.getMonthName(applicationContext, startDateTime.monthOfYear) - if (startDateTime.monthOfYear == endDateTime.monthOfYear) { - var newTitle = startMonthName - if (startDateTime.year != DateTime().year) - newTitle += " - ${startDateTime.year}" - supportActionBar?.title = newTitle - } else { - val endMonthName = Formatter.getMonthName(applicationContext, endDateTime.monthOfYear) - supportActionBar?.title = "$startMonthName - $endMonthName" - } - supportActionBar?.subtitle = "${getString(R.string.week)} ${startDateTime.plusDays(3).weekOfWeekyear}" - } - - private fun fillYearlyViewPager() { - main_weekly_scrollview.beGone() - calendar_fab.beGone() - val targetYear = DateTime().toString(Formatter.YEAR_PATTERN).toInt() - val years = getYears(targetYear) - val yearlyAdapter = MyYearPagerAdapter(supportFragmentManager, years, this) - - mDefaultYearlyPage = years.size / 2 - main_view_pager.apply { - adapter = yearlyAdapter - addOnPageChangeListener(object : ViewPager.OnPageChangeListener { - override fun onPageScrollStateChanged(state: Int) { - } - - override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { - } - - override fun onPageSelected(position: Int) { - if (mIsGoToTodayVisible != shouldGoToTodayBeVisible()) { - invalidateOptionsMenu() - } - - if (position < years.size) { - supportActionBar?.title = "${getString(R.string.app_launcher_name)} - ${years[position]}" - } - } - }) - currentItem = mDefaultYearlyPage - beVisible() - } - supportActionBar?.title = "${getString(R.string.app_launcher_name)} - ${years[years.size / 2]}" - calendar_event_list_holder.beGone() - } - - private fun getYears(targetYear: Int): List { - val years = ArrayList(PREFILLED_YEARS) - years += targetYear - PREFILLED_YEARS / 2..targetYear + PREFILLED_YEARS / 2 - return years - } - - private fun fillEventsList() { - main_view_pager.adapter = null - main_view_pager.beGone() - main_weekly_scrollview.beGone() - calendar_event_list_holder.beVisible() - supportFragmentManager.beginTransaction().replace(R.id.calendar_event_list_holder, EventListFragment(), "").commit() - } - private fun searchQueryChanged(text: String) { mLatestSearchQuery = text search_placeholder_2.beGoneIf(text.length >= 2) @@ -826,17 +637,15 @@ class MainActivity : SimpleActivity(), NavigationListener, RefreshRecyclerViewLi refreshViewPager() } - override fun goLeft() { - main_view_pager.currentItem = main_view_pager.currentItem - 1 - } - - override fun goRight() { - main_view_pager.currentItem = main_view_pager.currentItem + 1 - } - - override fun goToDateTime(dateTime: DateTime) { - fillMonthlyViewPager(Formatter.getDayCodeFromDateTime(dateTime)) + fun openMonthFromYearly(dateTime: DateTime) { mIsMonthSelected = true + val fragment = MonthFragmentsHolder() + currentFragment = fragment + val bundle = Bundle() + bundle.putString(DAY_CODE, Formatter.getDayCodeFromDateTime(dateTime)) + fragment.arguments = bundle + supportFragmentManager.beginTransaction().replace(R.id.fragments_holder, fragment, "").commit() + resetActionBarTitle() } private fun openDayAt(timestamp: Long) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyMonthPagerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyMonthPagerAdapter.kt index 3f9a1ab8a..6dcbd50c6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyMonthPagerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyMonthPagerAdapter.kt @@ -4,14 +4,11 @@ import android.os.Bundle import android.support.v4.app.Fragment import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentStatePagerAdapter -import android.util.SparseArray import com.simplemobiletools.calendar.fragments.MonthFragment import com.simplemobiletools.calendar.helpers.DAY_CODE import com.simplemobiletools.calendar.interfaces.NavigationListener class MyMonthPagerAdapter(fm: FragmentManager, private val mCodes: List, private val mListener: NavigationListener) : FragmentStatePagerAdapter(fm) { - private val mFragments = SparseArray() - override fun getCount() = mCodes.size override fun getItem(position: Int): Fragment { @@ -23,13 +20,6 @@ class MyMonthPagerAdapter(fm: FragmentManager, private val mCodes: List, fragment.arguments = bundle fragment.listener = mListener - mFragments.put(position, fragment) return fragment } - - fun refreshEvents(pos: Int) { - for (i in -1..1) { - mFragments[pos + i]?.updateCalendar() - } - } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyWeekPagerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyWeekPagerAdapter.kt index 475f55293..4cf408ac4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyWeekPagerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyWeekPagerAdapter.kt @@ -7,8 +7,9 @@ import android.support.v4.app.FragmentStatePagerAdapter import android.util.SparseArray import com.simplemobiletools.calendar.fragments.WeekFragment import com.simplemobiletools.calendar.helpers.WEEK_START_TIMESTAMP +import com.simplemobiletools.calendar.interfaces.WeekFragmentListener -class MyWeekPagerAdapter(fm: FragmentManager, val mWeekTimestamps: List, val mListener: WeekFragment.WeekScrollListener) : FragmentStatePagerAdapter(fm) { +class MyWeekPagerAdapter(fm: FragmentManager, val mWeekTimestamps: List, val mListener: WeekFragmentListener) : FragmentStatePagerAdapter(fm) { private val mFragments = SparseArray() override fun getCount() = mWeekTimestamps.size @@ -30,10 +31,4 @@ class MyWeekPagerAdapter(fm: FragmentManager, val mWeekTimestamps: List, va mFragments[pos - 1]?.updateScrollY(y) mFragments[pos + 1]?.updateScrollY(y) } - - fun refreshEvents(pos: Int) { - for (i in -1..1) { - mFragments[pos + i]?.updateEvents() - } - } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyYearPagerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyYearPagerAdapter.kt index 0590bc7e2..92e1e47d0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyYearPagerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyYearPagerAdapter.kt @@ -4,14 +4,10 @@ import android.os.Bundle import android.support.v4.app.Fragment import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentStatePagerAdapter -import android.util.SparseArray import com.simplemobiletools.calendar.fragments.YearFragment import com.simplemobiletools.calendar.helpers.YEAR_LABEL -import com.simplemobiletools.calendar.interfaces.NavigationListener - -class MyYearPagerAdapter(fm: FragmentManager, val mYears: List, val mListener: NavigationListener) : FragmentStatePagerAdapter(fm) { - private val mFragments = SparseArray() +class MyYearPagerAdapter(fm: FragmentManager, val mYears: List) : FragmentStatePagerAdapter(fm) { override fun getCount() = mYears.size override fun getItem(position: Int): Fragment { @@ -21,15 +17,7 @@ class MyYearPagerAdapter(fm: FragmentManager, val mYears: List, val mListen val fragment = YearFragment() fragment.arguments = bundle - fragment.mListener = mListener - mFragments.put(position, fragment) return fragment } - - fun refreshEvents(pos: Int) { - for (i in -1..1) { - mFragments[pos + i]?.updateEvents() - } - } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/String.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/String.kt index 41e61aef3..cdf1bd431 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/String.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/String.kt @@ -6,3 +6,5 @@ fun String.substringTo(cnt: Int): String { } else substring(0, Math.min(length, cnt)) } + +fun String.getMonthCode() = if (length == 8) substring(0, 6) else "" diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/EventListFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/EventListFragment.kt index 35b42b052..028c20059 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/EventListFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/EventListFragment.kt @@ -2,7 +2,6 @@ package com.simplemobiletools.calendar.fragments import android.content.Intent import android.os.Bundle -import android.support.v4.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -22,7 +21,7 @@ import kotlinx.android.synthetic.main.fragment_event_list.view.* import org.joda.time.DateTime import java.util.* -class EventListFragment : Fragment(), RefreshRecyclerViewListener { +class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener { private var mEvents: List = ArrayList() private var prevEventsHash = 0 private var lastHash = 0 @@ -60,8 +59,9 @@ class EventListFragment : Fragment(), RefreshRecyclerViewListener { val filtered = context!!.getFilteredEvents(events) val hash = filtered.hashCode() - if (prevEventsHash == hash) + if (prevEventsHash == hash) { return + } prevEventsHash = hash mEvents = filtered @@ -97,4 +97,11 @@ class EventListFragment : Fragment(), RefreshRecyclerViewListener { override fun refreshItems() { checkEvents() } + + override fun goToToday() { + } + + override fun refreshEvents() { + checkEvents() + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt index c1b96e59d..124ebc46d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt @@ -47,7 +47,7 @@ class MonthFragment : Fragment(), MonthlyCalendar { val view = inflater.inflate(R.layout.fragment_month, container, false) mRes = resources mPackageName = activity!!.packageName - mHolder = view.calendar_holder + mHolder = view.month_calendar_holder mDayCode = arguments!!.getString(DAY_CODE) mConfig = context!!.config mSundayFirst = mConfig.isSundayFirst @@ -74,7 +74,7 @@ class MonthFragment : Fragment(), MonthlyCalendar { updateCalendar() } - fun updateCalendar() { + private fun updateCalendar() { mCalendar?.updateMonthlyCalendar(Formatter.getDateTimeFromCode(mDayCode)) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt new file mode 100644 index 000000000..7d1bfb492 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt @@ -0,0 +1,101 @@ +package com.simplemobiletools.calendar.fragments + +import android.os.Bundle +import android.support.v4.view.ViewPager +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.simplemobiletools.calendar.R +import com.simplemobiletools.calendar.activities.MainActivity +import com.simplemobiletools.calendar.adapters.MyMonthPagerAdapter +import com.simplemobiletools.calendar.extensions.getMonthCode +import com.simplemobiletools.calendar.helpers.DAY_CODE +import com.simplemobiletools.calendar.helpers.Formatter +import com.simplemobiletools.calendar.interfaces.NavigationListener +import com.simplemobiletools.commons.views.MyViewPager +import kotlinx.android.synthetic.main.fragment_viewpager_holder.view.* +import org.joda.time.DateTime + +class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener { + private val PREFILLED_MONTHS = 97 + + private var viewPager: MyViewPager? = null + private var defaultMonthlyPage = 0 + private var todayDayCode = "" + private var currentDayCode = "" + private var isGoToTodayVisible = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + currentDayCode = arguments?.getString(DAY_CODE) ?: "" + todayDayCode = Formatter.getTodayCode(context!!) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val view = inflater.inflate(R.layout.fragment_viewpager_holder, container, false) + viewPager = view.fragment_viewpager + setupFragment() + return view + } + + private fun shouldGoToTodayBeVisible() = currentDayCode.getMonthCode() != todayDayCode.getMonthCode() + + private fun setupFragment() { + val codes = getMonths(currentDayCode) + val monthlyAdapter = MyMonthPagerAdapter(activity!!.supportFragmentManager, codes, this) + defaultMonthlyPage = codes.size / 2 + + viewPager!!.apply { + adapter = monthlyAdapter + addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + } + + override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { + } + + override fun onPageSelected(position: Int) { + currentDayCode = codes[position] + val shouldGoToTodayBeVisible = shouldGoToTodayBeVisible() + if (isGoToTodayVisible != shouldGoToTodayBeVisible) { + (activity as? MainActivity)?.toggleGoToTodayVisibility(shouldGoToTodayBeVisible) + isGoToTodayVisible = shouldGoToTodayBeVisible + } + } + }) + currentItem = defaultMonthlyPage + } + } + + private fun getMonths(code: String): List { + val months = ArrayList(PREFILLED_MONTHS) + val today = Formatter.getDateTimeFromCode(code) + for (i in -PREFILLED_MONTHS / 2..PREFILLED_MONTHS / 2) { + months.add(Formatter.getDayCodeFromDateTime(today.plusMonths(i))) + } + + return months + } + + override fun goLeft() { + viewPager!!.currentItem = viewPager!!.currentItem - 1 + } + + override fun goRight() { + viewPager!!.currentItem = viewPager!!.currentItem + 1 + } + + override fun goToDateTime(dateTime: DateTime) { + currentDayCode = Formatter.getDayCodeFromDateTime(dateTime) + setupFragment() + } + + override fun goToToday() { + currentDayCode = todayDayCode + setupFragment() + } + + override fun refreshEvents() { + setupFragment() + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MyFragmentHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MyFragmentHolder.kt new file mode 100644 index 000000000..96a91a8e5 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MyFragmentHolder.kt @@ -0,0 +1,9 @@ +package com.simplemobiletools.calendar.fragments + +import android.support.v4.app.Fragment + +abstract class MyFragmentHolder : Fragment() { + abstract fun goToToday() + + abstract fun refreshEvents() +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt index 62dcc4bb6..02dd7897f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt @@ -6,18 +6,20 @@ import android.graphics.Rect import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.support.v4.app.Fragment +import android.util.SparseIntArray import android.view.* import android.widget.ImageView import android.widget.RelativeLayout import android.widget.TextView import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.activities.EventActivity -import com.simplemobiletools.calendar.activities.MainActivity import com.simplemobiletools.calendar.extensions.config +import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.getFilteredEvents import com.simplemobiletools.calendar.extensions.seconds import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.helpers.Formatter +import com.simplemobiletools.calendar.interfaces.WeekFragmentListener import com.simplemobiletools.calendar.interfaces.WeeklyCalendar import com.simplemobiletools.calendar.models.Event import com.simplemobiletools.calendar.views.MyScrollView @@ -35,7 +37,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { private val CLICK_DURATION_THRESHOLD = 150 private val PLUS_FADEOUT_DELAY = 5000L - var mListener: WeekScrollListener? = null + var mListener: WeekFragmentListener? = null private var mWeekTimestamp = 0 private var mRowHeight = 0 private var minScrollY = -1 @@ -52,20 +54,30 @@ class WeekFragment : Fragment(), WeeklyCalendar { private var events = ArrayList() private var allDayHolders = ArrayList() private var allDayRows = ArrayList>() + private var eventTypeColors = SparseIntArray() lateinit var inflater: LayoutInflater lateinit var mView: View lateinit var mCalendar: WeeklyCalendarImpl lateinit var mRes: Resources - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - this.inflater = inflater + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + context!!.dbHelper.getEventTypes { + it.map { eventTypeColors.put(it.id, it.color) } + } + mRowHeight = (context!!.resources.getDimension(R.dimen.weekly_view_row_height)).toInt() minScrollY = mRowHeight * context!!.config.startWeeklyAt mWeekTimestamp = arguments!!.getInt(WEEK_START_TIMESTAMP) primaryColor = context!!.getAdjustedPrimaryColor() mRes = resources allDayRows.add(HashSet()) + mCalendar = WeeklyCalendarImpl(this, context!!) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + this.inflater = inflater mView = inflater.inflate(R.layout.fragment_week, container, false).apply { week_events_scrollview.setOnScrollviewListener(object : MyScrollView.ScrollViewListener { @@ -77,7 +89,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { week_events_scrollview.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { week_events_scrollview.viewTreeObserver.removeOnGlobalLayoutListener(this) - updateScrollY(Math.max(MainActivity.mWeekScrollY, minScrollY)) + updateScrollY(Math.max(mListener?.getCurrScrollY() ?: 0, minScrollY)) } }) } @@ -85,7 +97,6 @@ class WeekFragment : Fragment(), WeeklyCalendar { (0..6).map { inflater.inflate(R.layout.stroke_vertical_divider, mView.week_vertical_grid_holder) } (0..23).map { inflater.inflate(R.layout.stroke_horizontal_divider, mView.week_horizontal_grid_holder) } - mCalendar = WeeklyCalendarImpl(this, context!!) wasFragmentInit = true return mView } @@ -94,7 +105,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { super.setMenuVisibility(menuVisible) isFragmentVisible = menuVisible if (isFragmentVisible && wasFragmentInit) { - (activity as MainActivity).updateHoursTopMargin(mView.week_top_holder.height) + mListener?.updateHoursTopMargin(mView.week_top_holder.height) checkScrollLimits(mView.week_events_scrollview.scrollY) } } @@ -269,7 +280,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { val duration = endDateTime.minuteOfDay - startMinutes (inflater.inflate(R.layout.week_event_marker, null, false) as TextView).apply { - val backgroundColor = MainActivity.eventTypeColors.get(event.eventType, primaryColor) + val backgroundColor = eventTypeColors.get(event.eventType, primaryColor) background = ColorDrawable(backgroundColor) setTextColor(backgroundColor.getContrastColor()) text = event.title @@ -327,7 +338,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { override fun onGlobalLayout() { mView.week_top_holder.viewTreeObserver.removeOnGlobalLayoutListener(this) if (isFragmentVisible && activity != null) { - (activity as MainActivity).updateHoursTopMargin(mView.week_top_holder.height) + mListener?.updateHoursTopMargin(mView.week_top_holder.height) } } }) @@ -338,7 +349,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { if (activity == null) return - val backgroundColor = MainActivity.eventTypeColors.get(event.eventType, primaryColor) + val backgroundColor = eventTypeColors.get(event.eventType, primaryColor) background = ColorDrawable(backgroundColor) setTextColor(backgroundColor.getContrastColor()) text = event.title @@ -413,7 +424,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { mView.week_top_holder.viewTreeObserver.removeOnGlobalLayoutListener(this) if (isFragmentVisible) { - (activity as MainActivity).updateHoursTopMargin(mView.week_top_holder.height) + mListener?.updateHoursTopMargin(mView.week_top_holder.height) } if (!wasExtraHeightAdded) { @@ -435,8 +446,4 @@ class WeekFragment : Fragment(), WeeklyCalendar { if (wasFragmentInit) mView.week_events_scrollview.scrollY = y } - - interface WeekScrollListener { - fun scrollTo(y: Int) - } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragmentsHolder.kt new file mode 100644 index 000000000..6f9454ade --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragmentsHolder.kt @@ -0,0 +1,142 @@ +package com.simplemobiletools.calendar.fragments + +import android.os.Bundle +import android.support.v4.view.ViewPager +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import com.simplemobiletools.calendar.R +import com.simplemobiletools.calendar.activities.MainActivity +import com.simplemobiletools.calendar.adapters.MyWeekPagerAdapter +import com.simplemobiletools.calendar.extensions.config +import com.simplemobiletools.calendar.extensions.seconds +import com.simplemobiletools.calendar.helpers.Formatter +import com.simplemobiletools.calendar.helpers.WEEK_SECONDS +import com.simplemobiletools.calendar.helpers.WEEK_START_DATE_TIME +import com.simplemobiletools.calendar.interfaces.WeekFragmentListener +import com.simplemobiletools.calendar.views.MyScrollView +import kotlinx.android.synthetic.main.fragment_week_holder.* +import kotlinx.android.synthetic.main.fragment_week_holder.view.* +import org.joda.time.DateTime + +class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener { + private val PREFILLED_WEEKS = 61 + + private var weekHolder: ViewGroup? = null + private var defaultWeeklyPage = 0 + private var thisWeekTS = 0 + private var currentWeekTS = 0 + private var isGoToTodayVisible = false + private var weekScrollY = 0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val dateTimeString = arguments?.getString(WEEK_START_DATE_TIME) ?: "" + currentWeekTS = (DateTime.parse(dateTimeString) ?: DateTime()).seconds() + thisWeekTS = currentWeekTS + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + weekHolder = inflater.inflate(R.layout.fragment_week_holder, container, false) as ViewGroup + setupFragment() + return weekHolder + } + + private fun shouldGoToTodayBeVisible() = currentWeekTS != thisWeekTS + + private fun setupFragment() { + val weekTSs = getWeekTimestamps(currentWeekTS) + val weeklyAdapter = MyWeekPagerAdapter(activity!!.supportFragmentManager, weekTSs, this) + + val textColor = context!!.config.textColor + weekHolder!!.week_view_hours_holder.removeAllViews() + val hourDateTime = DateTime().withDate(2000, 1, 1).withTime(0, 0, 0, 0) + for (i in 1..23) { + val formattedHours = Formatter.getHours(context!!, hourDateTime.withHourOfDay(i)) + (layoutInflater.inflate(R.layout.weekly_view_hour_textview, null, false) as TextView).apply { + text = formattedHours + setTextColor(textColor) + weekHolder!!.week_view_hours_holder.addView(this) + } + } + + defaultWeeklyPage = weekTSs.size / 2 + weekHolder!!.week_view_view_pager.apply { + adapter = weeklyAdapter + addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + } + + override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { + } + + override fun onPageSelected(position: Int) { + currentWeekTS = weekTSs[position] + val shouldGoToTodayBeVisible = shouldGoToTodayBeVisible() + if (isGoToTodayVisible != shouldGoToTodayBeVisible) { + (activity as? MainActivity)?.toggleGoToTodayVisibility(shouldGoToTodayBeVisible) + isGoToTodayVisible = shouldGoToTodayBeVisible + } + + setupWeeklyActionbarTitle(weekTSs[position]) + } + }) + currentItem = defaultWeeklyPage + } + + weekHolder!!.week_view_hours_scrollview.setOnScrollviewListener(object : MyScrollView.ScrollViewListener { + override fun onScrollChanged(scrollView: MyScrollView, x: Int, y: Int, oldx: Int, oldy: Int) { + weekScrollY = y + weeklyAdapter.updateScrollY(week_view_view_pager.currentItem, y) + } + }) + weekHolder!!.week_view_hours_scrollview.setOnTouchListener { view, motionEvent -> true } + } + + private fun getWeekTimestamps(targetSeconds: Int): List { + val weekTSs = ArrayList(PREFILLED_WEEKS) + for (i in -PREFILLED_WEEKS / 2..PREFILLED_WEEKS / 2) { + weekTSs.add(Formatter.getDateTimeFromTS(targetSeconds).plusWeeks(i).seconds()) + } + return weekTSs + } + + private fun setupWeeklyActionbarTitle(timestamp: Int) { + val startDateTime = Formatter.getDateTimeFromTS(timestamp) + val endDateTime = Formatter.getDateTimeFromTS(timestamp + WEEK_SECONDS) + val startMonthName = Formatter.getMonthName(context!!, startDateTime.monthOfYear) + if (startDateTime.monthOfYear == endDateTime.monthOfYear) { + var newTitle = startMonthName + if (startDateTime.year != DateTime().year) { + newTitle += " - ${startDateTime.year}" + } + (activity as? MainActivity)?.supportActionBar?.title = newTitle + } else { + val endMonthName = Formatter.getMonthName(context!!, endDateTime.monthOfYear) + (activity as? MainActivity)?.supportActionBar?.title = "$startMonthName - $endMonthName" + } + (activity as? MainActivity)?.supportActionBar?.subtitle = "${getString(R.string.week)} ${startDateTime.plusDays(3).weekOfWeekyear}" + } + + override fun goToToday() { + currentWeekTS = thisWeekTS + setupFragment() + } + + override fun refreshEvents() { + setupFragment() + } + + override fun scrollTo(y: Int) { + weekHolder!!.week_view_hours_scrollview.scrollY = y + weekScrollY = y + } + + override fun updateHoursTopMargin(margin: Int) { + weekHolder?.week_view_hours_divider?.layoutParams?.height = margin + weekHolder?.week_view_hours_scrollview?.requestLayout() + } + + override fun getCurrScrollY() = weekScrollY +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/YearFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/YearFragment.kt index 2ea243f09..a7ed06f79 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/YearFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/YearFragment.kt @@ -9,10 +9,10 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import com.simplemobiletools.calendar.R +import com.simplemobiletools.calendar.activities.MainActivity import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.helpers.YEAR_LABEL import com.simplemobiletools.calendar.helpers.YearlyCalendarImpl -import com.simplemobiletools.calendar.interfaces.NavigationListener import com.simplemobiletools.calendar.interfaces.YearlyCalendar import com.simplemobiletools.calendar.models.DayYearly import com.simplemobiletools.calendar.views.SmallMonthView @@ -23,7 +23,6 @@ import org.joda.time.DateTime import java.util.* class YearFragment : Fragment(), YearlyCalendar { - var mListener: NavigationListener? = null private var mYear = 0 private var mSundayFirst = false private var lastHash = 0 @@ -38,7 +37,6 @@ class YearFragment : Fragment(), YearlyCalendar { setupMonths() mCalendar = YearlyCalendarImpl(this, context!!, mYear) - return mView } @@ -56,7 +54,7 @@ class YearFragment : Fragment(), YearlyCalendar { mCalendar?.getEvents(mYear) } - fun setupMonths() { + private fun setupMonths() { val dateTime = DateTime().withDate(mYear, 2, 1).withHourOfDay(12) val days = dateTime.dayOfMonth().maximumValue mView.month_2.setDays(days) @@ -67,12 +65,13 @@ class YearFragment : Fragment(), YearlyCalendar { for (i in 1..12) { val monthView = mView.findViewById(res.getIdentifier("month_" + i, "id", context!!.packageName)) var dayOfWeek = dateTime.withMonthOfYear(i).dayOfWeek().get() - if (!mSundayFirst) + if (!mSundayFirst) { dayOfWeek-- + } monthView.firstDay = dayOfWeek monthView.setOnClickListener { - mListener?.goToDateTime(DateTime().withDate(mYear, i, 1)) + (activity as MainActivity).openMonthFromYearly(DateTime().withDate(mYear, i, 1)) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/YearFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/YearFragmentsHolder.kt new file mode 100644 index 000000000..3022ceb78 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/YearFragmentsHolder.kt @@ -0,0 +1,87 @@ +package com.simplemobiletools.calendar.fragments + +import android.os.Bundle +import android.support.v4.view.ViewPager +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.simplemobiletools.calendar.R +import com.simplemobiletools.calendar.activities.MainActivity +import com.simplemobiletools.calendar.adapters.MyYearPagerAdapter +import com.simplemobiletools.calendar.helpers.Formatter +import com.simplemobiletools.commons.views.MyViewPager +import kotlinx.android.synthetic.main.fragment_viewpager_holder.view.* +import org.joda.time.DateTime + +class YearFragmentsHolder : MyFragmentHolder() { + private val PREFILLED_YEARS = 31 + + private var viewPager: MyViewPager? = null + private var defaultYearlyPage = 0 + private var todayYear = 0 + private var currentYear = 0 + private var isGoToTodayVisible = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + currentYear = DateTime().toString(Formatter.YEAR_PATTERN).toInt() + todayYear = currentYear + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val view = inflater.inflate(R.layout.fragment_viewpager_holder, container, false) + viewPager = view.fragment_viewpager + setupFragment() + return view + } + + private fun shouldGoToTodayBeVisible() = currentYear != todayYear + + private fun setupFragment() { + val years = getYears(currentYear) + val yearlyAdapter = MyYearPagerAdapter(activity!!.supportFragmentManager, years) + defaultYearlyPage = years.size / 2 + + viewPager?.apply { + adapter = yearlyAdapter + addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + } + + override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { + } + + override fun onPageSelected(position: Int) { + currentYear = years[position] + val shouldGoToTodayBeVisible = shouldGoToTodayBeVisible() + if (isGoToTodayVisible != shouldGoToTodayBeVisible) { + (activity as? MainActivity)?.toggleGoToTodayVisibility(shouldGoToTodayBeVisible) + isGoToTodayVisible = shouldGoToTodayBeVisible + } + + if (position < years.size) { + (activity as? MainActivity)?.supportActionBar?.title = "${getString(R.string.app_launcher_name)} - ${years[position]}" + } + } + }) + currentItem = defaultYearlyPage + } + + (activity as? MainActivity)?.supportActionBar?.title = "${getString(R.string.app_launcher_name)} - ${years[years.size / 2]}" + } + + private fun getYears(targetYear: Int): List { + val years = ArrayList(PREFILLED_YEARS) + years += targetYear - PREFILLED_YEARS / 2..targetYear + PREFILLED_YEARS / 2 + return years + } + + override fun goToToday() { + currentYear = todayYear + setupFragment() + } + + override fun refreshEvents() { + setupFragment() + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt index 89a232391..a0f969dd9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt @@ -13,6 +13,7 @@ val EVENT_OCCURRENCE_TS = "event_occurrence_ts" val NEW_EVENT_START_TS = "new_event_start_ts" val WEEK_START_TIMESTAMP = "week_start_timestamp" val NEW_EVENT_SET_HOUR_DURATION = "new_event_set_hour_duration" +val WEEK_START_DATE_TIME = "week_start_date_time" val CALDAV = "Caldav" val MONTHLY_VIEW = 1 diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/WeekFragmentListener.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/WeekFragmentListener.kt new file mode 100644 index 000000000..ba8050983 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/WeekFragmentListener.kt @@ -0,0 +1,9 @@ +package com.simplemobiletools.calendar.interfaces + +interface WeekFragmentListener { + fun scrollTo(y: Int) + + fun updateHoursTopMargin(margin: Int) + + fun getCurrScrollY(): Int +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 78d25712a..2cfdbb257 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,66 +6,11 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_viewpager_holder.xml b/app/src/main/res/layout/fragment_viewpager_holder.xml new file mode 100644 index 000000000..e8f252d3a --- /dev/null +++ b/app/src/main/res/layout/fragment_viewpager_holder.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/layout/fragment_week_holder.xml b/app/src/main/res/layout/fragment_week_holder.xml new file mode 100644 index 000000000..c4bb94854 --- /dev/null +++ b/app/src/main/res/layout/fragment_week_holder.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + +