0% found this document useful (0 votes)
5 views32 pages

Android Game Operator Activity Code

The document outlines the structure and functionality of an Android application for managing game plays, including an AndroidManifest.xml file defining activities and permissions, and Kotlin code for the OperatorActivity class which handles user interactions for submitting game plays. The UI includes spinners for game selection, input fields for play numbers and amounts, and buttons for adding and submitting plays. The AdminActivity class is also defined, allowing for viewing game data and operator totals, along with data cleanup functionality.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views32 pages

Android Game Operator Activity Code

The document outlines the structure and functionality of an Android application for managing game plays, including an AndroidManifest.xml file defining activities and permissions, and Kotlin code for the OperatorActivity class which handles user interactions for submitting game plays. The UI includes spinners for game selection, input fields for play numbers and amounts, and buttons for adding and submitting plays. The AdminActivity class is also defined, allowing for viewing game data and operator totals, along with data cleanup functionality.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

• AndroidManifest.

xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="[Link]
package="[Link]">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/[Link]">

<!-- Activities -->


<activity android:name=".AdminActivity" />
<activity android:name=".OperatorActivity" />
<activity android:name=".GameDataActivity" />
<activity android:name=".OperatorTotalsActivity" />
<activity android:name=".OperatorViewDataActivity" />

<!-- LoginActivity is now the launcher -->


<activity android:name=".LoginActivity"
android:exported="true">
<intent-filter>
<action android:name="[Link]" />
<category android:name="[Link]" />
</intent-filter>
</activity>

</application>

<uses-permission android:name="[Link]" />


<uses-permission android:name="[Link].ACCESS_NETWORK_STATE" />
</manifest>

ktlin+ java -

[Link] – with time span


package [Link]

import [Link]
import [Link]
import [Link].*
import [Link]
import [Link]
import [Link]
import [Link]
import [Link].*

