Skip to content
This repository was archived by the owner on Dec 8, 2022. It is now read-only.

put disk access into background thread? #649

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
47 changes: 44 additions & 3 deletions src/com/github/andlyticsproject/AppInfoActivity.java
Original file line number Diff line number Diff line change
@@ -45,6 +45,7 @@ public class AppInfoActivity extends SherlockFragmentActivity implements
private LinksListAdapter linksListAdapter;

private LoadLinksDb loadLinksDb;
private LoadBitmap loadBitmap;

private AppInfo appInfo;
private List<Link> 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<String, Void, Bitmap, AppInfoActivity> {

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);
49 changes: 46 additions & 3 deletions src/com/github/andlyticsproject/DetailsActivity.java
Original file line number Diff line number Diff line change
@@ -45,6 +45,8 @@ public class DetailsActivity extends BaseActivity implements DetailedStatsActivi

private String appName;
private boolean hasRevenue;

private LoadBitmap loadBitmap;

public static class TabListener<T extends StatsView<?>> 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<String, Void, Bitmap, DetailsActivity> {

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

}