Merge "Load account type icons in a background thread before scrolling down" into klp-dev

This commit is contained in:
Amith Yamasani
2013-10-02 20:19:45 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 5 deletions

View File

@@ -516,9 +516,11 @@ public class Settings extends PreferenceActivity
*/
@Override
public void onBuildHeaders(List<Header> headers) {
if (!onIsHidingHeaders()) {
loadHeadersFromResource(R.xml.settings_headers, headers);
updateHeaderList(headers);
}
}
private void updateHeaderList(List<Header> target) {
final boolean showDev = mDevelopmentPreferences.getBoolean(
@@ -655,6 +657,7 @@ public class Settings extends PreferenceActivity
}
}
accountHeaders.add(accHeader);
mAuthenticatorHelper.preloadDrawableForType(this, accountType);
}
// Sort by label

View File

@@ -23,6 +23,7 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.util.Log;
import java.util.ArrayList;
@@ -45,6 +46,16 @@ public class AuthenticatorHelper {
return mEnabledAccountTypes.toArray(new String[mEnabledAccountTypes.size()]);
}
public void preloadDrawableForType(final Context context, final String accountType) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
getDrawableForType(context, accountType);
return null;
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
}
/**
* Gets an icon associated with a particular account type. If none found, return null.
* @param accountType the type of account
@@ -52,15 +63,19 @@ public class AuthenticatorHelper {
*/
public Drawable getDrawableForType(Context context, final String accountType) {
Drawable icon = null;
synchronized (mAccTypeIconCache) {
if (mAccTypeIconCache.containsKey(accountType)) {
return mAccTypeIconCache.get(accountType);
}
}
if (mTypeToAuthDescription.containsKey(accountType)) {
try {
AuthenticatorDescription desc = mTypeToAuthDescription.get(accountType);
Context authContext = context.createPackageContext(desc.packageName, 0);
icon = authContext.getResources().getDrawable(desc.iconId);
synchronized (mAccTypeIconCache) {
mAccTypeIconCache.put(accountType, icon);
}
} catch (PackageManager.NameNotFoundException e) {
} catch (Resources.NotFoundException e) {
}