Timeline Widgets
Android guide to Timeline Widgets
Intractable TimeLine View is available from 2.17 onwards
Version 2.17 introduces the IntractableWidgetTimelineViewModel which is the preferred user experience for a Timeline style presentation mode. We highly recommend using it instead.
https://docs.livelike.com/docs/widget-timeline#interactable-timeline-view
What are Timeline Widgets?
The WidgetTimelineView is a presentation mode provided by the EngagementSDK.
A great use case for the Timeline Mode for widgets is to show a live blog. When a page with a live blog on it loads, all the widgets published to that page will load oldest to newest but they won't be interactive in the default behaviour of the timeline view. New widgets will be interactive though and they will appear at the top of the timeline without having to reload the page.
Setup
Steps:
- Create a content session Session Management ]
- Create TimeLineViewModel
- Attach TimeLineViewModel to TimeLineView
- Add timeline view in yours view container
val timeLineViewModel = WidgetTimeLineViewModel(session)
val timeLineView = WidgetsTimeLineView(
this,
timeLineViewModel,
(application as LiveLikeApplication).sdk
)
viewContainer.addView(timeLineView)
Use custom widgets for timeline
For custom widget LiveLikeWidgetViewFactory implemntation has to initialized on timelineview
timeLineView.widgetViewFactory = TimeLineWidgetFactory(this,timeLineViewModel.timeLineWidgets)
Decide interactivity of widget in a timeline
This strategy can be placed on a timeline view model to make any widget interactive or non-interactive
timeLineViewModel.decideWidgetInteractivity = object : DecideWidgetInteractivity{
override fun wouldAllowWidgetInteraction(widget: LiveLikeWidget): Boolean {
return true
}
}
Custom Theme of Widget in a timeline
Adding theme for widgets in timeline
timeLineView.applyTheme(jonObject.json)
val element = LiveLikeEngagementTheme.instanceFrom(JsonParser.parseString(theme).asJsonObject)
timeLineView.applyTheme(<object of LiveLikeEngagementTheme>)
UseCase : Filter Widget
You may want to hide specific widget types from appearing in the timeline, it is for both history and real-time widgets.
Android SDK version 2.16.3
The filter method in the timeline is available from 2.16.3
In this example, we will filter all Alert Widgets from being displayed in the timeline.
val timeLineViewModel = WidgetTimeLineViewModel(getSession()!!) { widget ->
widget.getWidgetType() == WidgetType.ALERT
}
All the features below are available from android SDK version 2.17
Customise Timeline Collection Divider
This will allow add a custom separator between widgets in a timeline.
The example below adds a drawable as separator with white as backgroundColor and height as 20
timeLineView.setSeparator(ContextCompat.getDrawable(this, R.drawable.white_separator))
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item >
<shape
android:shape="rectangle">
<size
android:width="1dp"
android:height="20dp" />
<solid android:color="#FFFFFF" />
</shape>
</item>
</layer-list>
Interactable TimeLine View
We have added an InteractiveTimeLineViewModel class, in which all Widgets are interactive by default unless previous user input would make interactions invalid, like an already answered quiz or a prediction that has already been followed up on.
How to create a Intractable TimeLine View
The below code sample shows how to create a timeline view with IntractableTimelineViewModel
val timeLineViewModel = IntractableWidgetTimeLineViewModel(session)
val timeLineView = WidgetsTimeLineView(
this,
timeLineViewModel,
(application as LiveLikeApplication).sdk
)
viewContainer.addView(timeLineView)
Integrator can now also control the timer on widgets in the Intractable timeline. By default there will be no timer, interaction duration will be kept indefinite if implementation of widgetTimerController is not defined.
The below code sample shows how we can implement a widgetTimerController.
if(customTime){
// integrator timeout configured
timeLineView.widgetTimerController = object : WidgetTimerController(){
override fun timeValue(widget: LiveLikeWidget): String {
return customTime // customTime should be in ISO8601 duration formatted String
}
}
}else{
//CMS timeout configured
timeLineView.widgetTimerController = CMSSpecifiedDurationTimer()
}
Updated about 1 year ago