Loading app/src/main/java/io/eelo/appinstaller/home/HomeFragment.kt +72 −2 Original line number Diff line number Diff line package io.eelo.appinstaller.home import android.arch.lifecycle.Observer import android.arch.lifecycle.ViewModelProviders import android.content.Context import android.graphics.Bitmap import android.os.Bundle import android.os.Handler import android.support.v4.app.Fragment import android.support.v4.view.ViewPager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import io.eelo.appinstaller.R import io.eelo.appinstaller.home.viewmodel.HomeViewModel import android.widget.Scroller class HomeFragment : Fragment() { private lateinit var homeViewModel: HomeViewModel private lateinit var imageCarousel: ViewPager private var imagesList = ArrayList<Bitmap>() override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_home, container, false) val view = inflater.inflate(R.layout.fragment_home, container, false) homeViewModel = ViewModelProviders.of(activity!!).get(HomeViewModel::class.java) imageCarousel = view.findViewById(R.id.image_carousel) imageCarousel.visibility = View.GONE val imageCarouselAdapter = ImageCarouselAdapter(context!!, imagesList) // Initialise the image carousel val scroller = ViewPager::class.java.getDeclaredField("mScroller") scroller.isAccessible = true val imageCarouselScroller = ImageCarouselScroller(context!!) scroller.set(imageCarousel, imageCarouselScroller) imageCarousel.adapter = imageCarouselAdapter homeViewModel.loadCarouselImages() // Bind to the list of images for the carousel homeViewModel.getCarouselImages().observe(this, Observer { imagesList.clear() imagesList.addAll(homeViewModel.getCarouselImages().value!!) imageCarouselAdapter.notifyDataSetChanged() imageCarousel.visibility = View.VISIBLE imageCarousel.setCurrentItem(0, false) ImageCarouselTimer(((imageCarouselAdapter.count - 1) * 4000).toLong(), 4000).start() }) return view } private inner class ImageCarouselTimer(private var millisInFuture: Long, private val countDownInterval: Long) { fun start() { val handler = Handler() val counter = object : Runnable { override fun run() { if (millisInFuture <= 0) { imageCarousel.setCurrentItem(0, true) } else { imageCarousel.setCurrentItem(imageCarousel.currentItem + 1, true) millisInFuture -= countDownInterval handler.postDelayed(this, countDownInterval) } } } handler.postDelayed(counter, countDownInterval) } } // Custom scroller to reduce scrolling animation speed of view pager private inner class ImageCarouselScroller(context: Context) : Scroller(context) { private val mDuration = 2000 override fun startScroll(startX: Int, startY: Int, dx: Int, dy: Int, duration: Int) { super.startScroll(startX, startY, dx, dy, mDuration) } override fun startScroll(startX: Int, startY: Int, dx: Int, dy: Int) { super.startScroll(startX, startY, dx, dy, mDuration) } } } app/src/main/java/io/eelo/appinstaller/home/ImageCarouselAdapter.kt 0 → 100644 +39 −0 Original line number Diff line number Diff line package io.eelo.appinstaller.home import android.content.Context import android.graphics.Bitmap import android.support.v4.view.PagerAdapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.LinearLayout import io.eelo.appinstaller.R class ImageCarouselAdapter(context: Context, private val images: ArrayList<Bitmap>) : PagerAdapter() { private val layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater override fun isViewFromObject(view: View, `object`: Any): Boolean { return view == `object` as LinearLayout } override fun getCount(): Int { return images.size } override fun instantiateItem(container: ViewGroup, position: Int): Any { val itemView = layoutInflater.inflate(R.layout.image_carousel_item, container, false) val imageView = itemView.findViewById(R.id.image) as ImageView imageView.setImageBitmap(images[position]) container.addView(itemView) return itemView } override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { container.removeView(`object` as LinearLayout) } } app/src/main/java/io/eelo/appinstaller/home/model/HomeModel.kt +15 −1 Original line number Diff line number Diff line package io.eelo.appinstaller.home.model import android.arch.lifecycle.MutableLiveData import android.graphics.Bitmap class HomeModel : HomeModelInterface { val imagesList = MutableLiveData<ArrayList<Bitmap>>() init { if (imagesList.value == null) { imagesList.value = ArrayList() } } override fun loadCarouselImages() { // TODO Load carousel images } } app/src/main/java/io/eelo/appinstaller/home/model/HomeModelInterface.kt +2 −1 Original line number Diff line number Diff line package io.eelo.appinstaller.home.model interface HomeModelInterface { fun loadCarouselImages() } app/src/main/java/io/eelo/appinstaller/home/viewModel/HomeViewModel.ktdeleted 100644 → 0 +0 −4 Original line number Diff line number Diff line package io.eelo.appinstaller.home.viewModel class HomeViewModel : HomeViewModelInterface { } No newline at end of file Loading
app/src/main/java/io/eelo/appinstaller/home/HomeFragment.kt +72 −2 Original line number Diff line number Diff line package io.eelo.appinstaller.home import android.arch.lifecycle.Observer import android.arch.lifecycle.ViewModelProviders import android.content.Context import android.graphics.Bitmap import android.os.Bundle import android.os.Handler import android.support.v4.app.Fragment import android.support.v4.view.ViewPager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import io.eelo.appinstaller.R import io.eelo.appinstaller.home.viewmodel.HomeViewModel import android.widget.Scroller class HomeFragment : Fragment() { private lateinit var homeViewModel: HomeViewModel private lateinit var imageCarousel: ViewPager private var imagesList = ArrayList<Bitmap>() override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_home, container, false) val view = inflater.inflate(R.layout.fragment_home, container, false) homeViewModel = ViewModelProviders.of(activity!!).get(HomeViewModel::class.java) imageCarousel = view.findViewById(R.id.image_carousel) imageCarousel.visibility = View.GONE val imageCarouselAdapter = ImageCarouselAdapter(context!!, imagesList) // Initialise the image carousel val scroller = ViewPager::class.java.getDeclaredField("mScroller") scroller.isAccessible = true val imageCarouselScroller = ImageCarouselScroller(context!!) scroller.set(imageCarousel, imageCarouselScroller) imageCarousel.adapter = imageCarouselAdapter homeViewModel.loadCarouselImages() // Bind to the list of images for the carousel homeViewModel.getCarouselImages().observe(this, Observer { imagesList.clear() imagesList.addAll(homeViewModel.getCarouselImages().value!!) imageCarouselAdapter.notifyDataSetChanged() imageCarousel.visibility = View.VISIBLE imageCarousel.setCurrentItem(0, false) ImageCarouselTimer(((imageCarouselAdapter.count - 1) * 4000).toLong(), 4000).start() }) return view } private inner class ImageCarouselTimer(private var millisInFuture: Long, private val countDownInterval: Long) { fun start() { val handler = Handler() val counter = object : Runnable { override fun run() { if (millisInFuture <= 0) { imageCarousel.setCurrentItem(0, true) } else { imageCarousel.setCurrentItem(imageCarousel.currentItem + 1, true) millisInFuture -= countDownInterval handler.postDelayed(this, countDownInterval) } } } handler.postDelayed(counter, countDownInterval) } } // Custom scroller to reduce scrolling animation speed of view pager private inner class ImageCarouselScroller(context: Context) : Scroller(context) { private val mDuration = 2000 override fun startScroll(startX: Int, startY: Int, dx: Int, dy: Int, duration: Int) { super.startScroll(startX, startY, dx, dy, mDuration) } override fun startScroll(startX: Int, startY: Int, dx: Int, dy: Int) { super.startScroll(startX, startY, dx, dy, mDuration) } } }
app/src/main/java/io/eelo/appinstaller/home/ImageCarouselAdapter.kt 0 → 100644 +39 −0 Original line number Diff line number Diff line package io.eelo.appinstaller.home import android.content.Context import android.graphics.Bitmap import android.support.v4.view.PagerAdapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.LinearLayout import io.eelo.appinstaller.R class ImageCarouselAdapter(context: Context, private val images: ArrayList<Bitmap>) : PagerAdapter() { private val layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater override fun isViewFromObject(view: View, `object`: Any): Boolean { return view == `object` as LinearLayout } override fun getCount(): Int { return images.size } override fun instantiateItem(container: ViewGroup, position: Int): Any { val itemView = layoutInflater.inflate(R.layout.image_carousel_item, container, false) val imageView = itemView.findViewById(R.id.image) as ImageView imageView.setImageBitmap(images[position]) container.addView(itemView) return itemView } override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { container.removeView(`object` as LinearLayout) } }
app/src/main/java/io/eelo/appinstaller/home/model/HomeModel.kt +15 −1 Original line number Diff line number Diff line package io.eelo.appinstaller.home.model import android.arch.lifecycle.MutableLiveData import android.graphics.Bitmap class HomeModel : HomeModelInterface { val imagesList = MutableLiveData<ArrayList<Bitmap>>() init { if (imagesList.value == null) { imagesList.value = ArrayList() } } override fun loadCarouselImages() { // TODO Load carousel images } }
app/src/main/java/io/eelo/appinstaller/home/model/HomeModelInterface.kt +2 −1 Original line number Diff line number Diff line package io.eelo.appinstaller.home.model interface HomeModelInterface { fun loadCarouselImages() }
app/src/main/java/io/eelo/appinstaller/home/viewModel/HomeViewModel.ktdeleted 100644 → 0 +0 −4 Original line number Diff line number Diff line package io.eelo.appinstaller.home.viewModel class HomeViewModel : HomeViewModelInterface { } No newline at end of file