class OperatorActivity : AppCompatActivity() {

private lateinit var database: DatabaseReference


private lateinit var operatorId: String
private val pendingMap = linkedMapOf<String, Int>() // preserves order
private lateinit var listAdapter: ArrayAdapter<String>

private val games = listOf(


"Milan Day", "Kalyan", "Main Mumbai", "Milan Night",
"Sridevi", "Time Bazar", "Rajdhani Day", "Rajdhani Night"
)

private val types = listOf(


"Jodi", "Open", "Close",
"Single Patti", "Double Patti", "Triple Patti",
"Half Sangam", "Full Sangam", "Jackpot"
)

override fun onCreate(savedInstanceState: Bundle?) {


[Link](savedInstanceState)
setContentView([Link].activity_operator)

database = [Link]().reference
operatorId = [Link]().currentUser?.uid ?: "unknown"

val spinnerGames = findViewById<Spinner>([Link])


val spinnerGameType = findViewById<Spinner>([Link])
val etPlayNo = findViewById<EditText>([Link])
val etAmount = findViewById<EditText>([Link])
val btnAddPlay = findViewById<Button>([Link])
val listView = findViewById<ListView>([Link])
val btnSubmitPlays = findViewById<Button>([Link])
val btnViewMyData = findViewById<Button>([Link])
val tvRestriction = findViewById<TextView>([Link])

// Setup spinners
[Link] = ArrayAdapter(this, [Link].simple_spinner_dropdown_item, games)
[Link] = ArrayAdapter(this, [Link].simple_spinner_dropdown_item, types)

// Update restriction notice on game change


[Link] = object : [Link] {
override fun onItemSelected(parent: AdapterView<*>, view: [Link]?, pos: Int, id: Long) {
val game = games[pos]
[Link] = restrictionMessage(game)
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}

// List adapter for pending plays


listAdapter = ArrayAdapter(this, [Link].simple_list_item_1, mutableListOf())
[Link] = listAdapter

[Link] {
val playNoRaw = [Link]().trim()
val amount = [Link]().trim().toIntOrNull()

if ([Link]() || amount == null || amount <= 0) {


[Link](this, "Enter valid Play No & Amount", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (![Link](Regex("^[0-9]+(-[0-9]+)*$"))) {
[Link](this, "Invalid Play No format", Toast.LENGTH_LONG).show()
return@setOnClickListener
}

val selectedGame = [Link]?.toString() ?: games[0]


val selectedType = [Link]?.toString() ?: types[0]

val key = "$selectedGame|$selectedType|$playNoRaw"


pendingMap[key] = (pendingMap[key] ?: 0) + amount

refreshPlayList()
[Link]()
[Link]()
}

// Remove entry on long press


[Link] { _, _, pos, _ ->
val key = [Link](pos)
if (key != null) {
[Link](key)
refreshPlayList()
}
true
}

[Link] {
if ([Link]()) {
[Link](this, "No plays to submit", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}

val toSubmit = [Link]()


var submitted = 0
var totalAmount = 0

for ((key, amt) in toSubmit) {


val parts = [Link]("|")
if ([Link] < 3) continue
val game = parts[0]; val type = parts[1]; val playNo = parts[2]

if (!canSubmitPlay(game, type)) continue

val gameRef = [Link]("games").child(game).child(type).child(operatorId)


val entry = mapOf("amount" to amt, "ts" to [Link]())
[Link](playNo).push().setValue(entry)

submitted++; totalAmount += amt


[Link](key)
}

refreshPlayList()
[Link](this, "Submitted $submitted plays, Total ₹$totalAmount", Toast.LENGTH_LONG).show()
}

[Link] {
startActivity(Intent(this, OperatorViewDataActivity::[Link]))
}
}
private fun refreshPlayList() {
[Link]()
for ((key, amt) in pendingMap) {
val parts = [Link]("|")
[Link]("${parts[0]} • ${parts[1]} • ${parts[2]} → ₹$amt")
}
[Link]()
}

private fun restrictionMessage(game: String): String = when (game) {


"Milan Day" -> "⚠ Submit Open till 1:45 PM, Close till 3:45 PM"
"Kalyan" -> "⚠ Submit Open till 4:00 PM, Close till 5:00 PM"
"Main Mumbai" -> "⚠ Submit Open till 9:00 PM, Close till 11:30 PM"
"Milan Night" -> "⚠ Submit Open till 8:40 PM, Close till 10:50 PM"
"Sridevi" -> "⚠ Submit Open till 11:30 AM, Close till 12:30 PM"
"Time Bazar" -> "⚠ Submit Open till 12:30 PM, Close till 2:45 PM"
"Rajdhani Day" -> "⚠ Submit Open till 2:30 PM, Close till 4:30 PM"
"Rajdhani Night" -> "⚠ Submit Open till 8:30 PM, Close till 11:15 PM"
else -> ""
}

private fun canSubmitPlay(game: String, type: String): Boolean {


val cal = [Link]([Link]("Asia/Kolkata"))
val h = [Link](Calendar.HOUR_OF_DAY)
val m = [Link]([Link])
fun before(hh: Int, mm: Int) = h < hh || (h == hh && m <= mm)
return when (game) {
"Milan Day" -> if (type == "Close") before(15,45) else before(13,45)
"Kalyan" -> if (type == "Close") before(17,0) else before(16,0)
"Main Mumbai" -> if (type == "Close") before(23,30) else before(21,0)
"Milan Night" -> if (type == "Close") before(22,50) else before(20,40)
"Sridevi" -> if (type == "Close") before(12,30) else before(11,30)
"Time Bazar" -> if (type == "Close") before(14,45) else before(12,30)
"Rajdhani Day" -> if (type == "Close") before(16,30) else before(14,30)
"Rajdhani Night" -> if (type == "Close") before(23,15) else before(20,30)
else -> true
}
}

override fun onBackPressed() {


[Link]()
[Link]().signOut()
}
}

xlm file

activity_operator.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<!-- Game Selection -->


<Spinner
android:id="@+id/spinnerGames"
android:layout_width="match_parent"
android:layout_height="56dp"
android:spinnerMode="dropdown"
android:layout_marginBottom="8dp" />

<!-- Game Type Selection -->


<Spinner
android:id="@+id/spinnerGameType"
android:layout_width="match_parent"
android:layout_height="56dp"
android:spinnerMode="dropdown"
android:layout_marginBottom="8dp" />

<!-- Restriction Notice -->


<TextView
android:id="@+id/tvRestrictionNotice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="⚠ Select a game to see submission times"
android:textColor="@android:color/holo_red_dark"
android:padding="8dp"
android:layout_marginBottom="12dp" />

<!-- Play No input -->


<EditText
android:id="@+id/etPlayNo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Play Number (e.g. 3-555)"
android:minHeight="48dp"
android:padding="12dp"
android:inputType="text"
android:digits="0123456789-"
android:layout_marginBottom="8dp" />

<!-- Amount input -->


<EditText
android:id="@+id/etAmount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Amount"
android:minHeight="48dp"
android:padding="12dp"
android:inputType="number"
android:layout_marginBottom="12dp" />

<!-- Add Play -->


<Button
android:id="@+id/btnAddPlay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add Play" />

<!-- List of temporary plays -->


<ListView
android:id="@+id/listPlays"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:dividerHeight="1dp"
android:layout_marginTop="8dp" />

<!-- Submit -->


<Button
android:id="@+id/btnSubmitPlays"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Submit Plays" />

<!-- View my submitted data -->


<Button
android:id="@+id/btnViewMyData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="View My Submitted Data"
android:layout_marginTop="12dp" />

</LinearLayout>

[Link]
package [Link]

import [Link]
import [Link]
import [Link].*
import [Link]
import [Link]
import [Link].*

class AdminActivity : AppCompatActivity() {

private lateinit var spinnerGames: Spinner


private lateinit var tvTotalAmount: TextView
private lateinit var btnViewGameData: Button
private lateinit var btnViewOperatorTotals: Button
private lateinit var btnCleanupData: Button

private lateinit var database: DatabaseReference


private var totalsListener: ValueEventListener? = null

private val games = listOf(


"Milan Day", "Kalyan", "Main Mumbai", "Milan Night",
"Sridevi", "Time Bazar", "Rajdhani Day", "Rajdhani Night"
)

private var selectedGame: String = games[0]

override fun onCreate(savedInstanceState: Bundle?) {


[Link](savedInstanceState)
setContentView([Link].activity_admin)

spinnerGames = findViewById([Link])
tvTotalAmount = findViewById([Link])
btnViewGameData = findViewById([Link])
btnViewOperatorTotals = findViewById([Link])
btnCleanupData = findViewById([Link])

database = [Link]().getReference("games")

[Link] = ArrayAdapter(this, [Link].simple_spinner_dropdown_item, games)

[Link] = object : [Link] {


override fun onItemSelected(parent: AdapterView<*>, view: [Link]?, pos: Int, id: Long) {
selectedGame = games[pos]
attachTotalsListener(selectedGame)
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}

[Link] {
startActivity(Intent(this, GameDataActivity::[Link]))
}

[Link] {
startActivity(Intent(this, OperatorTotalsActivity::[Link]))
}

[Link] {
cleanupOldData()
}

//✅ Modern back press handling


[Link](this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// Optional: logout or just finish activity
finish()
}
})
}

private fun attachTotalsListener(game: String) {


totalsListener?.let { [Link](game).removeEventListener(it) }

totalsListener = object : ValueEventListener {


override fun onDataChange(snapshot: DataSnapshot) {
if (![Link]()) {
[Link] = "No data found for $game"
return
}

val typeTotals = mutableMapOf<String, Int>()


var grandTotal = 0

for (typeSnap in [Link]) {


val typeName = [Link] ?: continue
var typeSum = 0

for (op in [Link]) {


for (play in [Link]) {
for (entry in [Link]) {
val amt = [Link]("amount").getValue(Int::[Link]) ?: 0
typeSum += amt
grandTotal += amt
}
}
}
typeTotals[typeName] = typeSum
}

val sb = StringBuilder("Totals for $game:\n")


[Link] { (type, sum) ->
[Link]("• $type: ₹$sum\n")
}
[Link]("\nGrand Total: ₹$grandTotal")

[Link] = [Link]()
}

override fun onCancelled(error: DatabaseError) {


[Link] = "⚠ DB Error: ${[Link]}"
}
}

[Link](game).addValueEventListener(totalsListener!!)
}

private fun cleanupOldData() {


val cutoff = [Link]() - (12 * 60 * 60 * 1000)

for (game in games) {


[Link](game)
.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
for (type in [Link]) {
for (op in [Link]) {
for (play in [Link]) {
for (entry in [Link]) {
val ts = [Link]("ts").getValue(Long::[Link]) ?: 0L
if (ts < cutoff) {
[Link]()
}
}
}
}
}
}
override fun onCancelled(error: DatabaseError) {}
})

}
}
[Link](this, " 🧹 Old data (>12h) cleaned!", Toast.LENGTH_LONG).show()

override fun onDestroy() {


[Link]()
totalsListener?.let {
[Link](selectedGame).removeEventListener(it)
}
}
}

