diff options
| author | Winson Chung <winsonc@google.com> | 2010-09-09 16:45:06 -0700 |
|---|---|---|
| committer | Winson Chung <winsonc@google.com> | 2010-09-09 16:45:38 -0700 |
| commit | fbc3590f40436e372df198c2d6b27877ae8952f1 (patch) | |
| tree | 7c8974df9bc870a20ad08082463bb91276a36562 /core/java/android/widget/RemoteViewsAdapter.java | |
| parent | fa018890643dfc2ccc3a74a223b21dc24b72fa05 (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.java | 52 |
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(); - } } } } |
