From 8005454c49feb58053f3ae35fc31993728d4522c Mon Sep 17 00:00:00 2001 From: tuancoltech Date: Sun, 30 Mar 2025 11:20:17 +0700 Subject: [PATCH] * Tweak activity's Toolbar. * Remove redundant dependencies --- .../com/tymex/github/users/ui/BaseActivity.kt | 20 ++++++-- .../github/users/ui/UserDetailsActivity.kt | 4 ++ .../tymex/github/users/ui/UsersActivity.kt | 4 +- .../tymex/github/users/ui/WindowExtensions.kt | 47 +++++++++++++++++++ .../main/res/layout/activity_user_details.xml | 1 + .../res/layout/custom_actionbar_title.xml | 11 ----- app/src/main/res/layout/toolbar.xml | 32 +++++++++++++ app/src/main/res/values-night/themes.xml | 2 +- app/src/main/res/values/dimens.xml | 1 + data-core/src/main/AndroidManifest.xml | 2 +- .../github/data/core/data/model/FlowState.kt | 12 +++++ .../data/core/data/model/GetUsersResult.kt | 6 ++- .../users/local/UserLocalDataSourceImpl.kt | 5 +- .../users/remote/UserRemoteDataSourceImpl.kt | 4 +- .../github/data/core/di/CoroutinesModule.kt | 8 ---- .../tymex/github/data/core/di/JsonHelper.kt | 16 ------- .../tymex/github/data/core/di/ParserModule.kt | 5 -- .../github/{ => data/core}/LinkHeaderTest.kt | 0 .../{ => data/core}/NetworkResponseTest.kt | 0 19 files changed, 127 insertions(+), 53 deletions(-) create mode 100644 app/src/main/java/com/tymex/github/users/ui/WindowExtensions.kt delete mode 100644 app/src/main/res/layout/custom_actionbar_title.xml create mode 100644 app/src/main/res/layout/toolbar.xml delete mode 100644 data-core/src/main/java/com/tymex/github/data/core/di/JsonHelper.kt rename data-core/src/test/java/com/tymex/github/{ => data/core}/LinkHeaderTest.kt (100%) rename data-core/src/test/java/com/tymex/github/{ => data/core}/NetworkResponseTest.kt (100%) 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 @@ - +