Skip to content

Commit a034788

Browse files
committed
fix(drawer-menu): item highlight
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 420b9aa commit a034788

File tree

4 files changed

+51
-22
lines changed

4 files changed

+51
-22
lines changed

app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@
88
package com.nextcloud.utils.extensions
99

1010
import android.content.Intent
11+
import android.view.Menu
1112
import com.owncloud.android.MainApp
1213
import com.owncloud.android.R
1314
import com.owncloud.android.ui.activity.DrawerActivity
1415
import com.owncloud.android.ui.activity.FileDisplayActivity
16+
import androidx.core.view.get
17+
import androidx.core.view.size
1518

1619
fun DrawerActivity.navigateToAllFiles() {
1720
DrawerActivity.menuItemId = R.id.nav_all_files
@@ -27,3 +30,18 @@ fun DrawerActivity.navigateToAllFiles() {
2730
startActivity(this)
2831
}
2932
}
33+
34+
fun DrawerActivity.unsetAllNavigationItems() {
35+
fun uncheckMenu(menu: Menu) {
36+
for (i in 0 until menu.size) {
37+
val item = menu[i]
38+
item.isChecked = false
39+
40+
// recursively uncheck submenu items
41+
item.subMenu?.let { uncheckMenu(it) }
42+
}
43+
}
44+
45+
drawerNavigationView?.menu?.let { uncheckMenu(it) }
46+
bottomNavigationView?.menu?.let { uncheckMenu(it) }
47+
}

app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import com.nextcloud.utils.GlideHelper;
6464
import com.nextcloud.utils.LinkHelper;
6565
import com.nextcloud.utils.extensions.ActivityExtensionsKt;
66+
import com.nextcloud.utils.extensions.DrawerActivityExtensionsKt;
6667
import com.nextcloud.utils.extensions.ViewExtensionsKt;
6768
import com.nextcloud.utils.mdm.MDMConfig;
6869
import com.owncloud.android.MainApp;
@@ -160,7 +161,7 @@ public abstract class DrawerActivity extends ToolbarActivity
160161
/**
161162
* Reference to the navigation view.
162163
*/
163-
private NavigationView drawerNavigationView;
164+
public NavigationView drawerNavigationView;
164165