xlm -

activity_admin.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Admin Dashboard"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginBottom="16dp" />

<!-- Game selection -->


<Spinner
android:id="@+id/spinnerGames"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:padding="12dp"
android:layout_marginBottom="12dp" />

<!-- Display total -->


<TextView
android:id="@+id/tvTotalAmount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Total: ₹0"
android:textSize="18sp"
android:textStyle="bold"
android:padding="8dp"
android:background="@android:color/darker_gray"
android:textColor="@android:color/black" />

<!-- Buttons -->


<Button
android:id="@+id/btnViewGameData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="View Game Data"
android:layout_marginTop="16dp" />

<Button
android:id="@+id/btnViewOperatorTotals"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="View Operator Totals"
android:layout_marginTop="16dp"
android:padding="16dp"
android:backgroundTint="@color/purple_500"
android:textColor="@android:color/white" />

<!-- Cleanup Button -->


<Button
android:id="@+id/btnCleanupData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Cleanup Old Data (12h)"
android:layout_marginTop="16dp"
android:padding="16dp"
android:backgroundTint="@android:color/holo_red_dark"
android:textColor="@android:color/white" />
</LinearLayout>

[Link]
package [Link]

import [Link]
import [Link]
import [Link]
import [Link].*
import [Link]
import [Link]
import [Link]
import [Link].*

class GameDataActivity : AppCompatActivity() {

private lateinit var spinnerGame: Spinner


private lateinit var spinnerType: Spinner
private lateinit var rvData: RecyclerView
private lateinit var tvTotal: TextView
private lateinit var btnShare: Button
private lateinit var adapter: GameDataAdapter
private lateinit var db: DatabaseReference

private var lastReport: String = ""

private val games = listOf(


"Milan Day", "Kalyan", "Main Mumbai", "Milan Night",
"Sridevi", "Time Bazar", "Rajdhani Day", "Rajdhani Night"
)

private val types = listOf(


"All",
"Jodi", "Open", "Close",
"Single Patti", "Double Patti", "Triple Patti",
"Half Sangam", "Full Sangam", "Jackpot"
)

override fun onCreate(savedInstanceState: Bundle?) {


[Link](savedInstanceState)
setContentView([Link].activity_game_data)

db = [Link]().reference
spinnerGame = findViewById([Link])
spinnerType = findViewById([Link])
rvData = findViewById([Link])
tvTotal = findViewById([Link])
btnShare = findViewById([Link])

[Link] = LinearLayoutManager(this)
adapter = GameDataAdapter()
[Link] = adapter

[Link] = ArrayAdapter(this, [Link].simple_spinner_dropdown_item, games)


[Link] = ArrayAdapter(this, [Link].simple_spinner_dropdown_item, types)

val listener = object : [Link] {


override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
val game = [Link]?.toString() ?: return
val type = [Link]?.toString() ?: "All"
loadGameData(game, type)
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}

[Link] = listener
[Link] = listener

[Link] { shareReport() }
}

private fun loadGameData(game: String, typeFilter: String) {


[Link]("games").child(game).addListenerForSingleValueEvent(object: ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val totals = mutableMapOf<String, Int>()
var grandTotal = 0

[Link](" 📊
val sb = StringBuilder()
Game Data Report\n")
[Link]("Game: $game\nType: $typeFilter\n")
[Link]("-------------------\n")

for (typeSnap in [Link]) {


val typeName = [Link] ?: continue
if (typeFilter != "All" && typeFilter != typeName) continue

for (opSnap in [Link]) {


for (playNoSnap in [Link]) {
val playNo = [Link] ?: continue
var sum = 0
for (entry in [Link]) {
val amt = [Link]("amount").getValue(Int::[Link]) ?: 0
sum += amt
}
if (sum > 0) {
val key = "$playNo ($typeName)"
totals[key] = (totals[key] ?: 0) + sum
grandTotal += sum
}
}
}
}

val rows = [Link] { PlayEntry([Link], [Link]) }


[Link](rows)

if ([Link]()) {
[Link] = "No data"
lastReport = ""
} else {
[Link]([Link]("\n") { "${[Link]} : ₹${[Link]}" })
[Link]("\n\nGRAND TOTAL: ₹$grandTotal")
[Link] = "Overall Total: ₹$grandTotal"
lastReport = [Link]()
}
}

override fun onCancelled(error: DatabaseError) {


[Link](this@GameDataActivity, "Error: ${[Link]}", Toast.LENGTH_SHORT).show()
}
})
}

