/* * Copyright (c) 2016 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> * All Rights Reserved. */ package me.zhanghai.android.douya.content; import com.android.volley.VolleyError; import org.greenrobot.eventbus.Subscribe; import me.zhanghai.android.douya.eventbus.EventBusUtils; import me.zhanghai.android.douya.eventbus.PreventNoSubscriptionExceptionEvent; import me.zhanghai.android.douya.network.Request; import me.zhanghai.android.douya.network.RequestFragment; public abstract class ResourceFragment<ResponseType, ResourceType> extends RequestFragment<Void, ResponseType> { ResourceType mResource; public boolean has() { return get() != null; } public ResourceType get() { return mResource; } protected void set(ResourceType resource) { mResource = resource; } @Override public final boolean isRequesting() { throw new UnsupportedOperationException("Use isLoading() instead"); } public boolean isLoading() { return super.isRequesting(); } @Override public void onStart() { super.onStart(); EventBusUtils.register(this); loadOnStart(); } @Override public void onStop() { super.onStop(); EventBusUtils.unregister(this); } protected void loadOnStart() { if (!has()) { onLoadOnStart(); } } protected void onLoadOnStart() { load(); } public void load() { start(null); } @Override protected final Request<ResponseType> onCreateRequest(Void requestState) { return onCreateRequest(); } protected abstract Request<ResponseType> onCreateRequest(); @Override protected final void onRequestStarted() { onLoadStarted(); } protected abstract void onLoadStarted(); @Override protected void onRequestFinished(boolean successful, Void requestState, ResponseType response, VolleyError error) { onLoadFinished(successful, response, error); } protected abstract void onLoadFinished(boolean successful, ResponseType response, VolleyError error); @Subscribe public final void onPreventNoSubscriptionException(PreventNoSubscriptionExceptionEvent event) {} }