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,8 +516,10 @@ public class Settings extends PreferenceActivity
*/ */
@Override @Override
public void onBuildHeaders(List<Header> headers) { public void onBuildHeaders(List<Header> headers) {
loadHeadersFromResource(R.xml.settings_headers, headers); if (!onIsHidingHeaders()) {
updateHeaderList(headers); loadHeadersFromResource(R.xml.settings_headers, headers);
updateHeaderList(headers);
}
} }
private void updateHeaderList(List<Header> target) { private void updateHeaderList(List<Header> target) {
@@ -655,6 +657,7 @@ public class Settings extends PreferenceActivity
} }
} }
accountHeaders.add(accHeader); accountHeaders.add(accHeader);
mAuthenticatorHelper.preloadDrawableForType(this, accountType);
} }
// Sort by label // Sort by label

View File

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