Skip to content

Commit

Permalink
fix PratyushSingh07#45:Migrate home screen to compose
Browse files Browse the repository at this point in the history
  • Loading branch information
GautamCoder4019k committed Mar 29, 2024
1 parent 886a97c commit c6c09bf
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 99 deletions.
18 changes: 9 additions & 9 deletions app/src/main/java/com/example/findissues/models/home/User.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.example.findissues.models.home

data class User(
val login: String="",
val avatar_url: String="",
val name: String="",
val bio: String="",
val company: String="",
val location: String="",
val twitter_username: String="",
val followers: Int=0,
val following: Int=0
val login: String = "",
val avatar_url: String = "",
val name: String = "",
val bio: String = "",
val company: String = "",
val location: String = "",
val twitter_username: String = "",
val followers: Int = 0,
val following: Int = 0
)
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.example.findissues.ui.fragments

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.material3.Button
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
Expand All @@ -14,22 +12,15 @@ import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.findissues.R
import com.example.findissues.databinding.FragmentHomeBinding
import com.example.findissues.models.home.User
import com.example.findissues.ui.adapters.PinnedRepoAdapter
import com.example.findissues.ui.followers.FollowersFragment
import com.example.findissues.ui.following.FollowingFragment
import com.example.findissues.ui.home.HomeScreen
import com.example.findissues.ui.issues.IssuesScreen
import com.example.findissues.ui.theme.FindIssueTheme
import com.example.findissues.utils.Browser
import com.example.findissues.utils.Constants.FOLLOWERS
import com.example.findissues.utils.Constants.FOLLOWING
import com.example.findissues.utils.Constants.TWITTER_BASE_URL
import com.example.findissues.utils.GlideLoader
import com.example.findissues.utils.Network
import com.example.findissues.utils.Toaster
import com.example.findissues.viewmodels.PinnedRepoViewModel
import com.example.findissues.viewmodels.UserViewModel
import dagger.hilt.android.AndroidEntryPoint
Expand All @@ -41,9 +32,6 @@ import javax.inject.Inject
@AndroidEntryPoint
class HomeFragment : Fragment() {

// private var _binding: FragmentHomeBinding? = null
// private val binding get() = _binding!!

private var user by mutableStateOf(User())

private lateinit var userViewModel: UserViewModel
Expand All @@ -55,36 +43,11 @@ class HomeFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
// _binding = FragmentHomeBinding.inflate(inflater, container, false)
// binding.toolbar.root.title = resources.getString(R.string.home)
// if(!Network.isConnected(activity)){
// Toaster.show(binding.root,"Connect to internet")
// return binding.root
// }
// binding.rvPinned.apply {
// layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
// adapter = pinnedRepoAdapter
// }
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
pinnedRepoViewModel = ViewModelProvider(this)[PinnedRepoViewModel::class.java]

userViewModel.getUserDetail()
userViewModel.observeUserLiveData().observe(viewLifecycleOwner) {
// with(binding) {
// name.text = it.name
// githubUsername.text = it.login
// val glideLoader = GlideLoader(requireContext())
// glideLoader.loadCircularImage(it.avatar_url, profileImage)
// bio.text = it.bio.replace("\n", "")
// tvCompany.text = it.company
// tvLocation.text = it.location
// tvTwitter.text = it.twitter_username
// tvTwitter.setOnClickListener {
// Browser(requireContext()).launch(goToTwitter())
// }
// tvFollowers.text = it.followers.toString() + " " + FOLLOWERS
// tvFollowing.text = it.following.toString() + " " + FOLLOWING
// }
user = it
}

Expand All @@ -98,33 +61,19 @@ class HomeFragment : Fragment() {
pinnedRepoAdapter.setUpPinnedRepoList(it)
}

// with(binding) {
// tvFollowers.setOnClickListener {
// setUpFragment(FollowersFragment())
// }
// tvFollowing.setOnClickListener {
// setUpFragment(FollowingFragment())
// }
// tvRepositories.setOnClickListener {
// setUpFragment(RepositoryFragment())
// }
// tvStarred.setOnClickListener {
// setUpFragment(StarredFragment())
// }
// }

// return binding.root
return ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.Default)
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
HomeScreen(
user = user,
onFollowersClick = { setUpFragment(FollowersFragment()) },
onFollowingClick = { setUpFragment(FollowingFragment()) },
onRepositoriesClick = { setUpFragment(RepositoryFragment()) },
onStarredClick = { setUpFragment(StarredFragment()) },
goToTwitter = { Browser(requireContext()).launch(goToTwitter(it)) }
)
FindIssueTheme {
HomeScreen(
user = user,
onFollowersClick = { setUpFragment(FollowersFragment()) },
onFollowingClick = { setUpFragment(FollowingFragment()) },
onRepositoriesClick = { setUpFragment(RepositoryFragment()) },
onStarredClick = { setUpFragment(StarredFragment()) },
goToTwitter = { Browser(requireContext()).launch(goToTwitter(it)) }
)
}
}
}
}
Expand All @@ -141,8 +90,4 @@ class HomeFragment : Fragment() {
fragmentTransaction.commit()
}

