diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..9ab3424
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 69e8615..217e5c5 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 14aaee0..fc93bbb 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -30,23 +30,32 @@ android {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
- kotlinOptions {
- jvmTarget = "17"
- }
buildFeatures {
+ compose = true
viewBinding = true
}
+ composeOptions {
+ kotlinCompilerExtensionVersion = "1.4.7"
+ }
+ kotlinOptions {
+ jvmTarget = "17"
+ }
}
dependencies {
implementation("androidx.core:core-ktx:1.10.1")
- implementation("androidx.appcompat:appcompat:1.6.1")
- implementation("com.google.android.material:material:1.9.0")
- implementation("androidx.constraintlayout:constraintlayout:2.1.4")
- implementation("androidx.navigation:navigation-fragment-ktx:2.7.1")
- implementation("androidx.navigation:navigation-ui-ktx:2.7.1")
+ implementation("androidx.activity:activity-compose:1.7.2")
+ implementation("androidx.compose.ui:ui")
+ implementation("androidx.compose.ui:ui-graphics")
+ implementation("androidx.compose.ui:ui-tooling-preview")
+ implementation("androidx.compose.material3:material3:1.1.1")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
+ androidTestImplementation("androidx.compose.ui:ui-test-junit4")
+ debugImplementation("androidx.compose.ui:ui-tooling")
+ debugImplementation("androidx.compose.ui:ui-test-manifest")
+ implementation("com.google.zxing:core:3.4.1")
+ implementation("com.journeyapps:zxing-android-embedded:4.3.0")
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 877d7ab..8445b53 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,13 @@
+
+
+
+
+
+ android:theme="@style/Theme.Xml_And_Jetpack_Interoperability">
diff --git a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/FirstFragment.kt b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/FirstFragment.kt
deleted file mode 100644
index 80bb81b..0000000
--- a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/FirstFragment.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import androidx.navigation.fragment.findNavController
-import com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.databinding.FragmentFirstBinding
-
-class FirstFragment : Fragment() {
-
- private var _binding: FragmentFirstBinding? = null
-
- private val binding get() = _binding!!
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?,
- ): View? {
- _binding = FragmentFirstBinding.inflate(inflater, container, false)
- return binding.root
-
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- binding.buttonFirst.setOnClickListener {
- findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
- }
- }
-
- override fun onDestroyView() {
- super.onDestroyView()
- _binding = null
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/MainActivity.kt b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/MainActivity.kt
index db48e08..d55204e 100644
--- a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/MainActivity.kt
+++ b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/MainActivity.kt
@@ -1,32 +1,75 @@
package com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability
+import android.Manifest
+import android.content.pm.PackageManager
import android.os.Bundle
-import androidx.appcompat.app.AppCompatActivity
-import androidx.navigation.NavController
-import androidx.navigation.fragment.NavHostFragment
-import androidx.navigation.ui.setupActionBarWithNavController
-import com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.databinding.ActivityMainBinding
+import android.util.Log
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.ManagedActivityResultLauncher
+import androidx.activity.compose.rememberLauncherForActivityResult
+import androidx.activity.compose.setContent
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Surface
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.SideEffect
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.core.content.ContextCompat
+import com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.ui.screen.ScanScreen
+import com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.ui.theme.ComposeAppTheme
-class MainActivity : AppCompatActivity() {
+class MainActivity : ComponentActivity() {
- private lateinit var binding: ActivityMainBinding
- private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ setContent {
+ RequestPermission()
+ ComposeAppTheme {
+ // A surface container using the 'background' color from the theme
+ Surface(
+ modifier = Modifier.fillMaxSize(),
+ color = MaterialTheme.colorScheme.background
+ ) {
+ ScanScreen()
+ }
+ }
+ }
+ }
+}
- binding = ActivityMainBinding.inflate(layoutInflater)
- setContentView(binding.root)
+@Composable
+fun RequestPermission() {
+ val launcher: ManagedActivityResultLauncher =
+ rememberLauncherForActivityResult(
+ ActivityResultContracts.RequestPermission()
+ ) { isGranted: Boolean ->
+ if (isGranted) {
+ // Permission Accepted: Do something
+ Log.d("TAG", "PERMISSION GRANTED")
+// startService(intent)
+// bindService(intent, connection, Context.BIND_AUTO_CREATE)
+ }
+ }
- setSupportActionBar(binding.toolbar)
+ when (PackageManager.PERMISSION_GRANTED) {
+ ContextCompat.checkSelfPermission(
+ LocalContext.current,
+ android.Manifest.permission.CAMERA
+ ) -> {
+ // Some works that require permission
+ Log.d("TAG", "Code requires permission")
+ }
- val navHostFragment =
- supportFragmentManager.findFragmentById(R.id.nav_host_fragment_content_main) as NavHostFragment
- navController = navHostFragment.navController
- setupActionBarWithNavController(navController)
+ else -> {
+ // Asking for permission
+ SideEffect {
+ launcher.launch(Manifest.permission.CAMERA)
+ }
+ }
}
- override fun onSupportNavigateUp(): Boolean {
- return navController.navigateUp()
- || super.onSupportNavigateUp()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/SecondFragment.kt b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/SecondFragment.kt
deleted file mode 100644
index 0b9616c..0000000
--- a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/SecondFragment.kt
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.databinding.FragmentSecondBinding
-
-class SecondFragment : Fragment() {
-
- private var _binding: FragmentSecondBinding? = null
-
- private val binding get() = _binding!!
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?,
- ): View? {
- _binding = FragmentSecondBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onDestroyView() {
- super.onDestroyView()
- _binding = null
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/screen/ScanScreen.kt b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/screen/ScanScreen.kt
new file mode 100644
index 0000000..02bda73
--- /dev/null
+++ b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/screen/ScanScreen.kt
@@ -0,0 +1,108 @@
+package com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.ui.screen
+
+import android.app.Activity
+import android.content.Context
+import android.content.ContextWrapper
+import android.view.View
+import android.widget.Toast
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.width
+import androidx.compose.material3.Button
+import androidx.compose.material3.Icon
+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.platform.LocalContext
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
+import com.google.zxing.ResultPoint
+import com.google.zxing.client.android.BeepManager
+import com.journeyapps.barcodescanner.BarcodeCallback
+import com.journeyapps.barcodescanner.BarcodeResult
+import com.journeyapps.barcodescanner.camera.CameraSettings
+import com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.R
+import com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.databinding.BarcodeLayoutBinding
+import com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.ui.theme.ComposeAppTheme
+
+@Composable
+fun ScanScreen() {
+ Column(
+ Modifier.fillMaxSize(),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ val context = LocalContext.current
+ AndroidView(factory = {
+ View.inflate(it, R.layout.barcode_layout, null)
+ },
+ update = {
+ val beepManager = BeepManager(context.findActivity())
+ beepManager.isBeepEnabled = true
+ beepManager.isVibrateEnabled = true
+ val binding = BarcodeLayoutBinding.bind(it)
+ binding.barcodeView.resume()
+ val s = CameraSettings()
+ s.requestedCameraId = 0 // front/back/etc
+ binding.barcodeView.cameraSettings = s
+ binding.barcodeView.decodeSingle(object : BarcodeCallback {
+ override fun barcodeResult(result: BarcodeResult?) {
+ beepManager.playBeepSound()
+ Toast.makeText(context, "${result?.text}", Toast.LENGTH_SHORT).show()
+ try {
+ binding.barcodeView.pause()
+ } catch (e: Exception) {
+ Toast.makeText(context, "Invalid code", Toast.LENGTH_SHORT).show()
+ }
+ }
+
+ override fun possibleResultPoints(resultPoints: MutableList?) {
+ super.possibleResultPoints(resultPoints)
+ }
+ })
+ }
+ )
+ Spacer(modifier = Modifier.height(8.dp))
+ Text("OR")
+ Spacer(modifier = Modifier.height(8.dp))
+ Button(onClick = {
+ // no-op
+ }) {
+ Icon(
+ painter = painterResource(id = R.drawable.ic_image),
+ contentDescription = null,
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(stringResource(R.string.select_code_from_device))
+ }
+ }
+}
+
+fun Context.findActivity(): Activity {
+ var context = this
+ while (context is ContextWrapper) {
+ if (context is Activity) return context
+ context = context.baseContext
+ }
+ throw IllegalStateException("no activity")
+}
+
+@Composable
+@Preview
+fun Preview() {
+ ComposeAppTheme {
+ Surface(
+ modifier = Modifier.fillMaxSize(),
+ color = MaterialTheme.colorScheme.background
+ ) {
+ ScanScreen()
+ }
+ }
+}
diff --git a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/theme/Color.kt b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/theme/Color.kt
new file mode 100644
index 0000000..8b5eaf1
--- /dev/null
+++ b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/theme/Color.kt
@@ -0,0 +1,11 @@
+package com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.ui.theme
+
+import androidx.compose.ui.graphics.Color
+
+val Purple80 = Color(0xFFD0BCFF)
+val PurpleGrey80 = Color(0xFFCCC2DC)
+val Pink80 = Color(0xFFEFB8C8)
+
+val Purple40 = Color(0xFF6650a4)
+val PurpleGrey40 = Color(0xFF625b71)
+val Pink40 = Color(0xFF7D5260)
\ No newline at end of file
diff --git a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/theme/Theme.kt b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/theme/Theme.kt
new file mode 100644
index 0000000..c788443
--- /dev/null
+++ b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/theme/Theme.kt
@@ -0,0 +1,70 @@
+package com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.ui.theme
+
+import android.app.Activity
+import android.os.Build
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.dynamicDarkColorScheme
+import androidx.compose.material3.dynamicLightColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.SideEffect
+import androidx.compose.ui.graphics.toArgb
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalView
+import androidx.core.view.WindowCompat
+
+private val DarkColorScheme = darkColorScheme(
+ primary = Purple80,
+ secondary = PurpleGrey80,
+ tertiary = Pink80
+)
+
+private val LightColorScheme = lightColorScheme(
+ primary = Purple40,
+ secondary = PurpleGrey40,
+ tertiary = Pink40
+
+ /* Other default colors to override
+ background = Color(0xFFFFFBFE),
+ surface = Color(0xFFFFFBFE),
+ onPrimary = Color.White,
+ onSecondary = Color.White,
+ onTertiary = Color.White,
+ onBackground = Color(0xFF1C1B1F),
+ onSurface = Color(0xFF1C1B1F),
+ */
+)
+
+@Composable
+fun ComposeAppTheme(
+ darkTheme: Boolean = isSystemInDarkTheme(),
+ // Dynamic color is available on Android 12+
+ dynamicColor: Boolean = true,
+ content: @Composable () -> Unit
+) {
+ val colorScheme = when {
+ dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
+ val context = LocalContext.current
+ if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
+ }
+
+ darkTheme -> DarkColorScheme
+ else -> LightColorScheme
+ }
+ val view = LocalView.current
+ if (!view.isInEditMode) {
+ SideEffect {
+ val window = (view.context as Activity).window
+ window.statusBarColor = colorScheme.primary.toArgb()
+ WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme
+ }
+ }
+
+ MaterialTheme(
+ colorScheme = colorScheme,
+ typography = Typography,
+ content = content
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/theme/Type.kt b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/theme/Type.kt
new file mode 100644
index 0000000..ab010f7
--- /dev/null
+++ b/app/src/main/java/com/kaushalvasava/apps/xml_and_jetpackcompose_interoperability/ui/theme/Type.kt
@@ -0,0 +1,34 @@
+package com.kaushalvasava.apps.xml_and_jetpackcompose_interoperability.ui.theme
+
+import androidx.compose.material3.Typography
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.sp
+
+// Set of Material typography styles to start with
+val Typography = Typography(
+ bodyLarge = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 16.sp,
+ lineHeight = 24.sp,
+ letterSpacing = 0.5.sp
+ )
+ /* Other default text styles to override
+ titleLarge = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 22.sp,
+ lineHeight = 28.sp,
+ letterSpacing = 0.sp
+ ),
+ labelSmall = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Medium,
+ fontSize = 11.sp,
+ lineHeight = 16.sp,
+ letterSpacing = 0.5.sp
+ )
+ */
+)
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_image.xml b/app/src/main/res/drawable/ic_image.xml
new file mode 100644
index 0000000..35960a0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_image.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index 22d3e0e..0000000
--- a/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/barcode_layout.xml b/app/src/main/res/layout/barcode_layout.xml
new file mode 100644
index 0000000..2a01260
--- /dev/null
+++ b/app/src/main/res/layout/barcode_layout.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_first.xml b/app/src/main/res/layout/fragment_first.xml
deleted file mode 100644
index 6f8e766..0000000
--- a/app/src/main/res/layout/fragment_first.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/fragment_second.xml b/app/src/main/res/layout/fragment_second.xml
deleted file mode 100644
index e2808a4..0000000
--- a/app/src/main/res/layout/fragment_second.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
deleted file mode 100644
index 76b9fa1..0000000
--- a/app/src/main/res/navigation/nav_graph.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml
deleted file mode 100644
index 22d7f00..0000000
--- a/app/src/main/res/values-land/dimens.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- 48dp
-
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
deleted file mode 100644
index a33fcfd..0000000
--- a/app/src/main/res/values-night/themes.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values-v23/themes.xml b/app/src/main/res/values-v23/themes.xml
deleted file mode 100644
index 89559bd..0000000
--- a/app/src/main/res/values-v23/themes.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values-w1240dp/dimens.xml b/app/src/main/res/values-w1240dp/dimens.xml
deleted file mode 100644
index d73f4a3..0000000
--- a/app/src/main/res/values-w1240dp/dimens.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- 200dp
-
\ No newline at end of file
diff --git a/app/src/main/res/values-w600dp/dimens.xml b/app/src/main/res/values-w600dp/dimens.xml
deleted file mode 100644
index 22d7f00..0000000
--- a/app/src/main/res/values-w600dp/dimens.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- 48dp
-
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
deleted file mode 100644
index 125df87..0000000
--- a/app/src/main/res/values/dimens.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- 16dp
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 568fd4f..e3562ee 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,46 +1,4 @@
- XML_AND_JETPACKCOMPOSE_INTEROPERABILITY
- Settings
-
- First Fragment
- Second Fragment
- Next
- Previous
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris
- volutpat, dolor id interdum ullamcorper, risus dolor egestas lectus, sit amet mattis purus
- dui nec risus. Maecenas non sodales nisi, vel dictum dolor. Class aptent taciti sociosqu ad
- litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse blandit eleifend
- diam, vel rutrum tellus vulputate quis. Aliquam eget libero aliquet, imperdiet nisl a,
- ornare ex. Sed rhoncus est ut libero porta lobortis. Fusce in dictum tellus.\n\n
- Suspendisse interdum ornare ante. Aliquam nec cursus lorem. Morbi id magna felis. Vivamus
- egestas, est a condimentum egestas, turpis nisl iaculis ipsum, in dictum tellus dolor sed
- neque. Morbi tellus erat, dapibus ut sem a, iaculis tincidunt dui. Interdum et malesuada
- fames ac ante ipsum primis in faucibus. Curabitur et eros porttitor, ultricies urna vitae,
- molestie nibh. Phasellus at commodo eros, non aliquet metus. Sed maximus nisl nec dolor
- bibendum, vel congue leo egestas.\n\n
- Sed interdum tortor nibh, in sagittis risus mollis quis. Curabitur mi odio, condimentum sit
- amet auctor at, mollis non turpis. Nullam pretium libero vestibulum, finibus orci vel,
- molestie quam. Fusce blandit tincidunt nulla, quis sollicitudin libero facilisis et. Integer
- interdum nunc ligula, et fermentum metus hendrerit id. Vestibulum lectus felis, dictum at
- lacinia sit amet, tristique id quam. Cras eu consequat dui. Suspendisse sodales nunc ligula,
- in lobortis sem porta sed. Integer id ultrices magna, in luctus elit. Sed a pellentesque
- est.\n\n
- Aenean nunc velit, lacinia sed dolor sed, ultrices viverra nulla. Etiam a venenatis nibh.
- Morbi laoreet, tortor sed facilisis varius, nibh orci rhoncus nulla, id elementum leo dui
- non lorem. Nam mollis ipsum quis auctor varius. Quisque elementum eu libero sed commodo. In
- eros nisl, imperdiet vel imperdiet et, scelerisque a mauris. Pellentesque varius ex nunc,
- quis imperdiet eros placerat ac. Duis finibus orci et est auctor tincidunt. Sed non viverra
- ipsum. Nunc quis augue egestas, cursus lorem at, molestie sem. Morbi a consectetur ipsum, a
- placerat diam. Etiam vulputate dignissim convallis. Integer faucibus mauris sit amet finibus
- convallis.\n\n
- Phasellus in aliquet mi. Pellentesque habitant morbi tristique senectus et netus et
- malesuada fames ac turpis egestas. In volutpat arcu ut felis sagittis, in finibus massa
- gravida. Pellentesque id tellus orci. Integer dictum, lorem sed efficitur ullamcorper,
- libero justo consectetur ipsum, in mollis nisl ex sed nisl. Donec maximus ullamcorper
- sodales. Praesent bibendum rhoncus tellus nec feugiat. In a ornare nulla. Donec rhoncus
- libero vel nunc consequat, quis tincidunt nisl eleifend. Cras bibendum enim a justo luctus
- vestibulum. Fusce dictum libero quis erat maximus, vitae volutpat diam dignissim.
-
+ Xml_And_Jetpack_Interoperability
+ Select code from device\n
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index ba3672c..b075936 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,9 +1,4 @@
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
diff --git a/build.gradle.kts b/build.gradle.kts
index 3a94c3c..674c12b 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,5 +1,5 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.1.0" apply false
- id("org.jetbrains.kotlin.android") version "1.8.20" apply false
+ id("org.jetbrains.kotlin.android") version "1.8.21" apply false
}
\ No newline at end of file