1
+ package com.launium.mcping.ui.home
2
+
3
+ import android.graphics.Color
4
+ import android.os.Bundle
5
+ import android.text.SpannableStringBuilder
6
+ import android.view.LayoutInflater
7
+ import android.view.View
8
+ import android.view.ViewGroup
9
+ import android.widget.Button
10
+ import android.widget.TextView
11
+ import android.widget.Toast
12
+ import androidx.fragment.app.Fragment
13
+ import androidx.lifecycle.ViewModelProvider
14
+ import androidx.lifecycle.viewModelScope
15
+ import androidx.recyclerview.widget.LinearLayoutManager
16
+ import androidx.recyclerview.widget.RecyclerView
17
+ import com.google.android.material.bottomsheet.BottomSheetDialog
18
+ import com.google.android.material.color.MaterialColors
19
+ import com.google.android.material.resources.MaterialAttributes
20
+ import com.launium.mcping.R
21
+ import com.launium.mcping.databinding.FragmentHomeBinding
22
+ import com.launium.mcping.databinding.ServerItemBinding
23
+ import com.launium.mcping.server.MinecraftServer
24
+ import java.util.Random
25
+
26
+ class HomeFragment : Fragment () {
27
+
28
+ private var _binding : FragmentHomeBinding ? = null
29
+
30
+ // This property is only valid between onCreateView and
31
+ // onDestroyView.
32
+ private val binding get() = _binding !!
33
+
34
+ private var adapter = Adapter ()
35
+
36
+ override fun onCreateView (
37
+ inflater : LayoutInflater ,
38
+ container : ViewGroup ? ,
39
+ savedInstanceState : Bundle ?
40
+ ): View {
41
+ _binding = FragmentHomeBinding .inflate(inflater, container, false )
42
+
43
+ // set recycler view
44
+ val linearLayoutManager = LinearLayoutManager (requireContext())
45
+ linearLayoutManager.orientation = LinearLayoutManager .VERTICAL
46
+ binding.container.layoutManager = linearLayoutManager
47
+ binding.container.adapter = adapter
48
+
49
+ return binding.root
50
+ }
51
+
52
+ override fun onDestroyView () {
53
+ super .onDestroyView()
54
+ _binding = null
55
+ }
56
+
57
+ private class Adapter : RecyclerView .Adapter <ServerView >() {
58
+
59
+ lateinit var servers: List <MinecraftServer >
60
+
61
+ init {
62
+ servers = listOf (
63
+ MinecraftServer (" first" , " hello" ),
64
+ MinecraftServer (" second" , " world" ),
65
+ MinecraftServer (" third" , " !" ),
66
+ MinecraftServer (" this" , " " ),
67
+ MinecraftServer (" is good!" , " " ),
68
+ )
69
+ }
70
+
71
+ override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): ServerView {
72
+ return ServerView (
73
+ ServerItemBinding .inflate(
74
+ LayoutInflater .from(parent.context),
75
+ parent,
76
+ false
77
+ ),
78
+ )
79
+ }
80
+
81
+ override fun getItemCount (): Int {
82
+ if (! ::servers.isInitialized) {
83
+ return 0
84
+ }
85
+ return servers.size
86
+ }
87
+
88
+ override fun onBindViewHolder (holder : ServerView , position : Int ) {
89
+ holder.bind(servers[position])
90
+ }
91
+
92
+ }
93
+
94
+ private class ServerView (val binding : ServerItemBinding ) :
95
+ RecyclerView .ViewHolder (binding.root) {
96
+
97
+ lateinit var server: MinecraftServer
98
+
99
+ fun bind (server : MinecraftServer ) {
100
+ this .server = server
101
+ binding.button.text = server.name
102
+ binding.pingText.text
103
+ binding.pingText.text = R .string.server_latency_message.toString()
104
+ .format(System .currentTimeMillis())
105
+
106
+ binding.button.setOnClickListener {
107
+ ServerSheetDialog (binding.root.context, server).show()
108
+ }
109
+ }
110
+
111
+ }
112
+
113
+ }
0 commit comments