Skip to content

Instantly share code, notes, and snippets.

View Astroa7m's full-sized avatar

Ahmed Samir Astroa7m

  • Elkdocs
  • Muscat, Oman
  • 14:11 (UTC +04:00)
  • X @astroa7m
View GitHub Profile
@Composable
fun DetailsScreen(
modifier: Modifier = Modifier,
user: User?,
onDismiss: () -> Unit,
onSharing: () -> Unit,
onAddNewUserClicked: () -> Unit
) {
if (user == null)
UserNotFoundDialog(
@Astroa7m
Astroa7m / SharingUtil.kt
Created October 25, 2022 18:08
final SharingUtil.kt
object SharingUtil {
...
// add the following two functions
@RequiresApi(Build.VERSION_CODES.S)
@Composable
fun CheckIfAppApprovedForDomain() {
val context = LocalContext.current
val domain = context.getString(R.string.host)
object SharingUtil {
private fun Context.createUserSharingUrl(id: Int): String {
val scheme = getString(R.string.scheme)
val host = getString(R.string.host)
val path = getString(R.string.path_to_existed_user)
return "$scheme://$host$path?userId=$id"
}
fun shareUserUrl(context: Context, user: User) {
@OptIn(ExperimentalLifecycleComposeApi::class)
@Composable
private fun App() {
...
NavHost(navController = navController, startDestination = Destinations.Home.route) {
// main screen
...
// details screen
@Astroa7m
Astroa7m / AndroidManifest.xml
Created October 25, 2022 16:46
final AndroidManifest.xml
<manifest ...>
<application
...>
<activity
....>
....
<intent-filter >
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
<action android:name="android.intent.action.VIEW" />
@Astroa7m
Astroa7m / Destinations.kt
Created October 25, 2022 16:43
final Destinations.kt
sealed class Destinations(val route: String) {
object Home : Destinations("home")
object Details : Destinations("details/{userId}") {
fun setAndGetArgumentRoute(id: Int) = route.replace("{userId}", id.toString())
}
// add this
object AddNewUser : Destinations("add_new_user")
}
sealed class Destinations(val route: String) {
object Home : Destinations("home")
object Details : Destinations("details/{userId}") {
fun setAndGetArgumentRoute(id: Int) = route.replace("{userId}", id.toString())
}
}
@Astroa7m
Astroa7m / MainActivity.kt
Last active October 25, 2022 15:31
Creating navigation graph and app screens
@OptIn(ExperimentalLifecycleComposeApi::class)
@Composable
private fun App() {
val db = remember { UserDatabase.getUserDatabase(this) }
val viewModel =
viewModel<MainViewModel>(factory = MainViewModel.Companion.MainViewModelFactory(db))
val navController = rememberNavController()
val users by viewModel.users.collectAsStateWithLifecycle()
NavHost(navController = navController, startDestination = Destinations.Home.route) {
@Astroa7m
Astroa7m / AndroidManifest.xml
Last active October 25, 2022 13:39
Adding intent filter in our manifest file
<manifest ...>
<application
...>
<activity
....>
....
<intent-filter >
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
<action android:name="android.intent.action.VIEW" />
class RemoteWidget : GlanceAppWidget(errorUiLayout = R.layout.widget_error_layout) {
override val stateDefinition: GlanceStateDefinition<*>
get() = CustomGlanceStateDefinition
@Composable
override fun Content() {
val pref = currentState<Preferences>()