Skip to content

Commit

Permalink
feat(android): add Ti.UI.Tab.badge and badgeColor
Browse files Browse the repository at this point in the history
Fixes TIMOB-27859
  • Loading branch information
m1ga authored and sgtcoolguy committed Oct 8, 2020
1 parent a206387 commit a19c36e
Show file tree
Hide file tree
Showing 5 changed files with 150 additions and 23 deletions.
Expand Up @@ -25,7 +25,9 @@
TiC.PROPERTY_ICON,
TiC.PROPERTY_TITLE,
TiC.PROPERTY_TITLE_COLOR,
TiC.PROPERTY_TITLEID
TiC.PROPERTY_TITLEID,
TiC.PROPERTY_BADGE,
TiC.PROPERTY_BADGE_COLOR
})
public class TabProxy extends TiViewProxy
{
Expand Down Expand Up @@ -253,6 +255,12 @@ public void onPropertyChanged(String name, Object value)
if (name.equals(TiC.PROPERTY_ICON)) {
((TiUIAbstractTabGroup) tabGroupProxy.getOrCreateView()).updateTabIcon(tabGroupProxy.getTabIndex(this));
}
if (name.equals(TiC.PROPERTY_BADGE)) {
((TiUIAbstractTabGroup) tabGroupProxy.getOrCreateView()).updateBadge(tabGroupProxy.getTabIndex(this));
}
if (name.equals(TiC.PROPERTY_BADGE_COLOR)) {
((TiUIAbstractTabGroup) tabGroupProxy.getOrCreateView()).updateBadgeColor(tabGroupProxy.getTabIndex(this));
}
}

@Override
Expand Down
Expand Up @@ -91,6 +91,20 @@ public abstract class TiUIAbstractTabGroup extends TiUIView
*/
public abstract void setBackgroundColor(int colorInt);

/**
* Update the tab badge
*
* @param index of the Tab to update.
*/
public abstract void updateBadge(int index);

/**
* Update the tab badge color
*
* @param index of the Tab to update.
*/
public abstract void updateBadgeColor(int index);

/**
* Updates the tab's background drawables to the proper color states.
*
Expand Down
Expand Up @@ -6,17 +6,7 @@
*/
package ti.modules.titanium.ui.widget.tabgroup;

import android.annotation.SuppressLint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import com.google.android.material.bottomnavigation.BottomNavigationItemView;
import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.bottomnavigation.LabelVisibilityMode;

import android.view.MenuItem;
import android.view.View;
import android.view.ViewParent;
import java.util.ArrayList;

import org.appcelerator.kroll.common.Log;
import org.appcelerator.titanium.TiBaseActivity;
Expand All @@ -27,7 +17,18 @@
import org.appcelerator.titanium.util.TiUIHelper;
import org.appcelerator.titanium.view.TiCompositeLayout;

import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewParent;

import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.bottomnavigation.BottomNavigationItemView;
import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.bottomnavigation.LabelVisibilityMode;

import ti.modules.titanium.ui.TabGroupProxy;
import ti.modules.titanium.ui.TabProxy;
Expand Down Expand Up @@ -160,7 +161,7 @@ public void addTabItemInController(TiViewProxy tabProxy)
return;
}
// Create a new item with id representing its index in mMenuItemsArray.
MenuItem menuItem = this.mBottomNavigationView.getMenu().add(null);
MenuItem menuItem = this.mBottomNavigationView.getMenu().add(0, this.mMenuItemsArray.size(), 0, "");
// Set the click listener.
menuItem.setOnMenuItemClickListener(this);
// Add the MenuItem to the menu of BottomNavigationView.
Expand Down Expand Up @@ -190,6 +191,10 @@ private void updateDrawablesAfterNewItem(int index)
updateTabTitle(index);
// Set the icon.
updateTabIcon(index);
// Set the badge
updateBadge(index);
// Set the badge color
updateBadgeColor(index);
for (int i = 0; i < this.mBottomNavigationView.getMenu().size(); i++) {
// Set the title text color.
updateTabTitleColor(i);
Expand Down Expand Up @@ -275,6 +280,49 @@ public void updateTabTitle(int index)
}

