Get Started

Learn how to use this library. Better if consider using CodePocketBuilder, a code template generator for better dessign pattern

Installation

            
              //root build.gradle
              allprojects {
                    repositories {
                        maven { url 'https://jitpack.io' }
                    }
                }
              //add dependency
              dependencies {
                    implementation 'com.github.jamesdeperio:PocketLib:2.2.0'

    //To use BaseSwipeFragment include
    implementation 'me.yokeyword:swipebackfragment:0.4.0'

    //To use EventPublisher include
    implementation 'io.reactivex.rxjava2:rxjava:x.x.x'
    implementation 'io.reactivex.rxjava2:rxandroid:x.x.x'

    //To use PocketDialog include
    implementation 'com.airbnb.android:lottie:2.7.0'
}

Usage

Here are the available classes that you can use to your project:


BaseActivity / BaseFragment / BaseSwipeFragment

Extends your class using this base controller.

Method Description
initialization(savedInstanceState: Bundle?) Place where you should initialize or set your object.
onLoadEvent(savedInstanceState: Bundle?) On View did load. Start your procedure.

Example:

              
                //kotlin
                class MainController : BaseSwipeFragment(), HasMainContract.Event {
                    override fun initialization(savedInstanceState: Bundle?) {
                        //todo
                    }
                    override fun onLoadEvent(savedInstanceState: Bundle?) {
                        //todo
                    }
              }
              
            

PocketAdapter

This base class is for recyclerview adapter.

Method Description
getItemCount() Override and set the list size.
viewTypeCondition(position: Int) Override and set condition on what viewholder to display. Default is 0.
addViewHolder(viewHolder: PocketViewHolder) Use to add and bind viewholder to adapter.

Example:

              
                //kotlin
                data class YOURDATA(
                    var isHeader:Boolean = false,
                    var isFooter:Boolean = false,
                    var value:String? = null
                )

                class YOURADAPTER : PocketAdapter() {
                      var dataList: MutableList<YOURDATA> = ArrayList()
                      override fun getItemCount(): Int = dataList.size
                      override fun viewTypeCondition(position: Int)
                          = if(dataList[position].isHeader()) 0
                           else if(dataList[position].isFooter()) 1
                           else 2
                  // NOTE: magic number, you can improve using enum
              }
              
            

PocketViewHolder

This base class is for recyclerview viewholder.

Method Description
onBindViewHolder (view: View, position: Int) Bind your datalist on view.
setContentView(layoutID: Int) Set the layout of viewholder.

Example:

              
                //kotlin
                class HEADERVIEWHOLDER( private val adapter: YOURADAPTER) : PocketViewHolder() {
                    override fun onBindViewHolder (view: View, position: Int) {
                        view.findViewById(R.id.textView)!!.text = adapter.dataList[position].data.value
                    }
                }

                class FOOTERVIEWHOLDER( private val adapter: YOURADAPTER) : PocketViewHolder() {
                    override fun onBindViewHolder (view: View, position: Int) {
                        view.findViewById(R.id.textView)!!.text = adapter.dataList[position].data.value
                    }
                }

                class ITEMVIEWHOLDER( private val adapter: YOURADAPTER) : PocketViewHolder() {
                    override fun onBindViewHolder (view: View, position: Int) {
                        view.findViewById(R.id.textView)!!.text = adapter.dataList[position].data.value
                    }
                }

                val adapter = YOURADAPTER()
                val header = HEADERVIEWHOLDER(adapter)
                val footer = FOOTERVIEWHOLDER(adapter)
                val content = ITEMVIEWHOLDER(adapter)
                header.setContentView(R.layout.item_list_header)
                footer.setContentView(R.layout.item_list_footer)
                content.setContentView(R.layout.item_list_content)

                adapter.addViewHolder(header) // index 0 itemViewType
                adapter.addViewHolder(footer) // index 1 itemViewType
                adapter.addViewHolder(content) // index 2 itemViewType
                //Note: This is the magic number.
              
            

PageBuilder

Builder for creating viewpager.

Method Description
setViewPager(?) Assign viewpager.
setTabLayout(?) Assign tab layout.
setFragmentManager(?) Assign fragment manager/ child fragment manager.
addPage(title: String, fragment: Fragment) Add page in viewpager.
build() Build to commit configuration.

Example:

              
                //kotlin
                PageBuilder.build {
                      setViewPager(VIEW_PAGER)
                      setFragmentManager(FRAGMENT_MANAGER/CHILD_FRAGMENT_MANAGER)
                      setTabLayout(TAB_LAYOUT)
                      setPageTransformer(TRANSFORMER) // can be null
                      addPage("tab1",YourFragment())
                      addPage("tab2",YourFragment())
                      addPage("tab3",YourFragment())
                }
              
            

Navigate

Utility class for fragment transaction.