165166
/**
166167
* Reference to the navigation view header.
@@ -225,6 +226,7 @@ protected void setupDrawer() {
225226

226227
drawerNavigationView = findViewById(R.id.nav_view);
227228
if (drawerNavigationView != null) {
229+
viewThemeUtils.files.colorNavigationView(drawerNavigationView);
228230

229231
// Setting up drawer header
230232
mNavigationViewHeader = drawerNavigationView.getHeaderView(0);
@@ -877,22 +879,6 @@ private void setQuotaInformation(long usedSpace, long totalSpace, int relative,
877879
showQuota(true);
878880
}
879881

880-
private void unsetAllDrawerMenuItems() {
881-
if (drawerNavigationView != null) {
882-
Menu menu = drawerNavigationView.getMenu();
883-
for (int i = 0; i < menu.size(); i++) {
884-
menu.getItem(i).setChecked(false);
885-
}
886-
}
887-
888-
if (bottomNavigationView != null) {
889-
Menu menu = bottomNavigationView.getMenu();
890-
for (int i = 0; i < menu.size(); i++) {
891-
menu.getItem(i).setChecked(false);
892-
}
893-
}
894-
}
895-
896882
private void updateQuotaLink() {
897883
if (mQuotaTextLink != null) {
898884
if (MDMConfig.INSTANCE.externalSiteSupport(this)) {
@@ -960,13 +946,12 @@ public void onLoadFailed(@Nullable Drawable errorDrawable) {
960946
};
961947
}
962948

963-
964949
/**
965950
* Sets the menu item as checked in both the drawer and bottom navigation views, if applicable.
966951
*/
967952
@SuppressFBWarnings("RV")
968953
public void setNavigationViewItemChecked() {
969-
unsetAllDrawerMenuItems();
954+
DrawerActivityExtensionsKt.unsetAllNavigationItems(this);
970955

971956
// Don't check any items
972957
if (menuItemId == Menu.NONE) {
@@ -978,7 +963,6 @@ public void setNavigationViewItemChecked() {
978963

979964
if (menuItem != null && !menuItem.isChecked()) {
980965
menuItem.setChecked(true);
981-
viewThemeUtils.platform.colorNavigationView(drawerNavigationView);
982966
}
983967
}
984968

@@ -1444,6 +1428,7 @@ protected void handleDeepLink(@NonNull Uri uri) {
14441428
private void handleNavItemClickEvent(@IdRes int menuItemId) {
14451429
if (drawerNavigationView == null) {
14461430
drawerNavigationView = findViewById(R.id.nav_view);
1431+
viewThemeUtils.files.colorNavigationView(drawerNavigationView);
14471432
}
14481433
Menu navMenu = drawerNavigationView.getMenu();
14491434
onNavigationItemClicked(navMenu.findItem(menuItemId));

app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,8 +1389,6 @@ class FileDisplayActivity :
13891389
menuItemId = R.id.nav_personal_files
13901390
} else if (MainApp.isOnlyOnDevice()) {
13911391
menuItemId = R.id.nav_on_device
1392-
} else if (menuItemId == R.id.nav_trashbin || menuItemId == R.id.nav_activity) {
1393-
menuItemId = R.id.nav_all_files
13941392
} else if (menuItemId == Menu.NONE) {
13951393
menuItemId = R.id.nav_all_files
13961394
}

app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,18 @@ import androidx.appcompat.widget.AppCompatAutoCompleteTextView
2727
import androidx.appcompat.widget.SearchView
2828
import androidx.core.content.res.ResourcesCompat
2929
import com.google.android.material.card.MaterialCardView
30+
import com.google.android.material.navigation.NavigationView
3031
import com.nextcloud.android.common.ui.color.ColorUtil
3132
import com.nextcloud.android.common.ui.theme.MaterialSchemes
3233
import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase
3334
import com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils
3435
import com.nextcloud.android.common.ui.theme.utils.AndroidXViewThemeUtils
36+
import com.nextcloud.android.common.ui.util.buildColorStateList
3537
import com.nextcloud.utils.view.FastScrollPopupBackground
3638
import com.owncloud.android.R
3739
import com.owncloud.android.lib.common.utils.Log_OC
3840
import com.owncloud.android.lib.resources.shares.ShareType
41+
import dynamiccolor.MaterialDynamicColors
3942
import me.zhanghai.android.fastscroll.FastScrollerBuilder
4043
import me.zhanghai.android.fastscroll.PopupStyles
4144
import javax.inject.Inject
@@ -47,6 +50,8 @@ class FilesSpecificViewThemeUtils @Inject constructor(
4750
private val androidViewThemeUtils: AndroidViewThemeUtils,
4851
private val androidXViewThemeUtils: AndroidXViewThemeUtils
4952
) : ViewThemeUtilsBase(schemes) {
53+
private val dynamicColor = MaterialDynamicColors()
54+
5055
// not ported to common lib because PreferenceCategory is deprecated
5156
fun themePreferenceCategory(category: PreferenceCategory) {
5257
withScheme(category.context) {
@@ -279,6 +284,29 @@ class FilesSpecificViewThemeUtils @Inject constructor(
279284
}
280285
}
281286

287+
@JvmOverloads
288+
fun colorNavigationView(navigationView: NavigationView, colorIcons: Boolean = true) {
289+
withScheme(navigationView) { scheme ->
290+
navigationView.run {
291+
itemBackground?.setTintList(
292+
buildColorStateList(
293+
android.R.attr.state_checked to dynamicColor.secondaryContainer().getArgb(scheme),
294+
-android.R.attr.state_checked to Color.TRANSPARENT
295+
)
296+
)
297+
298+
background.setTintList(ColorStateList.valueOf(dynamicColor.surface().getArgb(scheme)))
299+
300+
if (colorIcons) {
301+
itemIconTintList = buildColorStateList(
302+
android.R.attr.state_checked to dynamicColor.onSecondaryContainer().getArgb(scheme),
303+
-android.R.attr.state_checked to dynamicColor.onSurfaceVariant().getArgb(scheme)
304+
)
305+
}
306+
}
307+
}
308+
}
309+
282310
companion object {
283311
private val TAG = FilesSpecificViewThemeUtils::class.simpleName
284312

0 commit comments

Comments
 (0)