michael@0: /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: package org.mozilla.gecko.home; michael@0: michael@0: import org.mozilla.gecko.home.HomeConfig.PanelConfig; michael@0: import org.mozilla.gecko.home.HomeConfig.OnReloadListener; michael@0: michael@0: import android.content.Context; michael@0: import android.support.v4.content.AsyncTaskLoader; michael@0: michael@0: import java.util.List; michael@0: michael@0: public class HomeConfigLoader extends AsyncTaskLoader { michael@0: private final HomeConfig mConfig; michael@0: private HomeConfig.State mConfigState; michael@0: michael@0: private final Context mContext; michael@0: michael@0: public HomeConfigLoader(Context context, HomeConfig homeConfig) { michael@0: super(context); michael@0: mContext = context; michael@0: mConfig = homeConfig; michael@0: } michael@0: michael@0: @Override michael@0: public HomeConfig.State loadInBackground() { michael@0: return mConfig.load(); michael@0: } michael@0: michael@0: @Override michael@0: public void deliverResult(HomeConfig.State configState) { michael@0: if (isReset()) { michael@0: mConfigState = null; michael@0: return; michael@0: } michael@0: michael@0: mConfigState = configState; michael@0: mConfig.setOnReloadListener(new ForceReloadListener()); michael@0: michael@0: if (isStarted()) { michael@0: super.deliverResult(configState); michael@0: } michael@0: } michael@0: michael@0: @Override michael@0: protected void onStartLoading() { michael@0: if (mConfigState != null) { michael@0: deliverResult(mConfigState); michael@0: } michael@0: michael@0: if (takeContentChanged() || mConfigState == null) { michael@0: forceLoad(); michael@0: } michael@0: } michael@0: michael@0: @Override michael@0: protected void onStopLoading() { michael@0: cancelLoad(); michael@0: } michael@0: michael@0: @Override michael@0: public void onCanceled(HomeConfig.State configState) { michael@0: mConfigState = null; michael@0: } michael@0: michael@0: @Override michael@0: protected void onReset() { michael@0: super.onReset(); michael@0: michael@0: // Ensure the loader is stopped. michael@0: onStopLoading(); michael@0: michael@0: mConfigState = null; michael@0: mConfig.setOnReloadListener(null); michael@0: } michael@0: michael@0: private class ForceReloadListener implements OnReloadListener { michael@0: @Override michael@0: public void onReload() { michael@0: onContentChanged(); michael@0: } michael@0: } michael@0: }