package com.wwdablu.soumya.lottiebottomnav; import android.text.TextUtils; import androidx.annotation.FloatRange; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.wwdablu.soumya.lottiebottomnav.MenuItem.Source; public final class MenuItemBuilder { private MenuItem menuItem; private MenuItemBuilder(String lottieName, Source lottieSource, FontItem fontItem, Object tag) { menuItem = new MenuItem(); menuItem.fontItem = fontItem; menuItem.selectedLottieName = lottieName; menuItem.unselectedLottieName = lottieName; menuItem.lottieSource = lottieSource; menuItem.tag = tag; } public static MenuItemBuilder create(@NonNull String lottieName, @NonNull Source lottieSource, @NonNull FontItem fontItem, @Nullable Object tag) throws IllegalArgumentException { if (TextUtils.isEmpty(lottieName)) { throw new IllegalArgumentException("Lottie file must be provided."); } return new MenuItemBuilder(lottieName, lottieSource, fontItem, tag); } public static MenuItemBuilder createFrom(@NonNull MenuItem menuItem) { return createFrom(menuItem, FontBuilder.create(menuItem.fontItem).build()); } public static MenuItemBuilder createFrom(@NonNull MenuItem menuItem, @NonNull FontItem fontItem) { MenuItemBuilder builder = create( menuItem.selectedLottieName, menuItem.lottieSource, fontItem, null); builder.menuItem.selectedLottieName = menuItem.selectedLottieName; builder.menuItem.unselectedLottieName = menuItem.unselectedLottieName; builder.menuItem.lottieProgress = menuItem.lottieProgress; builder.menuItem.loop = menuItem.loop; return builder; } public MenuItemBuilder selectedLottieName(String lottieName) { menuItem.selectedLottieName = lottieName; return this; } public MenuItemBuilder unSelectedLottieName(String lottieName) { menuItem.unselectedLottieName = lottieName; return this; } public MenuItemBuilder pausedProgress(@FloatRange(from = 0, to = 1) float progress) { if (progress <= 0) progress = 0; else if (progress >= 1) progress = 1; menuItem.lottieProgress = progress; return this; } public MenuItemBuilder loop(boolean loop) { menuItem.loop = loop; return this; } public MenuItemBuilder tag(Object tag) { menuItem.tag = tag; return this; } public MenuItem build() { return menuItem; } }