package com.example.jsonparsing


import android.app.Notification
import android.os.Bundle
import android.provider.CalendarContract.Colors
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.annotation.RequiresApi
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import com.example.jsonparsing.ui.theme.JsonParsingTheme
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
import android.util.Log
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue

import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.material3.OutlinedTextField
import androidx.compose.runtime.*
import androidx.compose.ui.unit.dp

import androidx.compose.ui.platform.LocalContext

import androidx.compose.ui.unit.dp
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.JsonObject
import com.google.gson.JsonParser
import com.google.gson.JsonSyntaxException
import java.io.File
import java.io.FileReader
import java.io.FileWriter
import java.io.IOException


class MainActivity : ComponentActivity() {
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyScreen(context = this)
}
}
}



@RequiresApi(Build.VERSION_CODES.O)
@Composable
fun MyButton(context:Context){
Button(onClick = {sendNotification(context)}) {
Text(text = "Click Me Bby")
}
}

@RequiresApi(Build.VERSION_CODES.O)
private fun sendNotification(context: Context) {
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

// Create a notification channel
val channelId = "my_channel_id"
val channelName = "My Channel"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel(channelId, channelName, importance)
notificationManager.createNotificationChannel(channel)

// Create a notification
val notification = Notification.Builder(context, channelId)
.setContentTitle("My Notification")
.setContentText("Hello! This is my notification.")
.setSmallIcon(android.R.drawable.ic_dialog_info)
.build()

// Send the notification
notificationManager.notify(1, notification)
}

@RequiresApi(Build.VERSION_CODES.O)
@Composable
fun MyScreen(context: Context) {
val customColor = Color(0xFFFFFFFF)
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.background(customColor)
.fillMaxSize()
) {
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxWidth()
) {
Text(text = "Dhananjay")
Spacer(modifier = Modifier.height(16.dp))
Text(text = "Sharma")
Spacer(modifier = Modifier.height(16.dp))
MyButton(context = context)
Spacer(modifier = Modifier.height(16.dp))
MyForm()
Spacer(modifier = Modifier.height(16.dp))
DisplayDetailsFromJson()
}
}
}




data class FormData(val name: String, val email: String)

@RequiresApi(Build.VERSION_CODES.O)
@Composable
fun MyForm() {
val context = LocalContext.current
var formData by remember { mutableStateOf(FormData("", "")) }

Column(
modifier = Modifier
.fillMaxSize()
) {
OutlinedTextField(
value = formData.name,
onValueChange = { formData = formData.copy(name = it) },
label = { Text("Name") },
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp)
)
OutlinedTextField(
value = formData.email,
onValueChange = { formData = formData.copy(email = it) },
label = { Text("Email") },
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp)
)

Button(
onClick = {
// Save form data as JSON to a file
saveJsonToFile(context, formData)
},
modifier = Modifier.padding(top = 16.dp)
) {
Text("Submit")
}
}
}

@RequiresApi(Build.VERSION_CODES.O)
fun saveJsonToFile(context: android.content.Context, formData: FormData) {
val gson = GsonBuilder().setPrettyPrinting().create()

try {
val fileName = "form_data.json"
val file = File(context.getExternalFilesDir(null), fileName)

// Check if the file exists and read its contents
val existingData = if (file.exists()) {
val reader = FileReader(file)
val jsonObject = JsonParser.parseReader(reader) as JsonObject
reader.close()
jsonObject
} else {
JsonObject()
}

// Create JSON object for new form data
val formDataJson = gson.toJsonTree(formData).asJsonObject

// Add new form data to existing data
val newData = existingData.apply {
addProperty("name", formDataJson.get("name").asString)
addProperty("email", formDataJson.get("email").asString)
}

// Write the updated JSON to the file
val fileWriter = FileWriter(file)
gson.toJson(newData, fileWriter)
fileWriter.close()

Log.d("SaveJsonToFile", "JSON saved to file: $file")
} catch (e: Exception) {
Log.e("SaveJsonToFile", "Error saving JSON to file: ${e.message}")
}
}


@RequiresApi(Build.VERSION_CODES.O)
@Composable
fun DisplayDetailsFromJson() {
val context = LocalContext.current
var formData by remember { mutableStateOf(FormData("", "")) }

// Read JSON from file and deserialize it
LaunchedEffect(key1 = Unit) {
try {
val file = File(context.getExternalFilesDir(null), "form_data.json")
val json = file.readText()
val gson = Gson()
formData = gson.fromJson(json, FormData::class.java)
} catch (e: IOException) {
Log.e("DisplayDetailsFromJson", "Error reading JSON from file: ${e.message}")
} catch (e: JsonSyntaxException) {
Log.e("DisplayDetailsFromJson", "Error deserializing JSON: ${e.message}")
}
}

// Display details from form data
Surface(color = Color.White) {
Column(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
) {
Text(text = "Name: ${formData.name}", modifier = Modifier.padding(16.dp))
Text(text = "Email: ${formData.email}", modifier = Modifier.padding(16.dp))
}
}
}




Comments