 
   fileprivate lazy var headerViewController = MDCFlexibleHeaderViewController()
 
-  private lazy var inkController: MDCInkTouchController = {
-    let controller = MDCInkTouchController(view: self.collectionView!)
-    controller.delaysInkSpread = true
+  private lazy var rippleController: MDCRippleTouchController = {
+    let controller = MDCRippleTouchController()
     controller.delegate = self
+    controller.shouldProcessRippleWithScrollViewGestures = false
     return controller
   }()
 

// See the License for the specific language governing permissions and
// limitations under the License.

import CatalogByConvention
import MaterialCatalog

import MaterialComponents.MaterialFlexibleHeader
import MaterialComponents.MaterialIcons_ic_arrow_back
import MaterialComponents.MaterialInk
import MaterialComponents.MaterialLibraryInfo
import MaterialComponents.MaterialShadowElevations
import MaterialComponents.MaterialShadowLayer
import MaterialComponents.MaterialThemes
import MaterialComponents.MaterialTypography

import UIKit

class MDCCatalogComponentsController: UICollectionViewController, UICollectionViewDelegateFlowLayout, MDCInkTouchControllerDelegate {

  fileprivate struct Constants {
    static let headerScrollThreshold: CGFloat = 30

    return node.children.count
  }

  // MARK: MDCRippleTouchControllerDelegate

  func rippleTouchController(
    _ rippleTouchController: MDCRippleTouchController,
    shouldProcessRippleTouchesAtTouchLocation location: CGPoint
  ) -> Bool {
    return self.collectionView?.indexPathForItem(at: location) != nil
  }

  func rippleTouchController(
    _ rippleTouchController: MDCRippleTouchController,
    rippleViewAtTouchLocation location: CGPoint
  ) -> MDCRippleView? {
    if let indexPath = self.collectionView?.indexPathForItem(at: location) {
      let cell = self.collectionView?.cellForItem(at: indexPath)
      return MDCRippleView.injectedRippleView(for: cell!)
    }
    return MDCRippleView()
  }

  // MARK: UICollectionViewDelegate
