Unbundling phase 1.

Removed dependency on mScrollX which is a hidden field.
Added some required static libraries.

TODO: When BackupManager is ready, make sure we don't use any private
APIs from there.
diff --git a/Android.mk b/Android.mk
index fd6c97e..c7dee0b 100755
--- a/Android.mk
+++ b/Android.mk
@@ -13,5 +13,8 @@
 
 #LOCAL_AAPT_FLAGS := -0 .dict
 
+#LOCAL_SDK_VERSION := current
+
+LOCAL_STATIC_JAVA_LIBRARIES := google-common android-common
 include $(BUILD_PACKAGE)
 include $(LOCAL_PATH)/dictionary/Android.mk
diff --git a/src/com/android/inputmethod/latin/CandidateView.java b/src/com/android/inputmethod/latin/CandidateView.java
index a31714e..e6a9d6b 100755
--- a/src/com/android/inputmethod/latin/CandidateView.java
+++ b/src/com/android/inputmethod/latin/CandidateView.java
@@ -139,7 +139,7 @@
             @Override
             public void onLongPress(MotionEvent me) {
                 if (mSuggestions.size() > 0) {
-                    if (me.getX() + mScrollX < mWordWidth[0] && mScrollX < 10) {
+                    if (me.getX() + getScrollX() < mWordWidth[0] && getScrollX() < 10) {
                         longPressFirstWord();
                     }
                 }
@@ -150,14 +150,16 @@
                     float distanceX, float distanceY) {
                 final int width = getWidth();
                 mScrolled = true;
-                mScrollX += (int) distanceX;
-                if (mScrollX < 0) {
-                    mScrollX = 0;
+                int scrollX = getScrollX();
+                scrollX += (int) distanceX;
+                if (scrollX < 0) {
+                    scrollX = 0;
                 }
-                if (distanceX > 0 && mScrollX + width > mTotalWidth) {                    
-                    mScrollX -= (int) distanceX;
+                if (distanceX > 0 && scrollX + width > mTotalWidth) {                    
+                    scrollX -= (int) distanceX;
                 }
-                mTargetScrollX = mScrollX;
+                mTargetScrollX = scrollX;
+                scrollTo(scrollX, getScrollY());
                 hidePreview();
                 invalidate();
                 return true;
@@ -167,7 +169,7 @@
         setWillNotDraw(false);
         setHorizontalScrollBarEnabled(false);
         setVerticalScrollBarEnabled(false);
-        mScrollX = 0;
+        scrollTo(0, getScrollY());
     }
     
     /**
@@ -210,7 +212,7 @@
         final Rect bgPadding = mBgPadding;
         final Paint paint = mPaint;
         final int touchX = mTouchX;
-        final int scrollX = mScrollX;
+        final int scrollX = getScrollX();
         final boolean scrolled = mScrolled;
         final boolean typedWordValid = mTypedWordValid;
         final int y = (int) (height + mPaint.getTextSize() - mDescent) / 2;
@@ -261,23 +263,30 @@
             x += wordWidth;
         }
         mTotalWidth = x;
-        if (mTargetScrollX != mScrollX) {
+        if (mTargetScrollX != scrollX) {
             scrollToTarget();
         }
     }
     
     private void scrollToTarget() {
-        if (mTargetScrollX > mScrollX) {
-            mScrollX += SCROLL_PIXELS;
-            if (mScrollX >= mTargetScrollX) {
-                mScrollX = mTargetScrollX;
+        int scrollX = getScrollX();
+        if (mTargetScrollX > scrollX) {
+            scrollX += SCROLL_PIXELS;
+            if (scrollX >= mTargetScrollX) {
+                scrollX = mTargetScrollX;
+                scrollTo(scrollX, getScrollY());
                 requestLayout();
+            } else {
+                scrollTo(scrollX, getScrollY());
             }
         } else {
-            mScrollX -= SCROLL_PIXELS;
-            if (mScrollX <= mTargetScrollX) {
-                mScrollX = mTargetScrollX;
+            scrollX -= SCROLL_PIXELS;
+            if (scrollX <= mTargetScrollX) {
+                scrollX = mTargetScrollX;
+                scrollTo(scrollX, getScrollY());
                 requestLayout();
+            } else {
+                scrollTo(scrollX, getScrollY());
             }
         }
         invalidate();
@@ -291,7 +300,7 @@
         }
         mShowingCompletions = completions;
         mTypedWordValid = typedWordValid;
-        mScrollX = 0;
+        scrollTo(0, getScrollY());
         mTargetScrollX = 0;
         mHaveMinimalSuggestion = haveMinimalSuggestion;
         // Compute the total width
@@ -305,8 +314,8 @@
         final int count = mSuggestions.size();
         int firstItem = 0; // Actually just before the first item, if at the boundary
         while (i < count) {
-            if (mWordX[i] < mScrollX 
-                    && mWordX[i] + mWordWidth[i] >= mScrollX - 1) {
+            if (mWordX[i] < getScrollX() 
+                    && mWordX[i] + mWordWidth[i] >= getScrollX() - 1) {
                 firstItem = i;
                 break;
             }
@@ -319,9 +328,10 @@
     
     public void scrollNext() {
         int i = 0;
-        int targetX = mScrollX;
+        int scrollX = getScrollX();
+        int targetX = scrollX;
         final int count = mSuggestions.size();
-        int rightEdge = mScrollX + getWidth();
+        int rightEdge = scrollX + getWidth();
         while (i < count) {
             if (mWordX[i] <= rightEdge &&
                     mWordX[i] + mWordWidth[i] >= rightEdge) {
@@ -334,7 +344,7 @@
     }
 
     private void updateScrollPosition(int targetX) {
-        if (targetX != mScrollX) {
+        if (targetX != getScrollX()) {
             // TODO: Animate
             mTargetScrollX = targetX;
             requestLayout();
@@ -452,7 +462,7 @@
                         + mPreviewText.getPaddingLeft() + mPreviewText.getPaddingRight();
                 final int popupHeight = mPreviewText.getMeasuredHeight();
                 //mPreviewText.setVisibility(INVISIBLE);
-                mPopupPreviewX = mWordX[wordIndex] - mPreviewText.getPaddingLeft() - mScrollX;
+                mPopupPreviewX = mWordX[wordIndex] - mPreviewText.getPaddingLeft() - getScrollX();
                 mPopupPreviewY = - popupHeight;
                 mHandler.removeMessages(MSG_REMOVE_PREVIEW);
                 int [] offsetInWindow = new int[2];