diff options
author | jruesga <jorge@ruesga.com> | 2012-10-27 01:25:40 +0200 |
---|---|---|
committer | jruesga <jorge@ruesga.com> | 2012-10-27 01:25:40 +0200 |
commit | 979af9dbd5549e592138d88996bdc375c4ab73f2 (patch) | |
tree | 79dc56c27f6c217ad20a141478fda00a9d626171 | |
parent | 9aace4340ef930436f566aca0052faaaf93d549b (diff) | |
download | android_packages_apps_CMFileManager-979af9dbd5549e592138d88996bdc375c4ab73f2.tar.gz android_packages_apps_CMFileManager-979af9dbd5549e592138d88996bdc375c4ab73f2.tar.bz2 android_packages_apps_CMFileManager-979af9dbd5549e592138d88996bdc375c4ab73f2.zip |
Use AsyncTasks to load bookmarks and history
-rw-r--r-- | res/layout/bookmarks.xml | 9 | ||||
-rw-r--r-- | res/layout/history.xml | 9 | ||||
-rw-r--r-- | src/com/cyanogenmod/filemanager/activities/BookmarksActivity.java | 66 | ||||
-rw-r--r-- | src/com/cyanogenmod/filemanager/activities/HistoryActivity.java | 97 |
4 files changed, 156 insertions, 25 deletions
diff --git a/res/layout/bookmarks.xml b/res/layout/bookmarks.xml index 2fd42f0f..5ae022e1 100644 --- a/res/layout/bookmarks.xml +++ b/res/layout/bookmarks.xml @@ -23,4 +23,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + <ProgressBar + android:id="@+id/bookmarks_waiting" + android:layout_width="@dimen/default_row_height" + android:layout_height="@dimen/default_row_height" + android:layout_centerInParent="true" + android:indeterminate="true" + android:indeterminateOnly="true" + android:visibility="gone" /> + </RelativeLayout>
\ No newline at end of file diff --git a/res/layout/history.xml b/res/layout/history.xml index 3291e120..c8f39635 100644 --- a/res/layout/history.xml +++ b/res/layout/history.xml @@ -43,4 +43,13 @@ android:layout_alignParentBottom="true" android:visibility="invisible"/> + <ProgressBar + android:id="@+id/history_waiting" + android:layout_width="@dimen/default_row_height" + android:layout_height="@dimen/default_row_height" + android:layout_centerInParent="true" + android:indeterminate="true" + android:indeterminateOnly="true" + android:visibility="gone" /> + </RelativeLayout>
\ No newline at end of file diff --git a/src/com/cyanogenmod/filemanager/activities/BookmarksActivity.java b/src/com/cyanogenmod/filemanager/activities/BookmarksActivity.java index f196a4b1..84880dd6 100644 --- a/src/com/cyanogenmod/filemanager/activities/BookmarksActivity.java +++ b/src/com/cyanogenmod/filemanager/activities/BookmarksActivity.java @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.XmlResourceParser; import android.database.Cursor; +import android.os.AsyncTask; import android.os.Bundle; import android.os.storage.StorageVolume; import android.util.Log; @@ -70,7 +71,10 @@ public class BookmarksActivity extends Activity implements OnItemClickListener, private static final String TAG_BOOKMARKS = "Bookmarks"; //$NON-NLS-1$ private static final String TAG_BOOKMARK = "bookmark"; //$NON-NLS-1$ - private ListView mBookmarksListView; + /** + * @hide + */ + ListView mBookmarksListView; private boolean mChRooted; @@ -135,20 +139,65 @@ public class BookmarksActivity extends Activity implements OnItemClickListener, */ private void initBookmarks() { this.mBookmarksListView = (ListView)findViewById(R.id.bookmarks_listview); - BookmarksAdapter adapter = new BookmarksAdapter(this, loadBookmarks(), this); + List<Bookmark> bookmarks = new ArrayList<Bookmark>(); + BookmarksAdapter adapter = new BookmarksAdapter(this, bookmarks, this); this.mBookmarksListView.setAdapter(adapter); this.mBookmarksListView.setOnItemClickListener(this); + refresh(); } /** * Method that makes the refresh of the data. */ void refresh() { - BookmarksAdapter adapter = (BookmarksAdapter)this.mBookmarksListView.getAdapter(); - adapter.clear(); - adapter.addAll(loadBookmarks()); - adapter.notifyDataSetChanged(); - this.mBookmarksListView.setSelection(0); + // Retrieve the loading view + final View waiting = findViewById(R.id.bookmarks_waiting); + final BookmarksAdapter adapter = (BookmarksAdapter)this.mBookmarksListView.getAdapter(); + + // Load the history in background + AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() { + Exception mCause; + List<Bookmark> mBookmarks; + + @Override + protected Boolean doInBackground(Void... params) { + try { + this.mBookmarks = loadBookmarks(); + return Boolean.TRUE; + + } catch (Exception e) { + this.mCause = e; + return Boolean.FALSE; + } + } + + @Override + protected void onPreExecute() { + waiting.setVisibility(View.VISIBLE); + adapter.clear(); + } + + @Override + protected void onPostExecute(Boolean result) { + waiting.setVisibility(View.GONE); + if (result.booleanValue()) { + adapter.addAll(this.mBookmarks); + adapter.notifyDataSetChanged(); + BookmarksActivity.this.mBookmarksListView.setSelection(0); + + } else { + if (this.mCause != null) { + ExceptionUtil.translateException(BookmarksActivity.this, this.mCause); + } + } + } + + @Override + protected void onCancelled() { + waiting.setVisibility(View.GONE); + } + }; + task.execute(); } /** @@ -272,8 +321,9 @@ public class BookmarksActivity extends Activity implements OnItemClickListener, * an array to be used in the listview adapter. * * @return List<Bookmark> + * @hide */ - private List<Bookmark> loadBookmarks() { + List<Bookmark> loadBookmarks() { // Bookmarks = HOME + FILESYSTEM + SD STORAGES + USER DEFINED // In ChRooted mode = SD STORAGES + USER DEFINED (from SD STORAGES) List<Bookmark> bookmarks = new ArrayList<Bookmark>(); diff --git a/src/com/cyanogenmod/filemanager/activities/HistoryActivity.java b/src/com/cyanogenmod/filemanager/activities/HistoryActivity.java index f4cc6336..d109fa09 100644 --- a/src/com/cyanogenmod/filemanager/activities/HistoryActivity.java +++ b/src/com/cyanogenmod/filemanager/activities/HistoryActivity.java @@ -20,6 +20,7 @@ import android.app.ActionBar; import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; +import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; @@ -39,6 +40,7 @@ import com.cyanogenmod.filemanager.model.History; import com.cyanogenmod.filemanager.ui.widgets.ButtonItem; import com.cyanogenmod.filemanager.util.AndroidHelper; import com.cyanogenmod.filemanager.util.DialogHelper; +import com.cyanogenmod.filemanager.util.ExceptionUtil; import java.util.ArrayList; import java.util.Collections; @@ -53,9 +55,18 @@ public class HistoryActivity extends Activity implements OnItemClickListener { private static boolean DEBUG = false; - private ListView mListView; - private HistoryAdapter mAdapter; - private boolean mIsEmpty; + /** + * @hide + */ + ListView mListView; + /** + * @hide + */ + HistoryAdapter mAdapter; + /** + * @hide + */ + boolean mIsEmpty; private boolean mIsClearHistory; private View mOptionsAnchorView; @@ -151,22 +162,74 @@ public class HistoryActivity extends Activity implements OnItemClickListener { */ @SuppressWarnings("unchecked") private void initHistory() { - List<History> history = (List<History>)getIntent().getSerializableExtra(EXTRA_HISTORY_LIST); - if (history.isEmpty()) { - View msg = findViewById(R.id.history_empty_msg); - msg.setVisibility(View.VISIBLE); - return; - } - this.mIsEmpty = history.isEmpty(); + // Retrieve the loading view + final View waiting = findViewById(R.id.history_waiting); + + // Load the history in background + AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() { + Exception mCause; + List<History> mHistory; + + @Override + protected Boolean doInBackground(Void... params) { + try { + this.mHistory = + (List<History>)getIntent().getSerializableExtra(EXTRA_HISTORY_LIST); + if (this.mHistory.isEmpty()) { + View msg = findViewById(R.id.history_empty_msg); + msg.setVisibility(View.VISIBLE); + return Boolean.TRUE; + } + HistoryActivity.this.mIsEmpty = this.mHistory.isEmpty(); + + //Show inverted history + final List<History> adapterList = new ArrayList<History>(this.mHistory); + Collections.reverse(adapterList); + + HistoryActivity.this.mListView = + (ListView)findViewById(R.id.history_listview); + HistoryActivity.this.mAdapter = + new HistoryAdapter(HistoryActivity.this, adapterList); + + return Boolean.TRUE; + + } catch (Exception e) { + this.mCause = e; + return Boolean.FALSE; + } + } - //Show inverted history - final List<History> adapterList = new ArrayList<History>(history); - Collections.reverse(adapterList); + @Override + protected void onPreExecute() { + waiting.setVisibility(View.VISIBLE); + } - this.mListView = (ListView)findViewById(R.id.history_listview); - this.mAdapter = new HistoryAdapter(this, adapterList); - this.mListView.setAdapter(this.mAdapter); - this.mListView.setOnItemClickListener(this); + @Override + protected void onPostExecute(Boolean result) { + waiting.setVisibility(View.GONE); + if (result.booleanValue()) { + if (HistoryActivity.this.mListView != null && + HistoryActivity.this.mAdapter != null) { + + HistoryActivity.this.mListView. + setAdapter(HistoryActivity.this.mAdapter); + HistoryActivity.this.mListView. + setOnItemClickListener(HistoryActivity.this); + } + + } else { + if (this.mCause != null) { + ExceptionUtil.translateException(HistoryActivity.this, this.mCause); + } + } + } + + @Override + protected void onCancelled() { + waiting.setVisibility(View.GONE); + } + }; + task.execute(); } /** |