Method Description
using(?) Assign fragment manager.
change(?) Assign layout ID to be changed.
withBackStack(?) Allow backstack or not.
from(?) Assign current fragment. If function is not used it will just replace the view.
to(?) Assign fragment to use.
from(currentFragment: Fragment, fromAnimEnter: Int, fromAnimExit: Int) Assign current fragment and xml anim ID.
to(fragmentToChange: Fragment, toAnimEnter: Int, toAnimExit: Int) Assign fragment to use and xml anim ID.
remove(?) Assign fragment to remove.
addSharedElement(view:View,name:String) Add shared element.
commitAllowingStateLoss() Commit transaction that allow state loss.
commit() Commit transaction.

Example:

              
                //kotlin
                //from activity / replace fragment
                Navigate.using(fragmentManager = fragmentManager!!)
                    .change(layoutID = R.id.fragment_container)
                    .to(fragmentToChange = YOUR_FRAGMENT)
                    .withBackStack(isBackstackEnabled = false)
                    .commit()

                //from fragment with backstack / using BaseSwipeFragmen
                Navigate.using(fragmentManager = fragmentManager!!)
                    .change(layoutID = R.id.fragment_container)
                    .from(currentFragment = fragment)
                    .to(fragmentToChange = YOUR_FRAGMENT)
                    .withBackStack(isBackstackEnabled = true)
                    .commit()
              
            

PocketSpinnerDialog<T>

Searchable Spinner Dialog builder. Just assign data object as the generic.

Method Description
setSpinnerView(?) Assign a Button/TextInputEditText/PocketSpinner to spinner dialog.
setListener(?) Assign item selected listener.
addItem(itemObject:T,itemString:String)
addItem(itemString:String)
addItem(itemStrings:MutableList<String>)
addItem(items:MutableList<T>,itemStrings:MutableList<String>)
addItem(items:MutableMap<T,String>)
Ways to add an item to spinner dialog.

Example:

              
                //kotlin
                data class Person (var id:Int=0,  var name:String? = null, var address:String? = null )

                var dialog= PocketSpinnerDialog(context = context,isFullScreen = false).apply {
                    this.setSpinnerView(BUTTON)
                    //you can override the default function of setOnItemSelectedListener
                    this.setOnItemSelectedListener { selectedObject, selectedItem, selectedIndex, spinner ->
                        BUTTON.text=selectedItem
                    }

                    val person1 = Person(id = 1,name = "ABC",address = null)
                    this.addItem(itemObject = person1,itemString = person1.name!!)
                    val person2 = Person(id = 1,name = "XYZ",address = null)
                    this.addItem(itemObject = person2,itemString = person2.name!!)
              }

              dialog.show()
              
            

PocketDialog

Customizable dialog like warning or error.

Example:

              
                // DEFAULT DESIGN AND LOTTIE ANIMATION:
                // PocketDialog.Type.DIALOG_NO_INTERNET_CONNECTION
                // PocketDialog.Type.DIALOG_WARNING
                // PocketDialog.Type.DIALOG_REWARD
                // PocketDialog.Type.DIALOG_BASIC
                // PocketDialog.Type.DIALOG_ERROR
                // PocketDialog.Type.DIALOG_SUCCESS
                // PocketDialog.Type.DIALOG_LOADER

                var dialog = PocketDialog(context = context,type = PocketDialog.Type.DIALOG_WARNING,isFullScreen = false).apply {
                    // okAction (customize the ok button)
                    // cancelAction (customize the cancel button)
                    // title (customized the title textview)
                    // description (customize the description textview)
                    // view (customize the dialog view)
                    // lottie (customize the lottie animation)
                      // dialog (customize the dialog)
              }

              dialog.show()
              
            

More CustomView

This list of custom view prevents bugs/error caused by animation. Can be use in xml.

View
PocketHorizontalScrollView()
PocketNestedScrollView()
PocketScrollView()
PocketTabLayout()
PocketViewPager()
PocketRecyclerView()
RecyclerViewLayoutManager
PocketGridLayout()
PocketLinearLayout()
PocketStaggeredLayout()

EventPublisher

A reactive event bus that can create and listen multiple channel.

Method Description
subscribeReceiver(channel: String, eventReceiver: (event:Any) -> Unit) Create channelID and set callback for receiver.
sendEvent(channel:String,event: Any) Send event based on channelID
unSubscribeReceiver(channel:String,receiverID:Int) Dispose receiver based on channelID.
disposeChannel(channel:String) Dispose channel.
disposeAllChannel() Dispose all channel.
getActiveReceiverSize(channel: String) Get the count of receiver based on channelID.
getActiveReceiverID(channel: String) Get the list of active receiverID based on channelID.
getActiveChannelSize() Get the count of channels.
getActiveChannel() Get the list of channel.

Declaration:

              
                val eventPublisher = EventPublisher(Bus.PublishSubject)
                val eventPublisher = EventPublisher(Bus.AsyncSubject)
                val eventPublisher = EventPublisher(Bus.ReplaySubject)
                val eventPublisher = EventPublisher(Bus.BehaviorSubject)
                val eventPublisher = EventPublisher(Bus.UnicastSubject)