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 8e649f185..542950a73 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -18,8 +18,10 @@ import com.simplemobiletools.calendar.dialogs.ChangeViewDialog import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.updateWidgets import com.simplemobiletools.calendar.fragments.EventListFragment +import com.simplemobiletools.calendar.fragments.WeekFragment import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.helpers.Formatter +import com.simplemobiletools.calendar.views.MyScrollView import com.simplemobiletools.commons.extensions.checkWhatsNew import com.simplemobiletools.commons.extensions.updateTextColors import com.simplemobiletools.commons.helpers.LICENSE_JODA @@ -40,6 +42,10 @@ class MainActivity : SimpleActivity(), EventListFragment.DeleteListener { private var mEventListFragment: EventListFragment? = null private var mStoredTextColor = 0 + companion object { + var mWeekScrollY = 0 + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -116,6 +122,8 @@ class MainActivity : SimpleActivity(), EventListFragment.DeleteListener { val targetDay = DateTime().toString(Formatter.DAYCODE_PATTERN) fillMonthlyViewPager(targetDay) } + + mWeekScrollY = 0 } private fun launchSettings() { @@ -161,7 +169,12 @@ class MainActivity : SimpleActivity(), EventListFragment.DeleteListener { } private fun fillWeeklyViewPager() { - val weeklyAdapter = MyWeekPagerAdapter(supportFragmentManager) + val weeklyAdapter = MyWeekPagerAdapter(supportFragmentManager, object : WeekFragment.WeekScrollListener { + override fun scrollTo(y: Int) { + week_view_hours_scrollview.scrollY = y + mWeekScrollY = y + } + }) main_view_pager.visibility = View.GONE calendar_event_list_holder.visibility = View.GONE main_weekly_scrollview.visibility = View.VISIBLE @@ -173,6 +186,15 @@ class MainActivity : SimpleActivity(), EventListFragment.DeleteListener { view.text = if (value.length == 2) value else "0$value" week_view_hours_holder.addView(view) } + + week_view_view_pager.adapter = weeklyAdapter + + 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) + } + }) } private fun fillYearlyViewPager() { 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 32f70fd6c..1d88ae55f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyWeekPagerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/MyWeekPagerAdapter.kt @@ -4,16 +4,26 @@ 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.WeekFragment -class MyWeekPagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) { +class MyWeekPagerAdapter(fm: FragmentManager, private val mListener: WeekFragment.WeekScrollListener) : FragmentStatePagerAdapter(fm) { + private val mFragments = SparseArray() - override fun getCount() = 1 + override fun getCount() = 3 override fun getItem(position: Int): Fragment { val bundle = Bundle() val fragment = WeekFragment() fragment.arguments = bundle + fragment.setListener(mListener) + + mFragments.put(position, fragment) return fragment } + + fun updateScrollY(pos: Int, y: Int) { + (-1..1).map { mFragments[pos + it] } + .forEach { it?.updateScrollY(y) } + } } 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 df42eabe8..c92f0f2bb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt @@ -5,17 +5,36 @@ import android.support.v4.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.ViewTreeObserver import com.simplemobiletools.calendar.R +import com.simplemobiletools.calendar.activities.MainActivity import com.simplemobiletools.calendar.helpers.DBHelper import com.simplemobiletools.calendar.models.Event +import com.simplemobiletools.calendar.views.MyScrollView +import kotlinx.android.synthetic.main.fragment_week.view.* import java.util.* import kotlin.comparisons.compareBy class WeekFragment : Fragment(), DBHelper.GetEventsListener { - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - val view = inflater.inflate(R.layout.fragment_week, container, false) + private var mListener: WeekScrollListener? = null + lateinit var mView: View - return view + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + mView = inflater.inflate(R.layout.fragment_week, container, false) + + mView.week_events_scrollview.setOnScrollviewListener(object : MyScrollView.ScrollViewListener { + override fun onScrollChanged(scrollView: MyScrollView, x: Int, y: Int, oldx: Int, oldy: Int) { + mListener?.scrollTo(y) + } + }) + + mView.week_events_scrollview.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { + override fun onGlobalLayout() { + updateScrollY(MainActivity.mWeekScrollY) + mView.week_events_scrollview.viewTreeObserver.removeOnGlobalLayoutListener(this) + } + }) + return mView } override fun gotEvents(events: MutableList) { @@ -24,4 +43,16 @@ class WeekFragment : Fragment(), DBHelper.GetEventsListener { } } + + fun setListener(listener: WeekScrollListener) { + mListener = listener + } + + fun updateScrollY(y: Int) { + mView.week_events_scrollview.scrollY = y + } + + interface WeekScrollListener { + fun scrollTo(y: Int) + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MyScrollView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MyScrollView.kt new file mode 100644 index 000000000..4750bc660 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MyScrollView.kt @@ -0,0 +1,28 @@ +package com.simplemobiletools.calendar.views + +import android.content.Context +import android.util.AttributeSet +import android.widget.ScrollView + +class MyScrollView : ScrollView { + constructor(context: Context) : super(context) + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + + constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) + + var scrollViewListener: ScrollViewListener? = null + + fun setOnScrollviewListener(scrollViewListener: ScrollViewListener) { + this.scrollViewListener = scrollViewListener + } + + override fun onScrollChanged(x: Int, y: Int, oldx: Int, oldy: Int) { + super.onScrollChanged(x, y, oldx, oldy) + scrollViewListener?.onScrollChanged(this, x, y, oldx, oldy) + } + + interface ScrollViewListener { + fun onScrollChanged(scrollView: MyScrollView, x: Int, y: Int, oldx: Int, oldy: Int) + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d233eac76..d78cd6a19 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,7 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + android:layout_marginTop="@dimen/weekly_view_day_letters_height" + android:overScrollMode="never" + android:scrollbars="none"> - + + + + - + - + android:layout_height="match_parent" + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7a3e9d3f6..7abca9b40 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -4,6 +4,8 @@ 6dp 60dp + 1440dp + 24dp 250dp 250dp