Skip to content

Commit

Permalink
add fragment instead of activity
Browse files Browse the repository at this point in the history
  • Loading branch information
sahsisunny committed May 1, 2023
1 parent f33db6c commit 4ab5a4f
Show file tree
Hide file tree
Showing 18 changed files with 306 additions and 213 deletions.
4 changes: 4 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ dependencies {

// Circle Image View
implementation 'de.hdodenhof:circleimageview:3.1.0'

// Navigation Components
implementation "androidx.navigation:navigation-fragment-ktx:2.5.3"
implementation "androidx.navigation:navigation-ui-ktx:2.5.3"
}

kapt {
Expand Down
23 changes: 14 additions & 9 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,7 @@
android:theme="@style/Theme.GitTrackr"
tools:targetApi="31">
<activity
android:name=".screens.UserDetailsActivity"
android:exported="false" />
<activity
android:name=".screens.UserListActivity"
android:exported="false" />
<activity
android:name=".screens.SplashScreen"
android:name=".activity.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand All @@ -30,8 +24,19 @@
</intent-filter>
</activity>
<activity
android:name=".screens.MainActivity"
android:exported="true" />
android:name=".fragments.HomeFragment"
android:exported="false" />
<activity
android:name=".fragments.SplashFragment"
android:exported="false" />

<activity
android:name=".fragments.UserListFragment"
android:exported="false" />

<activity
android:name=".fragments.UserDetailsFragment"
android:exported="false" />
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.sahsisunny.gittrackr.activity

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.sahsisunny.gittrackr.R
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers

class MainActivity : AppCompatActivity(), CoroutineScope by CoroutineScope(Dispatchers.Main) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.core.os.bundleOf
import androidx.navigation.findNavController
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.google.android.material.button.MaterialButton
import com.sahsisunny.gittrackr.R
import com.sahsisunny.gittrackr.model.UsersItem
import com.sahsisunny.gittrackr.screens.UserDetailsActivity
import de.hdodenhof.circleimageview.CircleImageView

class UserAdapter(private var con: Context, private var list: List<UsersItem>) :
Expand All @@ -34,9 +35,11 @@ class UserAdapter(private var con: Context, private var list: List<UsersItem>) :
Glide.with(con).load(user.avatar_url).into(holder.userImage)

holder.viewButton.setOnClickListener {
val intent = android.content.Intent(con, UserDetailsActivity::class.java)
intent.putExtra("login", user.login)
con.startActivity(intent)
// open user details fragment
val bundle =
bundleOf("userName" to user.login) // for recieving data in UserDetailsFragment use arguments?.getString("userName")
it.findNavController()
.navigate(R.id.action_userListFragment_to_userDetailsFragment, bundle)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.sahsisunny.gittrackr.fragments

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import com.sahsisunny.gittrackr.R

class HomeFragment : Fragment() {
private lateinit var orgNameInput: EditText
private lateinit var exitButton: Button
private lateinit var loginButton: Button

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
val view = inflater.inflate(R.layout.fragment_home, container, false)
orgNameInput = view.findViewById(R.id.org_name_input)
exitButton = view.findViewById(R.id.exit_button)
loginButton = view.findViewById(R.id.login_button)

loginButton.setOnClickListener {
handleLoginButtonClick()
}
exitButton.setOnClickListener {
requireActivity().finish()
}
return view
}

// For handling the login button click
private fun handleLoginButtonClick() {
val orgName = orgNameInput.text.toString()
val orgNameWithoutSpaces = orgName.replace("\\s".toRegex(), "")
if (orgNameWithoutSpaces.isNotEmpty()) {
findNavController().navigate(R.id.action_homeFragment_to_userListFragment,
Bundle().apply {
putString("orgName", orgNameWithoutSpaces)
})
} else {
orgNameInput.error = "Please enter an organization name"
}
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.sahsisunny.gittrackr.fragments

import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import com.sahsisunny.gittrackr.R

class SplashFragment : Fragment() {

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
val view = inflater.inflate(R.layout.fragment_splash, container, false)

Handler(Looper.getMainLooper()).postDelayed({
findNavController().navigate(R.id.action_splashFragment_to_homeFragment)
}, 2000)
return view
}

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.sahsisunny.gittrackr.screens
package com.sahsisunny.gittrackr.fragments

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.sahsisunny.gittrackr.R
import com.sahsisunny.gittrackr.adapter.UserDetailsAdapter
Expand All @@ -11,27 +15,36 @@ import com.sahsisunny.gittrackr.utils.UserDetailsAPIUtils
import retrofit2.Callback
import retrofit2.Response

class UserDetailsActivity : AppCompatActivity() {

class UserDetailsFragment : Fragment() {

// Declare the RecyclerView and the adapter
private lateinit var rvUserDetails: RecyclerView
private lateinit var userAdapter: UserDetailsAdapter

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_user_details)
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {

val view = inflater.inflate(R.layout.fragment_user_details, container, false)

// Find the RecyclerView and set its layout manager
rvUserDetails = view.findViewById<RecyclerView>(R.id.user_details_rv)
rvUserDetails.layoutManager = LinearLayoutManager(requireContext())

rvUserDetails = findViewById(R.id.user_details_rv)
rvUserDetails.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this)
val username = intent.getStringExtra("login")
// Get the username from the arguments
val username = arguments?.getString("userName")

// If the username is not null, fetch the user details
if (username != null) {
UserDetailsAPIUtils.getUserDetailsData(username, object : Callback<UserDetails> {
override fun onResponse(
call: retrofit2.Call<UserDetails>,
response: Response<UserDetails>,
) {
val responseBody = response.body()!!
userAdapter = UserDetailsAdapter(this@UserDetailsActivity, responseBody)
userAdapter = UserDetailsAdapter(requireContext(), responseBody)
rvUserDetails.adapter = userAdapter
}

Expand All @@ -40,5 +53,9 @@ class UserDetailsActivity : AppCompatActivity() {
}
})
}

return view
}
}


}
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.sahsisunny.gittrackr.screens
package com.sahsisunny.gittrackr.fragments

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.sahsisunny.gittrackr.R
Expand All @@ -16,31 +19,40 @@ import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

class UserListActivity : AppCompatActivity() {
class UserListFragment : Fragment() {
companion object {
const val BASE_API = Constants.BASE_API
}

private lateinit var rvUser: RecyclerView
lateinit var userAdapter: UserAdapter

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_user_list)

rvUser = findViewById(R.id.user_rv)
val orgName = intent.getStringExtra("orgName")
rvUser.layoutManager = LinearLayoutManager(this)

}

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
val view = inflater.inflate(R.layout.fragment_user_list, container, false)

rvUser = view.findViewById(R.id.user_rv)
val orgName = arguments?.getString("orgName")
rvUser.layoutManager = LinearLayoutManager(requireContext())
if (orgName != null) {
getUserData(orgName)
}
return view
}

private fun getUserData(orgName: String?) {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_API)
.addConverterFactory(GsonConverterFactory.create())
.build()

.create(UserAPIInterface::class.java)

val call = retrofit.getUsersData(orgName)
Expand All @@ -51,7 +63,7 @@ class UserListActivity : AppCompatActivity() {
response: Response<List<UsersItem>>,
) {
val responseBody = response.body()!!
userAdapter = UserAdapter(this@UserListActivity, responseBody)
userAdapter = UserAdapter(requireContext(), responseBody)
rvUser.adapter = userAdapter
}

Expand All @@ -60,6 +72,4 @@ class UserListActivity : AppCompatActivity() {
}
})
}
}


}
60 changes: 0 additions & 60 deletions app/src/main/java/com/sahsisunny/gittrackr/screens/MainActivity.kt

This file was deleted.

Loading

0 comments on commit 4ab5a4f

Please sign in to comment.