package
com.example.newcanaryproject
import
android.Manifest
import
android.app.Activity
import
android.content.*
import
android.os.Bundle
import
android.os.Environment
import
android.widget.Toast
import
androidx.activity.ComponentActivity
import
androidx.activity.compose.setContent
import
androidx.compose.foundation.layout.*
import
androidx.compose.material.*
import
androidx.compose.runtime.Composable
import
androidx.compose.runtime.mutableStateOf
import
androidx.compose.runtime.remember
import
androidx.compose.ui.Alignment
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.graphics.Color
import
androidx.compose.ui.platform.LocalContext
import
androidx.compose.ui.text.TextStyle
import
androidx.compose.ui.text.font.FontWeight
import
androidx.compose.ui.text.style.TextAlign
import
androidx.compose.ui.unit.dp
import
androidx.compose.ui.unit.sp
import
androidx.core.app.ActivityCompat
import
com.example.newcanaryproject.ui.theme.NewCanaryProjectTheme
import
com.example.newcanaryproject.ui.theme.greenColor
import
java.io.File
import
java.io.FileInputStream
import
java.io.FileOutputStream
import
java.io.IOException
class
MainActivity : ComponentActivity() {
var message =
""
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
setContent {
NewCanaryProjectTheme {
Surface(
modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background
) {
Scaffold(
topBar = {
TopAppBar(backgroundColor = greenColor,
title = {
Text(
text =
"GFG"
,
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center,
color = Color.White
)
})
}) {
saveDataToExternalStorage(context = LocalContext.current, message)
}
}
}
}
}
}
@Composable
fun saveDataToExternalStorage(context: Context, msg: String) {
val message = remember {
mutableStateOf(
""
)
}
val txtMsg = remember {
mutableStateOf(
""
)
}
val activity = context as Activity
Column(
modifier = Modifier
.fillMaxSize()
.padding(all =
30
.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
Text(
text =
"External Storage in Android"
,
color = greenColor,
textAlign = TextAlign.Center,
fontSize =
20
.sp,
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(
10
.dp))
TextField(
value = message.value,
onValueChange = { message.value = it },
placeholder = { Text(text =
"Enter your message"
) },
modifier = Modifier
.padding(
16
.dp)
.fillMaxWidth(),
textStyle = TextStyle(color = Color.Black, fontSize =
15
.sp),
singleLine =
true
,
)
Spacer(modifier = Modifier.height(
10
.dp))
Row(
modifier = Modifier
.fillMaxWidth()
.padding(all =
10
.dp),
horizontalArrangement = Arrangement.Center
) {
Button(
onClick = {
ActivityCompat.requestPermissions(
activity, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
23
)
val folder: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
val file = File(folder,
"geeksData.txt"
)
writeTextData(file, message.value, context)
message.value =
""
Toast.makeText(context,
"Data saved publicly.."
, Toast.LENGTH_SHORT).show()
},
modifier = Modifier
.padding(
5
.dp)
.width(
120
.dp)
) {
Text(text =
"Save Publicly"
, textAlign = TextAlign.Center)
}
Spacer(modifier = Modifier.width(
10
.dp))
Button(
onClick = {
val folder: File? = context.getExternalFilesDir(
"GeeksForGeeks"
)
val file = File(folder,
"gfg.txt"
)
writeTextData(file, message.value, context)
message.value =
""
Toast.makeText(context,
"Data saved privately"
, Toast.LENGTH_SHORT).show()
},
modifier = Modifier
.padding(
5
.dp)
.width(
120
.dp)
) {
Text(text =
"Save Privately"
, textAlign = TextAlign.Center)
}
}
Spacer(modifier = Modifier.height(
100
.dp))
Text(
text =
"Data will appear below : \n"
+ txtMsg.value,
color = greenColor,
textAlign = TextAlign.Center,
fontSize =
20
.sp,
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(
10
.dp))
Row(
modifier = Modifier
.fillMaxWidth()
.fillMaxSize()
.padding(all =
20
.dp),
horizontalArrangement = Arrangement.Center
) {
Button(
onClick = {
val folder =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
val file = File(folder,
"geeksData.txt"
)
val data: String = getdata(file)
if
(data !=
null
&& data !=
""
) {
txtMsg.value = data
}
else
{
txtMsg.value =
"No Data Found"
}
},
modifier = Modifier
.padding(
5
.dp)
.width(
120
.dp)
) {
Text(text =
"View\nPublic"
, textAlign = TextAlign.Center)
}
Spacer(modifier = Modifier.width(
10
.dp))
Button(
onClick = {
val folder: File? = context.getExternalFilesDir(
"GeeksForGeeks"
)
val file = File(folder,
"gfg.txt"
)
val data = getdata(file)
if
(data !=
null
) {
txtMsg.value = data
}
else
{
txtMsg.value =
"No Data Found"
}
},
modifier = Modifier
.padding(
5
.dp)
.width(
120
.dp)
) {
Text(text =
"View\nPrivate"
, textAlign = TextAlign.Center)
}
}
}
}
private
fun getdata(myfile: File): String {
var fileInputStream: FileInputStream? =
null
try
{
fileInputStream = FileInputStream(myfile)
var i = -
1
val buffer = StringBuffer()
while
(fileInputStream.read().also { i = it } != -
1
) {
buffer.append(i.toChar())
}
return
buffer.toString()
}
catch
(e: java.lang.Exception) {
e.printStackTrace()
}
finally
{
if
(fileInputStream !=
null
) {
try
{
fileInputStream.close()
}
catch
(e: IOException) {
e.printStackTrace()
}
}
}
return
""
}
private
fun writeTextData(file: File, data: String, context: Context) {
var fileOutputStream: FileOutputStream? =
null
try
{
fileOutputStream = FileOutputStream(file)
fileOutputStream.write(data.toByteArray())
}
catch
(e: Exception) {
e.printStackTrace()
}
finally
{
if
(fileOutputStream !=
null
) {
try
{
fileOutputStream.close()
}
catch
(e: IOException) {
e.printStackTrace()
}
}
}
}