private fun shareReport() {


if ([Link]()) {
[Link](this, "No data to share", Toast.LENGTH_SHORT).show()
return
}
val i = Intent(Intent.ACTION_SEND)
[Link] = "text/plain"
[Link](Intent.EXTRA_TEXT, lastReport)
try { startActivity(i) }
catch (e: Exception) { [Link](this, "No share app found", Toast.LENGTH_SHORT).show() }
}
}

activity_game_data.xml,

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<!-- Game Spinner -->


<Spinner
android:id="@+id/spinnerSelectGame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:padding="12dp"
android:spinnerMode="dropdown" />

<!-- Type Spinner -->


<Spinner
android:id="@+id/spinnerSelectType"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:padding="12dp"
android:layout_marginTop="12dp"
android:spinnerMode="dropdown" />

<!-- Recycler -->


<[Link]
android:id="@+id/rvGameData"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="12dp" />

<!-- Totals -->


<TextView
android:id="@+id/tvTotalAmountGame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overall_total_placeholder"
android:textSize="16sp"
android:textStyle="bold"
android:gravity="center_horizontal"
android:padding="12dp" />

<!-- Share -->


<Button
android:id="@+id/btnShareGameData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:text="@string/share_report"
android:layout_marginTop="12dp" />

</LinearLayout>

[Link]
package [Link]

import [Link]
import [Link]
import [Link]
import [Link]
import [Link]

