summaryrefslogtreecommitdiff
path: root/core/java/android/widget/RemoteViewsAdapter.java
diff options
context:
space:
mode:
authorWinson Chung <winsonc@google.com>2010-09-09 16:45:06 -0700
committerWinson Chung <winsonc@google.com>2010-09-09 16:45:38 -0700
commitfbc3590f40436e372df198c2d6b27877ae8952f1 (patch)
tree7c8974df9bc870a20ad08082463bb91276a36562 /core/java/android/widget/RemoteViewsAdapter.java
parentfa018890643dfc2ccc3a74a223b21dc24b72fa05 (diff)
Adding some error handling to RemoteViewsAdapter, removing artificial loading delay.
Change-Id: I9cff6045086f0959ace65c2210fa3b9341f5aa5e
Diffstat (limited to 'core/java/android/widget/RemoteViewsAdapter.java')
-rw-r--r--core/java/android/widget/RemoteViewsAdapter.java52
1 files changed, 35 insertions, 17 deletions
diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java
index cd1e4220260b..70b9d59f7337 100644
--- a/core/java/android/widget/RemoteViewsAdapter.java
+++ b/core/java/android/widget/RemoteViewsAdapter.java
@@ -29,7 +29,7 @@ import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
-import android.os.RemoteException;
+import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@@ -43,8 +43,7 @@ import com.android.internal.widget.IRemoteViewsFactory;
*/
/** @hide */
public class RemoteViewsAdapter extends BaseAdapter {
-
- private static final String LOG_TAG = "RemoteViewsAdapter";
+ private static final String TAG = "RemoteViewsAdapter";
private Context mContext;
private Intent mIntent;
@@ -140,6 +139,8 @@ public class RemoteViewsAdapter extends BaseAdapter {
* An internal cache of remote views.
*/
private class RemoteViewsCache {
+ private static final String TAG = "RemoteViewsCache";
+
private RemoteViewsInfo mViewCacheInfo;
private RemoteViewsIndexInfo[] mViewCache;
private int[] mTmpViewCacheLoadIndices;
@@ -249,7 +250,8 @@ public class RemoteViewsAdapter extends BaseAdapter {
private final int getCacheIndex(int position) {
// take the modulo of the position
- return (mViewCache.length + (position % mViewCache.length)) % mViewCache.length;
+ final int cacheSize = mViewCache.length;
+ return (cacheSize + (position % cacheSize)) % cacheSize;
}
public void requestMetaData() {
@@ -278,8 +280,20 @@ public class RemoteViewsAdapter extends BaseAdapter {
mFirstViewHeight = -1;
}
}
- } catch (RemoteException e) {
- e.printStackTrace();
+ } catch (Exception e) {
+ // print the error
+ Log.e(TAG, "Error in requestMetaData(): " + e.getMessage());
+
+ // reset any members after the failed call
+ synchronized (mViewCacheInfo) {
+ RemoteViewsInfo info = mViewCacheInfo;
+ info.hasStableIds = false;
+ info.viewTypeCount = 1;
+ info.count = 0;
+ mUserLoadingView = null;
+ mFirstView = null;
+ mFirstViewHeight = -1;
+ }
}
}
}
@@ -297,11 +311,15 @@ public class RemoteViewsAdapter extends BaseAdapter {
if (mServiceConnection.isConnected()) {
IRemoteViewsFactory factory = mServiceConnection.getRemoteViewsFactory();
try {
+ // call back to the factory
factory.onDataSetChanged();
- } catch (RemoteException e) {
- e.printStackTrace();
- }
+ } catch (Exception e) {
+ // print the error
+ Log.e(TAG, "Error in updateNotifyDataSetChanged(): " + e.getMessage());
+ // return early to prevent container from being notified (nothing has changed)
+ return;
+ }
}
// re-request the new metadata (only after the notification to the factory)
@@ -327,8 +345,15 @@ public class RemoteViewsAdapter extends BaseAdapter {
try {
remoteView = factory.getViewAt(position);
itemId = factory.getItemId(position);
- } catch (RemoteException e) {
+ } catch (Exception e) {
+ // print the error
+ Log.e(TAG, "Error in updateRemoteViewsInfo(" + position + "): " +
+ e.getMessage());
e.printStackTrace();
+
+ // return early to prevent additional work in re-centering the view cache, and
+ // swapping from the loading view
+ return;
}
synchronized (mViewCache) {
@@ -560,13 +585,6 @@ public class RemoteViewsAdapter extends BaseAdapter {
} else {
// otherwise, try and load the item
updateRemoteViewsInfo(index);
-
- // sleep for a bit to allow things to catch up after the load
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
}
}
}