diff --git a/res/layout/captioning_preview.xml b/res/layout/captioning_preview.xml
index b2e16fa..00d94a0 100644
--- a/res/layout/captioning_preview.xml
+++ b/res/layout/captioning_preview.xml
@@ -31,7 +31,7 @@
             android:scaleType="centerCrop"
             android:src="@drawable/caption_background" />
 
-        <com.android.settings.accessibility.CaptioningTextView
+        <com.android.internal.widget.SubtitleView
             android:id="@+id/preview_text"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
diff --git a/res/layout/preset_picker_item.xml b/res/layout/preset_picker_item.xml
index 1b66970..9d799ef 100644
--- a/res/layout/preset_picker_item.xml
+++ b/res/layout/preset_picker_item.xml
@@ -25,7 +25,7 @@
         android:layout_height="96dp"
         android:background="@drawable/transparency_tileable" >
 
-        <com.android.settings.accessibility.CaptioningTextView
+        <com.android.internal.widget.SubtitleView
             android:id="@+id/preview"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
diff --git a/src/com/android/settings/accessibility/CaptioningTextView.java b/src/com/android/settings/accessibility/CaptioningTextView.java
deleted file mode 100644
index d720e8f..0000000
--- a/src/com/android/settings/accessibility/CaptioningTextView.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accessibility;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.res.Resources.Theme;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Paint.Join;
-import android.graphics.Paint.Style;
-import android.graphics.RectF;
-import android.graphics.Typeface;
-import android.text.Layout.Alignment;
-import android.text.StaticLayout;
-import android.text.TextPaint;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.DisplayMetrics;
-import android.util.TypedValue;
-import android.view.View;
-import android.view.accessibility.CaptioningManager.CaptionStyle;
-
-public class CaptioningTextView extends View {
-    // Ratio of inner padding to font size.
-    private static final float INNER_PADDING_RATIO = 0.125f;
-
-    // Default style dimensions in dips.
-    private static final float CORNER_RADIUS = 2.0f;
-    private static final float OUTLINE_WIDTH = 2.0f;
-    private static final float SHADOW_RADIUS = 2.0f;
-    private static final float SHADOW_OFFSET_X = 2.0f;
-    private static final float SHADOW_OFFSET_Y = 2.0f;
-
-    // Styled dimensions.
-    private final float mCornerRadius;
-    private final float mOutlineWidth;
-    private final float mShadowRadius;
-    private final float mShadowOffsetX;
-    private final float mShadowOffsetY;
-
-    /** Temporary rectangle used for computing line bounds. */
-    private final RectF mLineBounds = new RectF();
-
-    /** Temporary array used for computing line wrapping. */
-    private float[] mTextWidths;
-
-    /** Reusable string builder used for holding text. */
-    private final StringBuilder mText = new StringBuilder();
-    private final StringBuilder mBreakText = new StringBuilder();
-
-    private TextPaint mPaint;
-
-    private int mForegroundColor;
-    private int mBackgroundColor;
-    private int mEdgeColor;
-    private int mEdgeType;
-
-    private boolean mHasMeasurements;
-    private int mLastMeasuredWidth;
-    private StaticLayout mLayout;
-
-    private float mSpacingMult = 1;
-    private float mSpacingAdd = 0;
-    private int mInnerPaddingX = 0;
-
-    public CaptioningTextView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public CaptioningTextView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs);
-
-        final Theme theme = context.getTheme();
-        final TypedArray a = theme.obtainStyledAttributes(
-                    attrs, android.R.styleable.TextView, defStyle, 0);
-
-        CharSequence text = "";
-        int textSize = 15;
-
-        final int n = a.getIndexCount();
-        for (int i = 0; i < n; i++) {
-            int attr = a.getIndex(i);
-
-            switch (attr) {
-                case android.R.styleable.TextView_text:
-                    text = a.getText(attr);
-                    break;
-                case android.R.styleable.TextView_lineSpacingExtra:
-                    mSpacingAdd = a.getDimensionPixelSize(attr, (int) mSpacingAdd);
-                    break;
-                case android.R.styleable.TextView_lineSpacingMultiplier:
-                    mSpacingMult = a.getFloat(attr, mSpacingMult);
-                    break;
-                case android.R.styleable.TextAppearance_textSize:
-                    textSize = a.getDimensionPixelSize(attr, textSize);
-                    break;
-            }
-        }
-
-        // Set up density-dependent properties.
-        // TODO: Move these to a default style.
-        final DisplayMetrics m = getContext().getResources().getDisplayMetrics();
-        mCornerRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, CORNER_RADIUS, m);
-        mOutlineWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, OUTLINE_WIDTH, m);
-        mShadowRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, SHADOW_RADIUS, m);
-        mShadowOffsetX = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, SHADOW_OFFSET_Y, m);
-        mShadowOffsetY = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, SHADOW_OFFSET_X, m);
-
-        final TextPaint paint = new TextPaint();
-        paint.setAntiAlias(true);
-        paint.setSubpixelText(true);
-
-        mPaint = paint;
-
-        setText(text);
-        setTextSize(textSize);
-    }
-
-    public void setText(int resId) {
-        final CharSequence text = getContext().getText(resId);
-        setText(text);
-    }
-
-    public void setText(CharSequence text) {
-        mText.setLength(0);
-        mText.append(text);
-
-        mHasMeasurements = false;
-
-        requestLayout();
-    }
-
-    public void setForegroundColor(int color) {
-        mForegroundColor = color;
-
-        invalidate();
-    }
-
-    @Override
-    public void setBackgroundColor(int color) {
-        mBackgroundColor = color;
-
-        invalidate();
-    }
-
-    public void setEdgeType(int edgeType) {
-        mEdgeType = edgeType;
-
-        invalidate();
-    }
-
-    public void setEdgeColor(int color) {
-        mEdgeColor = color;
-
-        invalidate();
-    }
-
-    public void setTextSize(float size) {
-        final DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
-        final float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, metrics);
-        if (mPaint.getTextSize() != size) {
-            mHasMeasurements = false;
-            mInnerPaddingX = (int) (size * INNER_PADDING_RATIO + 0.5f);
-            mPaint.setTextSize(size);
-
-            requestLayout();
-        }
-    }
-
-    public void setTypeface(Typeface typeface) {
-        if (mPaint.getTypeface() != typeface) {
-            mHasMeasurements = false;
-            mPaint.setTypeface(typeface);
-
-            requestLayout();
-        }
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        final int widthSpec = MeasureSpec.getSize(widthMeasureSpec);
-
-        if (computeMeasurements(widthSpec)) {
-            final StaticLayout layout = mLayout;
-
-            // Account for padding.
-            final int paddingX = mPaddingLeft + mPaddingRight + mInnerPaddingX * 2;
-            final int width = layout.getWidth() + paddingX;
-            final int height = layout.getHeight() + mPaddingTop + mPaddingBottom;
-            setMeasuredDimension(width, height);
-        } else {
-            setMeasuredDimension(MEASURED_STATE_TOO_SMALL, MEASURED_STATE_TOO_SMALL);
-        }
-    }
-
-    @Override
-    public void onLayout(boolean changed, int l, int t, int r, int b) {
-        final int width = r - l;
-
-        computeMeasurements(width);
-    }
-
-    private boolean computeMeasurements(int maxWidth) {
-        if (mHasMeasurements && maxWidth == mLastMeasuredWidth) {
-            return true;
-        }
-
-        // Account for padding.
-        final int paddingX = mPaddingLeft + mPaddingRight + mInnerPaddingX;
-        maxWidth -= paddingX;
-
-        if (maxWidth <= 0) {
-            return false;
-        }
-
-        final TextPaint paint = mPaint;
-        final CharSequence text = mText;
-        final int textLength = text.length();
-        if (mTextWidths == null || mTextWidths.length < textLength) {
-            mTextWidths = new float[textLength];
-        }
-
-        final float[] textWidths = mTextWidths;
-        paint.getTextWidths(text, 0, textLength, textWidths);
-
-        // Compute total length.
-        float runLength = 0;
-        for (int i = 0; i < textLength; i++) {
-            runLength += textWidths[i];
-        }
-
-        final int lineCount = (int) (runLength / maxWidth) + 1;
-        final int lineLength = (int) (runLength / lineCount);
-
-        // Build line break buffer.
-        final StringBuilder breakText = mBreakText;
-        breakText.setLength(0);
-
-        int line = 0;
-        int lastBreak = 0;
-        int maxRunLength = 0;
-        runLength = 0;
-        for (int i = 0; i < textLength; i++) {
-            if (runLength > lineLength) {
-                final CharSequence sequence = text.subSequence(lastBreak, i);
-                final int trimmedLength = TextUtils.getTrimmedLength(sequence);
-                breakText.append(sequence, 0, trimmedLength);
-                breakText.append('\n');
-                lastBreak = i;
-                runLength = 0;
-            }
-
-            runLength += textWidths[i];
-
-            if (runLength > maxRunLength) {
-                maxRunLength = (int) Math.ceil(runLength);
-            }
-        }
-        breakText.append(text.subSequence(lastBreak, textLength));
-
-        mHasMeasurements = true;
-        mLastMeasuredWidth = maxWidth;
-
-        mLayout = new StaticLayout(breakText, paint, maxRunLength, Alignment.ALIGN_LEFT,
-                mSpacingMult, mSpacingAdd, true);
-
-        return true;
-    }
-
-    public void setStyle(int styleId) {
-        final Context context = mContext;
-        final ContentResolver cr = context.getContentResolver();
-        final CaptionStyle style;
-        if (styleId == CaptionStyle.PRESET_CUSTOM) {
-            style = CaptionStyle.getCustomStyle(cr);
-        } else {
-            style = CaptionStyle.PRESETS[styleId];
-        }
-
-        mForegroundColor = style.foregroundColor;
-        mBackgroundColor = style.backgroundColor;
-        mEdgeType = style.edgeType;
-        mEdgeColor = style.edgeColor;
-        mHasMeasurements = false;
-
-        final Typeface typeface = style.getTypeface();
-        setTypeface(typeface);
-
-        requestLayout();
-    }
-
-    @Override
-    protected void onDraw(Canvas c) {
-        final StaticLayout layout = mLayout;
-        if (layout == null) {
-            return;
-        }
-
-        final int saveCount = c.save();
-        final int innerPaddingX = mInnerPaddingX;
-        c.translate(mPaddingLeft + innerPaddingX, mPaddingTop);
-
-        final RectF bounds = mLineBounds;
-        final int lineCount = layout.getLineCount();
-        final Paint paint = layout.getPaint();
-        paint.setShadowLayer(0, 0, 0, 0);
-
-        final int backgroundColor = mBackgroundColor;
-        if (Color.alpha(backgroundColor) > 0) {
-            paint.setColor(backgroundColor);
-            paint.setStyle(Style.FILL);
-
-            final float cornerRadius = mCornerRadius;
-            float previousBottom = layout.getLineTop(0);
-
-            for (int i = 0; i < lineCount; i++) {
-                bounds.left = layout.getLineLeft(i) - innerPaddingX;
-                bounds.right = layout.getLineRight(i) + innerPaddingX;
-                bounds.top = previousBottom;
-                bounds.bottom = layout.getLineBottom(i);
-
-                previousBottom = bounds.bottom;
-
-                c.drawRoundRect(bounds, cornerRadius, cornerRadius, paint);
-            }
-        }
-
-        final int edgeType = mEdgeType;
-        if (edgeType == CaptionStyle.EDGE_TYPE_OUTLINE) {
-            paint.setColor(mEdgeColor);
-            paint.setStyle(Style.FILL_AND_STROKE);
-            paint.setStrokeJoin(Join.ROUND);
-            paint.setStrokeWidth(mOutlineWidth);
-
-            for (int i = 0; i < lineCount; i++) {
-                layout.drawText(c, i, i);
-            }
-        }
-
-        if (edgeType == CaptionStyle.EDGE_TYPE_DROP_SHADOW) {
-            paint.setShadowLayer(mShadowRadius, mShadowOffsetX, mShadowOffsetY, mEdgeColor);
-        }
-
-        paint.setColor(mForegroundColor);
-        paint.setStyle(Style.FILL);
-
-        for (int i = 0; i < lineCount; i++) {
-            layout.drawText(c, i, i);
-        }
-
-        c.restoreToCount(saveCount);
-    }
-}
diff --git a/src/com/android/settings/accessibility/EdgeTypePreference.java b/src/com/android/settings/accessibility/EdgeTypePreference.java
index d146960..1d73e6c 100644
--- a/src/com/android/settings/accessibility/EdgeTypePreference.java
+++ b/src/com/android/settings/accessibility/EdgeTypePreference.java
@@ -25,6 +25,7 @@
 import android.view.accessibility.CaptioningManager.CaptionStyle;
 import android.widget.TextView;
 
