• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
<lambda>null2  * Copyright (C) 2022 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 package com.android.test.silkfx
17 
18 import android.app.Activity
19 import android.content.Context
20 import android.content.Intent
21 import android.os.Bundle
22 import android.view.LayoutInflater
23 import android.view.View
24 import android.view.ViewGroup
25 import android.widget.BaseExpandableListAdapter
26 import android.widget.ExpandableListView
27 import android.widget.TextView
28 import com.android.test.silkfx.app.CommonDemoActivity
29 import com.android.test.silkfx.app.EXTRA_LAYOUT
30 import com.android.test.silkfx.app.EXTRA_TITLE
31 import com.android.test.silkfx.hdr.GlowActivity
32 import com.android.test.silkfx.materials.GlassActivity
33 import com.android.test.silkfx.materials.BackgroundBlurActivity
34 import kotlin.reflect.KClass
35 
36 class Demo(val name: String, val makeIntent: (Context) -> Intent) {
37     constructor(name: String, activity: KClass<out Activity>) : this(name, { context ->
38         Intent(context, activity.java)
39     })
40     constructor(name: String, layout: Int) : this(name, { context ->
41         Intent(context, CommonDemoActivity::class.java).apply {
42             putExtra(EXTRA_LAYOUT, layout)
43             putExtra(EXTRA_TITLE, name)
44         }
45     })
46 }
47 data class DemoGroup(val groupName: String, val demos: List<Demo>)
48 
49 private val AllDemos = listOf(
50         DemoGroup("HDR", listOf(
51                 Demo("Glow", GlowActivity::class),
52                 Demo("Blingy Notifications", R.layout.bling_notifications)
53         )),
54         DemoGroup("Materials", listOf(
55                 Demo("Glass", GlassActivity::class),
56                 Demo("Background Blur", BackgroundBlurActivity::class)
57         ))
58 )
59 
60 class Main : Activity() {
61 
onCreatenull62     public override fun onCreate(savedInstanceState: Bundle?) {
63         super.onCreate(savedInstanceState)
64 
65         val list = ExpandableListView(this)
66 
67         setContentView(list)
68 
69         val inflater = LayoutInflater.from(this)
70         list.setAdapter(object : BaseExpandableListAdapter() {
71             override fun getGroup(groupPosition: Int): DemoGroup {
72                 return AllDemos[groupPosition]
73             }
74 
75             override fun isChildSelectable(groupPosition: Int, childPosition: Int): Boolean = true
76 
77             override fun hasStableIds(): Boolean = true
78 
79             override fun getGroupView(
80                 groupPosition: Int,
81                 isExpanded: Boolean,
82                 convertView: View?,
83                 parent: ViewGroup?
84             ): View {
85                 val view = (convertView ?: inflater.inflate(
86                         android.R.layout.simple_expandable_list_item_1, parent, false)) as TextView
87                 view.text = AllDemos[groupPosition].groupName
88                 return view
89             }
90 
91             override fun getChildrenCount(groupPosition: Int): Int {
92                 return AllDemos[groupPosition].demos.size
93             }
94 
95             override fun getChild(groupPosition: Int, childPosition: Int): Demo {
96                 return AllDemos[groupPosition].demos[childPosition]
97             }
98 
99             override fun getGroupId(groupPosition: Int): Long = groupPosition.toLong()
100 
101             override fun getChildView(
102                 groupPosition: Int,
103                 childPosition: Int,
104                 isLastChild: Boolean,
105                 convertView: View?,
106                 parent: ViewGroup?
107             ): View {
108                 val view = (convertView ?: inflater.inflate(
109                         android.R.layout.simple_expandable_list_item_1, parent, false)) as TextView
110                 view.text = AllDemos[groupPosition].demos[childPosition].name
111                 return view
112             }
113 
114             override fun getChildId(groupPosition: Int, childPosition: Int): Long {
115                 return (groupPosition.toLong() shl 32) or childPosition.toLong()
116             }
117 
118             override fun getGroupCount(): Int {
119                 return AllDemos.size
120             }
121         })
122 
123         list.setOnChildClickListener { _, _, groupPosition, childPosition, _ ->
124             val demo = AllDemos[groupPosition].demos[childPosition]
125             startActivity(demo.makeIntent(this))
126             return@setOnChildClickListener true
127         }
128 
129         AllDemos.forEachIndexed { index, _ -> list.expandGroup(index) }
130     }
131 }
132