@SuppressLint("RestrictedApi")
@Override
public void updateBadge(int index)
{
if ((index < 0) || (index >= this.tabs.size())) {
return;
}

TiViewProxy tabProxy = this.tabs.get(index).getProxy();
if (tabProxy == null) {
return;
}

int menuItemId = this.mBottomNavigationView.getMenu().getItem(index).getItemId();
if (tabProxy.getProperty(TiC.PROPERTY_BADGE) != null) {
BadgeDrawable badgeDrawable = this.mBottomNavigationView.getOrCreateBadge(menuItemId);
badgeDrawable.setVisible(true);
badgeDrawable.setNumber(TiConvert.toInt(tabProxy.getProperty(TiC.PROPERTY_BADGE), 0));
} else {
this.mBottomNavigationView.removeBadge(menuItemId);
}
}

@Override
public void updateBadgeColor(int index)
{
if ((index < 0) || (index >= this.tabs.size())) {
return;
}

TiViewProxy tabProxy = this.tabs.get(index).getProxy();
if (tabProxy == null) {
return;
}

int menuItemId = this.mBottomNavigationView.getMenu().getItem(index).getItemId();
Log.i("COL", "" + tabProxy.getProperty(TiC.PROPERTY_BADGE_COLOR));
if (tabProxy.getProperty(TiC.PROPERTY_BADGE_COLOR) != null) {
BadgeDrawable badgeDrawable = this.mBottomNavigationView.getOrCreateBadge(menuItemId);
badgeDrawable.setBackgroundColor(
TiConvert.toColor((String) tabProxy.getProperty(TiC.PROPERTY_BADGE_COLOR)));
}
}

@Override
public void updateTabTitleColor(int index)
{
Expand Down
Expand Up @@ -6,15 +6,6 @@
*/
package ti.modules.titanium.ui.widget.tabgroup;

import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import com.google.android.material.tabs.TabLayout;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import org.appcelerator.kroll.common.Log;
import org.appcelerator.titanium.TiBaseActivity;
import org.appcelerator.titanium.TiC;
Expand All @@ -24,6 +15,17 @@
import org.appcelerator.titanium.util.TiUIHelper;
import org.appcelerator.titanium.view.TiCompositeLayout;

import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.tabs.TabLayout;

import ti.modules.titanium.ui.TabGroupProxy;

/**
Expand Down Expand Up @@ -161,6 +163,10 @@ public void addTabItemInController(TiViewProxy tabProxy)
updateTabBackgroundDrawable(tabIndex);
// Set the icon.
updateTabIcon(tabIndex);
// Set the badge.
updateBadge(tabIndex);
// Set the badge.color
updateBadgeColor(tabIndex);
}

/**
Expand Down Expand Up @@ -261,6 +267,47 @@ public void updateTabTitleColor(int index)
}
}

@Override
public void updateBadge(int index)
{
// Validate index input.
if (index < 0 || index >= tabs.size()) {
return;
}
TiViewProxy tabProxy = tabs.get(index).getProxy();
if (tabProxy == null) {
return;
}

BadgeDrawable badgeDrawable = this.mTabLayout.getTabAt(index).getOrCreateBadge();
if (tabProxy.getProperty(TiC.PROPERTY_BADGE) != null) {
badgeDrawable.setVisible(true);
badgeDrawable.setNumber(TiConvert.toInt(tabProxy.getProperty(TiC.PROPERTY_BADGE), 0));
} else {
this.mTabLayout.getTabAt(index).removeBadge();
}
}

@Override
public void updateBadgeColor(int index)
{
// Validate index input.
if (index < 0 || index >= tabs.size()) {
return;
}
TiViewProxy tabProxy = tabs.get(index).getProxy();
if (tabProxy == null) {
return;
}

BadgeDrawable badgeDrawable = this.mTabLayout.getTabAt(index).getOrCreateBadge();
if (tabProxy.getProperty(TiC.PROPERTY_BADGE_COLOR) != null) {
badgeDrawable.setVisible(true);
badgeDrawable.setBackgroundColor(
TiConvert.toColor((String) tabProxy.getProperty(TiC.PROPERTY_BADGE_COLOR)));
}
}

@Override
public void updateTabIcon(int index)
{
Expand Down
10 changes: 10 additions & 0 deletions android/titanium/src/java/org/appcelerator/titanium/TiC.java
Expand Up @@ -1067,6 +1067,16 @@ public class TiC
*/
public static final String PROPERTY_BACKGROUND_SELECTED_IMAGE = "backgroundSelectedImage";

/**
* @module.api
*/
public static final String PROPERTY_BADGE = "badge";

/**
* @module.api
*/
public static final String PROPERTY_BADGE_COLOR = "badgeColor";

/**
* @module.api
*/
Expand Down

0 comments on commit a19c36e

Please sign in to comment.