class GameDataAdapter : [Link]<[Link]>() {

private val items = mutableListOf<PlayEntry>()

class ViewHolder(itemView: View) : [Link](itemView) {


val tvPlayNo: TextView = [Link]([Link])
val tvAmount: TextView = [Link]([Link])
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {


val v = [Link]([Link]).inflate([Link].item_game_data, parent, false)
return ViewHolder(v)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {


val e = items[position]
[Link] = [Link]
[Link] = "₹${[Link]}"
}

override fun getItemCount(): Int = [Link]

fun updateData(newItems: List<PlayEntry>) {


[Link]()
[Link](newItems)
notifyDataSetChanged()
}
}

[Link]

package [Link]

import [Link]
import [Link]
import [Link].*
import [Link]
import [Link]
import [Link]

class LoginActivity : AppCompatActivity() {

private lateinit var etEmail: EditText


private lateinit var etPassword: EditText
private lateinit var btnLogin: Button
private lateinit var auth: FirebaseAuth

override fun onCreate(savedInstanceState: Bundle?) {


[Link](savedInstanceState)
setContentView([Link].login_activity)

auth = [Link]()
etEmail = findViewById([Link])
etPassword = findViewById([Link])
btnLogin = findViewById([Link])

[Link] { loginUser() }
}

private fun loginUser() {


val email = [Link]().trim()
val password = [Link]().trim()

if ([Link]() || [Link]()) {
[Link](this, "Enter Email and Password", Toast.LENGTH_SHORT).show()
return
}

[Link](email, password)
.addOnSuccessListener { result ->
val uid = [Link]?.uid ?: return@addOnSuccessListener

[Link]().getReference("users")
.child(uid).child("role").get()
.addOnSuccessListener { roleSnap ->
val role = [Link](String::[Link]) ?: "operator"

if (role == "admin") {
startActivity(Intent(this, AdminActivity::[Link]))
} else {
val intent = Intent(this, OperatorActivity::[Link])
[Link]("operatorId", uid)
startActivity(intent)
}
finish()
}
}
.addOnFailureListener {
[Link](this, "Login failed: ${[Link]}", Toast.LENGTH_SHORT).show()
}
}
}

login_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:gravity="center"
android:orientation="vertical"
android:padding="24dp">

<!-- App Title -->


<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GAME CHANGER"
android:textSize="28sp"
android:textColor="#1A73E8"
android:fontFamily="@font/poppins_bold"
android:layout_marginBottom="36dp" />

<!-- Email -->


<EditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:hint="Email"
android:inputType="textEmailAddress"
android:padding="12dp"
android:background="@android:drawable/edit_text"
android:fontFamily="@font/poppins_regular" />

<!-- Password -->


<EditText
android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:hint="Password"
android:inputType="textPassword"
android:padding="12dp"
android:background="@android:drawable/edit_text"
android:fontFamily="@font/poppins_regular"
android:layout_marginTop="12dp" />

<!-- Login Button -->


<Button
android:id="@+id/btnLogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:text="LOGIN"
android:textAllCaps="true"
android:fontFamily="@font/poppins_bold"
android:textColor="@android:color/white"
android:backgroundTint="#1A73E8"
android:layout_marginTop="20dp" />

</LinearLayout>

[Link]

package [Link]

data class OperatorTotal(


val playNo: String,
val totalAmount: Int
)

[Link]
package [Link]

import [Link]
import [Link]
import [Link].*
import [Link]
import [Link]
import [Link]
import [Link].*

class OperatorTotalsActivity : AppCompatActivity() {

private lateinit var spinnerOperator: Spinner


private lateinit var spinnerGame: Spinner
private lateinit var spinnerType: Spinner
private lateinit var rvTotals: RecyclerView
private lateinit var tvTotal: TextView
private lateinit var btnShare: Button

private lateinit var adapter: GameDataAdapter


private lateinit var db: DatabaseReference

private val operatorMap = mutableMapOf<String, String>() // email → uid


private var lastReport = ""
private val games = listOf(
"Milan Day", "Kalyan", "Main Mumbai", "Milan Night",
"Sridevi", "Time Bazar", "Rajdhani Day", "Rajdhani Night"
)
private val types = listOf(
"All",
"Jodi", "Open", "Close",
"Single Patti", "Double Patti", "Triple Patti",
"Half Sangam", "Full Sangam", "Jackpot"
)

override fun onCreate(savedInstanceState: Bundle?) {


[Link](savedInstanceState)
setContentView([Link].activity_operator_totals)

db = [Link]().reference
spinnerOperator = findViewById([Link])
spinnerGame = findViewById([Link])
spinnerType = findViewById([Link])
rvTotals = findViewById([Link])
tvTotal = findViewById([Link])
btnShare = findViewById([Link])

[Link] = LinearLayoutManager(this)
adapter = GameDataAdapter()
[Link] = adapter

loadOperators()

[Link] = ArrayAdapter(this, [Link].simple_spinner_dropdown_item, games)


[Link] = ArrayAdapter(this, [Link].simple_spinner_dropdown_item, types)

val listener = object : [Link] {


override fun onItemSelected(parent: AdapterView<*>, v: [Link]?, pos: Int, id: Long) {
fetchTotals()
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}
[Link] = listener
[Link] = listener
[Link] = listener

[Link] { shareReport() }
}

private fun loadOperators() {


[Link]("users").addListenerForSingleValueEvent(object: ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val emails = mutableListOf<String>()
[Link]()
for (child in [Link]) {
val uid = [Link] ?: continue
val role = [Link]("role").getValue(String::[Link]) ?: ""
val email = [Link]("email").getValue(String::[Link]) ?: uid
if (role == "operator") {
[Link](email)
operatorMap[email] = uid
}
}
[Link] = ArrayAdapter(
this@OperatorTotalsActivity,
[Link].simple_spinner_dropdown_item,
emails
)
}
override fun onCancelled(error: DatabaseError) {
[Link](this@OperatorTotalsActivity, "Failed to load operators: ${[Link]}",
Toast.LENGTH_SHORT).show()
}
})
}

private fun fetchTotals() {


val operatorEmail = [Link]?.toString() ?: return
val game = [Link]?.toString() ?: return
val type = [Link]?.toString() ?: "All"
val uid = operatorMap[operatorEmail] ?: return

[Link]("games").child(game).addListenerForSingleValueEvent(object: ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
val rows = mutableListOf<PlayEntry>()
var grandTotal = 0

[Link](" 📊
val sb = StringBuilder()
Operator Totals\nOperator: $operatorEmail\nGame: $game\nType: $type\n-------------------\n")

for (typeSnap in [Link]) {


val tName = [Link] ?: continue
if (type != "All" && tName != type) continue
val opSnap = [Link](uid)
for (playNoSnap in [Link]) {
val playNo = [Link] ?: continue
var sum = 0
for (entry in [Link]) {
val amt = [Link]("amount").getValue(Int::[Link]) ?: 0
sum += amt
}
if (sum > 0) {
[Link](PlayEntry("$playNo ($tName)", sum))
[Link]("$playNo [$tName] : ₹$sum\n")
grandTotal += sum
}
}
}

if ([Link]()) {
[Link] = [Link]
[Link] = getString([Link].no_data)
lastReport = ""
} else {
[Link] = [Link]
[Link](rows)
[Link]("\nGRAND TOTAL: ₹$grandTotal")
[Link] = "Overall Total: ₹$grandTotal"
lastReport = [Link]()
}
}
override fun onCancelled(error: DatabaseError) {
[Link](this@OperatorTotalsActivity, "DB Error: ${[Link]}", Toast.LENGTH_SHORT).show()
}
})
}

private fun shareReport() {


if ([Link]()) {
[Link](this, "No data to share", Toast.LENGTH_SHORT).show()
return
}
val i = Intent(Intent.ACTION_SEND)
[Link] = "text/plain"
[Link](Intent.EXTRA_TEXT, lastReport)
try { startActivity(i) }
catch (e: Exception) { [Link](this, "No share app found", Toast.LENGTH_SHORT).show() }
}
}

activity_operator_totals.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<!-- Operator Selection -->


<Spinner
android:id="@+id/spinnerOperatorTotals"
android:layout_width="match_parent"
android:layout_height="56dp"
android:spinnerMode="dropdown"
android:layout_marginBottom="8dp" />

