```package com.example.jrmapp2 import android.acc...
# android
s
Copy code
package com.example.jrmapp2

import android.accounts.Account
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.Spinner
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.credentials.CredentialManager
import androidx.credentials.GetCredentialRequest
import com.google.android.libraries.identity.googleid.GetGoogleIdOption
import androidx.credentials.exceptions.GetCredentialException
import androidx.credentials.exceptions.NoCredentialException
import com.google.android.libraries.identity.googleid.GetSignInWithGoogleOption


import androidx.lifecycle.lifecycleScope
import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential
import com.google.api.client.http.javanet.NetHttpTransport
import com.google.api.client.json.gson.GsonFactory
import com.google.api.services.drive.Drive
import com.google.api.services.drive.DriveScopes
import com.google.api.services.drive.model.File as DriveFile
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.ByteArrayOutputStream

class MainActivity : AppCompatActivity() {

    private lateinit var driveService: Drive
    private lateinit var spinner: Spinner

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)



        // Initialize UI components
        spinner = findViewById(R.id.spinner)
        val closeButton: Button = findViewById(R.id.closeButton)
        val openButton: Button = findViewById(R.id.openButton)

        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        startGoogleSignIn()

        closeButton.setOnClickListener { finish() }
        openButton.setOnClickListener {
            val intent = Intent(this, MainActivity2::class.java)
            startActivity(intent)
        }


    }

    private fun startGoogleSignIn() {
        val credentialManager = CredentialManager.create(applicationContext)

        // Replace with your actual Web Client ID from Google Cloud Console
        val googleIdOption = GetGoogleIdOption.Builder()
            .setServerClientId("515018532-pjgll997ds3r60mbg.apps.googleusercontent.com")
            .setFilterByAuthorizedAccounts(false)
            .build()

        val request = GetCredentialRequest.Builder()
            .addCredentialOption(googleIdOption)
            .build()

        lifecycleScope.launch {
            try {
                val result = credentialManager.getCredential(this@MainActivity,request)
                val googleCred = GoogleIdTokenCredential.createFrom(result.credential.data)

                // Get user account
                val email = googleCred.id ?: "" // Using .id as the primary identifier
                val account = Account(email, "com.google")
             //   --- START: ADDED CODE ---
                // Display a success message to the user
                withContext(Dispatchers.Main) {
                    Toast.makeText(
                        applicationContext,
                        "Successfully signed in as $email",
                        Toast.LENGTH_SHORT
                    ).show()
                }
                // --- END: ADDED CODE -
                // Initialize the Drive Service
                driveService = getDriveService(this@MainActivity, account)

                // Fetch files from a specific folder (replace 'root' or a specific ID)
                fetchDriveFiles("1BYFxtbF9O1QEMpmzg-PcqU")

            } catch (e: Exception) {
                Log.e("Credential", "Sign-in failed", e)
            }
        }
    }

    private fun getDriveService(context: Context, account: Account): Drive {
        val credential = GoogleAccountCredential.usingOAuth2(
            //context, listOf(DriveScopes.DRIVE_FILE, DriveScopes.DRIVE_METADATA_READONLY)
            context, listOf(DriveScopes.DRIVE_READONLY) // Changed from DRIVE_FILE
        )
        credential.selectedAccount = account

        return Drive.Builder(NetHttpTransport(), GsonFactory.getDefaultInstance(), credential)
            .setApplicationName("JRM app2")
            .build()
    }

    private fun fetchDriveFiles(folderId: String) {
        lifecycleScope.launch(Dispatchers.IO) {
            try {
                val query = "'$folderId' in parents and trashed = false"
                val result = driveService.files().list()
                    .setQ(query)
                    .setFields("files(id, name)")
                    .execute()

                val files = result.files ?: emptyList()
                withContext(Dispatchers.Main) {
                    updateSpinner(files)
                }
            } catch (e: Exception) {
                Log.e("Drive", "Error fetching files", e)
            }
        }
    }

    private fun updateSpinner(fileList: List<DriveFile>) {
        val fileNames = fileList.map { it.name ?: "Unknown File" }
        val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, fileNames)
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

        spinner.adapter = adapter
        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                val selectedFileId = fileList[position].id
                openDriveFile(selectedFileId)
            }
            override fun onNothingSelected(parent: AdapterView<*>?) {}
        }
    }

    private fun openDriveFile(fileId: String) {
        lifecycleScope.launch(Dispatchers.IO) {
            try {
                val outputStream = ByteArrayOutputStream()
                driveService.files().get(fileId).executeMediaAndDownloadTo(outputStream)
                Log.d("Drive", "File downloaded, size: ${outputStream.size()}")
                // Further processing of outputStream here
            } catch (e: Exception) {
                Log.e("Drive", "Error downloading file", e)
            }
        }
    }
}