diff --git a/app/src/main/java/com/tymex/github/users/ui/BaseActivity.kt b/app/src/main/java/com/tymex/github/users/ui/BaseActivity.kt index 6d307dc..9483d8b 100644 --- a/app/src/main/java/com/tymex/github/users/ui/BaseActivity.kt +++ b/app/src/main/java/com/tymex/github/users/ui/BaseActivity.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.view.Gravity import androidx.appcompat.app.ActionBar import androidx.appcompat.app.AppCompatActivity -import com.tymex.github.users.databinding.CustomActionbarTitleBinding +import com.tymex.github.users.databinding.ToolbarBinding abstract class BaseActivity : AppCompatActivity() { @@ -12,12 +12,15 @@ abstract class BaseActivity : AppCompatActivity() { super.onCreate(savedInstanceState) supportActionBar?.let { - it.setDisplayHomeAsUpEnabled(true) + it.setDisplayHomeAsUpEnabled(false) it.setDisplayShowTitleEnabled(false) it.setDisplayShowCustomEnabled(true) - val titleBinding = CustomActionbarTitleBinding.inflate(layoutInflater) - titleBinding.root.text = getToolbarTitle() + val titleBinding = ToolbarBinding.inflate(layoutInflater) + titleBinding.tvTitle.text = getToolbarTitle() + titleBinding.ivBack.setOnClickListener { + onBackPressedDispatcher.onBackPressed() + } val actionBarParams = ActionBar.LayoutParams( ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT, @@ -25,7 +28,16 @@ abstract class BaseActivity : AppCompatActivity() { ) it.setCustomView(titleBinding.root, actionBarParams) } + + window.apply { + setLightStatusBar() + setStatusBarColorCompat(android.R.color.white) + } + } + /** + * Override this to set Toolbar's title text + */ abstract fun getToolbarTitle(): String } \ No newline at end of file diff --git a/app/src/main/java/com/tymex/github/users/ui/UserDetailsActivity.kt b/app/src/main/java/com/tymex/github/users/ui/UserDetailsActivity.kt index df3b823..6d469c4 100644 --- a/app/src/main/java/com/tymex/github/users/ui/UserDetailsActivity.kt +++ b/app/src/main/java/com/tymex/github/users/ui/UserDetailsActivity.kt @@ -46,6 +46,10 @@ class UserDetailsActivity : BaseActivity() { usersViewModel = ViewModelProvider(this)[UserViewModelImpl::class.java] } + + /** + * Parse & display user details from a [FlowState] + */ private fun handleUserDetailsFlow(flowState: FlowState) { when (flowState) { is FlowState.Loading -> { diff --git a/app/src/main/java/com/tymex/github/users/ui/UsersActivity.kt b/app/src/main/java/com/tymex/github/users/ui/UsersActivity.kt index 2f945c0..99b83d7 100644 --- a/app/src/main/java/com/tymex/github/users/ui/UsersActivity.kt +++ b/app/src/main/java/com/tymex/github/users/ui/UsersActivity.kt @@ -42,7 +42,6 @@ class UsersActivity : BaseActivity() { super.onCreate(savedInstanceState) binding = ActivityUsersBinding.inflate(layoutInflater) setContentView(binding.root) - supportActionBar?.setDisplayHomeAsUpEnabled(true) initUsersList() initViewModel() @@ -98,6 +97,9 @@ class UsersActivity : BaseActivity() { } } + /** + * Parse users data from [FlowState] to inflate into list view + */ private fun handleUsersFlow(flowState: FlowState) { when (flowState) { is FlowState.Loading -> { diff --git a/app/src/main/java/com/tymex/github/users/ui/WindowExtensions.kt b/app/src/main/java/com/tymex/github/users/ui/WindowExtensions.kt new file mode 100644 index 0000000..c700109 --- /dev/null +++ b/app/src/main/java/com/tymex/github/users/ui/WindowExtensions.kt @@ -0,0 +1,47 @@ +package com.tymex.github.users.ui + +import android.R +import android.os.Build +import android.view.View +import android.view.Window +import android.view.WindowInsetsController +import android.view.WindowManager +import androidx.core.content.ContextCompat +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +fun Window.setLightStatusBar() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + this.insetsController?.setSystemBarsAppearance( + WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, + WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS + ) + } else { + this.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR + } +} + +fun Window.setStatusBarColorCompat(color: Int) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + + this.decorView.setBackgroundColor(ContextCompat.getColor(this.context, color)) + + // Apply window insets to avoid overlapping with system bars + ViewCompat.setOnApplyWindowInsetsListener( + this.decorView.findViewById(R.id.content) + ) { v, insets -> + val systemBarsInsets = + insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding( + v.getPaddingLeft(), + systemBarsInsets.top, + v.getPaddingRight(), + systemBarsInsets.bottom + ) + WindowInsetsCompat.CONSUMED + } + } else { + this.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) + this.statusBarColor = ContextCompat.getColor(this.context, color) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_details.xml b/app/src/main/res/layout/activity_user_details.xml index eb70f0a..edaae87 100644 --- a/app/src/main/res/layout/activity_user_details.xml +++ b/app/src/main/res/layout/activity_user_details.xml @@ -51,6 +51,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/common_margin" + android:gravity="center_horizontal" app:layout_constraintEnd_toEndOf="@+id/iv_following" app:layout_constraintStart_toStartOf="@+id/iv_following" app:layout_constraintTop_toBottomOf="@+id/iv_followers" diff --git a/app/src/main/res/layout/custom_actionbar_title.xml b/app/src/main/res/layout/custom_actionbar_title.xml deleted file mode 100644 index cf40e6f..0000000 --- a/app/src/main/res/layout/custom_actionbar_title.xml +++ /dev/null @@ -1,11 +0,0 @@ - - diff --git a/app/src/main/res/layout/toolbar.xml b/app/src/main/res/layout/toolbar.xml new file mode 100644 index 0000000..5db6b71 --- /dev/null +++ b/app/src/main/res/layout/toolbar.xml @@ -0,0 +1,32 @@ + + + + + + + + \ 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 index deddcd0..9544c00 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,4 +1,4 @@ - +