<!-- Game Selection -->


<Spinner
android:id="@+id/spinnerGameTotals"
android:layout_width="match_parent"
android:layout_height="56dp"
android:spinnerMode="dropdown"
android:layout_marginBottom="8dp" />

<!-- Game Type Selection -->


<Spinner
android:id="@+id/spinnerTypeTotals"
android:layout_width="match_parent"
android:layout_height="56dp"
android:spinnerMode="dropdown"
android:layout_marginBottom="12dp" />

<!-- RecyclerView -->


<[Link]
android:id="@+id/rvOperatorTotals"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="8dp" />

<!-- No Data -->


<TextView
android:id="@+id/tvNoDataTotals"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="No data available"
android:gravity="center"
android:textColor="@android:color/darker_gray"
android:visibility="gone"
android:layout_marginTop="8dp" />

<!-- Total -->


<TextView
android:id="@+id/tvTotalAmountTotals"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Overall Total: ₹0"
android:textSize="16sp"
android:textStyle="bold"
android:layout_marginTop="8dp" />

<!-- Share Report -->


<Button
android:id="@+id/btnShareTotals"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Share Report"
android:layout_marginTop="12dp" />

</LinearLayout>

[Link]
package [Link]

import [Link]
import [Link]
import [Link]
import [Link]
import [Link]

class OperatorTotalsAdapter(private var operatorTotals: List<OperatorTotal>) :


[Link]<[Link]>() {

class OperatorTotalsViewHolder(itemView: View) : [Link](itemView) {


val tvPlayNo: TextView = [Link]([Link])
val tvAmount: TextView = [Link]([Link])
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OperatorTotalsViewHolder {


val view = [Link]([Link])
.inflate([Link].item_operator_total, parent, false)
return OperatorTotalsViewHolder(view)
}
override fun onBindViewHolder(holder: OperatorTotalsViewHolder, position: Int) {
val item = operatorTotals[position]
[Link] = [Link]
[Link] = "₹${[Link]}"
}

override fun getItemCount(): Int = [Link]

fun updateData(newList: List<OperatorTotal>) {


operatorTotals = newList
notifyDataSetChanged()
}
}

[Link]
package [Link]

import [Link]
import [Link]
import [Link]
import [Link].*
import [Link]
import [Link]
import [Link]
import [Link]
import [Link].*
import [Link]
import [Link].*

class OperatorViewDataActivity : AppCompatActivity() {

private lateinit var db: DatabaseReference


private lateinit var spinnerGame: Spinner
private lateinit var spinnerType: Spinner
private lateinit var rvData: RecyclerView
private lateinit var adapter: GameDataAdapter
private lateinit var tvTotal: TextView
private lateinit var tvNoData: TextView
private lateinit var btnShare: Button

private var lastReport: String = ""

private val games = listOf(


"Milan Day", "Kalyan", "Main Mumbai", "Milan Night",
"Sridevi", "Time Bazar", "Rajdhani Day", "Rajdhani Night"
)

private val types = listOf(


"All",
"Jodi", "Open", "Close",
"Single Patti", "Double Patti", "Triple Patti",
"Half Sangam", "Full Sangam", "Jackpot"
)

override fun onCreate(savedInstanceState: Bundle?) {


[Link](savedInstanceState)
setContentView([Link].activity_operator_view_data)
db = [Link]().reference
spinnerGame = findViewById([Link])
spinnerType = findViewById([Link])
rvData = findViewById([Link])
tvTotal = findViewById([Link])
tvNoData = findViewById([Link])
btnShare = findViewById([Link])

[Link] = LinearLayoutManager(this)
adapter = GameDataAdapter()
[Link] = adapter

[Link] = ArrayAdapter(this, [Link].simple_spinner_dropdown_item, games)


[Link] = ArrayAdapter(this, [Link].simple_spinner_dropdown_item, types)

val listener = object : [Link] {


override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
val game = [Link]?.toString() ?: return
val type = [Link]?.toString() ?: "All"
loadMyData(game, type)
}
override fun onNothingSelected(parent: AdapterView<*>) {}
}

[Link] = listener
[Link] = listener

[Link] { shareReport() }
}

private fun loadMyData(game: String, typeFilter: String) {


val uid = [Link]().currentUser?.uid ?: return

[Link]("users").child(uid).child("email").get()
.addOnSuccessListener { emailSnap ->
val operatorEmail = [Link](String::[Link]) ?: "Unknown Operator"

val rows = mutableListOf<PlayEntry>()


var grandTotal = 0
val sb = StringBuilder()
val time = SimpleDateFormat("dd-MM-yyyy HH:mm:ss", [Link]()).format(Date())

[Link](" 📊 My Submitted Data\n")


[Link]("Operator: $operatorEmail\n")
[Link]("Game: $game\nType: $typeFilter\nGenerated: $time\n-------------------\n")

if (typeFilter == "All") {
var pending = [Link] - 1
for (t in types) {
if (t == "All") continue
[Link]("games").child(game).child(t).child(uid)
.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snap: DataSnapshot) {
var typeSum = 0
for (playNoSnap in [Link]) {
val playNo = [Link] ?: continue
var sum = 0
for (entry in [Link]) {
val amt = [Link]("amount").getValue(Int::[Link]) ?: 0
sum += amt
}
if (sum > 0) {
[Link](PlayEntry("$playNo ($t)", sum))
[Link]("$playNo [$t] : ₹$sum\n")
typeSum += sum
grandTotal += sum
}
}
if (typeSum > 0) [Link]("➡ $t TOTAL: ₹$typeSum\n")
pending--
if (pending == 0) finalize(rows, grandTotal, sb)
}
override fun onCancelled(error: DatabaseError) {
pending--
if (pending == 0) finalize(rows, grandTotal, sb)
}
})
}
} else {
[Link]("games").child(game).child(typeFilter).child(uid)
.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snap: DataSnapshot) {
var typeSum = 0
for (playNoSnap in [Link]) {
val playNo = [Link] ?: continue
var sum = 0
for (entry in [Link]) {
val amt = [Link]("amount").getValue(Int::[Link]) ?: 0
sum += amt
}
if (sum > 0) {
[Link](PlayEntry(playNo, sum))
[Link]("$playNo [$typeFilter] : ₹$sum\n")
typeSum += sum
grandTotal += sum
}
}
if (typeSum > 0) [Link]("➡ $typeFilter TOTAL: ₹$typeSum\n")
finalize(rows, grandTotal, sb)
}
override fun onCancelled(error: DatabaseError) {
[Link](this@OperatorViewDataActivity, "DB Error: ${[Link]}",
Toast.LENGTH_SHORT).show()
}
})
}
}
}

