diff --git a/src/com/github/andlyticsproject/AppInfoActivity.java b/src/com/github/andlyticsproject/AppInfoActivity.java index 25446bd0..f42e2897 100644 --- a/src/com/github/andlyticsproject/AppInfoActivity.java +++ b/src/com/github/andlyticsproject/AppInfoActivity.java @@ -45,6 +45,7 @@ public class AppInfoActivity extends SherlockFragmentActivity implements private LinksListAdapter linksListAdapter; private LoadLinksDb loadLinksDb; + private LoadBitmap loadBitmap; private AppInfo appInfo; private List links; @@ -78,9 +79,16 @@ public void onCreate(Bundle savedInstanceState) { } if (iconFilePath != null) { - Bitmap bm = BitmapFactory.decodeFile(iconFilePath); - BitmapDrawable icon = new BitmapDrawable(getResources(), bm); - getSupportActionBar().setIcon(icon); + if (getLastCustomNonConfigurationInstance() != null) { + loadBitmap = (LoadBitmap) getLastCustomNonConfigurationInstance(); + loadBitmap.attach(this); + if (loadBitmap.bitmap != null) { + setSupportActionBarIcon(loadBitmap.bitmap); + } + } else { + loadBitmap = new LoadBitmap(this); + Utils.execute(loadBitmap, iconFilePath); + } } LayoutInflater layoutInflater = getLayoutInflater(); @@ -258,6 +266,39 @@ protected void onPostExecute(Void result) { } } + + private static class LoadBitmap extends DetachableAsyncTask { + + Bitmap bitmap; + + LoadBitmap(AppInfoActivity activity) { + super(activity); + } + + @Override + protected Bitmap doInBackground(String... params) { + if (activity == null) { + return null; + } + Bitmap bm = BitmapFactory.decodeFile(params[0]); + bitmap = bm; + return bm; + } + + @Override + protected void onPostExecute(Bitmap bm) { + if (activity == null) { + return; + } + + activity.setSupportActionBarIcon(bm); + } + } + + private void setSupportActionBarIcon(Bitmap bm) { + BitmapDrawable icon = new BitmapDrawable(getResources(), bm); + getSupportActionBar().setIcon(icon); + } private void getLinksFromDb() { appInfo = db.findAppByPackageName(packageName); diff --git a/src/com/github/andlyticsproject/DetailsActivity.java b/src/com/github/andlyticsproject/DetailsActivity.java index 10fc6e99..09ef30a9 100755 --- a/src/com/github/andlyticsproject/DetailsActivity.java +++ b/src/com/github/andlyticsproject/DetailsActivity.java @@ -45,6 +45,8 @@ public class DetailsActivity extends BaseActivity implements DetailedStatsActivi private String appName; private boolean hasRevenue; + + private LoadBitmap loadBitmap; public static class TabListener> implements ActionBar.TabListener { @@ -98,9 +100,16 @@ protected void onCreate(Bundle savedInstanceState) { ActionBar actionBar = getSupportActionBar(); if (iconFilePath != null) { - Bitmap bm = BitmapFactory.decodeFile(iconFilePath); - BitmapDrawable icon = new BitmapDrawable(getResources(), bm); - actionBar.setIcon(icon); + if (getLastCustomNonConfigurationInstance() != null) { + loadBitmap = (LoadBitmap) getLastCustomNonConfigurationInstance(); + loadBitmap.attach(this); + if (loadBitmap.bitmap != null) { + setSupportActionBarIcon(loadBitmap.bitmap); + } + } else { + loadBitmap = new LoadBitmap(this); + Utils.execute(loadBitmap, iconFilePath); + } } actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); @@ -305,5 +314,39 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } } } + + private static class LoadBitmap extends DetachableAsyncTask { + + Bitmap bitmap; + + LoadBitmap(DetailsActivity activity) { + super(activity); + } + + @Override + protected Bitmap doInBackground(String... params) { + if (activity == null) { + return null; + } + + Bitmap bm = BitmapFactory.decodeFile(params[0]); + bitmap = bm; + return bm; + } + + @Override + protected void onPostExecute(Bitmap bm) { + if (activity == null) { + return; + } + + activity.setSupportActionBarIcon(bm); + } + } + + private void setSupportActionBarIcon(Bitmap bm) { + BitmapDrawable icon = new BitmapDrawable(getResources(), bm); + getSupportActionBar().setIcon(icon); + } }