package com.mixpanel.android.mpmetrics; import java.util.concurrent.Callable; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; import android.content.Context; import android.content.SharedPreferences; /* package */ class SharedPreferencesLoader { /* package */ interface OnPrefsLoadedListener { public void onPrefsLoaded(SharedPreferences prefs); } public SharedPreferencesLoader() { mExecutor = Executors.newSingleThreadExecutor(); } public Future<SharedPreferences> loadPreferences(Context context, String name, OnPrefsLoadedListener listener) { final LoadSharedPreferences loadSharedPrefs = new LoadSharedPreferences(context, name, listener); final FutureTask<SharedPreferences> task = new FutureTask<SharedPreferences>(loadSharedPrefs); mExecutor.execute(task); return task; } private static class LoadSharedPreferences implements Callable<SharedPreferences> { public LoadSharedPreferences(Context context, String prefsName, OnPrefsLoadedListener listener) { mContext = context; mPrefsName = prefsName; mListener = listener; } @Override public SharedPreferences call() { final SharedPreferences ret = mContext.getSharedPreferences(mPrefsName, Context.MODE_PRIVATE); if (null != mListener) { mListener.onPrefsLoaded(ret); } return ret; } private final Context mContext; private final String mPrefsName; private final OnPrefsLoadedListener mListener; } private final Executor mExecutor; }