From d683cae6ffe644a9f63eea6cf3b7e59d2bde617b Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Thu, 21 Dec 2017 02:16:34 -0500 Subject: Enhancement/fragment interface (#564) * Begin fragment interfaces and themable contracts * Prepare swiperefresh interface * Snapshot * Add compilable version * Revamp once more * Finalize layouts * Cleanup --- .../frost/fragments/FragmentContract.kt | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentContract.kt (limited to 'app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentContract.kt') diff --git a/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentContract.kt b/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentContract.kt new file mode 100644 index 00000000..62b1de33 --- /dev/null +++ b/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentContract.kt @@ -0,0 +1,92 @@ +package com.pitchedapps.frost.fragments + +import android.content.Context +import com.pitchedapps.frost.contracts.FrostContentContainer +import com.pitchedapps.frost.contracts.FrostContentCore +import com.pitchedapps.frost.contracts.FrostContentParent +import com.pitchedapps.frost.contracts.MainActivityContract +import com.pitchedapps.frost.views.FrostRecyclerView +import io.reactivex.disposables.Disposable + +/** + * Created by Allan Wang on 2017-11-07. + */ + +interface FragmentContract : FrostContentContainer { + + val content: FrostContentParent? + + /** + * Helper to retrieve the core from [content] + */ + val core: FrostContentCore? + get() = content?.core + + /** + * Specifies position in Activity's viewpager + */ + val position: Int + + /** + * Specifies whether if current load + * will be fragment's first load + * + * Defaults to true + */ + var firstLoad: Boolean + + /** + * Called when the fragment is first visible + * Typically, if [firstLoad] is true, + * the fragment should call [reload] and make [firstLoad] false + */ + fun firstLoadRequest() + + /** + * Single callable action to be executed upon creation + * Note that this call is not guaranteed + */ + fun post(action: (fragment: FragmentContract) -> Unit) + + /** + * Call whenever a fragment is attached so that it may listen + * to activity emissions + */ + fun attachMainObservable(contract: MainActivityContract): Disposable + + /** + * Load custom layout to container + */ + fun innerView(context: Context): FrostContentCore + + /** + * Call when fragment is detached so that any existing + * observable is disposed + */ + fun detachMainObservable() + + /* + * ----------------------------------------- + * Delegates + * ----------------------------------------- + */ + + fun onBackPressed(): Boolean + + fun onTabClick() + + +} + +interface RecyclerContentContract { + + fun bind(recyclerView: FrostRecyclerView) + + /** + * Completely handle data reloading + * Optional progress emission update + * Callback returns [true] for success, [false] otherwise + */ + fun reload(progress: (Int) -> Unit, callback: (Boolean) -> Unit) + +} \ No newline at end of file -- cgit v1.2.3