package com.jdroid.android.refresh; import android.support.v4.view.MenuItemCompat; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import com.jdroid.android.exception.AbstractErrorDisplayer; import com.jdroid.android.exception.ErrorDisplayer; import com.jdroid.android.fragment.FragmentIf; import com.jdroid.android.usecase.listener.UseCaseListener; import com.jdroid.java.exception.AbstractException; public abstract class RefreshActionConnector implements RefreshActionProvider.OnRefreshListener, UseCaseListener { private RefreshActionProvider refreshActionProvider; public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { MenuItem menuItem = menu.findItem(getMenuItemResId()); refreshActionProvider = (RefreshActionProvider)MenuItemCompat.getActionProvider(menuItem); refreshActionProvider.setTitle(menuItem.getTitle()); refreshActionProvider.setOnRefreshListener(this); } public void startLoading() { if (refreshActionProvider != null) { refreshActionProvider.startLoading(); } } public void startLoadingOnUIThread() { getFragmentIf().executeOnUIThread(new Runnable() { @Override public void run() { startLoading(); } }); } public void stopLoading() { if (refreshActionProvider != null) { refreshActionProvider.stopLoading(); } } public void stopLoadingOnUIThread() { getFragmentIf().executeOnUIThread(new Runnable() { @Override public void run() { stopLoading(); } }); } @Override public void onStartUseCase() { startLoadingOnUIThread(); } @Override public void onUpdateUseCase() { getFragmentIf().onUpdateUseCase(); } @Override public void onFinishFailedUseCase(AbstractException abstractException) { stopLoadingOnUIThread(); createErrorDisplayer(abstractException).displayError(abstractException); } public ErrorDisplayer createErrorDisplayer(AbstractException abstractException) { return AbstractErrorDisplayer.getErrorDisplayer(abstractException); } @Override public void onFinishUseCase() { stopLoadingOnUIThread(); } protected abstract FragmentIf getFragmentIf(); protected abstract int getMenuItemResId(); }