Skip to content

Commit 61d36ee

Browse files
authored
Merge pull request #21482 from wordpress-mobile/issue/21079-nav-restricted-api
Stop using restricted APIs in WPMainNavigationView
2 parents 09d8ee0 + d5fc949 commit 61d36ee

File tree

1 file changed

+32
-34
lines changed

1 file changed

+32
-34
lines changed

WordPress/src/main/java/org/wordpress/android/ui/main/WPMainNavigationView.kt

+32-34
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.wordpress.android.ui.main
22

3-
import android.annotation.SuppressLint
43
import android.content.Context
54
import android.graphics.ColorMatrix
65
import android.graphics.ColorMatrixColorFilter
@@ -10,6 +9,7 @@ import android.view.HapticFeedbackConstants
109
import android.view.LayoutInflater
1110
import android.view.MenuItem
1211
import android.view.View
12+
import android.view.ViewGroup
1313
import android.view.animation.AnimationUtils
1414
import android.widget.FrameLayout
1515
import android.widget.ImageView
@@ -22,8 +22,6 @@ import androidx.core.view.setPadding
2222
import androidx.core.widget.ImageViewCompat
2323
import androidx.fragment.app.Fragment
2424
import androidx.fragment.app.FragmentManager
25-
import com.google.android.material.navigation.NavigationBarItemView
26-
import com.google.android.material.navigation.NavigationBarMenuView
2725
import com.google.android.material.navigation.NavigationBarView
2826
import com.google.android.material.navigation.NavigationBarView.OnItemReselectedListener
2927
import com.google.android.material.navigation.NavigationBarView.OnItemSelectedListener
@@ -61,7 +59,6 @@ import com.google.android.material.R as MaterialR
6159
* insert our own custom views so we have more control over their appearance
6260
*/
6361
@AndroidEntryPoint
64-
@SuppressLint("RestrictedApi") // https://github.com/wordpress-mobile/WordPress-Android/issues/21079
6562
class WPMainNavigationView @JvmOverloads constructor(
6663
context: Context,
6764
attrs: AttributeSet? = null,
@@ -79,8 +76,8 @@ class WPMainNavigationView @JvmOverloads constructor(
7976
)
8077
private lateinit var navigationBarView: NavigationBarView
8178

82-
val disabledColorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f) })
83-
val enabledColorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(1f) })
79+
private val disabledColorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f) })
80+
private val enabledColorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(1f) })
8481

8582
@Inject
8683
lateinit var meGravatarLoader: MeGravatarLoader
@@ -119,30 +116,33 @@ class WPMainNavigationView @JvmOverloads constructor(
119116
assignNavigationListeners(true)
120117
disableShiftMode()
121118

122-
// overlay each item with our custom view
123-
val menuView = navigationBarView.getChildAt(0) as NavigationBarMenuView
119+
// This is a restricted NavigationBarMenuView
120+
val menuView = navigationBarView.getChildAt(0) as ViewGroup
124121
if (!BuildConfig.ENABLE_READER) hideReaderTab()
125122

123+
// overlay each item with our custom view
126124
for (i in 0 until navigationBarView.menu.size()) {
127-
val itemView = menuView.getChildAt(i) as NavigationBarItemView
128-
val customView: View = inflater.inflate(R.layout.navbar_item, menuView, false)
129-
130-
val txtLabel = customView.findViewById<TextView>(R.id.nav_label)
131-
val imgIcon = customView.findViewById<ImageView>(R.id.nav_icon)
132-
txtLabel.text = getTitleForPosition(i)
133-
customView.contentDescription = getContentDescriptionForPosition(i)
134-
imgIcon.setImageResource(getDrawableResForPosition(i))
135-
if (i == getPosition(READER)) {
136-
customView.id = R.id.bottom_nav_reader_button // identify view for QuickStart
137-
}
138-
if (i == getPosition(NOTIFS)) {
139-
customView.id = R.id.bottom_nav_notifications_button // identify view for QuickStart
140-
}
125+
// This is a restricted NavigationBarItemView
126+
(menuView.getChildAt(i) as? ViewGroup)?.let { itemView ->
127+
val customView: View = inflater.inflate(R.layout.navbar_item, menuView, false)
128+
129+
val txtLabel = customView.findViewById<TextView>(R.id.nav_label)
130+
val imgIcon = customView.findViewById<ImageView>(R.id.nav_icon)
131+
txtLabel.text = getTitleForPosition(i)
132+
customView.contentDescription = getContentDescriptionForPosition(i)
133+
imgIcon.setImageResource(getDrawableResForPosition(i))
134+
if (i == getPosition(READER)) {
135+
customView.id = R.id.bottom_nav_reader_button // identify view for QuickStart
136+
}
137+
if (i == getPosition(NOTIFS)) {
138+
customView.id = R.id.bottom_nav_notifications_button // identify view for QuickStart
139+
}
141140

142-
if (i == getPosition(ME)) {
143-
loadGravatar(imgIcon, accountStore.account?.avatarUrl.orEmpty())
141+
if (i == getPosition(ME)) {
142+
loadGravatar(imgIcon, accountStore.account?.avatarUrl.orEmpty())
143+
}
144+
itemView.addView(customView)
144145
}
145-
itemView.addView(customView)
146146
}
147147

148148
if(getMainPageIndex() != getPosition(ME)) {
@@ -380,18 +380,16 @@ class WPMainNavigationView @JvmOverloads constructor(
380380

381381
fun getFragment(pageType: PageType) = navAdapter.getFragmentIfExists(getPosition(pageType))
382382

383-
private fun getItemView(position: Int): NavigationBarItemView? {
383+
private fun getItemView(position: Int): View? {
384384
if (isValidPosition(position)) {
385-
val menuView = navigationBarView.getChildAt(0) as NavigationBarMenuView
386-
return menuView.getChildAt(position) as NavigationBarItemView
385+
// This is a restricted NavigationBarMenuView
386+
val menuView = navigationBarView.getChildAt(0) as? ViewGroup
387+
// This is a restricted NavigationBarItemView
388+
return menuView?.getChildAt(position)
387389
}
388390
return null
389391
}
390392

391-
fun showReaderBadge(showBadge: Boolean) {
392-
showBadge(getPosition(READER), showBadge)
393-
}
394-
395393
fun showNoteBadge(showBadge: Boolean) {
396394
showBadge(getPosition(NOTIFS), showBadge)
397395
}
@@ -441,7 +439,7 @@ class WPMainNavigationView @JvmOverloads constructor(
441439
}
442440

443441

444-
internal fun getFragment(position: Int): Fragment? {
442+
fun getFragment(position: Int): Fragment? {
445443
return pages().getOrNull(position)?.let { pageType ->
446444
val currentFragment = fragmentManager?.findFragmentByTag(getTagForPageType(pageType))
447445
return currentFragment?.let {
@@ -472,7 +470,7 @@ class WPMainNavigationView @JvmOverloads constructor(
472470
}
473471
}
474472

475-
internal fun getFragmentIfExists(position: Int): Fragment? {
473+
fun getFragmentIfExists(position: Int): Fragment? {
476474
return pages().getOrNull(position)?.let { pageType ->
477475
fragmentManager?.findFragmentByTag(getTagForPageType(pageType))
478476
}

0 commit comments

Comments
 (0)