// override fun onDestroyView() {
// super.onDestroyView()
// _binding = null
// }
}
20 changes: 13 additions & 7 deletions app/src/main/java/com/example/findissues/ui/home/HomeScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import coil.request.ImageRequest
import com.example.core.ui.components.AppTopBar
import com.example.core.ui.components.IconWithText
import com.example.findissues.R
import com.example.findissues.models.home.User
import com.example.findissues.ui.theme.FindIssueTheme
import com.example.findissues.utils.Constants

@Composable
Expand All @@ -43,13 +45,13 @@ fun HomeScreen(
goToTwitter: (String) -> Unit = {}
) {
val scrollState = rememberScrollState()
Scaffold(topBar = { HomeAppBar() }, modifier = Modifier.fillMaxSize()) {
Scaffold(topBar = { AppTopBar(title = R.string.home) }, modifier = Modifier.fillMaxSize()) {
Column(
modifier = Modifier
.padding(it)
.fillMaxSize()
.verticalScroll(scrollState)
.background(color = Color(0xFF0d1117))
.background(color = MaterialTheme.colorScheme.primary)
) {
UserDetails(
user = user,
Expand All @@ -63,7 +65,7 @@ fun HomeScreen(
modifier = Modifier
.height(18.dp)
.fillMaxWidth()
.background(Color(0xFF000000))
.background(MaterialTheme.colorScheme.secondary)
)
UserLinks(
onRepositoriesClick = onRepositoriesClick,
Expand Down Expand Up @@ -130,20 +132,22 @@ fun UserDetails(
Column(modifier = Modifier.padding(top = 16.dp, end = 16.dp)) {
Text(
text = user.name,
color = Color(0xFFb7b8ba),
color = MaterialTheme.colorScheme.tertiary,
fontWeight = FontWeight.Bold,
style = MaterialTheme.typography.headlineLarge,
modifier = Modifier.fillMaxWidth()
)
Text(
text = user.login, color = Color(0xFFb7b8ba), fontSize = 19.sp
text = user.login,
color = MaterialTheme.colorScheme.tertiary,
fontSize = 19.sp
)
}
}

Text(
text = user.bio,
color = Color(0xFFb7b8ba),
color = MaterialTheme.colorScheme.tertiary,
fontSize = 20.sp,
modifier = Modifier.padding(8.dp)
)
Expand Down Expand Up @@ -198,5 +202,7 @@ fun UserDetails(
@Preview(showBackground = true)
@Composable
fun HomeScreenPreview() {
HomeScreen(User())
FindIssueTheme {
HomeScreen(User())
}
}
6 changes: 6 additions & 0 deletions app/src/main/java/com/example/findissues/ui/theme/Color.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.example.findissues.ui.theme

import androidx.compose.ui.graphics.Color

val GitHub_Bkg = Color(0xFF0d1117)
val Grey40 = Color(0xFFb7b8ba)
36 changes: 36 additions & 0 deletions app/src/main/java/com/example/findissues/ui/theme/Theme.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.example.findissues.ui.theme

import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color

private val DarkColorScheme = darkColorScheme(
primary = GitHub_Bkg,
secondary = Color.Black,
tertiary = Grey40
)

private val LightColorScheme = lightColorScheme(
primary = GitHub_Bkg,
secondary = Color.Black,
tertiary = Grey40

)

@Composable
fun FindIssueTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
val colorScheme = when {
darkTheme -> DarkColorScheme
else -> LightColorScheme
}
MaterialTheme(
colorScheme = colorScheme,
content = content
)
}
Original file line number Diff line number Diff line change
@@ -1,37 +1,24 @@
package com.example.findissues.ui.home
package com.example.core.ui.components

import androidx.compose.material.TopAppBar
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import com.example.findissues.R

@Composable
fun HomeAppBar() {
fun AppTopBar(title: Int) {
TopAppBar(
title = {
Text(
text = stringResource(id = R.string.home),
text = stringResource(id = title),
fontWeight = FontWeight.Medium,
color = Color.White,
style = MaterialTheme.typography.headlineSmall
)
},
backgroundColor = Color(0xFF0d1117),

)
}

@Preview( showBackground = true)
@Composable
fun HomeAppBarPreview() {
HomeAppBar()
}

0 comments on commit c6c09bf

Please sign in to comment.