private fun finalize(rows: List<PlayEntry>, grandTotal: Int, sb: StringBuilder) {


if ([Link]()) {
[Link] = [Link]
[Link] = [Link]
[Link] = ""
lastReport = ""
} else {
[Link] = [Link]
[Link] = [Link]
[Link](rows)
[Link]("\nGRAND TOTAL: ₹$grandTotal")
[Link] = "Overall Total: ₹$grandTotal"
lastReport = [Link]()
}
}

private fun shareReport() {


if ([Link]()) {
[Link](this, "No data to share", Toast.LENGTH_SHORT).show()
return
}
val i = Intent(Intent.ACTION_SEND)
[Link] = "text/plain"
[Link](Intent.EXTRA_TEXT, lastReport)
try { startActivity(i) }
catch (e: Exception) { [Link](this, "No share app found", Toast.LENGTH_SHORT).show() }
}
}

[Link]
package [Link]

import [Link]
import [Link]
import [Link]
import [Link]
import [Link]

class OperatorViewDataAdapter(private val items: List<Pair<String, Int>>) :


[Link]<[Link]>() {

class ViewHolder(view: View) : [Link](view) {


val tvPlay: TextView = [Link]([Link])
val tvAmount: TextView = [Link]([Link])
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {


val view = [Link]([Link])
.inflate([Link].item_operator_view_data, parent, false)
return ViewHolder(view)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {


val (play, amount) = items[position]
[Link] = play
[Link] = "₹$amount"
}

override fun getItemCount(): Int = [Link]


}
[Link]

package [Link]

data class PlayEntry(


val playNo: String,
val amount: Int
)

[Link]
package [Link]

import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]

class PlayTotalsAdapter(private var items: List<PlayEntry>) :


[Link]<[Link]>() {

inner class ViewHolder(view: View) : [Link](view) {


val tvPlayNo: TextView = [Link]([Link])
val tvAmount: TextView = [Link]([Link])
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {


val v = [Link]([Link])
.inflate([Link].item_play_total, parent, false)
return ViewHolder(v)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {


val entry = items[position]
[Link] = [Link]
[Link] = "₹${[Link]}"

//✅
if ([Link]().contains("TOTAL")) {
Highlight TOTAL rows
[Link](null, [Link])
[Link](null, [Link])

🔵 🔴
val color = when ([Link]()) {
"GRAND TOTAL" -> [Link].holo_red_dark // highlight grand total
else -> [Link].holo_blue_dark // highlight type totals
}

[Link]([Link]([Link], color))
[Link]([Link]([Link], color))
[Link](
[Link]([Link], [Link].darker_gray)
)

//✅
} else {
Normal rows
[Link](null, [Link])
[Link](null, [Link])
[Link]([Link]([Link], [Link]))
[Link]([Link]([Link],
[Link].holo_green_dark))
[Link](
[Link]([Link], [Link])
)
}
}

override fun getItemCount(): Int = [Link]

fun updateData(newItems: List<PlayEntry>) {


items = newItems
notifyDataSetChanged()
}

//✅ Add this getter


fun getItems(): List<PlayEntry> = items
}

activity_operator_view_data.xml,

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<!-- Select Game -->


<Spinner
android:id="@+id/spinnerSelectGame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:padding="12dp"
android:spinnerMode="dropdown" />

<!-- Select Type -->


<Spinner
android:id="@+id/spinnerSelectType"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:padding="12dp"
android:layout_marginTop="12dp"
android:spinnerMode="dropdown" />

<!-- Recycler -->


<[Link]
android:id="@+id/rvOperatorData"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="12dp" />
<!-- No Data Label -->
<TextView
android:id="@+id/tvNoData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_data"
android:visibility="gone"
android:layout_gravity="center"
android:textSize="16sp"
android:textColor="@android:color/holo_red_dark"
android:layout_marginTop="12dp" />

<!-- Total -->


<TextView
android:id="@+id/tvTotalAmount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/overall_total_placeholder"
android:textSize="16sp"
android:textStyle="bold"
android:padding="12dp"
android:gravity="center_horizontal" />

<!-- Share -->


<Button
android:id="@+id/btnShareMyData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:text="@string/share_report"
android:layout_marginTop="12dp" />

</LinearLayout>

item_game_data.xml,

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:gravity="center_vertical">

<TextView
android:id="@+id/tvPlayNo"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:text="123-123"
android:textSize="16sp"
android:textColor="@android:color/black" />

<TextView
android:id="@+id/tvAmount"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="end"
android:text="₹0"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="@android:color/holo_green_dark" />
</LinearLayout>

item_operator_total.xml,

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:gravity="center_vertical"
android:background="?android:attr/selectableItemBackground">

<!-- Operator Email -->


<TextView
android:id="@+id/tvOperatorEmail"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="operator@[Link]"
android:textSize="14sp"
android:textColor="@android:color/black"
android:ellipsize="end"
android:singleLine="true" />

<!-- Type -->


<TextView
android:id="@+id/tvType"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="Jodi"
android:textSize="14sp"
android:gravity="center"
android:textColor="@android:color/darker_gray" />

<!-- Play No -->


<TextView
android:id="@+id/tvPlayNo"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="123"
android:textSize="16sp"
android:textStyle="bold"
android:gravity="center"
android:textColor="@android:color/black" />

<!-- Amount -->


<TextView
android:id="@+id/tvAmount"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="end"
android:text="₹0"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="@android:color/holo_green_dark" />

</LinearLayout>

item_operator_view_data.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp">

<TextView
android:id="@+id/tvPlay"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Play No"
android:textSize="16sp"/>

<TextView
android:id="@+id/tvAmount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="₹0"
android:textSize="16sp"
android:textStyle="bold"/>
</LinearLayout>

item_play.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:background="?attr/selectableItemBackground">

<TextView
android:id="@+id/tvPlayNo"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Play 12"
android:textSize="16sp"/>

<TextView
android:id="@+id/tvAmount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="₹100"
android:textStyle="bold"
android:textSize="16sp"/>
</LinearLayout>

item_play_total.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:background="?android:attr/selectableItemBackground">

<!-- GameType + Play No -->


<TextView
android:id="@+id/tvPlayNo"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Jodi - 12"
android:textSize="16sp"
android:textColor="@android:color/black"
android:ellipsize="end"
android:singleLine="true" />

<!-- Amount -->


<TextView
android:id="@+id/tvAmount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="₹100"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="@android:color/holo_green_dark" />
</LinearLayout>

[Link]
<resources>
<string name="app_name">Game Changer</string>
<!-- Operator / Admin labels -->

<string name="operator_totals">Operator Totals</string>

<!-- Common -->

<!-- Labels for Play totals -->


<string name="play_no">Play No</string>

<string name="total">Total</string>
<string name="total_placeholder">Total: ₹0</string>
<!-- Admin -->
<string name="admin_dashboard">Admin Dashboard</string>
<string name="add_operator">Add Operator</string>
<string name="view_game_data">View Game Data</string>
<string name="view_operator_totals">View Operator Totals</string>
<string name="operator_removed">Operator removed</string>
<string name="operator_added">Operator added</string>
<string name="enter_email_password">Enter email &amp; password</string>

<!-- Operator -->


<string name="operator_dashboard">Operator Dashboard</string>
<string name="operator_username">Operator Username</string>
<string name="operator_password">Operator Password</string>
<string name="play_number">Play Number</string>
<string name="amount">Amount</string>
<string name="add_play">Add Play</string>
<string name="submit_plays">Submit Plays</string>
<string name="view_my_data">View My Submitted Data</string>
<string name="enter_valid_play">Enter valid Play No and Amount</string>
<string name="no_plays_to_submit">No plays to submit</string>
<string name="submitted_to_game">Submitted %1$d plays to %2$s</string>

<!-- Operator View Data -->


<string name="my_submitted_data">My Submitted Data</string>
<string name="total_amount">Total: ₹%1$d</string>
<string name="please_select_game">Please select a game first</string>

<string name="no_data">No data available</string>


<string name="admin_panel">Admin Panel</string>
<string name="new_operator_username">New Operator Username</string>
<string name="new_operator_password">New Operator Password</string>
<string name="select_game">Select Game</string>
<string name="select_type">Select Type</string>
<string name="select_operator">Select Operator</string>
<string name="overall_total">Overall Total: ₹0</string>
<string name="share_report">Share Report</string>
<string name="overall_total_placeholder">Overall Total: ₹0</string>
<string name="operators_label">Operators:</string>
<string name="login">Login</string>
<string name="username">Username</string>
<string name="password">Password</string>
<string name="login_successful">Login successful</string>
<string name="incorrect_password">Incorrect password</string>
<string name="user_not_found">User not found</string>

<string name="restriction_placeholder">Select a game to see time restrictions</string>


<string name="play_number_hint">Play Number (e.g. 3-555)</string>
<string name="amount_hint">Amount</string>

<!-- Admin Panel -->


<string-array name="game_list">
<item>Sridevi</item>
<item>Kalyan</item>
<item>Pune</item>
</string-array>

</resources>
poppins_bold.xml
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="[Link]
<font
android:fontStyle="normal"
android:fontWeight="700"
android:font="@font/poppins_bold_ttf" />
</font-family>

poppins_regular.xml
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="[Link]
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/poppins_regular_ttf" />
</font-family>

edittext_background.xml

<shape xmlns:android="[Link]
android:shape="rectangle">
<solid android:color="@android:color/white" />
<stroke android:width="1dp" android:color="#DDDDDD" />
<corners android:radius="8dp" />
<padding android:left="8dp" android:top="8dp"
android:right="8dp" android:bottom="8dp"/>
</shape>

You might also like