diff --git a/src/com/github/andlyticsproject/AppInfoActivity.java b/src/com/github/andlyticsproject/AppInfoActivity.java
index 278528a8..eb714cc8 100644
--- a/src/com/github/andlyticsproject/AppInfoActivity.java
+++ b/src/com/github/andlyticsproject/AppInfoActivity.java
@@ -45,6 +45,7 @@ public class AppInfoActivity extends Activity 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);
- getActionBar().setIcon(icon);
+ if (getLastNonConfigurationInstance() != null) {
+ loadBitmap = (LoadBitmap) getLastNonConfigurationInstance();
+ loadBitmap.attach(this);
+ if (loadBitmap.bitmap != null) {
+ setActionBarIcon(loadBitmap.bitmap);
+ }
+ } else {
+ loadBitmap = new LoadBitmap(this);
+ Utils.execute(loadBitmap, iconFilePath);
+ }
}
LayoutInflater layoutInflater = getLayoutInflater();
@@ -230,6 +238,11 @@ public ContentAdapter getDbAdapter() {
public AndlyticsApp getAndlyticsApplication() {
return (AndlyticsApp) getApplication();
}
+
+ @Override
+ public Object onRetainNonConfigurationInstance() {
+ return loadBitmap == null ? null : loadBitmap.detach();
+ }
private static class LoadLinksDb extends DetachableAsyncTask {
@@ -258,6 +271,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.setActionBarIcon(bm);
+ }
+ }
+
+ private void setActionBarIcon(Bitmap bm) {
+ BitmapDrawable icon = new BitmapDrawable(getResources(), bm);
+ getActionBar().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 681983f9..86f4022b 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 = getActionBar();
if (iconFilePath != null) {
- Bitmap bm = BitmapFactory.decodeFile(iconFilePath);
- BitmapDrawable icon = new BitmapDrawable(getResources(), bm);
- actionBar.setIcon(icon);
+ if (getLastNonConfigurationInstance() != null) {
+ loadBitmap = (LoadBitmap) getLastNonConfigurationInstance();
+ loadBitmap.attach(this);
+ if (loadBitmap.bitmap != null) {
+ setActionBarIcon(loadBitmap.bitmap);
+ }
+ } else {
+ loadBitmap = new LoadBitmap(this);
+ Utils.execute(loadBitmap, iconFilePath);
+ }
}
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
@@ -305,5 +314,44 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}
}
}
+
+ @Override
+ public Object onRetainNonConfigurationInstance() {
+ return loadBitmap == null ? null : loadBitmap.detach();
+ }
+
+ 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.setActionBarIcon(bm);
+ }
+ }
+
+ private void setActionBarIcon(Bitmap bm) {
+ BitmapDrawable icon = new BitmapDrawable(getResources(), bm);
+ getActionBar().setIcon(icon);
+ }
}