1 /* 2 * Copyright 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.compose.integration.macrobenchmark.target 18 19 import android.os.Bundle 20 import android.view.LayoutInflater 21 import android.view.View 22 import android.view.ViewGroup 23 import android.widget.TextView 24 import androidx.appcompat.app.AppCompatActivity 25 import androidx.recyclerview.widget.LinearLayoutManager 26 import androidx.recyclerview.widget.PagerSnapHelper 27 import androidx.recyclerview.widget.RecyclerView 28 29 class RecyclerViewAsCarouselActivity : AppCompatActivity() { onCreatenull30 override fun onCreate(savedInstanceState: Bundle?) { 31 super.onCreate(savedInstanceState) 32 setContentView(R.layout.activity_view_carousel) 33 val pager = findViewById<RecyclerView>(R.id.carousel) 34 pager.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) 35 val itemCount = intent.getIntExtra(ExtraItemCount, 3000) 36 val adapter = RecyclerViewAdapter(itemCount) 37 val scroller = PagerSnapHelper() 38 scroller.attachToRecyclerView(pager) 39 pager.adapter = adapter 40 launchIdlenessTracking() 41 } 42 43 companion object { 44 const val ExtraItemCount = "ITEM_COUNT" 45 } 46 } 47 48 private class RecyclerViewAdapter(val items: Int) : 49 RecyclerView.Adapter<RecyclerViewAsPagerViewHolder>() { onCreateViewHoldernull50 override fun onCreateViewHolder( 51 parent: ViewGroup, 52 viewType: Int 53 ): RecyclerViewAsPagerViewHolder { 54 val view = 55 LayoutInflater.from(parent.context) 56 .inflate(R.layout.recycler_view_as_carousel_item, parent, false) 57 58 return RecyclerViewAsPagerViewHolder(view) 59 } 60 onBindViewHoldernull61 override fun onBindViewHolder(holder: RecyclerViewAsPagerViewHolder, position: Int) { 62 holder.bind(position.toString()) 63 } 64 getItemCountnull65 override fun getItemCount(): Int = items 66 } 67 68 @Suppress("PROPERTY_HIDES_JAVA_FIELD") 69 private class RecyclerViewAsPagerViewHolder(val itemView: View) : 70 RecyclerView.ViewHolder(itemView) { 71 fun bind(item: String) { 72 itemView.findViewById<TextView>(R.id.view_carousel_item).text = item 73 } 74 } 75