+import com.android.internal.widget.SubtitleView;
 import com.android.settings.R;
 
 /**
@@ -49,7 +50,7 @@
     @Override
     protected void onBindListItem(View view, int index) {
         final float fontSize = CaptioningManager.getFontSize(getContext().getContentResolver());
-        final CaptioningTextView preview = (CaptioningTextView) view.findViewById(R.id.preview);
+        final SubtitleView preview = (SubtitleView) view.findViewById(R.id.preview);
 
         preview.setForegroundColor(Color.WHITE);
         preview.setBackgroundColor(Color.TRANSPARENT);
diff --git a/src/com/android/settings/accessibility/PresetPreference.java b/src/com/android/settings/accessibility/PresetPreference.java
index cd01082..9ac7ef8 100644
--- a/src/com/android/settings/accessibility/PresetPreference.java
+++ b/src/com/android/settings/accessibility/PresetPreference.java
@@ -22,6 +22,7 @@
 import android.view.accessibility.CaptioningManager.CaptionStyle;
 import android.widget.TextView;
 
+import com.android.internal.widget.SubtitleView;
 import com.android.settings.R;
 
 public class PresetPreference extends ListDialogPreference {
@@ -40,8 +41,7 @@
 
     @Override
     protected void onBindListItem(View view, int index) {
-        final CaptioningTextView previewText = (CaptioningTextView) view.findViewById(
-                R.id.preview);
+        final SubtitleView previewText = (SubtitleView) view.findViewById(R.id.preview);
         final int value = getValueAt(index);
         ToggleCaptioningPreferenceFragment.applyCaptionProperties(previewText, value);
 
diff --git a/src/com/android/settings/accessibility/ToggleCaptioningPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleCaptioningPreferenceFragment.java
index e248d14..a0835d2 100644
--- a/src/com/android/settings/accessibility/ToggleCaptioningPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleCaptioningPreferenceFragment.java
@@ -31,6 +31,7 @@
 import android.view.accessibility.CaptioningManager;
 import android.view.accessibility.CaptioningManager.CaptionStyle;
 
+import com.android.internal.widget.SubtitleView;
 import com.android.settings.R;
 import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener;
 
@@ -38,7 +39,7 @@
 
 public class ToggleCaptioningPreferenceFragment extends Fragment {
     private CaptionPropertiesFragment mPropsFragment;
-    private CaptioningTextView mPreviewText;
+    private SubtitleView mPreviewText;
 
     @Override
     public View onCreateView(
@@ -62,14 +63,14 @@
                 .findFragmentById(R.id.properties_fragment));
         mPropsFragment.setParent(this);
 
-        mPreviewText = (CaptioningTextView) view.findViewById(R.id.preview_text);
+        mPreviewText = (SubtitleView) view.findViewById(R.id.preview_text);
 
         installActionBarToggleSwitch();
         refreshPreviewText();
     }
 
     public void refreshPreviewText() {
-        final CaptioningTextView preview = mPreviewText;
+        final SubtitleView preview = mPreviewText;
         if (preview != null) {
             final Activity activity = getActivity();
             final ContentResolver cr = activity.getContentResolver();
@@ -85,7 +86,7 @@
         }
     }
 
-    public static void applyCaptionProperties(CaptioningTextView previewText, int styleId) {
+    public static void applyCaptionProperties(SubtitleView previewText, int styleId) {
         previewText.setStyle(styleId);
 
         final Context context = previewText.getContext();
