aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjruesga <jorge@ruesga.com>2012-10-27 01:25:40 +0200
committerjruesga <jorge@ruesga.com>2012-10-27 01:25:40 +0200
commit979af9dbd5549e592138d88996bdc375c4ab73f2 (patch)
tree79dc56c27f6c217ad20a141478fda00a9d626171
parent9aace4340ef930436f566aca0052faaaf93d549b (diff)
downloadandroid_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.xml9
-rw-r--r--res/layout/history.xml9
-rw-r--r--src/com/cyanogenmod/filemanager/activities/BookmarksActivity.java66
-rw-r--r--src/com/cyanogenmod/filemanager/activities/HistoryActivity.java97
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();
}
/**