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);
+ }
}