Skip to content

Commit

Permalink
Code Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
ashgautamDev committed Sep 22, 2021
1 parent 68b9a8f commit 0f0cdf1
Show file tree
Hide file tree
Showing 12 changed files with 152 additions and 93 deletions.
4 changes: 3 additions & 1 deletion app/src/main/java/com/ashish/weighter/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import androidx.activity.compose.setContent
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.navigation.compose.rememberNavController
import com.ashish.weighter.navigation.NavGraph
import com.ashish.weighter.ui.screens.MainScreen
import com.ashish.weighter.ui.theme.WeighterTheme
import dagger.hilt.android.AndroidEntryPoint
Expand All @@ -20,7 +22,7 @@ class MainActivity : ComponentActivity() {
setContent {
WeighterTheme {
Surface(color = MaterialTheme.colors.background) {
MainScreen()
NavGraph()
}
}
}
Expand Down
49 changes: 49 additions & 0 deletions app/src/main/java/com/ashish/weighter/navigation/BackHandler.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.ashish.weighter.navigation

import androidx.activity.OnBackPressedCallback
import androidx.activity.OnBackPressedDispatcher
import androidx.compose.runtime.*

/*
* An effect for handling presses of the device back button.
*/


@Composable
fun backHandler(
enabled: Boolean = true,
onBack: () -> Unit
) {
// Safely update the current `onBack` lambda when a new one is provided
val currentOnBack by rememberUpdatedState(onBack)
// Remember in Composition a back callback that calls the `onBack` lambda
val backCallback = remember {
object : OnBackPressedCallback(enabled) {
override fun handleOnBackPressed() {
currentOnBack()
}
}
}
// On every successful composition, update the callback with the `enabled` value
SideEffect {
backCallback.isEnabled = enabled
}
val backDispatcher = LocalBackDispatcher.current
// If `backDispatcher` changes, dispose and reset the effect
DisposableEffect(backDispatcher) {
// Add callback to the backDispatcher
backDispatcher.addCallback(backCallback)
// When the effect leaves the Composition, remove the callback
onDispose {
backCallback.remove()
}
}
}

/**
* An [androidx.compose.runtime.Ambient] providing the current [OnBackPressedDispatcher]. You must
* [provide][androidx.compose.runtime.Providers] a value before use.
*/
internal val LocalBackDispatcher = staticCompositionLocalOf<OnBackPressedDispatcher> {
error("No Back Dispatcher provided")
}
23 changes: 11 additions & 12 deletions app/src/main/java/com/ashish/weighter/navigation/NavGraph.kt
Original file line number Diff line number Diff line change
@@ -1,47 +1,46 @@
package com.ashish.weighter.navigation

import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.platform.LocalContext
import androidx.hilt.navigation.HiltViewModelFactory
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.ashish.weighter.ui.WeightViewmodel
import com.ashish.weighter.ui.screens.MyWeightScreen
import com.ashish.weighter.ui.screens.TargetScreen
import com.ashish.weighter.ui.screens.MainActions
import com.ashish.weighter.ui.screens.MainScreen
import com.ashish.weighter.ui.screens.addweight.AddWeightScreen
import com.ashish.weighter.ui.screens.addweight.AddWeightViewModel

@ExperimentalComposeUiApi
@Composable
fun NavGraph() {
val navController = rememberNavController()
val actions = remember(navController) { MainActions(navController) }
val selectedTab = remember { mutableStateOf(NavScreen.WEIGHT) }


NavHost(navController, startDestination = NavScreen.MyWeight.route) {
NavHost(navController, startDestination = AddScreen.MainScreen.route) {


composable(NavScreen.MyWeight.route) {
composable(AddScreen.MainScreen.route) {

val viewModel: WeightViewmodel = viewModel(
factory = HiltViewModelFactory(LocalContext.current, it)
)
MyWeightScreen(navController = navController, viewModel = viewModel)
MainScreen(viewModel ,actions, selectedTab)
}
composable(NavScreen.Target.route) {

val viewModel: WeightViewmodel = viewModel(
factory = HiltViewModelFactory(LocalContext.current, it)
)
TargetScreen(viewModel, navController = navController)
}

composable(AddScreen.AddWeight.route) {
val viewModel: AddWeightViewModel = viewModel(
factory = HiltViewModelFactory(LocalContext.current, it)
)

AddWeightScreen(navController, viewModel)

}
Expand Down
14 changes: 10 additions & 4 deletions app/src/main/java/com/ashish/weighter/navigation/NavScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,18 @@ import androidx.compose.material.icons.filled.AccountCircle
import androidx.compose.ui.graphics.vector.ImageVector


sealed class NavScreen(var route: String, var icon: ImageVector, var title: String) {
//sealed class NavScreen(var route: String, var icon: ImageVector, var title: String) {
//
// object MyWeight : NavScreen("home", Icons.Default.AccountBox, "My Weight")
// object Target : NavScreen("history", Icons.Default.AccountCircle, "History")
//}

object MyWeight : NavScreen("home", Icons.Default.AccountBox, "My Weight")
object Target : NavScreen("history", Icons.Default.AccountCircle, "History")
}
// NavTabs
enum class NavScreen(val label : String, val icon: ImageVector) {
RECORD("record", Icons.Default.AccountCircle),
WEIGHT("Home", Icons.Default.AccountBox)

}

sealed class AddScreen(var route: String) {

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.ashish.weighter.ui.component

import android.widget.Toast
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
Expand All @@ -9,19 +10,28 @@ import androidx.compose.material.icons.filled.AddCircle
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import com.ashish.weighter.navigation.AddScreen
import com.ashish.weighter.ui.screens.MainActions
import com.ashish.weighter.ui.theme.background

@Composable
fun AppFab(navController : NavController , icon : ImageVector = Icons.Default.AddCircle ) {
fun AppFab( icon : ImageVector = Icons.Default.AddCircle , onClick :() -> Unit) {
val context = LocalContext.current
Image(

imageVector = icon.apply { tintColor.blue },
contentDescription = null,
modifier = Modifier
.size(56.dp)
.background(color = background)
.clickable { navController.navigate(AddScreen.AddWeight.route) },
.clickable {
Toast
.makeText(context, " Fab Clicked", Toast.LENGTH_SHORT)
.show()
onClick()
},
alpha = .8f)
}
65 changes: 60 additions & 5 deletions app/src/main/java/com/ashish/weighter/ui/screens/MainScreen.kt
Original file line number Diff line number Diff line change
@@ -1,19 +1,74 @@
package com.ashish.weighter.ui.screens

import androidx.compose.material.Scaffold
import androidx.compose.foundation.layout.padding
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.ashish.weighter.ui.component.BottomNavigationBar
import com.ashish.weighter.navigation.AddScreen
import com.ashish.weighter.navigation.NavScreen
import com.ashish.weighter.navigation.backHandler
import com.ashish.weighter.ui.WeightViewmodel
import com.ashish.weighter.ui.screens.home.MyWeightScreen
import com.ashish.weighter.ui.screens.home.TargetScreen


@ExperimentalComposeUiApi
@Composable
fun MainScreen() {
fun MainScreen(
viewModel: WeightViewmodel,
action: MainActions,
selectedTab: MutableState<NavScreen>,
) {
val navController = rememberNavController()

Scaffold(
bottomBar = { BottomNavigationBar(navController = navController) }
) {}
bottomBar = {
BottomNavigation(
modifier = Modifier,
backgroundColor = MaterialTheme.colors.background
) {
for (tab in NavScreen.values()) {
BottomNavigationItem(
selected = selectedTab.value == tab,
label = { tab.label },
onClick = {
if (selectedTab.value == tab) return@BottomNavigationItem
selectedTab.value = tab
},
icon = {
Icon(imageVector = tab.icon, contentDescription = null)
},
unselectedContentColor = Color.LightGray,
selectedContentColor = MaterialTheme.colors.primary,
)
}
}
},
) {
val modifier = Modifier.padding(it)
when (selectedTab.value) {
NavScreen.RECORD -> TargetScreen(viewModel, navController)
NavScreen.WEIGHT -> MyWeightScreen(viewModel, action , navController)

}

}
backHandler(
enabled = selectedTab.value != NavScreen.WEIGHT,
onBack = { selectedTab.value = NavScreen.WEIGHT }
)

}


class MainActions(navController: NavHostController) {

val addWeight = {
navController.navigate(AddScreen.AddWeight.route)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ fun AddWeightScreen(navController: NavController, viewModel: AddWeightViewModel)
.padding(16.dp)
.align(alignment = Alignment.Start)
.clickable {
navController.navigate(NavScreen.MyWeight.route)
navController.navigate(AddScreen.MainScreen.route)
}, color = background ,
fontWeight = FontWeight.SemiBold)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ashish.weighter.ui.screens
package com.ashish.weighter.ui.screens.home

import android.widget.Toast
import androidx.compose.foundation.layout.Arrangement
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ashish.weighter.ui.screens
package com.ashish.weighter.ui.screens.home


import android.widget.Toast
Expand All @@ -18,14 +18,16 @@ import com.ashish.weighter.ui.WeightViewmodel
import com.ashish.weighter.ui.component.AppFab
import com.ashish.weighter.ui.component.TopBar
import com.ashish.weighter.ui.component.WeightGraph
import com.ashish.weighter.ui.screens.MainActions
import com.ashish.weighter.ui.screens.YourBmiView
import com.ashish.weighter.ui.theme.background
import com.ashish.weighter.ui.view.CurrentWeightInfoView
import com.ashish.weighter.ui.view.YourProgressView
import com.ashish.weighter.utils.WeightState


@Composable
fun MyWeightScreen(viewModel: WeightViewmodel, navController: NavController) {
fun MyWeightScreen(viewModel: WeightViewmodel, mainActions: MainActions , navController: NavController) {


val context = LocalContext.current
Expand All @@ -39,7 +41,7 @@ fun MyWeightScreen(viewModel: WeightViewmodel, navController: NavController) {

},
floatingActionButton = {
AppFab(navController)
AppFab(){mainActions.addWeight}
},
floatingActionButtonPosition = FabPosition.Center,
isFloatingActionButtonDocked = true,
Expand Down Expand Up @@ -76,8 +78,6 @@ fun MyWeightScreen(viewModel: WeightViewmodel, navController: NavController) {
}
}
)


}


Expand Down

0 comments on commit 0f0cdf1

Please sign in to comment.