Merge "Web runtime  - link following with simple SOP check  - back button  - fullscreen (title shown as toast for now)"
diff --git a/api/current.xml b/api/current.xml
index 851e9c2..b9c9fe9 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -58339,6 +58339,17 @@
  visibility="public"
 >
 </method>
+<method name="getWrappedCursor"
+ return="android.database.Cursor"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
 <method name="isAfterLast"
  return="boolean"
  abstract="false"
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index 7625c04..2fb746c 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -1131,7 +1131,7 @@
         try {
             // If the intent was created from a suggestion, it will always have an explicit
             // component here.
-            Log.i(LOG_TAG, "Starting (as ourselves) " + intent.toURI());
+            Log.i(LOG_TAG, "Starting (as ourselves) " + intent.toUri(0));
             getContext().startActivity(intent);
             // If the search switches to a different activity,
             // SearchDialogWrapper#performActivityResuming
diff --git a/core/java/android/bluetooth/BluetoothClass.java b/core/java/android/bluetooth/BluetoothClass.java
index c7fea9e..0c9bab2 100644
--- a/core/java/android/bluetooth/BluetoothClass.java
+++ b/core/java/android/bluetooth/BluetoothClass.java
@@ -259,6 +259,8 @@
     public static final int PROFILE_A2DP = 1;
     /** @hide */
     public static final int PROFILE_OPP = 2;
+    /** @hide */
+    public static final int PROFILE_HID = 3;
 
     /**
      * Check class bits for possible bluetooth profile support.
@@ -324,6 +326,8 @@
                 default:
                     return false;
             }
+        } else if (profile == PROFILE_HID) {
+            return (getDeviceClass() & Device.Major.PERIPHERAL) == Device.Major.PERIPHERAL;
         } else {
             return false;
         }
diff --git a/core/java/android/bluetooth/BluetoothUuid.java b/core/java/android/bluetooth/BluetoothUuid.java
index 1909e03..f1ee907 100644
--- a/core/java/android/bluetooth/BluetoothUuid.java
+++ b/core/java/android/bluetooth/BluetoothUuid.java
@@ -50,7 +50,7 @@
     public static final ParcelUuid ObexObjectPush =
             ParcelUuid.fromString("00001105-0000-1000-8000-00805f9b34fb");
     public static final ParcelUuid Hid =
-      ParcelUuid.fromString("00000011-0000-1000-8000-00805f9b34fb");
+            ParcelUuid.fromString("00001124-0000-1000-8000-00805f9b34fb");
 
     public static final ParcelUuid[] RESERVED_UUIDS = {
         AudioSink, AudioSource, AdvAudioDist, HSP, Handsfree, AvrcpController, AvrcpTarget,
diff --git a/core/java/android/database/CursorWrapper.java b/core/java/android/database/CursorWrapper.java
index 2ac9470..3c3bd43 100644
--- a/core/java/android/database/CursorWrapper.java
+++ b/core/java/android/database/CursorWrapper.java
@@ -17,22 +17,28 @@
 package android.database;
 
 import android.content.ContentResolver;
-import android.database.CharArrayBuffer;
 import android.net.Uri;
 import android.os.Bundle;
 
-import java.util.Map;
-
 /**
- * Wrapper class for Cursor that delegates all calls to the actual cursor object
+ * Wrapper class for Cursor that delegates all calls to the actual cursor object.  The primary
+ * use for this class is to extend a cursor while overriding only a subset of its methods.
  */
-
 public class CursorWrapper implements Cursor {
 
+    private final Cursor mCursor;
+
     public CursorWrapper(Cursor cursor) {
         mCursor = cursor;
     }
 
+    /**
+     * @return the wrapped cursor
+     */
+    public Cursor getWrappedCursor() {
+        return mCursor;
+    }
+
     public void close() {
         mCursor.close(); 
     }
@@ -189,7 +195,5 @@
     public void unregisterDataSetObserver(DataSetObserver observer) {
         mCursor.unregisterDataSetObserver(observer);
     }
-
-    private Cursor mCursor;    
 }
 
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index e33463b..79d9631 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -956,11 +956,14 @@
         }
         sqliteDatabase.setPageSize(sBlockSize);
 
-        // set journal_mode to truncate
-        String s = DatabaseUtils.stringForQuery(sqliteDatabase, "PRAGMA journal_mode=TRUNCATE",
-                null);
-        if (!s.equalsIgnoreCase("TRUNCATE")) {
-            Log.e(TAG, "setting journal_mode to TRUNCATE failed");
+        // set journal_mode to truncate for non-memory databases
+        if (!path.equalsIgnoreCase(":memory:")) {
+            String s = DatabaseUtils.stringForQuery(sqliteDatabase, "PRAGMA journal_mode=TRUNCATE",
+                    null);
+            if (!s.equalsIgnoreCase("TRUNCATE")) {
+                Log.e(TAG, "setting journal_mode to TRUNCATE failed for db: " + path +
+                        " (on pragma set journal_mode, sqlite returned:" + s);
+            }
         }
 
         // add this database to the list of databases opened in this process
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 1ab3931..4ec5363 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3588,7 +3588,7 @@
             ContentValues values = new ContentValues();
             if (title != null) values.put(TITLE, title);
             if (folder != null) values.put(FOLDER, folder);
-            values.put(INTENT, intent.toURI());
+            values.put(INTENT, intent.toUri(0));
             if (shortcut != 0) values.put(SHORTCUT, (int) shortcut);
             values.put(ORDERING, ordering);
             return cr.insert(CONTENT_URI, values);
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index e68632d..ec99b0d 100644
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -1265,7 +1265,7 @@
         if (mInputDevices.get(device) == null) {
             return BluetoothInputDevice.STATE_DISCONNECTED;
         }
-        return mInputDevices.get(device.getAddress());
+        return mInputDevices.get(device);
     }
 
     public synchronized BluetoothDevice[] getConnectedInputDevices() {
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index 7bdefd0..7b1aab2 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -517,12 +517,21 @@
     private native String externalRepresentation();
 
     /**
-     * Retrieves the visual text of the current frame, puts it as the object for
+     * Retrieves the visual text of the frames, puts it as the object for
      * the message and sends the message.
      * @param callback the message to use to send the visual text
      */
     public void documentAsText(Message callback) {
-        callback.obj = documentAsText();;
+        StringBuilder text = new StringBuilder();
+        if (callback.arg1 != 0) {
+            // Dump top frame as text.
+            text.append(documentAsText());
+        }
+        if (callback.arg2 != 0) {
+            // Dump child frames as text.
+            text.append(childFramesAsText());
+        }
+        callback.obj = text.toString();
         callback.sendToTarget();
     }
 
@@ -531,6 +540,11 @@
      */
     private native String documentAsText();
 
+    /**
+     * Return the text drawn on the child frames as a string
+     */
+    private native String childFramesAsText();
+
     /*
      * This method is called by WebCore to inform the frame that
      * the Javascript window object has been cleared.
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index c186aba..de0a846 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -5662,6 +5662,8 @@
      * to the user.  This will not move the cursor if it represents more than
      * one character (a selection range).  This will only work if the
      * TextView contains spannable text; otherwise it will do nothing.
+     *
+     * @return True if the cursor was actually moved, false otherwise.
      */
     public boolean moveCursorToVisibleOffset() {
         if (!(mText instanceof Spannable)) {
@@ -6566,25 +6568,37 @@
     }
 
     class CommitSelectionReceiver extends ResultReceiver {
-        int mNewStart;
-        int mNewEnd;
-        
-        CommitSelectionReceiver() {
+        private final int mPrevStart, mPrevEnd;
+        private final int mNewStart, mNewEnd;
+
+        public CommitSelectionReceiver(int mPrevStart, int mPrevEnd, int mNewStart, int mNewEnd) {
             super(getHandler());
+            this.mPrevStart = mPrevStart;
+            this.mPrevEnd = mPrevEnd;
+            this.mNewStart = mNewStart;
+            this.mNewEnd = mNewEnd;
         }
-        
+
         @Override
         protected void onReceiveResult(int resultCode, Bundle resultData) {
-            if (resultCode != InputMethodManager.RESULT_SHOWN) {
-                final int len = mText.length();
-                if (mNewStart > len) {
-                    mNewStart = len;
-                }
-                if (mNewEnd > len) {
-                    mNewEnd = len;
-                }
-                Selection.setSelection((Spannable)mText, mNewStart, mNewEnd);
+            int start = mNewStart;
+            int end = mNewEnd;
+
+            // Move the cursor to the new position, unless this tap was actually
+            // use to show the IMM. Leave cursor unchanged in that case.
+            if (resultCode == InputMethodManager.RESULT_SHOWN) {
+                start = mPrevStart;
+                end = mPrevEnd;
             }
+
+            final int len = mText.length();
+            if (start > len) {
+                start = len;
+            }
+            if (end > len) {
+                end = len;
+            }
+            Selection.setSelection((Spannable)mText, start, end);
         }
     }
     
@@ -6597,7 +6611,7 @@
             mTouchFocusSelected = false;
             mScrolled = false;
         }
-        
+
         final boolean superResult = super.onTouchEvent(event);
 
         /*
@@ -6610,7 +6624,8 @@
             return superResult;
         }
 
-        if ((mMovement != null || onCheckIsTextEditor()) && mText instanceof Spannable && mLayout != null) {
+        if ((mMovement != null || onCheckIsTextEditor()) &&
+                mText instanceof Spannable && mLayout != null) {
             
             boolean handled = false;
             
@@ -6625,28 +6640,14 @@
                 if (action == MotionEvent.ACTION_UP && isFocused() && !mScrolled) {
                     InputMethodManager imm = (InputMethodManager)
                             getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
-                    
-                    // This is going to be gross...  if tapping on the text view
-                    // causes the IME to be displayed, we don't want the selection
-                    // to change.  But the selection has already changed, and
-                    // we won't know right away whether the IME is getting
-                    // displayed, so...
-                    
-                    int newSelStart = Selection.getSelectionStart(mText);
-                    int newSelEnd = Selection.getSelectionEnd(mText);
-                    CommitSelectionReceiver csr = null;
+
+                    final int newSelStart = Selection.getSelectionStart(mText);
+                    final int newSelEnd = Selection.getSelectionEnd(mText);
+
                     if (newSelStart != oldSelStart || newSelEnd != oldSelEnd) {
-                        csr = new CommitSelectionReceiver();
-                        csr.mNewStart = newSelStart;
-                        csr.mNewEnd = newSelEnd;
-                    }
-                    
-                    if (imm.showSoftInput(this, 0, csr) && csr != null) {
-                        // The IME might get shown -- revert to the old
-                        // selection, and change to the new when we finally
-                        // find out of it is okay.
-                        Selection.setSelection((Spannable)mText, oldSelStart, oldSelEnd);
-                        handled = true;
+                        CommitSelectionReceiver csr = new CommitSelectionReceiver(
+                                oldSelStart, oldSelEnd, newSelStart, newSelEnd);
+                        handled = imm.showSoftInput(this, 0, csr);
                     }
                 }
             }
diff --git a/core/java/com/android/internal/widget/ContactHeaderWidget.java b/core/java/com/android/internal/widget/ContactHeaderWidget.java
deleted file mode 100644
index a514089..0000000
--- a/core/java/com/android/internal/widget/ContactHeaderWidget.java
+++ /dev/null
@@ -1,727 +0,0 @@
-/*
- * Copyright (C) 2009 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.internal.widget;
-
-import com.android.internal.R;
-
-import android.Manifest;
-import android.content.AsyncQueryHandler;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.content.res.Resources.NotFoundException;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.SystemClock;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.PhoneLookup;
-import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.StatusUpdates;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.CheckBox;
-import android.widget.QuickContactBadge;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-/**
- * Header used across system for displaying a title bar with contact info. You
- * can bind specific values on the header, or use helper methods like
- * {@link #bindFromContactLookupUri(Uri)} to populate asynchronously.
- * <p>
- * The parent must request the {@link Manifest.permission#READ_CONTACTS}
- * permission to access contact data.
- */
-public class ContactHeaderWidget extends FrameLayout implements View.OnClickListener {
-
-    private static final String TAG = "ContactHeaderWidget";
-
-    private TextView mDisplayNameView;
-    private View mAggregateBadge;
-    private TextView mPhoneticNameView;
-    private CheckBox mStarredView;
-    private QuickContactBadge mPhotoView;
-    private ImageView mPresenceView;
-    private TextView mStatusView;
-    private TextView mStatusAttributionView;
-    private int mNoPhotoResource;
-    private QueryHandler mQueryHandler;
-
-    protected Uri mContactUri;
-
-    protected String[] mExcludeMimes = null;
-
-    protected ContentResolver mContentResolver;
-
-    /**
-     * Interface for callbacks invoked when the user interacts with a header.
-     */
-    public interface ContactHeaderListener {
-        public void onPhotoClick(View view);
-        public void onDisplayNameClick(View view);
-    }
-
-    private ContactHeaderListener mListener;
-
-
-    private interface ContactQuery {
-        //Projection used for the summary info in the header.
-        String[] COLUMNS = new String[] {
-            Contacts._ID,
-            Contacts.LOOKUP_KEY,
-            Contacts.PHOTO_ID,
-            Contacts.DISPLAY_NAME,
-            Contacts.PHONETIC_NAME,
-            Contacts.STARRED,
-            Contacts.CONTACT_PRESENCE,
-            Contacts.CONTACT_STATUS,
-            Contacts.CONTACT_STATUS_TIMESTAMP,
-            Contacts.CONTACT_STATUS_RES_PACKAGE,
-            Contacts.CONTACT_STATUS_LABEL,
-        };
-        int _ID = 0;
-        int LOOKUP_KEY = 1;
-        int PHOTO_ID = 2;
-        int DISPLAY_NAME = 3;
-        int PHONETIC_NAME = 4;
-        //TODO: We need to figure out how we're going to get the phonetic name.
-        //static final int HEADER_PHONETIC_NAME_COLUMN_INDEX
-        int STARRED = 5;
-        int CONTACT_PRESENCE_STATUS = 6;
-        int CONTACT_STATUS = 7;
-        int CONTACT_STATUS_TIMESTAMP = 8;
-        int CONTACT_STATUS_RES_PACKAGE = 9;
-        int CONTACT_STATUS_LABEL = 10;
-    }
-
-    private interface PhotoQuery {
-        String[] COLUMNS = new String[] {
-            Photo.PHOTO
-        };
-
-        int PHOTO = 0;
-    }
-
-    //Projection used for looking up contact id from phone number
-    protected static final String[] PHONE_LOOKUP_PROJECTION = new String[] {
-        PhoneLookup._ID,
-        PhoneLookup.LOOKUP_KEY,
-    };
-    protected static final int PHONE_LOOKUP_CONTACT_ID_COLUMN_INDEX = 0;
-    protected static final int PHONE_LOOKUP_CONTACT_LOOKUP_KEY_COLUMN_INDEX = 1;
-
-    //Projection used for looking up contact id from email address
-    protected static final String[] EMAIL_LOOKUP_PROJECTION = new String[] {
-        RawContacts.CONTACT_ID,
-        Contacts.LOOKUP_KEY,
-    };
-    protected static final int EMAIL_LOOKUP_CONTACT_ID_COLUMN_INDEX = 0;
-    protected static final int EMAIL_LOOKUP_CONTACT_LOOKUP_KEY_COLUMN_INDEX = 1;
-
-    protected static final String[] CONTACT_LOOKUP_PROJECTION = new String[] {
-        Contacts._ID,
-    };
-    protected static final int CONTACT_LOOKUP_ID_COLUMN_INDEX = 0;
-
-    private static final int TOKEN_CONTACT_INFO = 0;
-    private static final int TOKEN_PHONE_LOOKUP = 1;
-    private static final int TOKEN_EMAIL_LOOKUP = 2;
-    private static final int TOKEN_PHOTO_QUERY = 3;
-
-    public ContactHeaderWidget(Context context) {
-        this(context, null);
-    }
-
-    public ContactHeaderWidget(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public ContactHeaderWidget(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        mContentResolver = mContext.getContentResolver();
-
-        LayoutInflater inflater =
-            (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        inflater.inflate(R.layout.contact_header, this);
-
-        mDisplayNameView = (TextView) findViewById(R.id.name);
-        mAggregateBadge = findViewById(R.id.aggregate_badge);
-
-        mPhoneticNameView = (TextView) findViewById(R.id.phonetic_name);
-
-        mStarredView = (CheckBox)findViewById(R.id.star);
-        mStarredView.setOnClickListener(this);
-
-        mPhotoView = (QuickContactBadge) findViewById(R.id.photo);
-
-        mPresenceView = (ImageView) findViewById(R.id.presence);
-
-        mStatusView = (TextView)findViewById(R.id.status);
-        mStatusAttributionView = (TextView)findViewById(R.id.status_date);
-
-        // Set the photo with a random "no contact" image
-        long now = SystemClock.elapsedRealtime();
-        int num = (int) now & 0xf;
-        if (num < 9) {
-            // Leaning in from right, common
-            mNoPhotoResource = R.drawable.ic_contact_picture;
-        } else if (num < 14) {
-            // Leaning in from left uncommon
-            mNoPhotoResource = R.drawable.ic_contact_picture_2;
-        } else {
-            // Coming in from the top, rare
-            mNoPhotoResource = R.drawable.ic_contact_picture_3;
-        }
-
-        resetAsyncQueryHandler();
-    }
-
-    public void enableClickListeners() {
-        mDisplayNameView.setOnClickListener(this);
-        mPhotoView.setOnClickListener(this);
-    }
-
-    /**
-     * Set the given {@link ContactHeaderListener} to handle header events.
-     */
-    public void setContactHeaderListener(ContactHeaderListener listener) {
-        mListener = listener;
-    }
-
-    private void performPhotoClick() {
-        if (mListener != null) {
-            mListener.onPhotoClick(mPhotoView);
-        }
-    }
-
-    private void performDisplayNameClick() {
-        if (mListener != null) {
-            mListener.onDisplayNameClick(mDisplayNameView);
-        }
-    }
-
-    private class QueryHandler extends AsyncQueryHandler {
-
-        public QueryHandler(ContentResolver cr) {
-            super(cr);
-        }
-
-        @Override
-        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
-            try{
-                if (this != mQueryHandler) {
-                    Log.d(TAG, "onQueryComplete: discard result, the query handler is reset!");
-                    return;
-                }
-
-                switch (token) {
-                    case TOKEN_PHOTO_QUERY: {
-                        //Set the photo
-                        Bitmap photoBitmap = null;
-                        if (cursor != null && cursor.moveToFirst()
-                                && !cursor.isNull(PhotoQuery.PHOTO)) {
-                            byte[] photoData = cursor.getBlob(PhotoQuery.PHOTO);
-                            photoBitmap = BitmapFactory.decodeByteArray(photoData, 0,
-                                    photoData.length, null);
-                        }
-
-                        if (photoBitmap == null) {
-                            photoBitmap = loadPlaceholderPhoto(null);
-                        }
-                        setPhoto(photoBitmap);
-                        if (cookie != null && cookie instanceof Uri) {
-                            mPhotoView.assignContactUri((Uri) cookie);
-                        }
-                        invalidate();
-                        break;
-                    }
-                    case TOKEN_CONTACT_INFO: {
-                        if (cursor != null && cursor.moveToFirst()) {
-                            bindContactInfo(cursor);
-                            final Uri lookupUri = Contacts.getLookupUri(
-                                    cursor.getLong(ContactQuery._ID),
-                                    cursor.getString(ContactQuery.LOOKUP_KEY));
-
-                            final long photoId = cursor.getLong(ContactQuery.PHOTO_ID);
-
-                            setPhotoId(photoId, lookupUri);
-                        } else {
-                            // shouldn't really happen
-                            setDisplayName(null, null);
-                            setSocialSnippet(null);
-                            setPhoto(loadPlaceholderPhoto(null));
-                        }
-                        break;
-                    }
-                    case TOKEN_PHONE_LOOKUP: {
-                        if (cursor != null && cursor.moveToFirst()) {
-                            long contactId = cursor.getLong(PHONE_LOOKUP_CONTACT_ID_COLUMN_INDEX);
-                            String lookupKey = cursor.getString(
-                                    PHONE_LOOKUP_CONTACT_LOOKUP_KEY_COLUMN_INDEX);
-                            bindFromContactUriInternal(Contacts.getLookupUri(contactId, lookupKey),
-                                    false /* don't reset query handler */);
-                        } else {
-                            String phoneNumber = (String) cookie;
-                            setDisplayName(phoneNumber, null);
-                            setSocialSnippet(null);
-                            setPhoto(loadPlaceholderPhoto(null));
-                            mPhotoView.assignContactFromPhone(phoneNumber, true);
-                        }
-                        break;
-                    }
-                    case TOKEN_EMAIL_LOOKUP: {
-                        if (cursor != null && cursor.moveToFirst()) {
-                            long contactId = cursor.getLong(EMAIL_LOOKUP_CONTACT_ID_COLUMN_INDEX);
-                            String lookupKey = cursor.getString(
-                                    EMAIL_LOOKUP_CONTACT_LOOKUP_KEY_COLUMN_INDEX);
-                            bindFromContactUriInternal(Contacts.getLookupUri(contactId, lookupKey),
-                                    false /* don't reset query handler */);
-                        } else {
-                            String emailAddress = (String) cookie;
-                            setDisplayName(emailAddress, null);
-                            setSocialSnippet(null);
-                            setPhoto(loadPlaceholderPhoto(null));
-                            mPhotoView.assignContactFromEmail(emailAddress, true);
-                        }
-                        break;
-                    }
-                }
-            } finally {
-                if (cursor != null) {
-                    cursor.close();
-                }
-            }
-        }
-    }
-
-    /**
-     * Turn on/off showing of the aggregate badge element.
-     */
-    public void showAggregateBadge(boolean showBagde) {
-        mAggregateBadge.setVisibility(showBagde ? View.VISIBLE : View.GONE);
-    }
-
-    /**
-     * Turn on/off showing of the star element.
-     */
-    public void showStar(boolean showStar) {
-        mStarredView.setVisibility(showStar ? View.VISIBLE : View.GONE);
-    }
-
-    /**
-     * Manually set the starred state of this header widget. This doesn't change
-     * the underlying {@link Contacts} value, only the UI state.
-     */
-    public void setStared(boolean starred) {
-        mStarredView.setChecked(starred);
-    }
-
-    /**
-     * Manually set the presence.
-     */
-    public void setPresence(int presence) {
-        mPresenceView.setImageResource(StatusUpdates.getPresenceIconResourceId(presence));
-    }
-
-    /**
-     * Manually set the presence. If presence is null, it is hidden.
-     * This doesn't change the underlying {@link Contacts} value, only the UI state.
-     * @hide
-     */
-    public void setPresence(Integer presence) {
-        if (presence == null) {
-            showPresence(false);
-        } else {
-            showPresence(true);
-            setPresence(presence.intValue());
-        }
-    }
-
-    /**
-     * Turn on/off showing the presence.
-     * @hide this is here for consistency with setStared/showStar and should be public
-     */
-    public void showPresence(boolean showPresence) {
-        mPresenceView.setVisibility(showPresence ? View.VISIBLE : View.GONE);
-    }
-
-    /**
-     * Manually set the contact uri without loading any data
-     */
-    public void setContactUri(Uri uri) {
-        setContactUri(uri, true);
-    }
-
-    /**
-     * Manually set the contact uri without loading any data
-     */
-    public void setContactUri(Uri uri, boolean sendToQuickContact) {
-        mContactUri = uri;
-        if (sendToQuickContact) {
-            mPhotoView.assignContactUri(uri);
-        }
-    }
-
-    /**
-     * Manually set the photo to display in the header. This doesn't change the
-     * underlying {@link Contacts}, only the UI state.
-     */
-    public void setPhoto(Bitmap bitmap) {
-        mPhotoView.setImageBitmap(bitmap);
-    }
-
-    /**
-     * Manually set the photo given its id. If the id is 0, a placeholder picture will
-     * be loaded. For any other Id, an async query is started
-     * @hide
-     */
-    public void setPhotoId(final long photoId, final Uri lookupUri) {
-        if (photoId == 0) {
-            setPhoto(loadPlaceholderPhoto(null));
-            mPhotoView.assignContactUri(lookupUri);
-            invalidate();
-        } else {
-            startPhotoQuery(photoId, lookupUri,
-                    false /* don't reset query handler */);
-        }
-    }
-
-    /**
-     * Manually set the display name and phonetic name to show in the header.
-     * This doesn't change the underlying {@link Contacts}, only the UI state.
-     */
-    public void setDisplayName(CharSequence displayName, CharSequence phoneticName) {
-        mDisplayNameView.setText(displayName);
-        if (!TextUtils.isEmpty(phoneticName)) {
-            mPhoneticNameView.setText(phoneticName);
-            mPhoneticNameView.setVisibility(View.VISIBLE);
-        } else {
-            mPhoneticNameView.setVisibility(View.GONE);
-        }
-    }
-
-    /**
-     * Manually set the social snippet text to display in the header. This doesn't change the
-     * underlying {@link Contacts}, only the UI state.
-     */
-    public void setSocialSnippet(CharSequence snippet) {
-        if (snippet == null) {
-            mStatusView.setVisibility(View.GONE);
-            mStatusAttributionView.setVisibility(View.GONE);
-        } else {
-            mStatusView.setText(snippet);
-            mStatusView.setVisibility(View.VISIBLE);
-        }
-    }
-
-    /**
-     * Manually set the status attribution text to display in the header.
-     * This doesn't change the underlying {@link Contacts}, only the UI state.
-     * @hide
-     */
-    public void setStatusAttribution(CharSequence attribution) {
-        if (attribution != null) {
-            mStatusAttributionView.setText(attribution);
-            mStatusAttributionView.setVisibility(View.VISIBLE);
-        } else {
-            mStatusAttributionView.setVisibility(View.GONE);
-        }
-    }
-
-    /**
-     * Set a list of specific MIME-types to exclude and not display. For
-     * example, this can be used to hide the {@link Contacts#CONTENT_ITEM_TYPE}
-     * profile icon.
-     */
-    public void setExcludeMimes(String[] excludeMimes) {
-        mExcludeMimes = excludeMimes;
-        mPhotoView.setExcludeMimes(excludeMimes);
-    }
-
-    /**
-     * Manually set all the status values to display in the header.
-     * This doesn't change the underlying {@link Contacts}, only the UI state.
-     * @hide
-     * @param status             The status of the contact. If this is either null or empty,
-     *                           the status is cleared and the other parameters are ignored.
-     * @param statusTimestamp    The timestamp (retrieved via a call to
-     *                           {@link System#currentTimeMillis()}) of the last status update.
-     *                           This value can be null if it is not known.
-     * @param statusLabel        The id of a resource string that specifies the current
-     *                           status. This value can be null if no Label should be used.
-     * @param statusResPackage   The name of the resource package containing the resource string
-     *                           referenced in the parameter statusLabel.
-     */
-    public void setStatus(final String status, final Long statusTimestamp,
-            final Integer statusLabel, final String statusResPackage) {
-        if (TextUtils.isEmpty(status)) {
-            setSocialSnippet(null);
-            return;
-        }
-
-        setSocialSnippet(status);
-
-        final CharSequence timestampDisplayValue;
-
-        if (statusTimestamp != null) {
-            // Set the date/time field by mixing relative and absolute
-            // times.
-            int flags = DateUtils.FORMAT_ABBREV_RELATIVE;
-
-            timestampDisplayValue = DateUtils.getRelativeTimeSpanString(
-                    statusTimestamp.longValue(), System.currentTimeMillis(),
-                    DateUtils.MINUTE_IN_MILLIS, flags);
-        } else {
-            timestampDisplayValue = null;
-        }
-
-
-        String labelDisplayValue = null;
-
-        if (statusLabel != null) {
-            Resources resources;
-            if (TextUtils.isEmpty(statusResPackage)) {
-                resources = getResources();
-            } else {
-                PackageManager pm = getContext().getPackageManager();
-                try {
-                    resources = pm.getResourcesForApplication(statusResPackage);
-                } catch (NameNotFoundException e) {
-                    Log.w(TAG, "Contact status update resource package not found: "
-                            + statusResPackage);
-                    resources = null;
-                }
-            }
-
-            if (resources != null) {
-                try {
-                    labelDisplayValue = resources.getString(statusLabel.intValue());
-                } catch (NotFoundException e) {
-                    Log.w(TAG, "Contact status update resource not found: " + statusResPackage + "@"
-                            + statusLabel.intValue());
-                }
-            }
-        }
-
-        final CharSequence attribution;
-        if (timestampDisplayValue != null && labelDisplayValue != null) {
-            attribution = getContext().getString(
-                    R.string.contact_status_update_attribution_with_date,
-                    timestampDisplayValue, labelDisplayValue);
-        } else if (timestampDisplayValue == null && labelDisplayValue != null) {
-            attribution = getContext().getString(
-                    R.string.contact_status_update_attribution,
-                    labelDisplayValue);
-        } else if (timestampDisplayValue != null) {
-            attribution = timestampDisplayValue;
-        } else {
-            attribution = null;
-        }
-        setStatusAttribution(attribution);
-    }
-
-    /**
-     * Convenience method for binding all available data from an existing
-     * contact.
-     *
-     * @param contactLookupUri a {Contacts.CONTENT_LOOKUP_URI} style URI.
-     */
-    public void bindFromContactLookupUri(Uri contactLookupUri) {
-        bindFromContactUriInternal(contactLookupUri, true /* reset query handler */);
-    }
-
-    /**
-     * Convenience method for binding all available data from an existing
-     * contact.
-     *
-     * @param contactUri a {Contacts.CONTENT_URI} style URI.
-     * @param resetQueryHandler whether to use a new AsyncQueryHandler or not.
-     */
-    private void bindFromContactUriInternal(Uri contactUri, boolean resetQueryHandler) {
-        mContactUri = contactUri;
-        startContactQuery(contactUri, resetQueryHandler);
-    }
-
-    /**
-     * Convenience method for binding all available data from an existing
-     * contact.
-     *
-     * @param emailAddress The email address used to do a reverse lookup in
-     * the contacts database. If more than one contact contains this email
-     * address, one of them will be chosen to bind to.
-     */
-    public void bindFromEmail(String emailAddress) {
-        resetAsyncQueryHandler();
-
-        mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP, emailAddress,
-                Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(emailAddress)),
-                EMAIL_LOOKUP_PROJECTION, null, null, null);
-    }
-
-    /**
-     * Convenience method for binding all available data from an existing
-     * contact.
-     *
-     * @param number The phone number used to do a reverse lookup in
-     * the contacts database. If more than one contact contains this phone
-     * number, one of them will be chosen to bind to.
-     */
-    public void bindFromPhoneNumber(String number) {
-        resetAsyncQueryHandler();
-
-        mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP, number,
-                Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)),
-                PHONE_LOOKUP_PROJECTION, null, null, null);
-    }
-
-    /**
-     * startContactQuery
-     *
-     * internal method to query contact by Uri.
-     *
-     * @param contactUri the contact uri
-     * @param resetQueryHandler whether to use a new AsyncQueryHandler or not
-     */
-    private void startContactQuery(Uri contactUri, boolean resetQueryHandler) {
-        if (resetQueryHandler) {
-            resetAsyncQueryHandler();
-        }
-
-        mQueryHandler.startQuery(TOKEN_CONTACT_INFO, contactUri, contactUri, ContactQuery.COLUMNS,
-                null, null, null);
-    }
-
-    /**
-     * startPhotoQuery
-     *
-     * internal method to query contact photo by photo id and uri.
-     *
-     * @param photoId the photo id.
-     * @param lookupKey the lookup uri.
-     * @param resetQueryHandler whether to use a new AsyncQueryHandler or not.
-     */
-    protected void startPhotoQuery(long photoId, Uri lookupKey, boolean resetQueryHandler) {
-        if (resetQueryHandler) {
-            resetAsyncQueryHandler();
-        }
-
-        mQueryHandler.startQuery(TOKEN_PHOTO_QUERY, lookupKey,
-                ContentUris.withAppendedId(Data.CONTENT_URI, photoId), PhotoQuery.COLUMNS,
-                null, null, null);
-    }
-
-    /**
-     * Method to force this widget to forget everything it knows about the contact.
-     * We need to stop any existing async queries for phone, email, contact, and photos.
-     */
-    public void wipeClean() {
-        resetAsyncQueryHandler();
-
-        setDisplayName(null, null);
-        setPhoto(loadPlaceholderPhoto(null));
-        setSocialSnippet(null);
-        setPresence(0);
-        mContactUri = null;
-        mExcludeMimes = null;
-    }
-
-
-    private void resetAsyncQueryHandler() {
-        // the api AsyncQueryHandler.cancelOperation() doesn't really work. Since we really
-        // need the old async queries to be cancelled, let's do it the hard way.
-        mQueryHandler = new QueryHandler(mContentResolver);
-    }
-
-    /**
-     * Bind the contact details provided by the given {@link Cursor}.
-     */
-    protected void bindContactInfo(Cursor c) {
-        final String displayName = c.getString(ContactQuery.DISPLAY_NAME);
-        final String phoneticName = c.getString(ContactQuery.PHONETIC_NAME);
-        this.setDisplayName(displayName, phoneticName);
-
-        final boolean starred = c.getInt(ContactQuery.STARRED) != 0;
-        setStared(starred);
-
-        //Set the presence status
-        if (!c.isNull(ContactQuery.CONTACT_PRESENCE_STATUS)) {
-            int presence = c.getInt(ContactQuery.CONTACT_PRESENCE_STATUS);
-            setPresence(presence);
-            showPresence(true);
-        } else {
-            showPresence(false);
-        }
-
-        //Set the status update
-        final String status = c.getString(ContactQuery.CONTACT_STATUS);
-        final Long statusTimestamp = c.isNull(ContactQuery.CONTACT_STATUS_TIMESTAMP)
-                ? null
-                : c.getLong(ContactQuery.CONTACT_STATUS_TIMESTAMP);
-        final Integer statusLabel = c.isNull(ContactQuery.CONTACT_STATUS_LABEL)
-                ? null
-                : c.getInt(ContactQuery.CONTACT_STATUS_LABEL);
-        final String statusResPackage = c.getString(ContactQuery.CONTACT_STATUS_RES_PACKAGE);
-
-        setStatus(status, statusTimestamp, statusLabel, statusResPackage);
-    }
-
-    public void onClick(View view) {
-        switch (view.getId()) {
-            case R.id.star: {
-                // Toggle "starred" state
-                // Make sure there is a contact
-                if (mContactUri != null) {
-                    final ContentValues values = new ContentValues(1);
-                    values.put(Contacts.STARRED, mStarredView.isChecked());
-                    mContentResolver.update(mContactUri, values, null, null);
-                }
-                break;
-            }
-            case R.id.photo: {
-                performPhotoClick();
-                break;
-            }
-            case R.id.name: {
-                performDisplayNameClick();
-                break;
-            }
-        }
-    }
-
-    private Bitmap loadPlaceholderPhoto(BitmapFactory.Options options) {
-        if (mNoPhotoResource == 0) {
-            return null;
-        }
-        return BitmapFactory.decodeResource(mContext.getResources(),
-                mNoPhotoResource, options);
-    }
-}
diff --git a/core/res/res/drawable-hdpi/ic_aggregated.png b/core/res/res/drawable-hdpi/ic_aggregated.png
deleted file mode 100644
index 7ca15b1..0000000
--- a/core/res/res/drawable-hdpi/ic_aggregated.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_aggregated.png b/core/res/res/drawable-mdpi/ic_aggregated.png
deleted file mode 100644
index 7c2e2b0..0000000
--- a/core/res/res/drawable-mdpi/ic_aggregated.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/layout/contact_header.xml b/core/res/res/layout/contact_header.xml
deleted file mode 100644
index bf467d3..0000000
--- a/core/res/res/layout/contact_header.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/banner"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="horizontal"
-    android:background="@drawable/title_bar_medium"
-    android:paddingRight="5dip">
-
-    <android.widget.QuickContactBadge android:id="@+id/photo"
-        android:layout_gravity="center_vertical"
-        android:layout_marginRight="8dip"
-        android:layout_marginLeft="-1dip"
-        style="@*android:style/Widget.QuickContactBadge.WindowSmall" />
-    />
-
-    <LinearLayout
-        android:layout_width="0dip"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:orientation="vertical"
-        android:layout_gravity="center_vertical" >
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal">
-
-            <ImageView
-                android:id="@+id/aggregate_badge"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingRight="3dip"
-                android:paddingTop="3dip"
-                android:src="@drawable/ic_aggregated"
-                android:visibility="gone"
-            />
-
-            <TextView android:id="@+id/name"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:singleLine="true"
-                android:ellipsize="end"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:textStyle="bold"
-                android:shadowColor="#BB000000"
-                android:shadowRadius="2.75"
-                />
-        </LinearLayout>
-
-        <TextView android:id="@+id/phonetic_name"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:singleLine="true"
-            android:ellipsize="end"
-            android:layout_marginTop="-2dip"
-            android:visibility="gone"
-        />
-
-        <TextView android:id="@+id/status"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:singleLine="true"
-            android:ellipsize="end"
-            android:layout_marginTop="-2dip"
-            android:visibility="gone"
-        />
-
-        <TextView android:id="@+id/status_date"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:textSize="12sp"
-            android:layout_marginTop="-2dip"
-            android:visibility="gone"
-        />
-    </LinearLayout>
-
-    <ImageView
-        android:id="@+id/presence"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:paddingLeft="3dip"
-        android:paddingRight="6dip"
-        android:visibility="gone"
-    />
-
-    <CheckBox
-        android:id="@+id/star"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:visibility="gone"
-        android:contentDescription="@string/description_star"
-        style="?android:attr/starStyle" />
-
-</LinearLayout>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 218054d..11095c0 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -132,7 +132,7 @@
     <string name="turn_off_radio" msgid="8198784949987062346">"Funk ausschalten"</string>
     <string name="screen_lock" msgid="799094655496098153">"Display-Sperre"</string>
     <string name="power_off" msgid="4266614107412865048">"Ausschalten"</string>
-    <string name="shutdown_progress" msgid="2281079257329981203">"Fährt herunter..."</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"Wird heruntergefahren..."</string>
     <string name="shutdown_confirm" msgid="649792175242821353">"Ihr Telefon wird heruntergefahren."</string>
     <string name="recent_tasks_title" msgid="3691764623638127888">"Zuletzt verwendet"</string>
     <string name="no_recent_tasks" msgid="279702952298056674">"Keine zuletzt verwendeten Anwendungen"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 33cb9fb..d0b3b8a 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -734,7 +734,7 @@
     <string name="chooseActivity" msgid="1009246475582238425">"Seleziona un\'azione"</string>
     <string name="noApplications" msgid="1691104391758345586">"Nessuna applicazione è in grado di svolgere questa azione."</string>
     <string name="aerr_title" msgid="653922989522758100">"Spiacenti."</string>
-    <string name="aerr_application" msgid="4683614104336409186">"Interruzione imprevista dell\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> (processo<xliff:g id="PROCESS">%2$s</xliff:g>). Riprova."</string>
+    <string name="aerr_application" msgid="4683614104336409186">"Interruzione imprevista dell\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>). Riprova."</string>
     <string name="aerr_process" msgid="1551785535966089511">"Interruzione imprevista del processo <xliff:g id="PROCESS">%1$s</xliff:g>. Riprova."</string>
     <string name="anr_title" msgid="3100070910664756057">"Spiacenti."</string>
     <string name="anr_activity_application" msgid="3538242413112507636">"L\'attività <xliff:g id="ACTIVITY">%1$s</xliff:g> (nell\'applicazione <xliff:g id="APPLICATION">%2$s</xliff:g>) non risponde."</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index afe7b67..8aaf761 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -148,7 +148,7 @@
     <string name="safeMode" msgid="2788228061547930246">"안전 모드"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android 시스템"</string>
     <string name="permgrouplab_costMoney" msgid="5429808217861460401">"요금이 부과되는 서비스"</string>
-    <string name="permgroupdesc_costMoney" msgid="8193824940620517189">"응용프로그램이 요금이 부과될 수 있는 작업을 할 수 있도록 합니다."</string>
+    <string name="permgroupdesc_costMoney" msgid="8193824940620517189">"애플리케이션이 요금이 부과될 수 있는 작업을 할 수 있도록 합니다."</string>
     <string name="permgrouplab_messages" msgid="7521249148445456662">"메시지"</string>
     <string name="permgroupdesc_messages" msgid="7045736972019211994">"SMS, 이메일 및 기타 메시지를 읽고 씁니다."</string>
     <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"개인정보"</string>
@@ -156,7 +156,7 @@
     <string name="permgrouplab_location" msgid="635149742436692049">"위치"</string>
     <string name="permgroupdesc_location" msgid="2430258821648348660">"실제 위치 모니터링"</string>
     <string name="permgrouplab_network" msgid="5808983377727109831">"네트워크 통신"</string>
-    <string name="permgroupdesc_network" msgid="5035763698958415998">"응용프로그램이 다양한 네트워크 기능에 액세스할 수 있도록 합니다."</string>
+    <string name="permgroupdesc_network" msgid="5035763698958415998">"애플리케이션이 다양한 네트워크 기능에 액세스할 수 있도록 합니다."</string>
     <string name="permgrouplab_accounts" msgid="3359646291125325519">"계정"</string>
     <string name="permgroupdesc_accounts" msgid="4948732641827091312">"사용 가능한 계정에 액세스합니다."</string>
     <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"하드웨어 제어"</string>
@@ -166,261 +166,261 @@
     <string name="permgrouplab_systemTools" msgid="4652191644082714048">"시스템 도구"</string>
     <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"시스템을 하위 수준에서 액세스하고 제어합니다."</string>
     <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"개발 도구"</string>
-    <string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"응용프로그램 개발자에게만 필요한 기능입니다."</string>
+    <string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"애플리케이션 개발자에게만 필요한 기능입니다."</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"저장"</string>
     <string name="permgroupdesc_storage" msgid="9203302214915355774">"SD 카드에 액세스합니다."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"상태 표시줄 사용 중지 또는 수정"</string>
-    <string name="permdesc_statusBar" msgid="1365473595331989732">"응용프로그램이 상태 표시줄을 사용 중지하거나 시스템 아이콘을 추가 및 제거할 수 있도록 합니다."</string>
+    <string name="permdesc_statusBar" msgid="1365473595331989732">"애플리케이션이 상태 표시줄을 사용 중지하거나 시스템 아이콘을 추가 및 제거할 수 있도록 합니다."</string>
     <string name="permlab_expandStatusBar" msgid="1148198785937489264">"상태 표시줄 확장/축소"</string>
-    <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"응용프로그램이 상태 표시줄을 확장하거나 축소할 수 있도록 합니다."</string>
+    <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"애플리케이션이 상태 표시줄을 확장하거나 축소할 수 있도록 합니다."</string>
     <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"발신전화 가로채기"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"응용프로그램이 발신전화를 처리하고 전화를 걸 번호를 변경할 수 있도록 합니다. 이 경우 악성 응용프로그램이 발신전화를 모니터링하거나, 다른 방향으로 돌리거나, 중단시킬 수 있습니다."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"애플리케이션이 발신전화를 처리하고 전화를 걸 번호를 변경할 수 있도록 합니다. 이 경우 악성 애플리케이션이 발신전화를 모니터링하거나, 다른 방향으로 돌리거나, 중단시킬 수 있습니다."</string>
     <string name="permlab_receiveSms" msgid="2697628268086208535">"SMS 수신"</string>
-    <string name="permdesc_receiveSms" msgid="6298292335965966117">"응용프로그램이 SMS 메시지를 받고 처리할 수 있도록 합니다. 이 경우 악성 응용프로그램이 메시지를 모니터링하거나 사용자가 보기 전에 삭제할 수 있습니다."</string>
+    <string name="permdesc_receiveSms" msgid="6298292335965966117">"애플리케이션이 SMS 메시지를 받고 처리할 수 있도록 합니다. 이 경우 악성 애플리케이션이 메시지를 모니터링하거나 사용자가 보기 전에 삭제할 수 있습니다."</string>
     <string name="permlab_receiveMms" msgid="8894700916188083287">"MMS 수신"</string>
-    <string name="permdesc_receiveMms" msgid="4563346832000174373">"응용프로그램이 MMS 메시지를 받고 처리할 수 있도록 합니다. 이 경우 악성 응용프로그램이 메시지를 모니터링하거나 사용자가 보기 전에 삭제할 수 있습니다."</string>
+    <string name="permdesc_receiveMms" msgid="4563346832000174373">"애플리케이션이 MMS 메시지를 받고 처리할 수 있도록 합니다. 이 경우 악성 애플리케이션이 메시지를 모니터링하거나 사용자가 보기 전에 삭제할 수 있습니다."</string>
     <string name="permlab_sendSms" msgid="5600830612147671529">"SMS 메시지 보내기"</string>
-    <string name="permdesc_sendSms" msgid="1946540351763502120">"응용프로그램이 SMS 메시지를 보낼 수 있도록 합니다. 이 경우 악성 응용프로그램이 사용자의 확인 없이 메시지를 전송하여 요금을 부과할 수 있습니다."</string>
+    <string name="permdesc_sendSms" msgid="1946540351763502120">"애플리케이션이 SMS 메시지를 보낼 수 있도록 합니다. 이 경우 악성 애플리케이션이 사용자의 확인 없이 메시지를 전송하여 요금을 부과할 수 있습니다."</string>
     <string name="permlab_readSms" msgid="4085333708122372256">"SMS 또는 MMS 읽기"</string>
-    <string name="permdesc_readSms" msgid="3002170087197294591">"응용프로그램이 휴대전화 또는 SIM 카드에 저장된 SMS 메시지를 읽을 수 있도록 합니다. 이 경우 악성 응용프로그램이 기밀 메시지를 읽을 수 있습니다."</string>
+    <string name="permdesc_readSms" msgid="3002170087197294591">"애플리케이션이 휴대전화 또는 SIM 카드에 저장된 SMS 메시지를 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 기밀 메시지를 읽을 수 있습니다."</string>
     <string name="permlab_writeSms" msgid="6881122575154940744">"SMS 또는 MMS 편집"</string>
-    <string name="permdesc_writeSms" msgid="6299398896177548095">"응용프로그램이 휴대전화 또는 SIM 카드에 저장된 SMS 메시지에 쓸 수 있도록 합니다. 단, 악성 응용프로그램이 이 기능을 이용하여 메시지를 삭제할 수 있습니다."</string>
+    <string name="permdesc_writeSms" msgid="6299398896177548095">"애플리케이션이 휴대전화 또는 SIM 카드에 저장된 SMS 메시지에 쓸 수 있도록 합니다. 단, 악성 애플리케이션이 이 기능을 이용하여 메시지를 삭제할 수 있습니다."</string>
     <string name="permlab_receiveWapPush" msgid="8258226427716551388">"WAP 수신"</string>
-    <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"응용프로그램이 WAP 메시지를 받고 처리할 수 있도록 합니다. 이 경우 악성 응용프로그램이 메시지를 모니터링하거나 사용자가 보기 전에 삭제할 수 있습니다."</string>
-    <string name="permlab_getTasks" msgid="5005277531132573353">"실행 중인 응용프로그램 검색"</string>
-    <string name="permdesc_getTasks" msgid="7048711358713443341">"응용프로그램이 현재 실행 중이거나 최근에 실행된 작업에 대한 정보를 검색할 수 있도록 합니다. 이 경우 악성 응용프로그램이 다른 응용프로그램에 대한 개인 정보를 검색할 수 있습니다."</string>
-    <string name="permlab_reorderTasks" msgid="5669588525059921549">"실행 중인 응용프로그램 순서 재지정"</string>
-    <string name="permdesc_reorderTasks" msgid="126252774270522835">"응용프로그램이 작업을 포그라운드나 백그라운드로 이동할 수 있도록 합니다. 이 경우 악성 응용프로그램이 사용자의 조작 없이 앞으로 이동할 수 있습니다."</string>
-    <string name="permlab_setDebugApp" msgid="4339730312925176742">"응용프로그램 디버깅 사용"</string>
-    <string name="permdesc_setDebugApp" msgid="5584310661711990702">"응용프로그램이 다른 응용프로그램에 대해 디버깅을 사용할 수 있도록 합니다. 이 경우 악성 응용프로그램이 다른 응용프로그램을 중지시킬 수 있습니다."</string>
+    <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"애플리케이션이 WAP 메시지를 받고 처리할 수 있도록 합니다. 이 경우 악성 애플리케이션이 메시지를 모니터링하거나 사용자가 보기 전에 삭제할 수 있습니다."</string>
+    <string name="permlab_getTasks" msgid="5005277531132573353">"실행 중인 애플리케이션 검색"</string>
+    <string name="permdesc_getTasks" msgid="7048711358713443341">"애플리케이션이 현재 실행 중이거나 최근에 실행된 작업에 대한 정보를 검색할 수 있도록 합니다. 이 경우 악성 애플리케이션이 다른 애플리케이션에 대한 개인 정보를 검색할 수 있습니다."</string>
+    <string name="permlab_reorderTasks" msgid="5669588525059921549">"실행 중인 애플리케이션 순서 재지정"</string>
+    <string name="permdesc_reorderTasks" msgid="126252774270522835">"애플리케이션이 작업을 포그라운드나 백그라운드로 이동할 수 있도록 합니다. 이 경우 악성 애플리케이션이 사용자의 조작 없이 앞으로 이동할 수 있습니다."</string>
+    <string name="permlab_setDebugApp" msgid="4339730312925176742">"애플리케이션 디버깅 사용"</string>
+    <string name="permdesc_setDebugApp" msgid="5584310661711990702">"애플리케이션이 다른 애플리케이션에 대해 디버깅을 사용할 수 있도록 합니다. 이 경우 악성 애플리케이션이 다른 애플리케이션을 중지시킬 수 있습니다."</string>
     <string name="permlab_changeConfiguration" msgid="8214475779521218295">"UI 설정 변경"</string>
-    <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"응용프로그램이 로케일 또는 전체 글꼴 크기와 같은 현재 구성을 변경할 수 있도록 합니다."</string>
+    <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"애플리케이션이 로케일 또는 전체 글꼴 크기와 같은 현재 구성을 변경할 수 있도록 합니다."</string>
     <string name="permlab_enableCarMode" msgid="5684504058192921098">"차량 모드 사용"</string>
-    <string name="permdesc_enableCarMode" msgid="5673461159384850628">"응용프로그램이 차량 모드를 사용할 수 있도록 합니다."</string>
+    <string name="permdesc_enableCarMode" msgid="5673461159384850628">"애플리케이션이 차량 모드를 사용할 수 있도록 합니다."</string>
     <string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"백그라운드 프로세스 종료"</string>
-    <string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"메모리가 부족하지 않은 경우에도 응용프로그램이 다른 응용프로그램의 백그라운드 프로세스를 중단할 수 있도록 합니다."</string>
-    <string name="permlab_forceStopPackages" msgid="1447830113260156236">"다른 응용프로그램 강제 종료"</string>
-    <string name="permdesc_forceStopPackages" msgid="7263036616161367402">"응용프로그램이 다른 응용프로그램을 강제로 종료할 수 있도록 합니다."</string>
-    <string name="permlab_forceBack" msgid="1804196839880393631">"강제로 응용프로그램 닫기"</string>
-    <string name="permdesc_forceBack" msgid="6534109744159919013">"응용프로그램이 포그라운드에 있는 활동을 강제로 닫고 되돌아갈 수 있도록 합니다. 일반 응용프로그램에는 절대로 필요하지 않습니다."</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"메모리가 부족하지 않은 경우에도 애플리케이션이 다른 애플리케이션의 백그라운드 프로세스를 중단할 수 있도록 합니다."</string>
+    <string name="permlab_forceStopPackages" msgid="1447830113260156236">"다른 애플리케이션 강제 종료"</string>
+    <string name="permdesc_forceStopPackages" msgid="7263036616161367402">"애플리케이션이 다른 애플리케이션을 강제로 종료할 수 있도록 합니다."</string>
+    <string name="permlab_forceBack" msgid="1804196839880393631">"강제로 애플리케이션 닫기"</string>
+    <string name="permdesc_forceBack" msgid="6534109744159919013">"애플리케이션이 포그라운드에 있는 활동을 강제로 닫고 되돌아갈 수 있도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
     <string name="permlab_dump" msgid="1681799862438954752">"시스템 내부 상태 검색"</string>
-    <string name="permdesc_dump" msgid="2198776174276275220">"응용프로그램이 시스템의 내부 상태를 검색할 수 있도록 합니다. 단, 악성 응용프로그램이 이 기능을 이용하여 일반적으로 필요하지 않은 다양한 개인정보와 보안정보를 검색할 수 있습니다."</string>
+    <string name="permdesc_dump" msgid="2198776174276275220">"애플리케이션이 시스템의 내부 상태를 검색할 수 있도록 합니다. 단, 악성 애플리케이션이 이 기능을 이용하여 일반적으로 필요하지 않은 다양한 개인정보와 보안정보를 검색할 수 있습니다."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"부분 종료"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"작업 관리자를 종료 상태로 설정합니다. 전체 종료를 수행하지는 않습니다."</string>
-    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"응용프로그램 전환 방지"</string>
-    <string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"사용자가 다른 응용프로그램으로 전환하지 못하게 합니다."</string>
-    <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"실행 중인 모든 응용프로그램 모니터링 및 제어"</string>
-    <string name="permdesc_runSetActivityWatcher" msgid="3228701938345388092">"응용프로그램이 시스템에서 활동이 시작되는 방식을 모니터링하고 제어할 수 있도록 합니다. 단, 악성 응용프로그램이 이 기능을 이용하여 시스템을 완전히 손상시킬 수 있습니다. 이 권한은 개발 과정에만 필요하며 일반 휴대전화 사용 시에는 필요하지 않습니다."</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"애플리케이션 전환 방지"</string>
+    <string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"사용자가 다른 애플리케이션으로 전환하지 못하게 합니다."</string>
+    <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"실행 중인 모든 애플리케이션 모니터링 및 제어"</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="3228701938345388092">"애플리케이션이 시스템에서 활동이 시작되는 방식을 모니터링하고 제어할 수 있도록 합니다. 단, 악성 애플리케이션이 이 기능을 이용하여 시스템을 완전히 손상시킬 수 있습니다. 이 권한은 개발 과정에만 필요하며 일반 휴대전화 사용 시에는 필요하지 않습니다."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"패키지 제거 브로드캐스트 보내기"</string>
-    <string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"응용프로그램이 응용프로그램 패키지가 삭제되었다는 알림을 브로드캐스트할 수 있도록 합니다. 이 경우 악성 응용프로그램이 실행 중인 다른 응용프로그램을 중지시킬 수 있습니다."</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"애플리케이션이 애플리케이션 패키지가 삭제되었다는 알림을 브로드캐스트할 수 있도록 합니다. 이 경우 악성 애플리케이션이 실행 중인 다른 애플리케이션을 중지시킬 수 있습니다."</string>
     <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"SMS 수신 브로드캐스트 보내기"</string>
-    <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"응용프로그램이 SMS 메시지를 받았다는 알림을 브로드캐스트할 수 있도록 합니다. 이 경우 악성 응용프로그램이 수신된 SMS 메시지처럼 위장할 수 있습니다."</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"애플리케이션이 SMS 메시지를 받았다는 알림을 브로드캐스트할 수 있도록 합니다. 이 경우 악성 애플리케이션이 수신된 SMS 메시지처럼 위장할 수 있습니다."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-수신 브로드캐스트 보내기"</string>
-    <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"응용프로그램이 WAP PUSH 메시지를 받았다는 알림을 브로드캐스트할 수 있도록 합니다. 이 경우 악성 응용프로그램이 MMS 메시지를 받은 것처럼 위장하거나 웹페이지의 콘텐츠를 악성 변종으로 몰래 바꿀 수 있습니다."</string>
+    <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"애플리케이션이 WAP PUSH 메시지를 받았다는 알림을 브로드캐스트할 수 있도록 합니다. 이 경우 악성 애플리케이션이 MMS 메시지를 받은 것처럼 위장하거나 웹페이지의 콘텐츠를 악성 변종으로 몰래 바꿀 수 있습니다."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"실행 중인 프로세스 수 제한"</string>
-    <string name="permdesc_setProcessLimit" msgid="7824786028557379539">"응용프로그램이 실행할 최대 프로세스 수를 제어할 수 있도록 합니다. 일반 응용프로그램에는 절대로 필요하지 않습니다."</string>
-    <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"모든 백그라운드 응용프로그램이 닫히도록 하기"</string>
-    <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"응용프로그램이 백그라운드로 이동한 활동을 항상 바로 종료할지 여부를 제어할 수 있도록 합니다. 일반 응용프로그램에는 절대로 필요하지 않습니다."</string>
+    <string name="permdesc_setProcessLimit" msgid="7824786028557379539">"애플리케이션이 실행할 최대 프로세스 수를 제어할 수 있도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
+    <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"모든 백그라운드 애플리케이션이 닫히도록 하기"</string>
+    <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"애플리케이션이 백그라운드로 이동한 활동을 항상 바로 종료할지 여부를 제어할 수 있도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
     <string name="permlab_batteryStats" msgid="7863923071360031652">"배터리 통계 수정"</string>
-    <string name="permdesc_batteryStats" msgid="5847319823772230560">"수집된 배터리 통계를 수정할 수 있도록 합니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
+    <string name="permdesc_batteryStats" msgid="5847319823772230560">"수집된 배터리 통계를 수정할 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_backup" msgid="470013022865453920">"시스템 백업 및 복원 관리"</string>
-    <string name="permdesc_backup" msgid="4837493065154256525">"응용프로그램이 시스템의 백업 및 복원 매커니즘을 제어할 수 있도록 합니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
+    <string name="permdesc_backup" msgid="4837493065154256525">"애플리케이션이 시스템의 백업 및 복원 매커니즘을 제어할 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"인증되지 않은 창 표시"</string>
-    <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"내부 시스템 사용자 인터페이스에서 사용하는 창을 만들 수 있도록 합니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
+    <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"내부 시스템 사용자 인터페이스에서 사용하는 창을 만들 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"시스템 수준 경고 표시"</string>
-    <string name="permdesc_systemAlertWindow" msgid="5109622689323490558">"응용프로그램이 시스템 경고 창을 표시할 수 있도록 합니다. 이 경우 악성 응용프로그램이 휴대전화 화면 전체를 차지할 수 있습니다."</string>
+    <string name="permdesc_systemAlertWindow" msgid="5109622689323490558">"애플리케이션이 시스템 경고 창을 표시할 수 있도록 합니다. 이 경우 악성 애플리케이션이 휴대전화 화면 전체를 차지할 수 있습니다."</string>
     <string name="permlab_setAnimationScale" msgid="2805103241153907174">"전체 애니메이션 속도 수정"</string>
-    <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"응용프로그램이 언제든지 전체 애니메이션 속도를 빠르게 또는 느리게 변경할 수 있도록 합니다."</string>
-    <string name="permlab_manageAppTokens" msgid="17124341698093865">"응용프로그램 토큰 관리"</string>
-    <string name="permdesc_manageAppTokens" msgid="977127907524195988">"응용프로그램이 일반적인 Z-순서를 무시하여 자체 토큰을 만들고 관리할 수 있도록 합니다. 일반 응용프로그램에는 절대로 필요하지 않습니다."</string>
+    <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"애플리케이션이 언제든지 전체 애니메이션 속도를 빠르게 또는 느리게 변경할 수 있도록 합니다."</string>
+    <string name="permlab_manageAppTokens" msgid="17124341698093865">"애플리케이션 토큰 관리"</string>
+    <string name="permdesc_manageAppTokens" msgid="977127907524195988">"애플리케이션이 일반적인 Z-순서를 무시하여 자체 토큰을 만들고 관리할 수 있도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
     <string name="permlab_injectEvents" msgid="1378746584023586600">"키 및 컨트롤 버튼 누르기"</string>
-    <string name="permdesc_injectEvents" msgid="3946098050410874715">"응용프로그램이 입력 이벤트(예: 키 누름)를 다른 응용프로그램에 전달할 수 있도록 합니다. 이 경우 악성 응용프로그램이 휴대전화를 완전히 제어할 수 있습니다."</string>
+    <string name="permdesc_injectEvents" msgid="3946098050410874715">"애플리케이션이 입력 이벤트(예: 키 누름)를 다른 애플리케이션에 전달할 수 있도록 합니다. 이 경우 악성 애플리케이션이 휴대전화를 완전히 제어할 수 있습니다."</string>
     <string name="permlab_readInputState" msgid="469428900041249234">"사용자가 입력한 내용 및 수행한 작업 기록"</string>
-    <string name="permdesc_readInputState" msgid="5132879321450325445">"응용프로그램이 다른 응용프로그램과 상호작용할 때에도 사용자가 누르는 키(예: 비밀번호 입력)를 볼 수 있도록 합니다. 일반 응용프로그램에는 절대로 필요하지 않습니다."</string>
+    <string name="permdesc_readInputState" msgid="5132879321450325445">"애플리케이션이 다른 애플리케이션과 상호작용할 때에도 사용자가 누르는 키(예: 비밀번호 입력)를 볼 수 있도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
     <string name="permlab_bindInputMethod" msgid="3360064620230515776">"입력 방법 연결"</string>
-    <string name="permdesc_bindInputMethod" msgid="3734838321027317228">"권한을 가진 프로그램이 입력 방법에 대한 최상위 인터페이스를 사용하도록 합니다. 일반 응용프로그램에는 절대로 필요하지 않습니다."</string>
+    <string name="permdesc_bindInputMethod" msgid="3734838321027317228">"권한을 가진 프로그램이 입력 방법에 대한 최상위 인터페이스를 사용하도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"배경화면 연결"</string>
-    <string name="permdesc_bindWallpaper" msgid="5287754520361915347">"권한을 가진 프로그램이 배경화면에 대한 최상위 인터페이스를 사용하도록 합니다. 일반 응용프로그램에는 절대로 필요하지 않습니다."</string>
+    <string name="permdesc_bindWallpaper" msgid="5287754520361915347">"권한을 가진 프로그램이 배경화면에 대한 최상위 인터페이스를 사용하도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"기기 관리자와 상호 작용"</string>
-    <string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"보유자가 기기 관리자에게 인텐트를 보낼 수 있도록 합니다. 일반 응용프로그램에는 절대로 필요하지 않습니다."</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"보유자가 기기 관리자에게 인텐트를 보낼 수 있도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"화면 방향 변경"</string>
-    <string name="permdesc_setOrientation" msgid="6335814461615851863">"응용프로그램이 언제든지 화면 회전을 변경할 수 있도록 합니다. 일반 응용프로그램에는 절대로 필요하지 않습니다."</string>
-    <string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"응용프로그램에 Linux 시그널 보내기"</string>
-    <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"응용프로그램이 제공된 시그널을 모든 영구 프로세스로 보내도록 요청할 수 있도록 합니다."</string>
-    <string name="permlab_persistentActivity" msgid="8659652042401085862">"응용프로그램이 항상 실행되도록 설정"</string>
-    <string name="permdesc_persistentActivity" msgid="5037199778265006008">"응용프로그램이 자신의 일부 구성 요소를 지속가능으로 설정하여 다른 응용프로그램에 사용할 수 없도록 합니다."</string>
-    <string name="permlab_deletePackages" msgid="3343439331576348805">"응용프로그램 삭제"</string>
-    <string name="permdesc_deletePackages" msgid="3634943677518723314">"응용프로그램이 Android 패키지를 삭제할 수 있도록 합니다. 이 경우 악성 응용프로그램이 중요한 응용프로그램을 삭제할 수 있습니다."</string>
-    <string name="permlab_clearAppUserData" msgid="2192134353540277878">"다른 응용프로그램의 데이터 삭제"</string>
-    <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"응용프로그램이 사용자 데이터를 지울 수 있도록 합니다."</string>
-    <string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"다른 응용프로그램의 캐시 삭제"</string>
-    <string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"응용프로그램이 캐시 파일을 삭제할 수 있도록 합니다."</string>
-    <string name="permlab_getPackageSize" msgid="4799785352306641460">"응용프로그램 저장공간 계산"</string>
-    <string name="permdesc_getPackageSize" msgid="5557253039670753437">"응용프로그램이 해당 코드, 데이터 및 캐시 크기를 검색할 수 있도록 합니다."</string>
-    <string name="permlab_installPackages" msgid="335800214119051089">"응용프로그램 직접 설치"</string>
-    <string name="permdesc_installPackages" msgid="526669220850066132">"응용프로그램이 새로운 또는 업데이트된 Android 패키지를 설치할 수 있도록 합니다. 이 경우 악성 응용프로그램이 임의의 강력한 권한으로 새 응용프로그램을 추가할 수 있습니다."</string>
-    <string name="permlab_clearAppCache" msgid="4747698311163766540">"모든 응용프로그램 캐시 데이터 삭제"</string>
-    <string name="permdesc_clearAppCache" msgid="7740465694193671402">"응용프로그램이 응용프로그램 캐시 디렉토리에 있는 파일을 삭제하여 휴대전화의 저장공간을 늘릴 수 있도록 합니다. 액세스는 일반적으로 시스템 프로세스로 제한됩니다."</string>
-    <string name="permlab_movePackage" msgid="728454979946503926">"응용프로그램 리소스 이동"</string>
-    <string name="permdesc_movePackage" msgid="6323049291923925277">"응용프로그램이 응용프로그램 리소스를 내부에서 외부 미디어로 또는 그 반대로 이동할 수 있도록 합니다."</string>
+    <string name="permdesc_setOrientation" msgid="6335814461615851863">"애플리케이션이 언제든지 화면 회전을 변경할 수 있도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"애플리케이션에 Linux 시그널 보내기"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"애플리케이션이 제공된 시그널을 모든 영구 프로세스로 보내도록 요청할 수 있도록 합니다."</string>
+    <string name="permlab_persistentActivity" msgid="8659652042401085862">"애플리케이션이 항상 실행되도록 설정"</string>
+    <string name="permdesc_persistentActivity" msgid="5037199778265006008">"애플리케이션이 자신의 일부 구성 요소를 지속가능으로 설정하여 다른 애플리케이션에 사용할 수 없도록 합니다."</string>
+    <string name="permlab_deletePackages" msgid="3343439331576348805">"애플리케이션 삭제"</string>
+    <string name="permdesc_deletePackages" msgid="3634943677518723314">"애플리케이션이 Android 패키지를 삭제할 수 있도록 합니다. 이 경우 악성 애플리케이션이 중요한 애플리케이션을 삭제할 수 있습니다."</string>
+    <string name="permlab_clearAppUserData" msgid="2192134353540277878">"다른 애플리케이션의 데이터 삭제"</string>
+    <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"애플리케이션이 사용자 데이터를 지울 수 있도록 합니다."</string>
+    <string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"다른 애플리케이션의 캐시 삭제"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"애플리케이션이 캐시 파일을 삭제할 수 있도록 합니다."</string>
+    <string name="permlab_getPackageSize" msgid="4799785352306641460">"애플리케이션 저장공간 계산"</string>
+    <string name="permdesc_getPackageSize" msgid="5557253039670753437">"애플리케이션이 해당 코드, 데이터 및 캐시 크기를 검색할 수 있도록 합니다."</string>
+    <string name="permlab_installPackages" msgid="335800214119051089">"애플리케이션 직접 설치"</string>
+    <string name="permdesc_installPackages" msgid="526669220850066132">"애플리케이션이 새로운 또는 업데이트된 Android 패키지를 설치할 수 있도록 합니다. 이 경우 악성 애플리케이션이 임의의 강력한 권한으로 새 애플리케이션을 추가할 수 있습니다."</string>
+    <string name="permlab_clearAppCache" msgid="4747698311163766540">"모든 애플리케이션 캐시 데이터 삭제"</string>
+    <string name="permdesc_clearAppCache" msgid="7740465694193671402">"애플리케이션이 애플리케이션 캐시 디렉토리에 있는 파일을 삭제하여 휴대전화의 저장공간을 늘릴 수 있도록 합니다. 액세스는 일반적으로 시스템 프로세스로 제한됩니다."</string>
+    <string name="permlab_movePackage" msgid="728454979946503926">"애플리케이션 리소스 이동"</string>
+    <string name="permdesc_movePackage" msgid="6323049291923925277">"애플리케이션이 애플리케이션 리소스를 내부에서 외부 미디어로 또는 그 반대로 이동할 수 있도록 합니다."</string>
     <string name="permlab_readLogs" msgid="4811921703882532070">"시스템 로그 파일 읽기"</string>
-    <string name="permdesc_readLogs" msgid="2257937955580475902">"응용프로그램이 시스템의 다양한 로그 파일을 읽을 수 있도록 합니다. 이 경우 응용프로그램은 사용자가 휴대전화로 수행하는 작업에 대한 일반적인 정보를 검색할 수 있습니다. 하지만 로그 파일에 어떠한 개인정보도 포함되어서는 안 됩니다."</string>
+    <string name="permdesc_readLogs" msgid="2257937955580475902">"애플리케이션이 시스템의 다양한 로그 파일을 읽을 수 있도록 합니다. 이 경우 애플리케이션은 사용자가 휴대전화로 수행하는 작업에 대한 일반적인 정보를 검색할 수 있습니다. 하지만 로그 파일에 어떠한 개인정보도 포함되어서는 안 됩니다."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"진단 그룹 소유의 리소스 읽기/쓰기"</string>
-    <string name="permdesc_diagnostic" msgid="3121238373951637049">"응용프로그램이 진단 그룹 소유의 리소스(예: /dev에 있는 파일)를 읽고 쓸 수 있도록 합니다. 이 기능은 시스템 안정성 및 보안에 영향을 미칠 수 있으므로 제조업체 또는 사업자가 하드웨어 관련 진단을 수행하는 경우에만 사용해야 합니다."</string>
-    <string name="permlab_changeComponentState" msgid="79425198834329406">"응용프로그램 구성 요소 사용 또는 사용 안함"</string>
-    <string name="permdesc_changeComponentState" msgid="4569107043246700630">"응용프로그램이 다른 응용프로그램 구성 요소 사용 여부를 변경할 수 있도록 합니다. 이 경우 악성 응용프로그램이 중요한 휴대전화 기능을 사용하지 않도록 설정할 수 있습니다. 이 권한을 설정할 경우 응용프로그램 구성 요소가 사용 불가능하게 되거나 일관성이 맞지 않거나 불안정해질 수 있으므로 주의해야 합니다."</string>
-    <string name="permlab_setPreferredApplications" msgid="3393305202145172005">"기본 응용프로그램 설정"</string>
-    <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"응용프로그램이 기본 응용프로그램을 수정할 수 있도록 합니다. 이 경우 악성 응용프로그램이 사용자의 개인 정보를 수집하기 위해 기존 응용프로그램으로 위장하도록 실행되는 응용프로그램을 몰래 변경할 수 있습니다."</string>
+    <string name="permdesc_diagnostic" msgid="3121238373951637049">"애플리케이션이 진단 그룹 소유의 리소스(예: /dev에 있는 파일)를 읽고 쓸 수 있도록 합니다. 이 기능은 시스템 안정성 및 보안에 영향을 미칠 수 있으므로 제조업체 또는 사업자가 하드웨어 관련 진단을 수행하는 경우에만 사용해야 합니다."</string>
+    <string name="permlab_changeComponentState" msgid="79425198834329406">"애플리케이션 구성 요소 사용 또는 사용 안함"</string>
+    <string name="permdesc_changeComponentState" msgid="4569107043246700630">"애플리케이션이 다른 애플리케이션 구성 요소 사용 여부를 변경할 수 있도록 합니다. 이 경우 악성 애플리케이션이 중요한 휴대전화 기능을 사용하지 않도록 설정할 수 있습니다. 이 권한을 설정할 경우 애플리케이션 구성 요소가 사용 불가능하게 되거나 일관성이 맞지 않거나 불안정해질 수 있으므로 주의해야 합니다."</string>
+    <string name="permlab_setPreferredApplications" msgid="3393305202145172005">"기본 애플리케이션 설정"</string>
+    <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"애플리케이션이 기본 애플리케이션을 수정할 수 있도록 합니다. 이 경우 악성 애플리케이션이 사용자의 개인 정보를 수집하기 위해 기존 애플리케이션으로 위장하도록 실행되는 애플리케이션을 몰래 변경할 수 있습니다."</string>
     <string name="permlab_writeSettings" msgid="1365523497395143704">"전체 시스템 설정 수정"</string>
-    <string name="permdesc_writeSettings" msgid="838789419871034696">"응용프로그램이 시스템의 설정 데이터를 수정할 수 있도록 합니다. 이 경우 악성 응용프로그램이 시스템 구성을 손상시킬 수 있습니다."</string>
+    <string name="permdesc_writeSettings" msgid="838789419871034696">"애플리케이션이 시스템의 설정 데이터를 수정할 수 있도록 합니다. 이 경우 악성 애플리케이션이 시스템 구성을 손상시킬 수 있습니다."</string>
     <string name="permlab_writeSecureSettings" msgid="204676251876718288">"보안 시스템 설정 수정"</string>
-    <string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"응용프로그램이 시스템의 보안 설정값 데이터를 수정할 수 있도록 합니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
+    <string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"애플리케이션이 시스템의 보안 설정값 데이터를 수정할 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_writeGservices" msgid="2149426664226152185">"Google 서비스 지도 수정"</string>
-    <string name="permdesc_writeGservices" msgid="6602362746516676175">"응용프로그램이 Google 서비스 지도를 수정할 수 있도록 합니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
+    <string name="permdesc_writeGservices" msgid="6602362746516676175">"애플리케이션이 Google 서비스 지도를 수정할 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"부팅할 때 자동 시작"</string>
-    <string name="permdesc_receiveBootCompleted" msgid="698336728415008796">"응용프로그램이 시스템 부팅이 끝난 후 바로 시작할 수 있도록 합니다. 이 경우 휴대전화가 시작하는 데 시간이 오래 걸리고 응용프로그램이 항상 실행되어 전체 휴대전화 속도가 느려질 수 있습니다."</string>
+    <string name="permdesc_receiveBootCompleted" msgid="698336728415008796">"애플리케이션이 시스템 부팅이 끝난 후 바로 시작할 수 있도록 합니다. 이 경우 휴대전화가 시작하는 데 시간이 오래 걸리고 애플리케이션이 항상 실행되어 전체 휴대전화 속도가 느려질 수 있습니다."</string>
     <string name="permlab_broadcastSticky" msgid="7919126372606881614">"스티키 브로드캐스트 보내기"</string>
-    <string name="permdesc_broadcastSticky" msgid="1920045289234052219">"응용프로그램이 브로드캐스트가 끝난 후에도 유지되는 스티키 브로드캐스트(Sticky Broadcast)를 보낼 수 있도록 합니다. 이 경우 악성 응용프로그램이 휴대전화가 메모리를 너무 많이 사용하도록 하여 속도를 저하시키거나 불안정하게 만들 수 있습니다."</string>
+    <string name="permdesc_broadcastSticky" msgid="1920045289234052219">"애플리케이션이 브로드캐스트가 끝난 후에도 유지되는 스티키 브로드캐스트(Sticky Broadcast)를 보낼 수 있도록 합니다. 이 경우 악성 애플리케이션이 휴대전화가 메모리를 너무 많이 사용하도록 하여 속도를 저하시키거나 불안정하게 만들 수 있습니다."</string>
     <string name="permlab_readContacts" msgid="6219652189510218240">"연락처 데이터 읽기"</string>
-    <string name="permdesc_readContacts" msgid="3371591512896545975">"응용프로그램이 휴대전화에 저장된 모든 연락처(주소) 데이터를 읽을 수 있도록 합니다. 이 경우 악성 응용프로그램이 데이터를 다른 사람에게 보낼 수 있습니다."</string>
+    <string name="permdesc_readContacts" msgid="3371591512896545975">"애플리케이션이 휴대전화에 저장된 모든 연락처(주소) 데이터를 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 데이터를 다른 사람에게 보낼 수 있습니다."</string>
     <string name="permlab_writeContacts" msgid="644616215860933284">"연락처 데이터 작성"</string>
-    <string name="permdesc_writeContacts" msgid="3924383579108183601">"응용프로그램이 휴대전화에 저장된 연락처(주소) 데이터를 수정할 수 있도록 합니다. 이 경우 악성 응용프로그램이 연락처 데이터를 지우거나 수정할 수 있습니다."</string>
+    <string name="permdesc_writeContacts" msgid="3924383579108183601">"애플리케이션이 휴대전화에 저장된 연락처(주소) 데이터를 수정할 수 있도록 합니다. 이 경우 악성 애플리케이션이 연락처 데이터를 지우거나 수정할 수 있습니다."</string>
     <string name="permlab_writeOwnerData" msgid="4892555913849295393">"소유자 데이터 작성"</string>
-    <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"응용프로그램이 휴대전화에 저장된 소유자 데이터를 수정할 수 있도록 합니다. 단, 악성 응용프로그램이 이 기능을 이용하여 소유자 데이터를 지우거나 수정할 수 있습니다."</string>
+    <string name="permdesc_writeOwnerData" msgid="2344055317969787124">"애플리케이션이 휴대전화에 저장된 소유자 데이터를 수정할 수 있도록 합니다. 단, 악성 애플리케이션이 이 기능을 이용하여 소유자 데이터를 지우거나 수정할 수 있습니다."</string>
     <string name="permlab_readOwnerData" msgid="6668525984731523563">"소유자 데이터 읽기"</string>
-    <string name="permdesc_readOwnerData" msgid="3088486383128434507">"응용프로그램이 휴대전화에 저장된 휴대전화 소유자 데이터를 읽을 수 있도록 합니다. 이 경우 악성 응용프로그램이 휴대전화 소유자 데이터를 읽을 수 있습니다."</string>
+    <string name="permdesc_readOwnerData" msgid="3088486383128434507">"애플리케이션이 휴대전화에 저장된 휴대전화 소유자 데이터를 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 휴대전화 소유자 데이터를 읽을 수 있습니다."</string>
     <string name="permlab_readCalendar" msgid="6898987798303840534">"캘린더 일정 읽기"</string>
-    <string name="permdesc_readCalendar" msgid="5533029139652095734">"응용프로그램이 휴대전화에 저장된 모든 캘린더 일정을 읽을 수 있도록 합니다. 이 경우 악성 응용프로그램이 캘린더 일정을 다른 사람에게 보낼 수 있습니다."</string>
+    <string name="permdesc_readCalendar" msgid="5533029139652095734">"애플리케이션이 휴대전화에 저장된 모든 캘린더 일정을 읽을 수 있도록 합니다. 이 경우 악성 애플리케이션이 캘린더 일정을 다른 사람에게 보낼 수 있습니다."</string>
     <string name="permlab_writeCalendar" msgid="3894879352594904361">"캘린더 일정 추가/수정 및 참석자에게 이메일 전송"</string>
-    <string name="permdesc_writeCalendar" msgid="2988871373544154221">"응용프로그램이 캘린더에 일정을 추가하거나 변경할 수 있도록 합니다. 이렇게 하면 참석자에게 이메일을 보낼 수 있습니다. 악성 응용프로그램이 이를 사용하여 캘린더 일정을 삭제, 수정하거나 참석자에게 이메일을 보낼 수 있습니다."</string>
+    <string name="permdesc_writeCalendar" msgid="2988871373544154221">"애플리케이션이 캘린더에 일정을 추가하거나 변경할 수 있도록 합니다. 이렇게 하면 참석자에게 이메일을 보낼 수 있습니다. 악성 애플리케이션이 이를 사용하여 캘린더 일정을 삭제, 수정하거나 참석자에게 이메일을 보낼 수 있습니다."</string>
     <string name="permlab_accessMockLocation" msgid="8688334974036823330">"테스트를 위해 위치 정보제공자로 가장"</string>
-    <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"테스트용 가짜 위치 정보 제공자를 만듭니다. 단, 악성 응용프로그램이 이 기능을 이용하여 GPS, 네트워크 공급자 같은 실제 위치 정보제공자에서 반환한 위치 및/또는 상태를 덮어쓸 수 있습니다."</string>
+    <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"테스트용 가짜 위치 정보 제공자를 만듭니다. 단, 악성 애플리케이션이 이 기능을 이용하여 GPS, 네트워크 공급자 같은 실제 위치 정보제공자에서 반환한 위치 및/또는 상태를 덮어쓸 수 있습니다."</string>
     <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"추가 위치 제공업체 명령에 액세스"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"추가적인 위치 제공 명령을 사용합니다. 단, 악성 응용프로그램이 이 기능을 이용하여 GPS 또는 기타 위치 소스의 작동을 방해할 수 있습니다."</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"추가적인 위치 제공 명령을 사용합니다. 단, 악성 애플리케이션이 이 기능을 이용하여 GPS 또는 기타 위치 소스의 작동을 방해할 수 있습니다."</string>
     <string name="permlab_installLocationProvider" msgid="6578101199825193873">"위치 정보 공급자 설치 권한"</string>
-    <string name="permdesc_installLocationProvider" msgid="5449175116732002106">"테스트용 가짜 위치 정보제공자를 만듭니다. 단, 악성 응용프로그램이 이 기능을 이용하여 GPS, 네트워크 공급업체 같은 실제 위치 소스에서 반환한 위치 및/또는 상태를 덮어쓰거나 사용자의 위치를 모니터링하여 외부 소스로 보고할 수 있습니다."</string>
+    <string name="permdesc_installLocationProvider" msgid="5449175116732002106">"테스트용 가짜 위치 정보제공자를 만듭니다. 단, 악성 애플리케이션이 이 기능을 이용하여 GPS, 네트워크 공급업체 같은 실제 위치 소스에서 반환한 위치 및/또는 상태를 덮어쓰거나 사용자의 위치를 모니터링하여 외부 소스로 보고할 수 있습니다."</string>
     <string name="permlab_accessFineLocation" msgid="8116127007541369477">"자세한 (GPS) 위치"</string>
-    <string name="permdesc_accessFineLocation" msgid="7411213317434337331">"GPS 등의 자세한 위치 정보가 사용 가능한 경우 휴대전화에서 이를 사용합니다. 이 경우 악성 응용프로그램이 사용자의 위치를 확인하고 추가 배터리 전원을 소비할 수 있습니다."</string>
+    <string name="permdesc_accessFineLocation" msgid="7411213317434337331">"GPS 등의 자세한 위치 정보가 사용 가능한 경우 휴대전화에서 이를 사용합니다. 이 경우 악성 애플리케이션이 사용자의 위치를 확인하고 추가 배터리 전원을 소비할 수 있습니다."</string>
     <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"네트워크 기반의 대략적인 위치"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="8235655958070862293">"휴대전화의 대략적인 위치를 측정하기 위해 셀룰러 네트워크 데이터베이스와 같은 광범위한 위치 정보를 사용합니다. 이 경우 악성 응용프로그램이 사용자의 위치를 대략적으로 측정할 수 있습니다."</string>
+    <string name="permdesc_accessCoarseLocation" msgid="8235655958070862293">"휴대전화의 대략적인 위치를 측정하기 위해 셀룰러 네트워크 데이터베이스와 같은 광범위한 위치 정보를 사용합니다. 이 경우 악성 애플리케이션이 사용자의 위치를 대략적으로 측정할 수 있습니다."</string>
     <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger 액세스"</string>
-    <string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"응용프로그램이 SurfaceFlinger의 하위 수준 기능을 사용할 수 있도록 합니다."</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"애플리케이션이 SurfaceFlinger의 하위 수준 기능을 사용할 수 있도록 합니다."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"프레임 버퍼 읽기"</string>
-    <string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"응용프로그램이 프레임 버퍼의 내용을 읽을 수 있도록 합니다."</string>
+    <string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"애플리케이션이 프레임 버퍼의 내용을 읽을 수 있도록 합니다."</string>
     <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"오디오 설정 변경"</string>
-    <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"응용프로그램이 볼륨 및 경로 지정 같은 전체 오디오 설정을 수정할 수 있도록 합니다."</string>
+    <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"애플리케이션이 볼륨 및 경로 지정 같은 전체 오디오 설정을 수정할 수 있도록 합니다."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"오디오 녹음"</string>
-    <string name="permdesc_recordAudio" msgid="6493228261176552356">"응용프로그램이 오디오 레코드 경로에 액세스할 수 있도록 합니다."</string>
+    <string name="permdesc_recordAudio" msgid="6493228261176552356">"애플리케이션이 오디오 레코드 경로에 액세스할 수 있도록 합니다."</string>
     <string name="permlab_camera" msgid="8059288807274039014">"사진 촬영"</string>
-    <string name="permdesc_camera" msgid="9013476258810982546">"응용프로그램이 카메라로 사진을 찍을 수 있도록 합니다. 이 경우 응용프로그램이 카메라에 보여지는 화면을 언제든지 수집할 수 있습니다."</string>
+    <string name="permdesc_camera" msgid="9013476258810982546">"애플리케이션이 카메라로 사진을 찍을 수 있도록 합니다. 이 경우 애플리케이션이 카메라에 보여지는 화면을 언제든지 수집할 수 있습니다."</string>
     <string name="permlab_brick" msgid="8337817093326370537">"휴대전화를 영구적으로 사용 중지"</string>
-    <string name="permdesc_brick" msgid="5569526552607599221">"응용프로그램이 휴대전화를 영구적으로 사용 중지할 수 있게 합니다. 이 기능은 매우 위험합니다."</string>
+    <string name="permdesc_brick" msgid="5569526552607599221">"애플리케이션이 휴대전화를 영구적으로 사용 중지할 수 있게 합니다. 이 기능은 매우 위험합니다."</string>
     <string name="permlab_reboot" msgid="2898560872462638242">"휴대전화 강제로 다시 부팅"</string>
-    <string name="permdesc_reboot" msgid="7914933292815491782">"응용프로그램이 휴대전화를 강제로 다시 부팅할 수 있도록 합니다."</string>
+    <string name="permdesc_reboot" msgid="7914933292815491782">"애플리케이션이 휴대전화를 강제로 다시 부팅할 수 있도록 합니다."</string>
     <string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"파일시스템 마운트 및 마운트 해제"</string>
-    <string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"응용프로그램이 이동식 저장소의 파일 시스템을 마운트하고 마운트 해제할 수 있도록 합니다."</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"애플리케이션이 이동식 저장소의 파일 시스템을 마운트하고 마운트 해제할 수 있도록 합니다."</string>
     <string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"외부 저장소 포맷"</string>
-    <string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"응용프로그램이 이동식 저장소를 포맷할 수 있도록 합니다."</string>
+    <string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"애플리케이션이 이동식 저장소를 포맷할 수 있도록 합니다."</string>
     <string name="permlab_asec_access" msgid="1070364079249834666">"보안 저장소에 대한 정보 가져오기"</string>
-    <string name="permdesc_asec_access" msgid="7691616292170590244">"응용프로그램이 보안 저장소의 정보를 가져올 수 있도록 합니다."</string>
+    <string name="permdesc_asec_access" msgid="7691616292170590244">"애플리케이션이 보안 저장소의 정보를 가져올 수 있도록 합니다."</string>
     <string name="permlab_asec_create" msgid="7312078032326928899">"보안 저장소 만들기"</string>
-    <string name="permdesc_asec_create" msgid="7041802322759014035">"응용프로그램이 보안 저장소를 만들 수 있도록 합니다."</string>
+    <string name="permdesc_asec_create" msgid="7041802322759014035">"애플리케이션이 보안 저장소를 만들 수 있도록 합니다."</string>
     <string name="permlab_asec_destroy" msgid="7787322878955261006">"보안 저장소 제거"</string>
-    <string name="permdesc_asec_destroy" msgid="5740754114967893169">"응용프로그램이 보안 저장소를 제거할 수 있도록 합니다."</string>
+    <string name="permdesc_asec_destroy" msgid="5740754114967893169">"애플리케이션이 보안 저장소를 제거할 수 있도록 합니다."</string>
     <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"보안 저장소 마운트/마운트 해제"</string>
-    <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"응용프로그램이 보안 저장소를 마운트/마운트 해제할 수 있도록 합니다."</string>
+    <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"애플리케이션이 보안 저장소를 마운트/마운트 해제할 수 있도록 합니다."</string>
     <string name="permlab_asec_rename" msgid="5685344390439934495">"보안 저장소 이름 바꾸기"</string>
-    <string name="permdesc_asec_rename" msgid="1387881770708872470">"응용프로그램이 보안 저장소의 이름을 바꿀 수 있도록 합니다."</string>
+    <string name="permdesc_asec_rename" msgid="1387881770708872470">"애플리케이션이 보안 저장소의 이름을 바꿀 수 있도록 합니다."</string>
     <string name="permlab_vibrate" msgid="7768356019980849603">"진동 제어"</string>
-    <string name="permdesc_vibrate" msgid="2886677177257789187">"응용프로그램이 진동을 제어할 수 있도록 합니다."</string>
+    <string name="permdesc_vibrate" msgid="2886677177257789187">"애플리케이션이 진동을 제어할 수 있도록 합니다."</string>
     <string name="permlab_flashlight" msgid="2155920810121984215">"카메라 플래시 제어"</string>
-    <string name="permdesc_flashlight" msgid="6433045942283802309">"응용프로그램이 카메라 플래시를 제어할 수 있도록 합니다."</string>
+    <string name="permdesc_flashlight" msgid="6433045942283802309">"애플리케이션이 카메라 플래시를 제어할 수 있도록 합니다."</string>
     <string name="permlab_hardware_test" msgid="4148290860400659146">"하드웨어 테스트"</string>
-    <string name="permdesc_hardware_test" msgid="3668894686500081699">"응용프로그램이 하드웨어를 테스트할 목적으로 다양한 주변장치를 제어할 수 있도록 합니다."</string>
+    <string name="permdesc_hardware_test" msgid="3668894686500081699">"애플리케이션이 하드웨어를 테스트할 목적으로 다양한 주변장치를 제어할 수 있도록 합니다."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"전화번호 자동 연결"</string>
-    <string name="permdesc_callPhone" msgid="3369867353692722456">"응용프로그램이 사용자의 조작 없이 전화번호로 전화를 걸 수 있도록 합니다. 이 경우 악성 응용프로그램으로 인해 예상치 못한 통화 요금이 부과될 수 있습니다. 이 권한으로 응용프로그램이 비상 전화를 걸게 할 수는 없습니다."</string>
+    <string name="permdesc_callPhone" msgid="3369867353692722456">"애플리케이션이 사용자의 조작 없이 전화번호로 전화를 걸 수 있도록 합니다. 이 경우 악성 애플리케이션으로 인해 예상치 못한 통화 요금이 부과될 수 있습니다. 이 권한으로 애플리케이션이 비상 전화를 걸게 할 수는 없습니다."</string>
     <string name="permlab_callPrivileged" msgid="4198349211108497879">"모든 전화번호 자동 연결"</string>
-    <string name="permdesc_callPrivileged" msgid="244405067160028452">"응용프로그램이 사용자의 조작 없이 비상 번호를 포함한 전화번호로 전화를 걸 수 있도록 합니다. 이 경우 악성 응용프로그램이 응급 서비스를 불필요하게 또는 불법적으로 호출할 수 있습니다."</string>
+    <string name="permdesc_callPrivileged" msgid="244405067160028452">"애플리케이션이 사용자의 조작 없이 비상 번호를 포함한 전화번호로 전화를 걸 수 있도록 합니다. 이 경우 악성 애플리케이션이 응급 서비스를 불필요하게 또는 불법적으로 호출할 수 있습니다."</string>
     <string name="permlab_performCdmaProvisioning" msgid="5604848095315421425">"직접 CDMA 전화 설정 시작"</string>
-    <string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"응용프로그램이 CDMA 프로비저닝을 시작할 수 있도록 합니다. 이 경우 악성 응용프로그램이 불필요하게 CDMA 프로비저닝을 시작할 수 있습니다."</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"애플리케이션이 CDMA 프로비저닝을 시작할 수 있도록 합니다. 이 경우 악성 애플리케이션이 불필요하게 CDMA 프로비저닝을 시작할 수 있습니다."</string>
     <string name="permlab_locationUpdates" msgid="7785408253364335740">"위치 업데이트 알림 제어"</string>
-    <string name="permdesc_locationUpdates" msgid="2300018303720930256">"무선의 위치 업데이트 알림을 사용하거나 사용 중지할 수 있도록 합니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
+    <string name="permdesc_locationUpdates" msgid="2300018303720930256">"무선의 위치 업데이트 알림을 사용하거나 사용 중지할 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_checkinProperties" msgid="7855259461268734914">"체크인 속성 액세스"</string>
-    <string name="permdesc_checkinProperties" msgid="7150307006141883832">"체크인 서비스에서 업로드한 속성에 대한 읽기/쓰기 접근을 허용합니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
+    <string name="permdesc_checkinProperties" msgid="7150307006141883832">"체크인 서비스에서 업로드한 속성에 대한 읽기/쓰기 접근을 허용합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_bindGadget" msgid="776905339015863471">"위젯 선택"</string>
-    <string name="permdesc_bindGadget" msgid="2098697834497452046">"응용프로그램이 어떤 응용프로그램에서 어떤 위젯을 사용할 수 있는 지를 시스템에 알릴 수 있도록 합니다. 이 권한을 갖는 응용프로그램은 개인 정보에 대한 액세스 권한을 다른 응용프로그램에 부여할 수 있습니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
+    <string name="permdesc_bindGadget" msgid="2098697834497452046">"애플리케이션이 어떤 애플리케이션에서 어떤 위젯을 사용할 수 있는 지를 시스템에 알릴 수 있도록 합니다. 이 권한을 갖는 애플리케이션은 개인 정보에 대한 액세스 권한을 다른 애플리케이션에 부여할 수 있습니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"휴대전화 상태 수정"</string>
-    <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"응용프로그램이 장치의 휴대전화 기능을 제어할 수 있도록 합니다. 이 권한을 갖는 응용프로그램은 사용자에게 알리지 않고 네트워크를 전환하거나 휴대전화 무선 기능을 켜고 끄는 등의 작업을 수행할 수 있습니다."</string>
+    <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"애플리케이션이 장치의 휴대전화 기능을 제어할 수 있도록 합니다. 이 권한을 갖는 애플리케이션은 사용자에게 알리지 않고 네트워크를 전환하거나 휴대전화 무선 기능을 켜고 끄는 등의 작업을 수행할 수 있습니다."</string>
     <string name="permlab_readPhoneState" msgid="2326172951448691631">"휴대전화 상태 및 ID 읽기"</string>
-    <string name="permdesc_readPhoneState" msgid="188877305147626781">"응용프로그램이 장치의 휴대전화 기능에 접근할 수 있도록 합니다. 이 권한을 갖는 응용프로그램은 휴대전화의 전화번호 및 일련번호, 통화가 활성인지 여부, 해당 통화가 연결된 번호 등을 확인할 수 있습니다."</string>
+    <string name="permdesc_readPhoneState" msgid="188877305147626781">"애플리케이션이 장치의 휴대전화 기능에 접근할 수 있도록 합니다. 이 권한을 갖는 애플리케이션은 휴대전화의 전화번호 및 일련번호, 통화가 활성인지 여부, 해당 통화가 연결된 번호 등을 확인할 수 있습니다."</string>
     <string name="permlab_wakeLock" msgid="573480187941496130">"휴대전화가 절전 모드로 전환되지 않도록 설정"</string>
-    <string name="permdesc_wakeLock" msgid="7584036471227467099">"응용프로그램이 휴대전화가 절전 모드로 전환되지 않도록 합니다."</string>
+    <string name="permdesc_wakeLock" msgid="7584036471227467099">"애플리케이션이 휴대전화가 절전 모드로 전환되지 않도록 합니다."</string>
     <string name="permlab_devicePower" msgid="4928622470980943206">"휴대전화 전원 켜고 끄기"</string>
-    <string name="permdesc_devicePower" msgid="4577331933252444818">"응용프로그램이 휴대전화를 켜거나 끌 수 있도록 합니다."</string>
+    <string name="permdesc_devicePower" msgid="4577331933252444818">"애플리케이션이 휴대전화를 켜거나 끌 수 있도록 합니다."</string>
     <string name="permlab_factoryTest" msgid="3715225492696416187">"출고 테스트 모드로 실행"</string>
     <string name="permdesc_factoryTest" msgid="8136644990319244802">"휴대전화 하드웨어에 대한 완전한 액세스를 허용하는 하위 수준의 제조업체 테스트로 실행됩니다. 휴대전화가 제조업체 테스트 모드로 실행 중일 때만 사용할 수 있습니다."</string>
     <string name="permlab_setWallpaper" msgid="6627192333373465143">"배경화면 설정"</string>
-    <string name="permdesc_setWallpaper" msgid="6417041752170585837">"응용프로그램이 시스템 배경화면을 설정할 수 있도록 합니다."</string>
+    <string name="permdesc_setWallpaper" msgid="6417041752170585837">"애플리케이션이 시스템 배경화면을 설정할 수 있도록 합니다."</string>
     <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"배경화면 크기 힌트 설정"</string>
-    <string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"응용프로그램이 시스템 배경화면 크기 힌트를 설정할 수 있도록 합니다."</string>
+    <string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"애플리케이션이 시스템 배경화면 크기 힌트를 설정할 수 있도록 합니다."</string>
     <string name="permlab_masterClear" msgid="2315750423139697397">"시스템을 기본값으로 재설정"</string>
-    <string name="permdesc_masterClear" msgid="5033465107545174514">"응용프로그램이 모든 데이터, 구성 및 설치된 응용프로그램을 지워서 시스템을 완전히 초기화할 수 있도록 합니다."</string>
+    <string name="permdesc_masterClear" msgid="5033465107545174514">"애플리케이션이 모든 데이터, 구성 및 설치된 애플리케이션을 지워서 시스템을 완전히 초기화할 수 있도록 합니다."</string>
     <string name="permlab_setTime" msgid="2021614829591775646">"시간 설정"</string>
-    <string name="permdesc_setTime" msgid="667294309287080045">"응용프로그램이 휴대전화 시계의 시간을 변경할 수 있도록 합니다."</string>
+    <string name="permdesc_setTime" msgid="667294309287080045">"애플리케이션이 휴대전화 시계의 시간을 변경할 수 있도록 합니다."</string>
     <string name="permlab_setTimeZone" msgid="2945079801013077340">"표준시간대 설정"</string>
-    <string name="permdesc_setTimeZone" msgid="1902540227418179364">"응용프로그램이 휴대전화의 표준시간대를 변경할 수 있도록 합니다."</string>
+    <string name="permdesc_setTimeZone" msgid="1902540227418179364">"애플리케이션이 휴대전화의 표준시간대를 변경할 수 있도록 합니다."</string>
     <string name="permlab_accountManagerService" msgid="4829262349691386986">"AccountManagerService로 활동"</string>
-    <string name="permdesc_accountManagerService" msgid="6056903274106394752">"응용프로그램이 AccountAuthenticators으로 전화를 걸 수 있도록 합니다."</string>
+    <string name="permdesc_accountManagerService" msgid="6056903274106394752">"애플리케이션이 AccountAuthenticators으로 전화를 걸 수 있도록 합니다."</string>
     <string name="permlab_getAccounts" msgid="4549918644233460103">"알려진 계정 검색"</string>
-    <string name="permdesc_getAccounts" msgid="6839262446413155394">"응용프로그램이 휴대전화에 알려진 계정 목록을 가져올 수 있도록 합니다."</string>
+    <string name="permdesc_getAccounts" msgid="6839262446413155394">"애플리케이션이 휴대전화에 알려진 계정 목록을 가져올 수 있도록 합니다."</string>
     <string name="permlab_authenticateAccounts" msgid="3940505577982882450">"계정 인증자로 활동"</string>
-    <string name="permdesc_authenticateAccounts" msgid="4006839406474208874">"응용프로그램이 계정 만들기, 비밀번호 가져오기 및 설정 등과 같은 AccountManager의 계정 인증자 기능을 사용할 수 있도록 합니다."</string>
+    <string name="permdesc_authenticateAccounts" msgid="4006839406474208874">"애플리케이션이 계정 만들기, 비밀번호 가져오기 및 설정 등과 같은 AccountManager의 계정 인증자 기능을 사용할 수 있도록 합니다."</string>
     <string name="permlab_manageAccounts" msgid="4440380488312204365">"계정 목록 관리"</string>
-    <string name="permdesc_manageAccounts" msgid="8804114016661104517">"응용프로그램이 계정 추가, 삭제 및 비밀번호 삭제 등의 작업을 수행할 수 있도록 합니다."</string>
+    <string name="permdesc_manageAccounts" msgid="8804114016661104517">"애플리케이션이 계정 추가, 삭제 및 비밀번호 삭제 등의 작업을 수행할 수 있도록 합니다."</string>
     <string name="permlab_useCredentials" msgid="6401886092818819856">"계정의 인증 자격증명 사용"</string>
-    <string name="permdesc_useCredentials" msgid="7416570544619546974">"응용프로그램이 인증 토큰을 요청하도록 합니다."</string>
+    <string name="permdesc_useCredentials" msgid="7416570544619546974">"애플리케이션이 인증 토큰을 요청하도록 합니다."</string>
     <string name="permlab_accessNetworkState" msgid="6865575199464405769">"네트워크 상태 보기"</string>
-    <string name="permdesc_accessNetworkState" msgid="558721128707712766">"응용프로그램이 모든 네트워크의 상태를 볼 수 있도록 합니다."</string>
+    <string name="permdesc_accessNetworkState" msgid="558721128707712766">"애플리케이션이 모든 네트워크의 상태를 볼 수 있도록 합니다."</string>
     <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"인터넷에 최대한 액세스"</string>
-    <string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"응용프로그램이 네트워크 소켓을 만들 수 있도록 합니다."</string>
+    <string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"애플리케이션이 네트워크 소켓을 만들 수 있도록 합니다."</string>
     <string name="permlab_writeApnSettings" msgid="7823599210086622545">"액세스포인트 이름(APN) 설정 쓰기"</string>
-    <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"응용프로그램이 APN의 프록시 및 포트 같은 APN 설정을 수정할 수 있도록 합니다."</string>
+    <string name="permdesc_writeApnSettings" msgid="7443433457842966680">"애플리케이션이 APN의 프록시 및 포트 같은 APN 설정을 수정할 수 있도록 합니다."</string>
     <string name="permlab_changeNetworkState" msgid="958884291454327309">"네트워크 연결 변경"</string>
-    <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"응용프로그램이 네트워크 연결 상태를 변경할 수 있도록 합니다."</string>
+    <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"애플리케이션이 네트워크 연결 상태를 변경할 수 있도록 합니다."</string>
     <string name="permlab_changeTetherState" msgid="2702121155761140799">"테러링 연결 변경"</string>
-    <string name="permdesc_changeTetherState" msgid="8905815579146349568">"응용프로그램이 테더링된 네트워크의 연결 상태를 변경할 수 있도록 합니다."</string>
+    <string name="permdesc_changeTetherState" msgid="8905815579146349568">"애플리케이션이 테더링된 네트워크의 연결 상태를 변경할 수 있도록 합니다."</string>
     <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"백그라운드 데이터 사용 설정 변경"</string>
-    <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"응용프로그램이 백그라운드 데이터 사용 설정을 변경할 수 있도록 합니다."</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"애플리케이션이 백그라운드 데이터 사용 설정을 변경할 수 있도록 합니다."</string>
     <string name="permlab_accessWifiState" msgid="8100926650211034400">"Wi-Fi 상태 보기"</string>
-    <string name="permdesc_accessWifiState" msgid="485796529139236346">"응용프로그램이 Wi-Fi의 상태에 대한 정보를 볼 수 있도록 합니다."</string>
+    <string name="permdesc_accessWifiState" msgid="485796529139236346">"애플리케이션이 Wi-Fi의 상태에 대한 정보를 볼 수 있도록 합니다."</string>
     <string name="permlab_changeWifiState" msgid="7280632711057112137">"Wi-Fi 상태 변경"</string>
-    <string name="permdesc_changeWifiState" msgid="2950383153656873267">"응용프로그램이 Wi-Fi 액세스포인트에 연결하거나 연결을 끊고, 구성된 Wi-Fi 네트워크를 변경할 수 있도록 합니다."</string>
+    <string name="permdesc_changeWifiState" msgid="2950383153656873267">"애플리케이션이 Wi-Fi 액세스포인트에 연결하거나 연결을 끊고, 구성된 Wi-Fi 네트워크를 변경할 수 있도록 합니다."</string>
     <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"Wi-Fi 멀티캐스트 수신 허용"</string>
-    <string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"응용프로그램이 휴대기기로 직접 주소가 지정되지 않은 패킷을 받을 수 있도록 합니다. 이 기능은 가까운 곳에서 제공되는 서비스를 검색할 때 유용하며 비멀티캐스트 모드보다 전원을 더 많이 소비합니다."</string>
+    <string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"애플리케이션이 휴대기기로 직접 주소가 지정되지 않은 패킷을 받을 수 있도록 합니다. 이 기능은 가까운 곳에서 제공되는 서비스를 검색할 때 유용하며 비멀티캐스트 모드보다 전원을 더 많이 소비합니다."</string>
     <string name="permlab_bluetoothAdmin" msgid="1092209628459341292">"Bluetooth 관리"</string>
-    <string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"응용프로그램이 로컬 Bluetooth 휴대전화를 구성한 다음 원격 장치를 검색하여 페어링할 수 있도록 합니다."</string>
+    <string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"애플리케이션이 로컬 Bluetooth 휴대전화를 구성한 다음 원격 장치를 검색하여 페어링할 수 있도록 합니다."</string>
     <string name="permlab_bluetooth" msgid="8361038707857018732">"Bluetooth 연결 만들기"</string>
-    <string name="permdesc_bluetooth" msgid="762515380679392945">"응용프로그램이 로컬 Bluetooth 전화의 구성을 보고 페어링된 장치에 연결하며 연결을 수락할 수 있도록 합니다."</string>
+    <string name="permdesc_bluetooth" msgid="762515380679392945">"애플리케이션이 로컬 Bluetooth 전화의 구성을 보고 페어링된 장치에 연결하며 연결을 수락할 수 있도록 합니다."</string>
     <string name="permlab_disableKeyguard" msgid="4977406164311535092">"키 잠금 사용 중지"</string>
-    <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"응용프로그램이 키 잠금 및 관련 비밀번호 보안을 사용 중지할 수 있도록 합니다. 예를 들어, 휴대전화가 수신전화를 받을 때 키 잠금을 사용 중지했다가 통화가 끝나면 키 잠금을 다시 사용할 수 있습니다."</string>
+    <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"애플리케이션이 키 잠금 및 관련 비밀번호 보안을 사용 중지할 수 있도록 합니다. 예를 들어, 휴대전화가 수신전화를 받을 때 키 잠금을 사용 중지했다가 통화가 끝나면 키 잠금을 다시 사용할 수 있습니다."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"동기화 설정 읽기"</string>
-    <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"응용프로그램이 주소록에 동기화를 사용할지 여부와 같은 동기화 설정을 읽을 수 있도록 합니다."</string>
+    <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"애플리케이션이 주소록에 동기화를 사용할지 여부와 같은 동기화 설정을 읽을 수 있도록 합니다."</string>
     <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"동기화 설정 쓰기"</string>
-    <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"응용프로그램이 주소록에 대해 동기화를 사용할지 여부 등의 동기화 설정을 수정할 수 있도록 합니다."</string>
+    <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"애플리케이션이 주소록에 대해 동기화를 사용할지 여부 등의 동기화 설정을 수정할 수 있도록 합니다."</string>
     <string name="permlab_readSyncStats" msgid="7396577451360202448">"동기화 통계 읽기"</string>
-    <string name="permdesc_readSyncStats" msgid="7511448343374465000">"응용프로그램이 동기화 통계(예: 실행된 동기화 기록)을 읽을 수 있도록 합니다."</string>
+    <string name="permdesc_readSyncStats" msgid="7511448343374465000">"애플리케이션이 동기화 통계(예: 실행된 동기화 기록)을 읽을 수 있도록 합니다."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"가입된 피드 읽기"</string>
-    <string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"응용프로그램이 현재 동기화된 피드에 대한 세부정보를 가져올 수 있도록 합니다."</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"애플리케이션이 현재 동기화된 피드에 대한 세부정보를 가져올 수 있도록 합니다."</string>
     <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"가입 피드 작성"</string>
-    <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"응용프로그램이 현재 동기화된 피드를 수정할 수 있도록 합니다. 이 경우 악성 응용프로그램이 동기화된 피드를 변경할 수 있습니다."</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"애플리케이션이 현재 동기화된 피드를 수정할 수 있도록 합니다. 이 경우 악성 애플리케이션이 동기화된 피드를 변경할 수 있습니다."</string>
     <string name="permlab_readDictionary" msgid="432535716804748781">"사용자 정의 사전 읽기"</string>
-    <string name="permdesc_readDictionary" msgid="1082972603576360690">"응용프로그램이 사용자 사전에 보관되어 있는 비공개 단어, 이름 및 구문을 읽도록 합니다."</string>
+    <string name="permdesc_readDictionary" msgid="1082972603576360690">"애플리케이션이 사용자 사전에 보관되어 있는 비공개 단어, 이름 및 구문을 읽도록 합니다."</string>
     <string name="permlab_writeDictionary" msgid="6703109511836343341">"사용자정의 사전에 작성"</string>
-    <string name="permdesc_writeDictionary" msgid="2241256206524082880">"응용프로그램이 사용자 사전에 새 단어를 입력할 수 있도록 합니다."</string>
+    <string name="permdesc_writeDictionary" msgid="2241256206524082880">"애플리케이션이 사용자 사전에 새 단어를 입력할 수 있도록 합니다."</string>
     <string name="permlab_sdcardWrite" msgid="8079403759001777291">"SD 카드 콘텐츠 수정/삭제"</string>
-    <string name="permdesc_sdcardWrite" msgid="6643963204976471878">"응용프로그램이 SD 카드에 쓸 수 있도록 합니다."</string>
+    <string name="permdesc_sdcardWrite" msgid="6643963204976471878">"애플리케이션이 SD 카드에 쓸 수 있도록 합니다."</string>
     <string name="permlab_cache_filesystem" msgid="5656487264819669824">"캐시 파일시스템 액세스"</string>
-    <string name="permdesc_cache_filesystem" msgid="1624734528435659906">"응용프로그램이 캐시 파일시스템을 읽고 쓸 수 있도록 합니다."</string>
+    <string name="permdesc_cache_filesystem" msgid="1624734528435659906">"애플리케이션이 캐시 파일시스템을 읽고 쓸 수 있도록 합니다."</string>
     <string name="policylab_limitPassword" msgid="4307861496302850201">"비밀번호 제한"</string>
     <string name="policydesc_limitPassword" msgid="1719877245692318299">"사용할 수 있는 비밀번호 유형을 제한합니다."</string>
     <string name="policylab_watchLogin" msgid="7374780712664285321">"로그인 시도 보기"</string>
@@ -571,8 +571,8 @@
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
-    <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
-    <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="AMPM">%P</xliff:g> <xliff:g id="HOUR">%-l</xliff:g>:00"</string>
+    <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="AMPM">%p</xliff:g> <xliff:g id="HOUR">%-l</xliff:g>:00"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"지우기"</string>
     <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"알림 없음"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"진행 중"</string>
@@ -593,11 +593,11 @@
     <string name="save_password_label" msgid="6860261758665825069">"확인"</string>
     <string name="double_tap_toast" msgid="1068216937244567247">"도움말: 축소/확대하려면 두 번 누릅니다."</string>
     <string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"브라우저의 기록 및 북마크 읽기"</string>
-    <string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"응용프로그램이 브라우저로 방문한 모든 URL과 브라우저의 모든 북마크를 읽도록 허용합니다."</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"애플리케이션이 브라우저로 방문한 모든 URL과 브라우저의 모든 북마크를 읽도록 허용합니다."</string>
     <string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"브라우저의 기록 및 북마크 쓰기"</string>
-    <string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"응용프로그램이 휴대전화에 저장된 브라우저 기록 또는 북마크를 수정할 수 있도록 허용합니다. 이 경우 악성 응용프로그램이 브라우저의 데이터를 지우거나 수정할 수 있습니다."</string>
+    <string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"애플리케이션이 휴대전화에 저장된 브라우저 기록 또는 북마크를 수정할 수 있도록 허용합니다. 이 경우 악성 애플리케이션이 브라우저의 데이터를 지우거나 수정할 수 있습니다."</string>
     <string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"브라우저 위치 정보 수정 권한"</string>
-    <string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"응용프로그램이 브라우저의 위치 정보 권한을 수정할 수 있도록 합니다. 악성 응용프로그램이 이를 사용하여 임의의 웹사이트에 위치 정보를 보낼 수도 있습니다."</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"애플리케이션이 브라우저의 위치 정보 권한을 수정할 수 있도록 합니다. 악성 애플리케이션이 이를 사용하여 임의의 웹사이트에 위치 정보를 보낼 수도 있습니다."</string>
     <string name="save_password_message" msgid="767344687139195790">"브라우저에 이 비밀번호를 저장하시겠습니까?"</string>
     <string name="save_password_notnow" msgid="6389675316706699758">"나중에"</string>
     <string name="save_password_remember" msgid="6491879678996749466">"저장"</string>
@@ -728,18 +728,18 @@
     <string name="dialog_alert_title" msgid="2049658708609043103">"주의"</string>
     <string name="capital_on" msgid="1544682755514494298">"사용"</string>
     <string name="capital_off" msgid="6815870386972805832">"사용 안함"</string>
-    <string name="whichApplication" msgid="4533185947064773386">"작업을 수행할 때 사용하는 응용프로그램"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"작업을 수행할 때 사용하는 애플리케이션"</string>
     <string name="alwaysUse" msgid="4583018368000610438">"이 작업에 대해 기본값으로 사용"</string>
-    <string name="clearDefaultHintMsg" msgid="4815455344600932173">"홈 설정 &gt; 응용프로그램 &gt; 응용프로그램 관리에서 기본값을 지웁니다."</string>
+    <string name="clearDefaultHintMsg" msgid="4815455344600932173">"홈 설정 &gt; 애플리케이션 &gt; 애플리케이션 관리에서 기본값을 지웁니다."</string>
     <string name="chooseActivity" msgid="1009246475582238425">"작업 선택"</string>
-    <string name="noApplications" msgid="1691104391758345586">"작업을 수행할 수 있는 응용프로그램이 없습니다."</string>
+    <string name="noApplications" msgid="1691104391758345586">"작업을 수행할 수 있는 애플리케이션이 없습니다."</string>
     <string name="aerr_title" msgid="653922989522758100">"죄송합니다."</string>
-    <string name="aerr_application" msgid="4683614104336409186">"<xliff:g id="APPLICATION">%1$s</xliff:g> 응용프로그램(<xliff:g id="PROCESS">%2$s</xliff:g> 프로세스)이 예상치 않게 중지되었습니다. 다시 시도해 주세요."</string>
+    <string name="aerr_application" msgid="4683614104336409186">"<xliff:g id="APPLICATION">%1$s</xliff:g> 애플리케이션(<xliff:g id="PROCESS">%2$s</xliff:g> 프로세스)이 예상치 않게 중지되었습니다. 다시 시도해 주세요."</string>
     <string name="aerr_process" msgid="1551785535966089511">"<xliff:g id="PROCESS">%1$s</xliff:g> 프로세스가 예상치 않게 중지되었습니다. 다시 시도해 주세요."</string>
     <string name="anr_title" msgid="3100070910664756057">"죄송합니다."</string>
-    <string name="anr_activity_application" msgid="3538242413112507636">"<xliff:g id="APPLICATION">%2$s</xliff:g> 활동(<xliff:g id="ACTIVITY">%1$s</xliff:g> 응용프로그램)이 응답하지 않습니다."</string>
+    <string name="anr_activity_application" msgid="3538242413112507636">"<xliff:g id="APPLICATION">%2$s</xliff:g> 활동(<xliff:g id="ACTIVITY">%1$s</xliff:g> 애플리케이션)이 응답하지 않습니다."</string>
     <string name="anr_activity_process" msgid="5420826626009561014">"<xliff:g id="ACTIVITY">%1$s</xliff:g> 활동(<xliff:g id="PROCESS">%2$s</xliff:g> 프로세스)이 응답하지 않습니다."</string>
-    <string name="anr_application_process" msgid="4185842666452210193">"<xliff:g id="APPLICATION">%1$s</xliff:g> 응용프로그램(<xliff:g id="PROCESS">%2$s</xliff:g> 프로세스)이 응답하지 않습니다."</string>
+    <string name="anr_application_process" msgid="4185842666452210193">"<xliff:g id="APPLICATION">%1$s</xliff:g> 애플리케이션(<xliff:g id="PROCESS">%2$s</xliff:g> 프로세스)이 응답하지 않습니다."</string>
     <string name="anr_process" msgid="1246866008169975783">"<xliff:g id="PROCESS">%1$s</xliff:g> 프로세스가 응답하지 않습니다."</string>
     <string name="force_close" msgid="3653416315450806396">"닫기"</string>
     <string name="report" msgid="4060218260984795706">"신고"</string>
@@ -768,7 +768,7 @@
     <item quantity="other" msgid="7915895323644292768">"개방형 Wi-Fi 네트워크 사용 가능"</item>
   </plurals>
     <string name="select_character" msgid="3365550120617701745">"문자 삽입"</string>
-    <string name="sms_control_default_app_name" msgid="7630529934366549163">"알 수 없는 응용프로그램"</string>
+    <string name="sms_control_default_app_name" msgid="7630529934366549163">"알 수 없는 애플리케이션"</string>
     <string name="sms_control_title" msgid="7296612781128917719">"SMS 메시지를 보내는 중"</string>
     <string name="sms_control_message" msgid="1289331457999236205">"여러 개의 SMS 메시지를 보내는 중입니다. 계속하려면 \'확인\'을 선택하고 전송을 중지하려면 \'취소\'를 선택하세요."</string>
     <string name="sms_control_yes" msgid="2532062172402615953">"확인"</string>
@@ -792,7 +792,7 @@
     <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB 저장소 사용 안함"</string>
     <string name="usb_storage_stop_error_message" msgid="143881914840412108">"USB 저장소를 사용하지 않도록 설정하는 동안 문제가 발생했습니다. USB 호스트와 연결을 해제했는지 확인한 다음 다시 시도하세요."</string>
     <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB 저장소 사용"</string>
-    <string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"USB 저장소를 사용 설정하면 사용 중인 일부 응용프로그램이 중지되고 USB 저장소를 사용 중지할 때까지 사용할 수 없게 됩니다."</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"USB 저장소를 사용 설정하면 사용 중인 일부 애플리케이션이 중지되고 USB 저장소를 사용 중지할 때까지 사용할 수 없게 됩니다."</string>
     <string name="dlg_error_title" msgid="8048999973837339174">"USB 작업 실패"</string>
     <string name="dlg_ok" msgid="7376953167039865701">"확인"</string>
     <string name="extmedia_format_title" msgid="8663247929551095854">"SD 카드 포맷"</string>
@@ -818,9 +818,9 @@
     <string name="ext_media_nomedia_notification_message" msgid="3870120652983659641">"SD 카드가 없습니다.  SD 카드를 넣으세요."</string>
     <string name="activity_list_empty" msgid="4168820609403385789">"일치하는 활동이 없습니다."</string>
     <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"구성 요소 사용 통계 업데이트"</string>
-    <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"수집된 구성요소 사용 통계를 수정할 수 있는 권한을 부여합니다. 일반 응용프로그램은 이 권한을 사용하지 않습니다."</string>
-    <string name="permlab_copyProtectedData" msgid="1660908117394854464">"기본 컨테이너 서비스를 호출하여 콘텐츠를 복사할 수 있도록 합니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
-    <string name="permdesc_copyProtectedData" msgid="537780957633976401">"기본 컨테이너 서비스를 호출하여 콘텐츠를 복사할 수 있도록 합니다. 일반 응용프로그램에서는 사용하지 않습니다."</string>
+    <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"수집된 구성요소 사용 통계를 수정할 수 있는 권한을 부여합니다. 일반 애플리케이션은 이 권한을 사용하지 않습니다."</string>
+    <string name="permlab_copyProtectedData" msgid="1660908117394854464">"기본 컨테이너 서비스를 호출하여 콘텐츠를 복사할 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
+    <string name="permdesc_copyProtectedData" msgid="537780957633976401">"기본 컨테이너 서비스를 호출하여 콘텐츠를 복사할 수 있도록 합니다. 일반 애플리케이션에서는 사용하지 않습니다."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"확대/축소하려면 두 번 탭하세요."</string>
     <string name="gadget_host_error_inflating" msgid="2613287218853846830">"위젯을 생성하는 과정(inflate)에 오류가 발생했습니다."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"이동"</string>
@@ -833,7 +833,7 @@
     <string name="create_contact_using" msgid="4947405226788104538">"전화번호부에"\n"<xliff:g id="NUMBER">%s</xliff:g> 추가"</string>
     <string name="accessibility_compound_button_selected" msgid="5612776946036285686">"선택함"</string>
     <string name="accessibility_compound_button_unselected" msgid="8864512895673924091">"선택 안함"</string>
-    <string name="grant_credentials_permission_message_header" msgid="6824538733852821001">"현재 이후로 하나 이상의 다음 응용프로그램이 계정에 대한 액세스 권한을 요청합니다."</string>
+    <string name="grant_credentials_permission_message_header" msgid="6824538733852821001">"현재 이후로 하나 이상의 다음 애플리케이션이 계정에 대한 액세스 권한을 요청합니다."</string>
     <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"요청을 허용하시겠습니까?"</string>
     <string name="grant_permissions_header_text" msgid="2722567482180797717">"액세스 요청"</string>
     <string name="allow" msgid="7225948811296386551">"허용"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 02afb16..6acf4a6 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -780,7 +780,7 @@
     <string name="perms_show_all" msgid="2671791163933091180"><b>"Vis alle"</b></string>
     <string name="usb_storage_activity_title" msgid="2399289999608900443">"USB-masselagring"</string>
     <string name="usb_storage_title" msgid="5901459041398751495">"USB koblet til"</string>
-    <string name="usb_storage_message" msgid="4796759646167247178">"Du har koblet telefonen til datamaskinen via USB. Velg knappen nedenfor hvis du vil kopiere filer mellom datamaskinen og SD-kortet i Android-telefonen."</string>
+    <string name="usb_storage_message" msgid="4796759646167247178">"Du har koblet telefonen til datamaskinen via USB. Velg knappen nedenfor hvis du vil kopiere filer mellom datamaskinen og minnekortet i telefonen."</string>
     <string name="usb_storage_button_mount" msgid="1052259930369508235">"Slå på USB-lagring"</string>
     <string name="usb_storage_error_message" msgid="2534784751603345363">"Det oppsto et problem med å bruke minnekortet ditt for USB-lagring."</string>
     <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB tilkoblet"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index b7c5bbc..834a84c 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -587,7 +587,7 @@
     <string name="factorytest_not_system" msgid="4435201656767276723">"只有在 /system/app 中安装的包支持 FACTORY_TEST 操作。"</string>
     <string name="factorytest_no_action" msgid="872991874799998561">"未发现支持 FACTORY_TEST 操作的包。"</string>
     <string name="factorytest_reboot" msgid="6320168203050791643">"重新启动"</string>
-    <string name="js_dialog_title" msgid="8143918455087008109">"“<xliff:g id="TITLE">%s</xliff:g>”处的页面表明:"</string>
+    <string name="js_dialog_title" msgid="8143918455087008109">"来自“<xliff:g id="TITLE">%s</xliff:g>”的提示:"</string>
     <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
     <string name="js_dialog_before_unload" msgid="1901675448179653089">"是否从该页面导航至它处?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"选择“确定”继续,或选择“取消”留在当前页面。"</string>
     <string name="save_password_label" msgid="6860261758665825069">"确认"</string>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 2d9cc2e..1fc6491 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1421,12 +1421,6 @@
     <!-- Custom organization type -->
     <string name="orgTypeCustom">Custom</string>
 
-    <!-- Attbution of a contact status update, when the time of update is unknown -->
-    <string name="contact_status_update_attribution">via <xliff:g id="source" example="Google Talk">%1$s</xliff:g></string>
-
-    <!-- Attbution of a contact status update, when the time of update is known -->
-    <string name="contact_status_update_attribution_with_date"><xliff:g id="date" example="3 hours ago">%1$s</xliff:g> via <xliff:g id="source" example="Google Talk">%2$s</xliff:g></string>
-
     <!-- Instructions telling the user to enter their SIM PIN to unlock the keyguard.
          Displayed in one line in a large font.  -->
     <string name="keyguard_password_enter_pin_code">Enter PIN code</string>
@@ -2270,12 +2264,6 @@
     <!-- Label for <input type="submit"> button in html -->
     <string name="submit">Submit</string>
 
-    <!-- String describing the Star/Favorite checkbox
-
-         Used by AccessibilityService to announce the purpose of the view.
-    -->
-    <string name="description_star">favorite</string>
-
     <!-- Strings for car mode notification -->
     <!-- Shown when car mode is enabled -->
     <string name="car_mode_disable_notification_title">Car mode enabled</string>
diff --git a/core/tests/coretests/src/android/database/sqlite/SQLiteDatabaseTest.java b/core/tests/coretests/src/android/database/sqlite/SQLiteDatabaseTest.java
index 4d228c4..b098b5c 100644
--- a/core/tests/coretests/src/android/database/sqlite/SQLiteDatabaseTest.java
+++ b/core/tests/coretests/src/android/database/sqlite/SQLiteDatabaseTest.java
@@ -78,7 +78,7 @@
         try {
             mDatabase.setConnectionPoolSize(0);
             fail("IllegalStateException expected");
-        } catch (IllegalStateException e) {
+        } catch (IllegalArgumentException e) {
             assertTrue(e.getMessage().contains("less than the current max value"));
         }
         // set pool size to a valid value
@@ -88,7 +88,7 @@
         try {
             mDatabase.setConnectionPoolSize(1);
             fail("IllegalStateException expected");
-        } catch (IllegalStateException e) {
+        } catch (IllegalArgumentException e) {
             assertTrue(e.getMessage().contains("less than the current max value"));
         }
     }
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index 22291e6..308d663 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -47,20 +47,22 @@
         UNSIGNED_32 (10, 4),
         //UNSIGNED_64 (11, 8),
 
-        UNSIGNED_5_6_5 (12, 2),
-        UNSIGNED_5_5_5_1 (13, 2),
-        UNSIGNED_4_4_4_4 (14, 2),
+        BOOLEAN(12, 1),
 
-        RS_ELEMENT (15, 4),
-        RS_TYPE (16, 4),
-        RS_ALLOCATION (17, 4),
-        RS_SAMPLER (18, 4),
-        RS_SCRIPT (19, 4),
-        RS_MESH (20, 4),
-        RS_PROGRAM_FRAGMENT (21, 4),
-        RS_PROGRAM_VERTEX (22, 4),
-        RS_PROGRAM_RASTER (23, 4),
-        RS_PROGRAM_STORE (24, 4);
+        UNSIGNED_5_6_5 (13, 2),
+        UNSIGNED_5_5_5_1 (14, 2),
+        UNSIGNED_4_4_4_4 (15, 2),
+
+        RS_ELEMENT (16, 4),
+        RS_TYPE (17, 4),
+        RS_ALLOCATION (18, 4),
+        RS_SAMPLER (19, 4),
+        RS_SCRIPT (20, 4),
+        RS_MESH (21, 4),
+        RS_PROGRAM_FRAGMENT (22, 4),
+        RS_PROGRAM_VERTEX (23, 4),
+        RS_PROGRAM_RASTER (24, 4),
+        RS_PROGRAM_STORE (25, 4);
 
         int mID;
         int mSize;
@@ -85,6 +87,13 @@
         }
     }
 
+    public static Element BOOLEAN(RenderScript rs) {
+        if(rs.mElement_BOOLEAN == null) {
+            rs.mElement_BOOLEAN = createUser(rs, DataType.BOOLEAN);
+        }
+        return rs.mElement_BOOLEAN;
+    }
+
     public static Element U8(RenderScript rs) {
         if(rs.mElement_U8 == null) {
             rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8);
diff --git a/graphics/java/android/renderscript/FieldPacker.java b/graphics/java/android/renderscript/FieldPacker.java
index 81a4288..d166972 100644
--- a/graphics/java/android/renderscript/FieldPacker.java
+++ b/graphics/java/android/renderscript/FieldPacker.java
@@ -244,6 +244,10 @@
         addU32(v.w);
     }
 
+    public void addBoolean(Boolean v) {
+        addI8((byte)(v ? 1 : 0));
+    }
+
     public final byte[] getData() {
         return mData;
     }
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 70f6bd7..5f2050e 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -204,6 +204,7 @@
     Element mElement_U32;
     Element mElement_I32;
     Element mElement_F32;
+    Element mElement_BOOLEAN;
 
     Element mElement_ELEMENT;
     Element mElement_TYPE;
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index c46df1e..ef537f4 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -102,6 +102,17 @@
 
     typedef void (*callback_t)(int event, void* user, void *info);
 
+    /* Returns the minimum frame count required for the successful creation of
+     * an AudioTrack object.
+     * Returned status (from utils/Errors.h) can be:
+     *  - NO_ERROR: successful operation
+     *  - NO_INIT: audio server or audio hardware not initialized
+     */
+
+     static status_t getMinFrameCount(int* frameCount,
+                                      int streamType      =-1,
+                                      uint32_t sampleRate = 0);
+
     /* Constructs an uninitialized AudioTrack. No connection with
      * AudioFlinger takes place.
      */
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 44b6846b5..9544fe69 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -2,6 +2,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES:= \
+	UIMatrix.cpp \
 	UIOpenGLRenderer.cpp
 
 LOCAL_MODULE_CLASS := SHARED_LIBRARIES
diff --git a/libs/hwui/UIMatrix.cpp b/libs/hwui/UIMatrix.cpp
new file mode 100644
index 0000000..954a525
--- /dev/null
+++ b/libs/hwui/UIMatrix.cpp
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+#define LOG_TAG "UIMatrix"
+
+#include <math.h>
+#include <stdlib.h>
+
+#include <utils/Log.h>
+
+#include "UIMatrix.h"
+
+namespace android {
+
+void Matrix4::loadIdentity() {
+	mMat[0]  = 1;
+	mMat[1]  = 0;
+	mMat[2]  = 0;
+	mMat[3]  = 0;
+
+	mMat[4]  = 0;
+	mMat[5]  = 1;
+	mMat[6]  = 0;
+	mMat[7]  = 0;
+
+	mMat[8]  = 0;
+	mMat[9]  = 0;
+	mMat[10] = 1;
+	mMat[11] = 0;
+
+	mMat[12] = 0;
+	mMat[13] = 0;
+	mMat[14] = 0;
+	mMat[15] = 1;
+}
+
+void Matrix4::load(const float* v) {
+	memcpy(mMat, v, sizeof(mMat));
+}
+
+void Matrix4::load(const Matrix4& v) {
+	memcpy(mMat, v.mMat, sizeof(mMat));
+}
+
+void Matrix4::copyTo(float* v) const {
+	memcpy(v, mMat, sizeof(mMat));
+}
+
+void Matrix4::loadTranslate(float x, float y, float z) {
+	loadIdentity();
+	mMat[12] = x;
+	mMat[13] = y;
+	mMat[14] = z;
+}
+
+void Matrix4::loadScale(float sx, float sy, float sz) {
+	loadIdentity();
+	mMat[0]  = sx;
+	mMat[5]  = sy;
+	mMat[10] = sz;
+}
+
+void Matrix4::loadRotate(float angle, float x, float y, float z) {
+	mMat[3]  = 0;
+	mMat[7]  = 0;
+	mMat[11] = 0;
+	mMat[12] = 0;
+	mMat[13] = 0;
+	mMat[14] = 0;
+	mMat[15] = 1;
+
+	angle *= float(M_PI / 180.0f);
+	float c = cosf(angle);
+	float s = sinf(angle);
+
+	const float length = sqrtf(x * x + y * y + z * z);
+	const float nc = 1.0f - c;
+	const float xy = x * y;
+	const float yz = y * z;
+	const float zx = z * x;
+	const float xs = x * s;
+	const float ys = y * s;
+	const float zs = z * s;
+
+	mMat[0]  = x * x * nc +  c;
+	mMat[4]  =    xy * nc - zs;
+	mMat[8]  =    zx * nc + ys;
+	mMat[1]  =    xy * nc + zs;
+	mMat[5]  = y * y * nc +  c;
+	mMat[9]  =    yz * nc - xs;
+	mMat[2]  =    zx * nc - ys;
+	mMat[6]  =    yz * nc + xs;
+	mMat[10] = z * z * nc +  c;
+}
+
+void Matrix4::loadMultiply(const Matrix4& u, const Matrix4& v) {
+    for (int i = 0 ; i < 4 ; i++) {
+        float x = 0;
+        float y = 0;
+        float z = 0;
+        float w = 0;
+
+        for (int j = 0 ; j < 4 ; j++) {
+            const float e = v.get(i,j);
+            x += u.get(j, 0) * e;
+            y += u.get(j, 1) * e;
+            z += u.get(j, 2) * e;
+            w += u.get(j, 3) * e;
+        }
+
+        set(i, 0, x);
+        set(i, 1, y);
+        set(i, 2, z);
+        set(i, 3, w);
+    }
+}
+
+void Matrix4::loadOrtho(float left, float right, float bottom, float top, float near, float far) {
+    loadIdentity();
+    mMat[0]  = 2 / (right - left);
+    mMat[5]  = 2 / (top - bottom);
+    mMat[10] = -2 / (far - near);
+    mMat[12] = -(right + left) / (right - left);
+    mMat[13] = -(top + bottom) / (top - bottom);
+    mMat[14] = -(far + near) / (far - near);
+}
+
+void Matrix4::dump() const {
+	LOGD("%f %f %f %f", mMat[0], mMat[4], mMat[ 8], mMat[12]);
+	LOGD("%f %f %f %f", mMat[1], mMat[5], mMat[ 9], mMat[13]);
+	LOGD("%f %f %f %f", mMat[2], mMat[6], mMat[10], mMat[14]);
+	LOGD("%f %f %f %f", mMat[3], mMat[7], mMat[11], mMat[15]);
+}
+
+};
diff --git a/libs/hwui/UIMatrix.h b/libs/hwui/UIMatrix.h
new file mode 100644
index 0000000..55d7c07
--- /dev/null
+++ b/libs/hwui/UIMatrix.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+#ifndef ANDROID_UI_MATRIX_H
+#define ANDROID_UI_MATRIX_H
+
+namespace android {
+
+///////////////////////////////////////////////////////////////////////////////
+// Classes
+///////////////////////////////////////////////////////////////////////////////
+
+class Matrix4 {
+public:
+	Matrix4() {
+		loadIdentity();
+	}
+
+	Matrix4(const float* v) {
+		load(v);
+	}
+
+	Matrix4(const Matrix4& v) {
+		load(v);
+	}
+
+	void loadIdentity();
+
+	void load(const float* v);
+	void load(const Matrix4& v);
+
+	void loadTranslate(float x, float y, float z);
+	void loadScale(float sx, float sy, float sz);
+	void loadRotate(float angle, float x, float y, float z);
+	void loadMultiply(const Matrix4& u, const Matrix4& v);
+
+	void loadOrtho(float left, float right, float bottom, float top, float near, float far);
+
+	void multiply(const Matrix4& v) {
+		Matrix4 u;
+		u.loadMultiply(*this, v);
+		load(u);
+	}
+
+	void translate(float x, float y, float z) {
+		Matrix4 u;
+		u.loadTranslate(x, y, z);
+		multiply(u);
+	}
+
+	void scale(float sx, float sy, float sz) {
+		Matrix4 u;
+		u.loadScale(sx, sy, sz);
+		multiply(u);
+	}
+
+	void rotate(float angle, float x, float y, float z) {
+		Matrix4 u;
+		u.loadRotate(angle, x, y, z);
+		multiply(u);
+	}
+
+	void copyTo(float* v) const;
+
+	void dump() const;
+
+//private:
+    inline float get(int i, int j) const {
+        return mMat[i * 4 + j];
+    }
+
+    inline void set(int i, int j, float v) {
+    	mMat[i * 4 + j] = v;
+    }
+
+	float mMat[16];
+}; // class Matrix4
+
+///////////////////////////////////////////////////////////////////////////////
+// Types
+///////////////////////////////////////////////////////////////////////////////
+
+typedef Matrix4 mat4;
+
+}; // namespace android
+
+#endif // ANDROID_UI_MATRIX_H
diff --git a/libs/hwui/UIOpenGLRenderer.cpp b/libs/hwui/UIOpenGLRenderer.cpp
index 334be15..b6113da 100644
--- a/libs/hwui/UIOpenGLRenderer.cpp
+++ b/libs/hwui/UIOpenGLRenderer.cpp
@@ -27,6 +27,7 @@
 #include <GLES2/gl2ext.h>
 
 #include "UIOpenGLRenderer.h"
+#include "UIMatrix.h"
 
 namespace android {
 
@@ -39,11 +40,18 @@
 }
 
 void UIOpenGLRenderer::setViewport(int width, int height) {
-    LOGD("Setting viewport");
+    glViewport(0, 0, width, height);
+
+    mat4 ortho;
+    ortho.loadOrtho(0, width, height, 0, 0, 1);
+    ortho.copyTo(mOrthoMatrix);
 }
 
 void UIOpenGLRenderer::prepare() {
-    LOGD("Prepare");
+    glDisable(GL_SCISSOR_TEST);
+    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+    glClear(GL_COLOR_BUFFER_BIT);
+    glEnable(GL_SCISSOR_TEST);
 }
 
 }; // namespace android
diff --git a/libs/hwui/UIOpenGLRenderer.h b/libs/hwui/UIOpenGLRenderer.h
index b0fb73f..3b95e6a 100644
--- a/libs/hwui/UIOpenGLRenderer.h
+++ b/libs/hwui/UIOpenGLRenderer.h
@@ -26,6 +26,10 @@
 
     void setViewport(int width, int height);
     void prepare();
+
+private:
+    float mOrthoMatrix[16];
+
 };
 
 }; // namespace android
diff --git a/libs/rs/RenderScript.h b/libs/rs/RenderScript.h
index f01eadd..6302b90 100644
--- a/libs/rs/RenderScript.h
+++ b/libs/rs/RenderScript.h
@@ -85,6 +85,8 @@
     RS_TYPE_UNSIGNED_32,
     RS_TYPE_UNSIGNED_64,
 
+    RS_TYPE_BOOLEAN,
+
     RS_TYPE_UNSIGNED_5_6_5,
     RS_TYPE_UNSIGNED_5_5_5_1,
     RS_TYPE_UNSIGNED_4_4_4_4,
diff --git a/libs/rs/java/Film/Android.mk b/libs/rs/java/Film/Android.mk
deleted file mode 100644
index 9e6ed7e..0000000
--- a/libs/rs/java/Film/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Copyright (C) 2008 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-#LOCAL_STATIC_JAVA_LIBRARIES := android.renderscript
-
-LOCAL_PACKAGE_NAME := Film
-
-include $(BUILD_PACKAGE)
diff --git a/libs/rs/java/Film/AndroidManifest.xml b/libs/rs/java/Film/AndroidManifest.xml
deleted file mode 100644
index a5ce8a1..0000000
--- a/libs/rs/java/Film/AndroidManifest.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.film">
-    <application android:label="Film">
-        <activity android:name="Film"
-                  android:screenOrientation="portrait"
-                  android:theme="@android:style/Theme.Black.NoTitleBar">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-</manifest>
diff --git a/libs/rs/java/Film/res/drawable/p01.png b/libs/rs/java/Film/res/drawable/p01.png
deleted file mode 100644
index a9b9bdb..0000000
--- a/libs/rs/java/Film/res/drawable/p01.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p02.png b/libs/rs/java/Film/res/drawable/p02.png
deleted file mode 100644
index 8162c82..0000000
--- a/libs/rs/java/Film/res/drawable/p02.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p03.png b/libs/rs/java/Film/res/drawable/p03.png
deleted file mode 100644
index e3e26c0..0000000
--- a/libs/rs/java/Film/res/drawable/p03.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p04.png b/libs/rs/java/Film/res/drawable/p04.png
deleted file mode 100644
index daee603..0000000
--- a/libs/rs/java/Film/res/drawable/p04.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p05.png b/libs/rs/java/Film/res/drawable/p05.png
deleted file mode 100644
index fac5248..0000000
--- a/libs/rs/java/Film/res/drawable/p05.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p06.png b/libs/rs/java/Film/res/drawable/p06.png
deleted file mode 100644
index 3b51261..0000000
--- a/libs/rs/java/Film/res/drawable/p06.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p07.png b/libs/rs/java/Film/res/drawable/p07.png
deleted file mode 100644
index d8bd938..0000000
--- a/libs/rs/java/Film/res/drawable/p07.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p08.png b/libs/rs/java/Film/res/drawable/p08.png
deleted file mode 100644
index ef175e8..0000000
--- a/libs/rs/java/Film/res/drawable/p08.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p09.png b/libs/rs/java/Film/res/drawable/p09.png
deleted file mode 100644
index 7bf3874..0000000
--- a/libs/rs/java/Film/res/drawable/p09.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p10.png b/libs/rs/java/Film/res/drawable/p10.png
deleted file mode 100644
index 908827d..0000000
--- a/libs/rs/java/Film/res/drawable/p10.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p11.png b/libs/rs/java/Film/res/drawable/p11.png
deleted file mode 100644
index 1289f71..0000000
--- a/libs/rs/java/Film/res/drawable/p11.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p12.png b/libs/rs/java/Film/res/drawable/p12.png
deleted file mode 100644
index e1af16a4..0000000
--- a/libs/rs/java/Film/res/drawable/p12.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/drawable/p13.png b/libs/rs/java/Film/res/drawable/p13.png
deleted file mode 100644
index d08bcbe..0000000
--- a/libs/rs/java/Film/res/drawable/p13.png
+++ /dev/null
Binary files differ
diff --git a/libs/rs/java/Film/res/raw/filmimage.c b/libs/rs/java/Film/res/raw/filmimage.c
deleted file mode 100644
index d154c68..0000000
--- a/libs/rs/java/Film/res/raw/filmimage.c
+++ /dev/null
@@ -1,110 +0,0 @@
-// Fountain test script
-
-#pragma version(1)
-#pragma stateVertex(orthoWindow)
-#pragma stateRaster(flat)
-#pragma stateFragment(PgmFragBackground)
-#pragma stateStore(MyBlend)
-
-
-int main(void* con, int ft, int launchID) {
-    int count, touch, x, y, rate, maxLife, lifeShift;
-    int life;
-    int ct, ct2;
-    int newPart;
-    int drawCount;
-    int dx, dy, idx;
-    int posx,posy;
-    int c;
-    int srcIdx;
-    int dstIdx;
-
-    count = loadI32(con, 0, 1);
-    touch = loadI32(con, 0, 2);
-    x = loadI32(con, 0, 3);
-    y = loadI32(con, 0, 4);
-
-    rate = 4;
-    maxLife = (count / rate) - 1;
-    lifeShift = 0;
-    {
-        life = maxLife;
-        while (life > 255) {
-            life = life >> 1;
-            lifeShift ++;
-        }
-    }
-
-    drawRect(con, 0, 256, 0, 512);
-    contextBindProgramFragment(con, NAMED_PgmFragParts);
-
-    if (touch) {
-        newPart = loadI32(con, 2, 0);
-        for (ct2=0; ct2<rate; ct2++) {
-            dx = scriptRand(con, 0x10000) - 0x8000;
-            dy = scriptRand(con, 0x10000) - 0x8000;
-
-            idx = newPart * 5 + 1;
-            storeI32(con, 2, idx, dx);
-            storeI32(con, 2, idx + 1, dy);
-            storeI32(con, 2, idx + 2, maxLife);
-            storeI32(con, 2, idx + 3, x << 16);
-            storeI32(con, 2, idx + 4, y << 16);
-
-            newPart++;
-            if (newPart >= count) {
-                newPart = 0;
-            }
-        }
-        storeI32(con, 2, 0, newPart);
-    }
-
-    drawCount = 0;
-    for (ct=0; ct < count; ct++) {
-        srcIdx = ct * 5 + 1;
-
-        dx = loadI32(con, 2, srcIdx);
-        dy = loadI32(con, 2, srcIdx + 1);
-        life = loadI32(con, 2, srcIdx + 2);
-        posx = loadI32(con, 2, srcIdx + 3);
-        posy = loadI32(con, 2, srcIdx + 4);
-
-        if (life) {
-            if (posy < (480 << 16)) {
-                dstIdx = drawCount * 9;
-                c = 0xffafcf | ((life >> lifeShift) << 24);
-
-                storeU32(con, 1, dstIdx, c);
-                storeI32(con, 1, dstIdx + 1, posx);
-                storeI32(con, 1, dstIdx + 2, posy);
-
-                storeU32(con, 1, dstIdx + 3, c);
-                storeI32(con, 1, dstIdx + 4, posx + 0x10000);
-                storeI32(con, 1, dstIdx + 5, posy + dy * 4);
-
-                storeU32(con, 1, dstIdx + 6, c);
-                storeI32(con, 1, dstIdx + 7, posx - 0x10000);
-                storeI32(con, 1, dstIdx + 8, posy + dy * 4);
-                drawCount ++;
-            } else {
-                if (dy > 0) {
-                    dy = (-dy) >> 1;
-                }
-            }
-
-            posx = posx + dx;
-            posy = posy + dy;
-            dy = dy + 0x400;
-            life --;
-
-            //storeI32(con, 2, srcIdx, dx);
-            storeI32(con, 2, srcIdx + 1, dy);
-            storeI32(con, 2, srcIdx + 2, life);
-            storeI32(con, 2, srcIdx + 3, posx);
-            storeI32(con, 2, srcIdx + 4, posy);
-        }
-    }
-
-    drawTriangleArray(con, NAMED_PartBuffer, drawCount);
-    return 1;
-}
diff --git a/libs/rs/java/Film/res/raw/filmstrip.c b/libs/rs/java/Film/res/raw/filmstrip.c
deleted file mode 100644
index bf75675..0000000
--- a/libs/rs/java/Film/res/raw/filmstrip.c
+++ /dev/null
@@ -1,94 +0,0 @@
-// Fountain test script
-
-#pragma version(1)
-#pragma stateVertex(PVBackground)
-#pragma stateFragment(PFBackground)
-#pragma stateStore(PSBackground)
-
-#define STATE_TRIANGLE_OFFSET_COUNT 0
-#define STATE_LAST_FOCUS 1
-
-
-// The script enviroment has 3 env allocations.
-// bank0: (r) The enviroment structure
-// bank1: (r) The position information
-// bank2: (rw) The temporary texture state
-
-int lastFocus;
-
-int main(int index)
-{
-    float mat1[16];
-
-    float trans = Pos->translate;
-    float rot = Pos->rotate;
-
-    matrixLoadScale(mat1, 2.f, 2.f, 2.f);
-    matrixTranslate(mat1, 0.f, 0.f, trans);
-    matrixRotate(mat1, 90.f, 0.f, 0.f, 1.f);
-    matrixRotate(mat1, rot, 1.f, 0.f, 0.f);
-    vpLoadModelMatrix(mat1);
-
-    // Draw the lighting effect in the strip and fill the Z buffer.
-    drawSimpleMesh(NAMED_mesh);
-
-    // Start of images.
-    bindProgramStore(NAMED_PSImages);
-    bindProgramFragment(NAMED_PFImages);
-    bindProgramVertex(NAMED_PVImages);
-
-    float focusPos = Pos->focus;
-    int focusID = 0;
-    int lastFocusID = loadI32(2, STATE_LAST_FOCUS);
-    int imgCount = 13;
-
-    if (trans > (-.3f)) {
-        focusID = -1.0f - focusPos;
-        if (focusID >= imgCount) {
-            focusID = -1;
-        }
-    } else {
-        focusID = -1;
-    }
-
-    /*
-    if (focusID != lastFocusID) {
-        if (lastFocusID >= 0) {
-            uploadToTexture(con, env->tex[lastFocusID], 1);
-        }
-        if (focusID >= 0) {
-            uploadToTexture(con, env->tex[focusID], 0);
-        }
-    }
-    */
-    lastFocus = focusID;
-
-    int triangleOffsetsCount = Pos->triangleOffsetCount;
-
-    int imgId = 0;
-    for (imgId=1; imgId <= imgCount; imgId++) {
-        float pos = focusPos + imgId + 0.4f;
-        int offset = (int)floorf(pos * 2.f);
-        pos = pos - 0.75f;
-
-        offset = offset + triangleOffsetsCount / 2;
-        if (!((offset < 0) || (offset >= triangleOffsetsCount))) {
-            int start = offset -2;
-            int end = offset + 2;
-
-            if (start < 0) {
-                start = 0;
-            }
-            if (end >= triangleOffsetsCount) {
-                end = triangleOffsetsCount-1;
-            }
-
-            bindTexture(NAMED_PFImages, 0, loadI32(0, imgId - 1));
-            matrixLoadTranslate(mat1, -pos - loadF(5, triangleOffsetsCount / 2), 0, 0);
-            vpLoadTextureMatrix(mat1);
-            drawSimpleMeshRange(NAMED_mesh, loadI32(4, start), (loadI32(4, end) - loadI32(4, start)));
-        }
-    }
-    return 0;
-}
-
diff --git a/libs/rs/java/Film/src/com/android/film/Film.java b/libs/rs/java/Film/src/com/android/film/Film.java
deleted file mode 100644
index 6e99816..0000000
--- a/libs/rs/java/Film/src/com/android/film/Film.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2008 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.film;
-
-import android.renderscript.RSSurfaceView;
-import android.renderscript.RenderScript;
-
-import android.app.Activity;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.provider.Settings.System;
-import android.util.Config;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.Window;
-import android.widget.Button;
-import android.widget.ListView;
-
-import java.lang.Runtime;
-
-public class Film extends Activity {
-    //EventListener mListener = new EventListener();
-
-    private static final String LOG_TAG = "libRS_jni";
-    private static final boolean DEBUG  = false;
-    private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
-
-    private FilmView mView;
-
-    // get the current looper (from your Activity UI thread for instance
-
-
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        // Create our Preview view and set it as the content of our
-        // Activity
-        mView = new FilmView(this);
-        setContentView(mView);
-    }
-
-    @Override
-    protected void onResume() {
-        // Ideally a game should implement onResume() and onPause()
-        // to take appropriate action when the activity looses focus
-        super.onResume();
-        mView.onResume();
-    }
-
-    @Override
-    protected void onPause() {
-        // Ideally a game should implement onResume() and onPause()
-        // to take appropriate action when the activity looses focus
-        super.onPause();
-        mView.onPause();
-
-        Runtime.getRuntime().exit(0);
-    }
-
-
-    static void log(String message) {
-        if (LOG_ENABLED) {
-            Log.v(LOG_TAG, message);
-        }
-    }
-
-
-}
-
diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java
deleted file mode 100644
index 93438a0b..0000000
--- a/libs/rs/java/Film/src/com/android/film/FilmRS.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (C) 2008 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.film;
-
-import java.io.Writer;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.util.Log;
-
-import android.renderscript.*;
-
-public class FilmRS {
-    class StripPosition {
-        public float translate;
-        public float rotate;
-        public float focus;
-        public int triangleOffsetCount;
-    }
-    StripPosition mPos = new StripPosition();
-
-
-    private final int STATE_LAST_FOCUS = 1;
-
-    public FilmRS() {
-    }
-
-    public void init(RenderScriptGL rs, Resources res, int width, int height) {
-        mRS = rs;
-        mRes = res;
-        initRS();
-    }
-
-    public void setFilmStripPosition(int x, int y)
-    {
-        if (x < 50) {
-            x = 50;
-        }
-        if (x > 270) {
-            x = 270;
-        }
-
-        float anim = ((float)x-50) / 270.f;
-        mPos.translate = 2f * anim + 0.5f;   // translation
-        mPos.rotate = (anim * 40);  // rotation
-        mPos.focus = ((float)y) / 16.f - 10.f;  // focusPos
-        mPos.triangleOffsetCount = mFSM.mTriangleOffsetsCount;
-        mAllocPos.data(mPos);
-    }
-
-
-    private Resources mRes;
-    private RenderScriptGL mRS;
-    private Script mScriptStrip;
-    private Script mScriptImage;
-    private Sampler mSampler;
-    private ProgramStore mPSBackground;
-    private ProgramStore mPSImages;
-    private ProgramFragment mPFBackground;
-    private ProgramFragment mPFImages;
-    private ProgramVertex mPVBackground;
-    private ProgramVertex mPVImages;
-    private ProgramVertex.MatrixAllocation mPVA;
-    private Type mStripPositionType;
-
-    private Allocation mImages[];
-    private Allocation mAllocIDs;
-    private Allocation mAllocPos;
-    private Allocation mAllocState;
-    private Allocation mAllocPV;
-    private Allocation mAllocOffsetsTex;
-    private Allocation mAllocOffsets;
-
-    private SimpleMesh mMesh;
-    private Light mLight;
-
-    private FilmStripMesh mFSM;
-
-    private int[] mBufferIDs;
-    private float[] mBufferPos = new float[3];
-    private int[] mBufferState;
-
-    private void initPFS() {
-        ProgramStore.Builder b = new ProgramStore.Builder(mRS, null, null);
-
-        b.setDepthFunc(ProgramStore.DepthFunc.LESS);
-        b.setDitherEnable(true);
-        b.setDepthMask(true);
-        mPSBackground = b.create();
-        mPSBackground.setName("PSBackground");
-
-        b.setDepthFunc(ProgramStore.DepthFunc.EQUAL);
-        b.setDitherEnable(false);
-        b.setDepthMask(false);
-        b.setBlendFunc(ProgramStore.BlendSrcFunc.ONE,
-                       ProgramStore.BlendDstFunc.ONE);
-        mPSImages = b.create();
-        mPSImages.setName("PSImages");
-    }
-
-    private void initPF() {
-        Sampler.Builder bs = new Sampler.Builder(mRS);
-        bs.setMin(Sampler.Value.LINEAR);//_MIP_LINEAR);
-        bs.setMag(Sampler.Value.LINEAR);
-        bs.setWrapS(Sampler.Value.CLAMP);
-        bs.setWrapT(Sampler.Value.WRAP);
-        mSampler = bs.create();
-
-        ProgramFragment.Builder b = new ProgramFragment.Builder(mRS);
-        mPFBackground = b.create();
-        mPFBackground.setName("PFBackground");
-
-        b = new ProgramFragment.Builder(mRS);
-        b.setTexture(ProgramFragment.Builder.EnvMode.REPLACE,
-                     ProgramFragment.Builder.Format.RGBA, 0);
-        mPFImages = b.create();
-        mPFImages.bindSampler(mSampler, 0);
-        mPFImages.setName("PFImages");
-    }
-
-    private void initPV() {
-        mLight = (new Light.Builder(mRS)).create();
-        mLight.setPosition(0, -0.5f, -1.0f);
-
-        ProgramVertex.Builder pvb = new ProgramVertex.Builder(mRS, null, null);
-        //pvb.addLight(mLight);
-        mPVBackground = pvb.create();
-        mPVBackground.setName("PVBackground");
-
-        pvb = new ProgramVertex.Builder(mRS, null, null);
-        pvb.setTextureMatrixEnable(true);
-        mPVImages = pvb.create();
-        mPVImages.setName("PVImages");
-    }
-
-    private void loadImages() {
-        mBufferIDs = new int[13];
-        mImages = new Allocation[13];
-        mAllocIDs = Allocation.createSized(mRS,
-            Element.createUser(mRS, Element.DataType.FLOAT_32),
-            mBufferIDs.length);
-
-        Element ie = Element.createPixel(mRS, Element.DataType.UNSIGNED_5_6_5, Element.DataKind.PIXEL_RGB);
-        mImages[0] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p01, ie, true);
-        mImages[1] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p02, ie, true);
-        mImages[2] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p03, ie, true);
-        mImages[3] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p04, ie, true);
-        mImages[4] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p05, ie, true);
-        mImages[5] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p06, ie, true);
-        mImages[6] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p07, ie, true);
-        mImages[7] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p08, ie, true);
-        mImages[8] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p09, ie, true);
-        mImages[9] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p10, ie, true);
-        mImages[10] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p11, ie, true);
-        mImages[11] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p12, ie, true);
-        mImages[12] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p13, ie, true);
-
-        int black[] = new int[1024];
-        for(int ct=0; ct < mImages.length; ct++) {
-            Allocation.Adapter2D a = mImages[ct].createAdapter2D();
-
-            int size = 512;
-            int mip = 0;
-            while(size >= 2) {
-                a.subData(0, 0, 2, size, black);
-                a.subData(size-2, 0, 2, size, black);
-                a.subData(0, 0, size, 2, black);
-                a.subData(0, size-2, size, 2, black);
-                size >>= 1;
-                mip++;
-                a.setConstraint(Dimension.LOD, mip);
-            }
-
-            mImages[ct].uploadToTexture(1);
-            mBufferIDs[ct] = mImages[ct].getID();
-        }
-        mAllocIDs.data(mBufferIDs);
-    }
-
-    private void initState()
-    {
-        mBufferState = new int[10];
-        mAllocState = Allocation.createSized(mRS,
-            Element.createUser(mRS, Element.DataType.FLOAT_32),
-            mBufferState.length);
-        mBufferState[STATE_LAST_FOCUS] = -1;
-        mAllocState.data(mBufferState);
-    }
-
-    private void initRS() {
-        mFSM = new FilmStripMesh();
-        mMesh = mFSM.init(mRS);
-        mMesh.setName("mesh");
-
-        initPFS();
-        initPF();
-        initPV();
-
-        Log.e("rs", "Done loading named");
-
-        ScriptC.Builder sb = new ScriptC.Builder(mRS);
-        sb.setScript(mRes, R.raw.filmstrip);
-        mScriptStrip = sb.create();
-
-        mAllocPos = Allocation.createTyped(mRS, mStripPositionType);
-
-        loadImages();
-        initState();
-
-        mPVA = new ProgramVertex.MatrixAllocation(mRS);
-        mPVBackground.bindAllocation(mPVA);
-        mPVImages.bindAllocation(mPVA);
-        mPVA.setupProjectionNormalized(320, 480);
-
-
-        mScriptStrip.bindAllocation(mAllocIDs, 0);
-        mScriptStrip.bindAllocation(mAllocPos, 1);
-        mScriptStrip.bindAllocation(mAllocState, 2);
-        mScriptStrip.bindAllocation(mPVA.mAlloc, 3);
-
-
-        mAllocOffsets = Allocation.createSized(mRS,
-            Element.createUser(mRS, Element.DataType.SIGNED_32), mFSM.mTriangleOffsets.length);
-        mAllocOffsets.data(mFSM.mTriangleOffsets);
-        mScriptStrip.bindAllocation(mAllocOffsets, 4);
-
-        mAllocOffsetsTex = Allocation.createSized(mRS,
-            Element.createUser(mRS, Element.DataType.FLOAT_32), mFSM.mTriangleOffsetsTex.length);
-        mAllocOffsetsTex.data(mFSM.mTriangleOffsetsTex);
-        mScriptStrip.bindAllocation(mAllocOffsetsTex, 5);
-
-        setFilmStripPosition(0, 0);
-        mRS.contextBindRootScript(mScriptStrip);
-    }
-}
-
-
-
diff --git a/libs/rs/java/Film/src/com/android/film/FilmStripMesh.java b/libs/rs/java/Film/src/com/android/film/FilmStripMesh.java
deleted file mode 100644
index 448cce0..0000000
--- a/libs/rs/java/Film/src/com/android/film/FilmStripMesh.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright (C) 2009 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.film;
-
-import java.io.Writer;
-import java.lang.Math;
-import android.util.Log;
-
-import android.renderscript.RenderScript;
-import android.renderscript.SimpleMesh;
-
-
-class FilmStripMesh {
-
-    class Vertex {
-        float nx;
-        float ny;
-        float nz;
-        float s;
-        float t;
-        float x;
-        float y;
-        float z;
-
-        Vertex() {
-            nx = 0;
-            ny = 0;
-            nz = 0;
-            s = 0;
-            t = 0;
-            x = 0;
-            y = 0;
-            z = 0;
-        }
-
-        void xyz(float _x, float _y, float _z) {
-            x = _x;
-            y = _y;
-            z = _z;
-        }
-
-        void nxyz(float _x, float _y, float _z) {
-            nx = _x;
-            ny = _y;
-            nz = _z;
-        }
-
-        void st(float _s, float _t) {
-            s = _s;
-            t = _t;
-        }
-
-        void computeNorm(Vertex v1, Vertex v2) {
-            float dx = v1.x - v2.x;
-            float dy = v1.y - v2.y;
-            float dz = v1.z - v2.z;
-            float len = (float)java.lang.Math.sqrt(dx*dx + dy*dy + dz*dz);
-            dx /= len;
-            dy /= len;
-            dz /= len;
-
-            nx = dx * dz;
-            ny = dy * dz;
-            nz = (float)java.lang.Math.sqrt(dx*dx + dy*dy);
-
-            len = (float)java.lang.Math.sqrt(nx*nx + ny*ny + nz*nz);
-            nx /= len;
-            ny /= len;
-            nz /= len;
-        }
-    }
-
-    int[] mTriangleOffsets;
-    float[] mTriangleOffsetsTex;
-    int mTriangleOffsetsCount;
-
-    SimpleMesh init(RenderScript rs)
-    {
-        float vtx[] = new float[] {
-            60.431003f, 124.482050f,
-            60.862074f, 120.872604f,
-            61.705303f, 117.336662f,
-            62.949505f, 113.921127f,
-            64.578177f, 110.671304f,
-            66.569716f, 107.630302f,
-            68.897703f, 104.838457f,
-            71.531259f, 102.332803f,
-            74.435452f, 100.146577f,
-            77.571757f, 98.308777f,
-            80.898574f, 96.843781f,
-            84.371773f, 95.771023f,
-            87.945283f, 95.104731f,
-            98.958994f, 95.267098f,
-            109.489523f, 98.497596f,
-            118.699582f, 104.539366f,
-            125.856872f, 112.912022f,
-            130.392311f, 122.949849f,
-            131.945283f, 133.854731f,
-            130.392311f, 144.759613f,
-            125.856872f, 154.797439f,
-            118.699582f, 163.170096f,
-            109.489523f, 169.211866f,
-            98.958994f, 172.442364f,
-            87.945283f, 172.604731f,
-            72.507313f, 172.672927f,
-            57.678920f, 168.377071f,
-            44.668135f, 160.067134f,
-            34.534908f, 148.420104f,
-            28.104767f, 134.384831f,
-            25.901557f, 119.104731f,
-            28.104767f, 103.824631f,
-            34.534908f, 89.789358f,
-            44.668135f, 78.142327f,
-            57.678920f, 69.832390f,
-            72.507313f, 65.536534f,
-            87.945283f, 65.604731f,
-            106.918117f, 65.688542f,
-            125.141795f, 60.409056f,
-            141.131686f, 50.196376f,
-            153.585137f, 35.882502f,
-            161.487600f, 18.633545f,
-            164.195283f, -0.145269f,
-            161.487600f, -18.924084f,
-            153.585137f, -36.173040f,
-            141.131686f, -50.486914f,
-            125.141795f, -60.699594f,
-            106.918117f, -65.979081f,
-            87.945283f, -65.895269f,
-            80f, -65.895269f,
-            60f, -65.895269f,
-            40f, -65.895269f,
-            20f, -65.895269f,
-            0f, -65.895269f,
-            -20f, -65.895269f,
-            -40f, -65.895269f,
-            -60f, -65.895269f,
-            -80f, -65.895269f,
-            -87.945283f, -65.895269f,
-            -106.918117f, -65.979081f,
-            -125.141795f, -60.699594f,
-            -141.131686f, -50.486914f,
-            -153.585137f, -36.173040f,
-            -161.487600f, -18.924084f,
-            -164.195283f, -0.145269f,
-            -161.487600f, 18.633545f,
-             -153.585137f, 35.882502f,
-             -141.131686f, 50.196376f,
-             -125.141795f, 60.409056f,
-             -106.918117f, 65.688542f,
-             -87.945283f, 65.604731f,
-             -72.507313f, 65.536534f,
-             -57.678920f, 69.832390f,
-             -44.668135f, 78.142327f,
-             -34.534908f, 89.789358f,
-             -28.104767f, 103.824631f,
-             -25.901557f, 119.104731f,
-             -28.104767f, 134.384831f,
-             -34.534908f, 148.420104f,
-             -44.668135f, 160.067134f,
-             -57.678920f, 168.377071f,
-             -72.507313f, 172.672927f,
-             -87.945283f, 172.604731f,
-             -98.958994f, 172.442364f,
-             -109.489523f, 169.211866f,
-             -118.699582f, 163.170096f,
-             -125.856872f, 154.797439f,
-             -130.392311f, 144.759613f,
-             -131.945283f, 133.854731f,
-             -130.392311f, 122.949849f,
-             -125.856872f, 112.912022f,
-             -118.699582f, 104.539366f,
-             -109.489523f, 98.497596f,
-             -98.958994f, 95.267098f,
-             -87.945283f, 95.104731f,
-             -84.371773f, 95.771023f,
-             -80.898574f, 96.843781f,
-             -77.571757f, 98.308777f,
-             -74.435452f, 100.146577f,
-             -71.531259f, 102.332803f,
-             -68.897703f, 104.838457f,
-             -66.569716f, 107.630302f,
-             -64.578177f, 110.671304f,
-             -62.949505f, 113.921127f,
-             -61.705303f, 117.336662f,
-             -60.862074f, 120.872604f,
-             -60.431003f, 124.482050f
-        };
-
-
-        mTriangleOffsets = new int[64];
-        mTriangleOffsetsTex = new float[64];
-
-        mTriangleOffsets[0] = 0;
-        mTriangleOffsetsCount = 1;
-
-        Vertex t = new Vertex();
-        t.nxyz(1, 0, 0);
-        int count = vtx.length / 2;
-
-        SimpleMesh.TriangleMeshBuilder tm = new SimpleMesh.TriangleMeshBuilder(
-            rs, 3,
-            SimpleMesh.TriangleMeshBuilder.NORMAL | SimpleMesh.TriangleMeshBuilder.TEXTURE_0);
-
-        float runningS = 0;
-        for (int ct=0; ct < (count-1); ct++) {
-            t.x = -vtx[ct*2] / 100.f;
-            t.z = vtx[ct*2+1] / 100.f;
-            t.s = runningS;
-            t.nx =  (vtx[ct*2+3] - vtx[ct*2 +1]);
-            t.ny =  (vtx[ct*2+2] - vtx[ct*2   ]);
-            float len = (float)java.lang.Math.sqrt(t.nx * t.nx + t.ny * t.ny);
-            runningS += len / 100;
-            t.nx /= len;
-            t.ny /= len;
-            t.y = -0.5f;
-            t.t = 0;
-            tm.setNormal(t.nx, t.ny, t.nz);
-            tm.setTexture(t.s, t.t);
-            tm.addVertex(t.x, t.y, t.z);
-            //android.util.Log.e("rs", "vtx x="+t.x+" y="+t.y+" z="+t.z+" s="+t.s+" t="+t.t);
-            t.y = .5f;
-            t.t = 1;
-            tm.setTexture(t.s, t.t);
-            tm.addVertex(t.x, t.y, t.z);
-            //android.util.Log.e("rs", "vtx x="+t.x+" y="+t.y+" z="+t.z+" s="+t.s+" t="+t.t);
-
-            if((runningS*2) > mTriangleOffsetsCount) {
-                mTriangleOffsets[mTriangleOffsetsCount] = ct*2 * 3;
-                mTriangleOffsetsTex[mTriangleOffsetsCount] = t.s;
-                mTriangleOffsetsCount ++;
-            }
-        }
-
-        count = (count * 2 - 2);
-        for (int ct=0; ct < (count-2); ct+= 2) {
-            tm.addTriangle(ct, ct+1, ct+2);
-            tm.addTriangle(ct+1, ct+3, ct+2);
-        }
-        return tm.create();
-    }
-
-
-}
-
diff --git a/libs/rs/java/Film/src/com/android/film/FilmView.java b/libs/rs/java/Film/src/com/android/film/FilmView.java
deleted file mode 100644
index 5bc2811..0000000
--- a/libs/rs/java/Film/src/com/android/film/FilmView.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2008 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.film;
-
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.concurrent.Semaphore;
-
-import android.renderscript.RSSurfaceView;
-import android.renderscript.RenderScript;
-import android.renderscript.RenderScriptGL;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.Message;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-
-public class FilmView extends RSSurfaceView {
-
-    public FilmView(Context context) {
-        super(context);
-        //setFocusable(true);
-    }
-
-    private RenderScriptGL mRS;
-    private FilmRS mRender;
-
-
-    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
-        super.surfaceChanged(holder, format, w, h);
-        if (mRS == null) {
-            mRS = createRenderScript(true);
-            mRS.contextSetSurface(w, h, holder.getSurface());
-            mRender = new FilmRS();
-            mRender.init(mRS, getResources(), w, h);
-        }
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        if(mRS != null) {
-            mRS = null;
-            destroyRenderScript();
-        }
-    }
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event)
-    {
-        // break point at here
-        // this method doesn't work when 'extends View' include 'extends ScrollView'.
-        return super.onKeyDown(keyCode, event);
-    }
-
-
-    @Override
-    public boolean onTouchEvent(MotionEvent ev)
-    {
-        boolean ret = true;
-        int act = ev.getAction();
-        if (act == ev.ACTION_UP) {
-            ret = false;
-        }
-        mRender.setFilmStripPosition((int)ev.getX(), (int)ev.getY() / 5);
-        return ret;
-    }
-}
-
-
diff --git a/libs/rs/java/Fountain/res/raw/fountain.rs b/libs/rs/java/Fountain/res/raw/fountain.rs
index c44a796a..4b56b1b 100644
--- a/libs/rs/java/Fountain/res/raw/fountain.rs
+++ b/libs/rs/java/Fountain/res/raw/fountain.rs
@@ -9,7 +9,7 @@
 
 static int newPart = 0;
 
-float4 partColor;
+static float4 partColor;
 rs_mesh partMesh;
 
 typedef struct __attribute__((packed, aligned(4))) Point {
@@ -44,22 +44,18 @@
 
 #pragma rs export_func(addParticles)
 
-void addParticles(int rate, int x, int y)
+void addParticles(int rate, float x, float y, int newColor)
 {
-    //rsDebug("partColor", partColor);
-    //rsDebug("partColor x", partColor.x);
-    //rsDebug("partColor y", partColor.y);
-    //rsDebug("partColor z", partColor.z);
-    //rsDebug("partColor w", partColor.w);
-
+    if (newColor) {
+        partColor.x = rsRand(0.5f, 1.0f);
+        partColor.y = rsRand(1.0f);
+        partColor.z = rsRand(1.0f);
+    }
     float rMax = ((float)rate) * 0.005f;
     int size = rsAllocationGetDimX(rsGetAllocation(point));
+    uchar4 c = rsPackColorTo8888(partColor);
 
-    uchar4 c = rsPackColorTo8888(partColor.x, partColor.y, partColor.z);
-
-    //rsDebug("color ", ((int *)&c)[0]);
     Point_t * np = &point[newPart];
-
     float2 p = {x, y};
     while (rate--) {
         float angle = rsRand(3.14f * 2.f);
diff --git a/libs/rs/java/Fountain/res/raw/fountain_bc.bc b/libs/rs/java/Fountain/res/raw/fountain_bc.bc
index f90d8f1..66d50b3 100644
--- a/libs/rs/java/Fountain/res/raw/fountain_bc.bc
+++ b/libs/rs/java/Fountain/res/raw/fountain_bc.bc
Binary files differ
diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java
index 7a7866d..6f4737f 100644
--- a/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java
+++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java
@@ -48,18 +48,10 @@
         mRS.contextBindRootScript(mScript);
     }
 
-    Float4 tmpColor = new Float4();
     boolean holdingColor = false;
-    java.util.Random mRand = new java.util.Random();
     public void newTouchPosition(int x, int y, int rate) {
         if (rate > 0) {
-            if (!holdingColor) {
-                tmpColor.x = mRand.nextFloat() * 0.5f + 0.5f;
-                tmpColor.y = mRand.nextFloat();
-                tmpColor.z = mRand.nextFloat();
-                mScript.set_partColor(tmpColor);
-            }
-            mScript.invoke_addParticles(rate, x, y);
+            mScript.invoke_addParticles(rate, x, y, !holdingColor ? 1 : 0);
             holdingColor = true;
         } else {
             holdingColor = false;
diff --git a/libs/rs/java/Fountain/src/com/android/fountain/ScriptC_Fountain.java b/libs/rs/java/Fountain/src/com/android/fountain/ScriptC_Fountain.java
index 88062e8..66b5b98 100644
--- a/libs/rs/java/Fountain/src/com/android/fountain/ScriptC_Fountain.java
+++ b/libs/rs/java/Fountain/src/com/android/fountain/ScriptC_Fountain.java
@@ -63,11 +63,12 @@
     }
 
     private final static int mExportFuncIdx_addParticles = 0;
-    public void invoke_addParticles(int rate, int x, int y) {
-        FieldPacker addParticles_fp = new FieldPacker(12);
+    public void invoke_addParticles(int rate, float x, float y, int newColor) {
+        FieldPacker addParticles_fp = new FieldPacker(16);
         addParticles_fp.addI32(rate);
-        addParticles_fp.addI32(x);
-        addParticles_fp.addI32(y);
+        addParticles_fp.addF32(x);
+        addParticles_fp.addF32(y);
+        addParticles_fp.addI32(newColor);
         invoke(mExportFuncIdx_addParticles, addParticles_fp);
     }
 
diff --git a/libs/rs/java/ImageProcessing/res/raw/threshold.rs b/libs/rs/java/ImageProcessing/res/raw/threshold.rs
index 93a1a36..a8eb164 100644
--- a/libs/rs/java/ImageProcessing/res/raw/threshold.rs
+++ b/libs/rs/java/ImageProcessing/res/raw/threshold.rs
@@ -10,13 +10,9 @@
 int width;
 int radius;
 
-typedef struct c4u_s {
-    uint8_t r, g, b, a;
-} c4u_t;
-
-c4u_t * InPixel;
-c4u_t * OutPixel;
-c4u_t * ScratchPixel;
+uchar4 * InPixel;
+uchar4 * OutPixel;
+uchar4 * ScratchPixel;
 
 float inBlack;
 float outBlack;
@@ -31,7 +27,7 @@
 static float overInWMinInB;
 //static float3 gammaV;
 
-#pragma rs export_var(height, width, radius, InPixel, OutPixel, ScratchPixel, inBlack, outBlack, inWhite, outWhite, gamma, saturation)
+#pragma rs export_var(height, width, radius, InPixel, OutPixel, ScratchPixel, inBlack, outBlack, inWhite, outWhite, gamma, saturation, InPixel, OutPixel, ScratchPixel)
 #pragma rs export_func(filter, filterBenchmark);
 
 // Store our coefficients here
@@ -166,19 +162,21 @@
 
     for(h = 0; h < height; h ++) {
         for(w = 0; w < width; w ++) {
-            c4u_t *input = InPixel + h*width + w;
+            uchar4 *input = InPixel + h*width + w;
 
-            currentPixel.x = (float)(input->r);
-            currentPixel.y = (float)(input->g);
-            currentPixel.z = (float)(input->b);
+            //currentPixel.xyz = convert_float3(input.xyz);
+            currentPixel.x = (float)(input->x);
+            currentPixel.y = (float)(input->y);
+            currentPixel.z = (float)(input->z);
 
             currentPixel = levelsSaturation(currentPixel);
 
-            c4u_t *output = OutPixel + h*width + w;
-            output->r = (uint8_t)currentPixel.x;
-            output->g = (uint8_t)currentPixel.y;
-            output->b = (uint8_t)currentPixel.z;
-            output->a = input->a;
+            uchar4 *output = OutPixel + h*width + w;
+            //output.xyz = convert_uchar3(currentPixel.xyz);
+            output->x = (uint8_t)currentPixel.x;
+            output->y = (uint8_t)currentPixel.y;
+            output->z = (uint8_t)currentPixel.z;
+            output->w = input->w;
         }
     }
     rsSendToClient(&count, 1, 4, 0);
@@ -205,21 +203,21 @@
                     validW = width - 1;
                 }
 
-                c4u_t *input = InPixel + h*width + validW;
+                uchar4 *input = InPixel + h*width + validW;
 
                 float weight = gaussian[r + radius];
-                currentPixel.x = (float)(input->r);
-                currentPixel.y = (float)(input->g);
-                currentPixel.z = (float)(input->b);
+                currentPixel.x = (float)(input->x);
+                currentPixel.y = (float)(input->y);
+                currentPixel.z = (float)(input->z);
                 //currentPixel.w = (float)(input->a);
 
                 blurredPixel += currentPixel*weight;
             }
 
-            c4u_t *output = ScratchPixel + h*width + w;
-            output->r = (uint8_t)blurredPixel.x;
-            output->g = (uint8_t)blurredPixel.y;
-            output->b = (uint8_t)blurredPixel.z;
+            uchar4 *output = ScratchPixel + h*width + w;
+            output->x = (uint8_t)blurredPixel.x;
+            output->y = (uint8_t)blurredPixel.y;
+            output->z = (uint8_t)blurredPixel.z;
             //output->a = (uint8_t)blurredPixel.w;
         }
     }
@@ -246,12 +244,12 @@
                     validW = width - 1;
                 }
 
-                c4u_t *input = InPixel + h*width + validW;
+                uchar4 *input = InPixel + h*width + validW;
 
                 float weight = gaussian[r + radius];
-                currentPixel.x = (float)(input->r);
-                currentPixel.y = (float)(input->g);
-                currentPixel.z = (float)(input->b);
+                currentPixel.x = (float)(input->x);
+                currentPixel.y = (float)(input->y);
+                currentPixel.z = (float)(input->z);
                 //currentPixel.w = (float)(input->a);
 
                 blurredPixel += currentPixel*weight;
@@ -259,10 +257,10 @@
 
             blurredPixel = levelsSaturation(blurredPixel);
 
-            c4u_t *output = ScratchPixel + h*width + w;
-            output->r = (uint8_t)blurredPixel.x;
-            output->g = (uint8_t)blurredPixel.y;
-            output->b = (uint8_t)blurredPixel.z;
+            uchar4 *output = ScratchPixel + h*width + w;
+            output->x = (uint8_t)blurredPixel.x;
+            output->y = (uint8_t)blurredPixel.y;
+            output->z = (uint8_t)blurredPixel.z;
             //output->a = (uint8_t)blurredPixel.w;
         }
     }
@@ -287,23 +285,23 @@
                     validH = height - 1;
                 }
 
-                c4u_t *input = ScratchPixel + validH*width + w;
+                uchar4 *input = ScratchPixel + validH*width + w;
 
                 float weight = gaussian[r + radius];
 
-                currentPixel.x = (float)(input->r);
-                currentPixel.y = (float)(input->g);
-                currentPixel.z = (float)(input->b);
+                currentPixel.x = (float)(input->x);
+                currentPixel.y = (float)(input->y);
+                currentPixel.z = (float)(input->z);
                 //currentPixel.w = (float)(input->a);
 
                 blurredPixel += currentPixel*weight;
             }
 
-            c4u_t *output = OutPixel + h*width + w;
+            uchar4 *output = OutPixel + h*width + w;
 
-            output->r = (uint8_t)blurredPixel.x;
-            output->g = (uint8_t)blurredPixel.y;
-            output->b = (uint8_t)blurredPixel.z;
+            output->x = (uint8_t)blurredPixel.x;
+            output->y = (uint8_t)blurredPixel.y;
+            output->z = (uint8_t)blurredPixel.z;
             //output->a = (uint8_t)blurredPixel.w;
         }
     }
diff --git a/libs/rs/java/ImageProcessing/res/raw/threshold_bc.bc b/libs/rs/java/ImageProcessing/res/raw/threshold_bc.bc
index 4cf0629..fd60f76 100644
--- a/libs/rs/java/ImageProcessing/res/raw/threshold_bc.bc
+++ b/libs/rs/java/ImageProcessing/res/raw/threshold_bc.bc
Binary files differ
diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
index b39d141..7bf6596 100644
--- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
+++ b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
@@ -285,7 +285,7 @@
 
             long t = java.lang.System.currentTimeMillis();
             if (true) {
-                mScript.invokable_Filter();
+                mScript.invoke_filter();
                 mRS.finish();
             } else {
                 javaFilter();
@@ -355,7 +355,7 @@
 
     public void surfaceCreated(SurfaceHolder holder) {
         createScript();
-        mScript.invokable_Filter();
+        mScript.invoke_filter();
         mRS.finish();
     }
 
@@ -373,7 +373,7 @@
         mOutPixelsAllocation = Allocation.createBitmapRef(mRS, mBitmapOut);
         mScratchPixelsAllocation = Allocation.createBitmapRef(mRS, mBitmapScratch);
 
-        mScript = new ScriptC_Threshold(mRS, getResources(), false);
+        mScript = new ScriptC_Threshold(mRS, getResources(), R.raw.threshold_bc, false);
         mScript.set_width(mBitmapIn.getWidth());
         mScript.set_height(mBitmapIn.getHeight());
         mScript.set_radius(mRadius);
@@ -413,7 +413,7 @@
 
         long t = java.lang.System.currentTimeMillis();
 
-        mScript.invokable_FilterBenchmark();
+        mScript.invoke_filterBenchmark();
         mRS.finish();
 
         t = java.lang.System.currentTimeMillis() - t;
@@ -426,7 +426,7 @@
         mRadius = oldRadius;
         mScript.set_radius(mRadius);
 
-        mScript.invokable_Filter();
+        mScript.invoke_filter();
         mRS.finish();
     }
 }
diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ScriptC_Threshold.java b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ScriptC_Threshold.java
index 42adb27..ea363d3 100644
--- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ScriptC_Threshold.java
+++ b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ScriptC_Threshold.java
@@ -1,115 +1,175 @@
+/*
+ * Copyright (C) 2010 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.rs.image;
 
-import android.content.res.Resources;
 import android.renderscript.*;
+import android.content.res.Resources;
 import android.util.Log;
 
-public class ScriptC_Threshold
-    extends android.renderscript.ScriptC
-{
-    private final static int mFieldIndex_height = 0;
-    private final static int mFieldIndex_width = 1;
-    private final static int mFieldIndex_radius = 2;
-    private final static int mFieldIndex_InPixel = 3;
-    private final static int mFieldIndex_OutPixel = 4;
-    private final static int mFieldIndex_ScratchPixel = 5;
-
-    private final static int mFieldIndex_inBlack = 6;
-    private final static int mFieldIndex_outBlack = 7;
-    private final static int mFieldIndex_inWhite = 8;
-    private final static int mFieldIndex_outWhite = 9;
-    private final static int mFieldIndex_gamma = 10;
-
-    private final static int mFieldIndex_saturation = 11;
-    private final static int mFieldIndex_hue = 12;
-
-    private Allocation mField_InPixel;
-    private Allocation mField_OutPixel;
-    private Allocation mField_ScratchPixel;
-
-    public ScriptC_Threshold(RenderScript rs, Resources resources, boolean isRoot) {
-        super(rs, resources, R.raw.threshold_bc, isRoot);
+public class ScriptC_Threshold extends ScriptC {
+    // Constructor
+    public  ScriptC_Threshold(RenderScript rs, Resources resources, int id, boolean isRoot) {
+        super(rs, resources, id, isRoot);
     }
 
-    public void bind_InPixel(Allocation f) {
-        if (f != null) {
-            //if (f.getType().getElement() != Element.ATTRIB_COLOR_U8_4(mRS)) {
-                //throw new IllegalArgumentException("Element type mismatch.");
-            //}
-        }
-        bindAllocation(f, mFieldIndex_InPixel);
-        mField_InPixel = f;
-    }
-    public Allocation get_InPixel() {
-        return mField_InPixel;
-    }
-
-    public void bind_OutPixel(Allocation f) {
-        if (f != null) {
-            //if (f.getType().getElement() != Element.ATTRIB_COLOR_U8_4(mRS)) {
-                //throw new IllegalArgumentException("Element type mismatch.");
-            //}
-        }
-        bindAllocation(f, mFieldIndex_OutPixel);
-        mField_OutPixel = f;
-    }
-    public void bind_ScratchPixel(Allocation f) {
-        if (f != null) {
-            //if (f.getType().getElement() != Element.ATTRIB_COLOR_U8_4(mRS)) {
-                //throw new IllegalArgumentException("Element type mismatch.");
-            //}
-        }
-        bindAllocation(f, mFieldIndex_ScratchPixel);
-        mField_ScratchPixel = f;
-    }
-    public Allocation get_OutPixel() {
-        return mField_OutPixel;
-    }
-
+    private final static int mExportVarIdx_height = 0;
+    private int mExportVar_height;
     public void set_height(int v) {
-        setVar(mFieldIndex_height, v);
+        mExportVar_height = v;
+        setVar(mExportVarIdx_height, v);
     }
 
+    public int get_height() {
+        return mExportVar_height;
+    }
+
+    private final static int mExportVarIdx_width = 1;
+    private int mExportVar_width;
     public void set_width(int v) {
-        setVar(mFieldIndex_width, v);
+        mExportVar_width = v;
+        setVar(mExportVarIdx_width, v);
     }
 
+    public int get_width() {
+        return mExportVar_width;
+    }
+
+    private final static int mExportVarIdx_radius = 2;
+    private int mExportVar_radius;
     public void set_radius(int v) {
-        setVar(mFieldIndex_radius, v);
+        mExportVar_radius = v;
+        setVar(mExportVarIdx_radius, v);
     }
 
+    public int get_radius() {
+        return mExportVar_radius;
+    }
+
+    private final static int mExportVarIdx_InPixel = 3;
+    private Allocation mExportVar_InPixel;
+    public void bind_InPixel(Allocation v) {
+        mExportVar_InPixel = v;
+        if(v == null) bindAllocation(null, mExportVarIdx_InPixel);
+        else bindAllocation(v, mExportVarIdx_InPixel);
+    }
+
+    public Allocation get_InPixel() {
+        return mExportVar_InPixel;
+    }
+
+    private final static int mExportVarIdx_OutPixel = 4;
+    private Allocation mExportVar_OutPixel;
+    public void bind_OutPixel(Allocation v) {
+        mExportVar_OutPixel = v;
+        if(v == null) bindAllocation(null, mExportVarIdx_OutPixel);
+        else bindAllocation(v, mExportVarIdx_OutPixel);
+    }
+
+    public Allocation get_OutPixel() {
+        return mExportVar_OutPixel;
+    }
+
+    private final static int mExportVarIdx_ScratchPixel = 5;
+    private Allocation mExportVar_ScratchPixel;
+    public void bind_ScratchPixel(Allocation v) {
+        mExportVar_ScratchPixel = v;
+        if(v == null) bindAllocation(null, mExportVarIdx_ScratchPixel);
+        else bindAllocation(v, mExportVarIdx_ScratchPixel);
+    }
+
+    public Allocation get_ScratchPixel() {
+        return mExportVar_ScratchPixel;
+    }
+
+    private final static int mExportVarIdx_inBlack = 6;
+    private float mExportVar_inBlack;
     public void set_inBlack(float v) {
-        setVar(mFieldIndex_inBlack, v);
+        mExportVar_inBlack = v;
+        setVar(mExportVarIdx_inBlack, v);
     }
+
+    public float get_inBlack() {
+        return mExportVar_inBlack;
+    }
+
+    private final static int mExportVarIdx_outBlack = 7;
+    private float mExportVar_outBlack;
     public void set_outBlack(float v) {
-        setVar(mFieldIndex_outBlack, v);
+        mExportVar_outBlack = v;
+        setVar(mExportVarIdx_outBlack, v);
     }
+
+    public float get_outBlack() {
+        return mExportVar_outBlack;
+    }
+
+    private final static int mExportVarIdx_inWhite = 8;
+    private float mExportVar_inWhite;
     public void set_inWhite(float v) {
-        setVar(mFieldIndex_inWhite, v);
+        mExportVar_inWhite = v;
+        setVar(mExportVarIdx_inWhite, v);
     }
+
+    public float get_inWhite() {
+        return mExportVar_inWhite;
+    }
+
+    private final static int mExportVarIdx_outWhite = 9;
+    private float mExportVar_outWhite;
     public void set_outWhite(float v) {
-        setVar(mFieldIndex_outWhite, v);
+        mExportVar_outWhite = v;
+        setVar(mExportVarIdx_outWhite, v);
     }
+
+    public float get_outWhite() {
+        return mExportVar_outWhite;
+    }
+
+    private final static int mExportVarIdx_gamma = 10;
+    private float mExportVar_gamma;
     public void set_gamma(float v) {
-        setVar(mFieldIndex_gamma, v);
+        mExportVar_gamma = v;
+        setVar(mExportVarIdx_gamma, v);
     }
 
+    public float get_gamma() {
+        return mExportVar_gamma;
+    }
+
+    private final static int mExportVarIdx_saturation = 11;
+    private float mExportVar_saturation;
     public void set_saturation(float v) {
-        setVar(mFieldIndex_saturation, v);
-    }
-    public void set_hue(float v) {
-        setVar(mFieldIndex_hue, v);
+        mExportVar_saturation = v;
+        setVar(mExportVarIdx_saturation, v);
     }
 
-    private final static int mInvokableIndex_Filter = 4;
-    public void invokable_Filter() {
-        invoke(mInvokableIndex_Filter);
+    public float get_saturation() {
+        return mExportVar_saturation;
     }
 
-    private final static int mInvokableIndex_FilterBenchmark = 5;
-    public void invokable_FilterBenchmark() {
-        invoke(mInvokableIndex_FilterBenchmark);
+    private final static int mExportFuncIdx_filter = 0;
+    public void invoke_filter() {
+        invoke(mExportFuncIdx_filter);
     }
+
+    private final static int mExportFuncIdx_filterBenchmark = 1;
+    public void invoke_filterBenchmark() {
+        invoke(mExportFuncIdx_filterBenchmark);
+    }
+
 }
 
diff --git a/libs/rs/java/ModelViewer/res/raw/modelviewer_bc.bc b/libs/rs/java/ModelViewer/res/raw/modelviewer_bc.bc
index b02250b..367a3f4 100644
--- a/libs/rs/java/ModelViewer/res/raw/modelviewer_bc.bc
+++ b/libs/rs/java/ModelViewer/res/raw/modelviewer_bc.bc
Binary files differ
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/ModelViewerRS.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/ModelViewerRS.java
index dd52955..e581520 100644
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/ModelViewerRS.java
+++ b/libs/rs/java/ModelViewer/src/com/android/modelviewer/ModelViewerRS.java
@@ -57,7 +57,7 @@
 
     private SimpleMesh mMesh;
 
-    private ScriptC_ModelViewer mScript;
+    private ScriptC_Modelviewer mScript;
 
     int mLastX;
     int mLastY;
@@ -130,7 +130,7 @@
 
     private void initRS() {
 
-        mScript = new ScriptC_ModelViewer(mRS, mRes, true);
+        mScript = new ScriptC_Modelviewer(mRS, mRes, R.raw.modelviewer_bc, true);
 
         initPFS();
         initPF();
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/ScriptC_ModelViewer.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/ScriptC_ModelViewer.java
deleted file mode 100644
index f617c77..0000000
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/ScriptC_ModelViewer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-
-package com.android.modelviewer;
-
-import android.content.res.Resources;
-import android.renderscript.*;
-import android.util.Log;
-
-
-
-public class ScriptC_ModelViewer
-    extends android.renderscript.ScriptC
-{
-    public ScriptC_ModelViewer(RenderScript rs, Resources resources, boolean isRoot) {
-        super(rs, resources, R.raw.modelviewer_bc, isRoot);
-    }
-
-    public void set_gPVBackground(ProgramVertex v) {
-        setVar(0, v.getID());
-    }
-
-    public void set_gPFBackground(ProgramFragment v) {
-        setVar(1, v.getID());
-    }
-
-    public void set_gTGrid(Allocation v) {
-        setVar(2, v.getID());
-    }
-
-    public void set_gTestMesh(SimpleMesh v) {
-        setVar(3, v.getID());
-    }
-
-    public void set_gPFSBackground(ProgramStore v) {
-        setVar(4, v.getID());
-    }
-
-    public void set_gRotate(float v) {
-        setVar(5, v);
-    }
-
-}
-
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/ScriptC_Modelviewer.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/ScriptC_Modelviewer.java
new file mode 100644
index 0000000..7a965b8
--- /dev/null
+++ b/libs/rs/java/ModelViewer/src/com/android/modelviewer/ScriptC_Modelviewer.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2010 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.modelviewer;
+
+import android.renderscript.*;
+import android.content.res.Resources;
+import android.util.Log;
+
+public class ScriptC_Modelviewer extends ScriptC {
+    // Constructor
+    public  ScriptC_Modelviewer(RenderScript rs, Resources resources, int id, boolean isRoot) {
+        super(rs, resources, id, isRoot);
+    }
+
+    private final static int mExportVarIdx_gPVBackground = 0;
+    private ProgramVertex mExportVar_gPVBackground;
+    public void set_gPVBackground(ProgramVertex v) {
+        mExportVar_gPVBackground = v;
+        setVar(mExportVarIdx_gPVBackground, (v == null) ? 0 : v.getID());
+    }
+
+    public ProgramVertex get_gPVBackground() {
+        return mExportVar_gPVBackground;
+    }
+
+    private final static int mExportVarIdx_gPFBackground = 1;
+    private ProgramFragment mExportVar_gPFBackground;
+    public void set_gPFBackground(ProgramFragment v) {
+        mExportVar_gPFBackground = v;
+        setVar(mExportVarIdx_gPFBackground, (v == null) ? 0 : v.getID());
+    }
+
+    public ProgramFragment get_gPFBackground() {
+        return mExportVar_gPFBackground;
+    }
+
+    private final static int mExportVarIdx_gTGrid = 2;
+    private Allocation mExportVar_gTGrid;
+    public void set_gTGrid(Allocation v) {
+        mExportVar_gTGrid = v;
+        setVar(mExportVarIdx_gTGrid, (v == null) ? 0 : v.getID());
+    }
+
+    public Allocation get_gTGrid() {
+        return mExportVar_gTGrid;
+    }
+
+    private final static int mExportVarIdx_gTestMesh = 3;
+    private SimpleMesh mExportVar_gTestMesh;
+    public void set_gTestMesh(SimpleMesh v) {
+        mExportVar_gTestMesh = v;
+        setVar(mExportVarIdx_gTestMesh, (v == null) ? 0 : v.getID());
+    }
+
+    public SimpleMesh get_gTestMesh() {
+        return mExportVar_gTestMesh;
+    }
+
+    private final static int mExportVarIdx_gPFSBackground = 4;
+    private ProgramStore mExportVar_gPFSBackground;
+    public void set_gPFSBackground(ProgramStore v) {
+        mExportVar_gPFSBackground = v;
+        setVar(mExportVarIdx_gPFSBackground, (v == null) ? 0 : v.getID());
+    }
+
+    public ProgramStore get_gPFSBackground() {
+        return mExportVar_gPFSBackground;
+    }
+
+    private final static int mExportVarIdx_gRotate = 5;
+    private float mExportVar_gRotate;
+    public void set_gRotate(float v) {
+        mExportVar_gRotate = v;
+        setVar(mExportVarIdx_gRotate, v);
+    }
+
+    public float get_gRotate() {
+        return mExportVar_gRotate;
+    }
+
+}
+
diff --git a/libs/rs/rsComponent.cpp b/libs/rs/rsComponent.cpp
index b120c21..8e509ad 100644
--- a/libs/rs/rsComponent.cpp
+++ b/libs/rs/rsComponent.cpp
@@ -152,6 +152,10 @@
     case RS_TYPE_UNSIGNED_64:
         mTypeBits = 64;
         break;
+
+    case RS_TYPE_BOOLEAN:
+        mTypeBits = 8;
+        break;
     }
 
     mBits = mTypeBits * mVectorSize;
@@ -192,82 +196,6 @@
     return 0;
 }
 
-static const char * gCTypeStrings[] = {
-    0,
-    0,//"F16",
-    "float",
-    "double",
-    "char",
-    "short",
-    "int",
-    0,//"S64",
-    "char",//U8",
-    "short",//U16",
-    "int",//U32",
-    0,//"U64",
-    0,//"UP_565",
-    0,//"UP_5551",
-    0,//"UP_4444",
-    0,//"ELEMENT",
-    0,//"TYPE",
-    0,//"ALLOCATION",
-    0,//"SAMPLER",
-    0,//"SCRIPT",
-    0,//"MESH",
-    0,//"PROGRAM_FRAGMENT",
-    0,//"PROGRAM_VERTEX",
-    0,//"PROGRAM_RASTER",
-    0,//"PROGRAM_STORE",
-};
-
-static const char * gCVecTypeStrings[] = {
-    0,
-    0,//"F16",
-    "vecF32",
-    "vecF64",
-    "vecI8",
-    "vecI16",
-    "vecI32",
-    0,//"S64",
-    "vecU8",//U8",
-    "vecU16",//U16",
-    "vecU32",//U32",
-    0,//"U64",
-    0,//"UP_565",
-    0,//"UP_5551",
-    0,//"UP_4444",
-    0,//"ELEMENT",
-    0,//"TYPE",
-    0,//"ALLOCATION",
-    0,//"SAMPLER",
-    0,//"SCRIPT",
-    0,//"MESH",
-    0,//"PROGRAM_FRAGMENT",
-    0,//"PROGRAM_VERTEX",
-    0,//"PROGRAM_RASTER",
-    0,//"PROGRAM_STORE",
-};
-
-String8 Component::getCType() const
-{
-    char buf[64];
-    if (mVectorSize == 1) {
-        return String8(gCTypeStrings[mType]);
-    }
-
-    // Yuck, acc WAR
-    // Appears to have problems packing chars
-    if (mVectorSize == 4 && mType == RS_TYPE_UNSIGNED_8) {
-        return String8("int");
-    }
-
-
-    String8 s(gCVecTypeStrings[mType]);
-    sprintf(buf, "_%i_t", mVectorSize);
-    s.append(buf);
-    return s;
-}
-
 String8 Component::getGLSLType() const
 {
     if (mType == RS_TYPE_SIGNED_32) {
@@ -302,6 +230,7 @@
     "U16",
     "U32",
     "U64",
+    "BOOLEAN",
     "UP_565",
     "UP_5551",
     "UP_4444",
diff --git a/libs/rs/rsComponent.h b/libs/rs/rsComponent.h
index 0f93a91..15fd5dd 100644
--- a/libs/rs/rsComponent.h
+++ b/libs/rs/rsComponent.h
@@ -35,7 +35,6 @@
 
     uint32_t getGLType() const;
     uint32_t getGLFormat() const;
-    String8 getCType() const;
     String8 getGLSLType() const;
     void dumpLOGV(const char *prefix) const;
 
diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp
index 8fbf004..aa20275 100644
--- a/libs/rs/rsElement.cpp
+++ b/libs/rs/rsElement.cpp
@@ -232,45 +232,6 @@
     return e;
 }
 
-String8 Element::getCStructBody(uint32_t indent) const
-{
-    String8 si;
-    for (uint32_t ct=0; ct < indent; ct++) {
-        si.append(" ");
-    }
-
-    String8 s(si);
-    s.append("{\n");
-    for (uint32_t ct = 0; ct < mFieldCount; ct++) {
-        s.append(si);
-        s.append(mFields[ct].e->getCType(indent+4));
-        s.append(" ");
-        s.append(mFields[ct].name);
-        s.append(";\n");
-    }
-    s.append(si);
-    s.append("}");
-    return s;
-}
-
-String8 Element::getCType(uint32_t indent) const
-{
-    String8 s;
-    for (uint32_t ct=0; ct < indent; ct++) {
-        s.append(" ");
-    }
-
-    if (!mFieldCount) {
-        // Basic component.
-        s.append(mComponent.getCType());
-    } else {
-        s.append("struct ");
-        s.append(getCStructBody(indent));
-    }
-
-    return s;
-}
-
 String8 Element::getGLSLType(uint32_t indent) const
 {
     String8 s;
diff --git a/libs/rs/rsElement.h b/libs/rs/rsElement.h
index 5c4f5c4..90e7cc8 100644
--- a/libs/rs/rsElement.h
+++ b/libs/rs/rsElement.h
@@ -54,8 +54,6 @@
     RsDataKind getKind() const {return mComponent.getKind();}
     uint32_t getBits() const {return mBits;}
 
-    String8 getCType(uint32_t indent=0) const;
-    String8 getCStructBody(uint32_t indent=0) const;
     String8 getGLSLType(uint32_t indent=0) const;
 
     void dumpLOGV(const char *prefix) const;
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index e7292c0..b8d1461 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -138,6 +138,11 @@
             const Element *e = mConstantTypes[ct]->getElement();
             for (uint32_t field=0; field < e->getFieldCount(); field++) {
                 const Element *f = e->getField(field);
+                const char *fn = e->getFieldName(field);
+
+                if (fn[0] == '#') {
+                    continue;
+                }
 
                 // Cannot be complex
                 rsAssert(!f->getFieldCount());
@@ -150,7 +155,7 @@
                     rsAssert(0);
                 }
 
-                mShader.append(e->getFieldName(field));
+                mShader.append(fn);
                 mShader.append(";\n");
             }
         }
diff --git a/libs/rs/rsScriptC_LibGL.cpp b/libs/rs/rsScriptC_LibGL.cpp
index f0de908..052e144 100644
--- a/libs/rs/rsScriptC_LibGL.cpp
+++ b/libs/rs/rsScriptC_LibGL.cpp
@@ -345,8 +345,6 @@
     { "rsgGetWidth", (void *)&SC_getWidth },
     { "rsgGetHeight", (void *)&SC_getHeight },
 
-  { "_Z18rsgUploadToTextureii", (void *)&SC_uploadToTexture2 },
-  { "_Z18rsgUploadToTexturei", (void *)&SC_uploadToTexture },
     { "_Z18rsgUploadToTexture13rs_allocationi", (void *)&SC_uploadToTexture2 },
     { "_Z18rsgUploadToTexture13rs_allocation", (void *)&SC_uploadToTexture },
     { "rsgUploadToBufferObject", (void *)&SC_uploadToBufferObject },
@@ -358,8 +356,6 @@
     { "rsgDrawSpriteScreenspace", (void *)&SC_drawSpriteScreenspace },
     { "_Z17rsgDrawSimpleMesh7rs_mesh", (void *)&SC_drawSimpleMesh },
     { "_Z17rsgDrawSimpleMesh7rs_meshii", (void *)&SC_drawSimpleMeshRange },
-  { "_Z17rsgDrawSimpleMeshi", (void *)&SC_drawSimpleMesh },
-  { "_Z17rsgDrawSimpleMeshiii", (void *)&SC_drawSimpleMeshRange },
 
     { "rsgClearColor", (void *)&SC_ClearColor },
     { "rsgClearDepth", (void *)&SC_ClearDepth },
@@ -370,7 +366,6 @@
     { "updateSimpleMesh", (void *)&SC_updateSimpleMesh },
 
     // misc
-    //{ "pfClearColor", (void *)&SC_ClearColor },
     { "color", (void *)&SC_color },
 
     { NULL, NULL }
diff --git a/libs/rs/scriptc/rs_cl.rsh b/libs/rs/scriptc/rs_cl.rsh
index 69e7902..64844a4 100644
--- a/libs/rs/scriptc/rs_cl.rsh
+++ b/libs/rs/scriptc/rs_cl.rsh
@@ -7,15 +7,15 @@
 // Conversions
 #define CVT_FUNC_2(typeout, typein) \
 static typeout##2 __attribute__((overloadable)) convert_##typeout##2(typein##2 v) { \
-    typeout##2 r = {v.x, v.y}; \
+    typeout##2 r = {(typeout)v.x, (typeout)v.y}; \
     return r; \
 } \
 static typeout##3 __attribute__((overloadable)) convert_##typeout##3(typein##3 v) { \
-    typeout##3 r = {v.x, v.y, v.z}; \
+    typeout##3 r = {(typeout)v.x, (typeout)v.y, (typeout)v.z}; \
     return r; \
 } \
 static typeout##4 __attribute__((overloadable)) convert_##typeout##4(typein##4 v) { \
-    typeout##4 r = {v.x, v.y, v.z, v.w}; \
+    typeout##4 r = {(typeout)v.x, (typeout)v.y, (typeout)v.z, (typeout)v.w}; \
     return r; \
 }
 
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 4b61131..2118f8f 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -41,6 +41,35 @@
 #define UNLIKELY( exp )     (__builtin_expect( (exp) != 0, false ))
 
 namespace android {
+// ---------------------------------------------------------------------------
+
+// static
+status_t AudioTrack::getMinFrameCount(
+        int* frameCount,
+        int streamType,
+        uint32_t sampleRate)
+{
+    int afSampleRate;
+    if (AudioSystem::getOutputSamplingRate(&afSampleRate, streamType) != NO_ERROR) {
+        return NO_INIT;
+    }
+    int afFrameCount;
+    if (AudioSystem::getOutputFrameCount(&afFrameCount, streamType) != NO_ERROR) {
+        return NO_INIT;
+    }
+    uint32_t afLatency;
+    if (AudioSystem::getOutputLatency(&afLatency, streamType) != NO_ERROR) {
+        return NO_INIT;
+    }
+
+    // Ensure that buffer depth covers at least audio hardware latency
+    uint32_t minBufCount = afLatency / ((1000 * afFrameCount) / afSampleRate);
+    if (minBufCount < 2) minBufCount = 2;
+
+    *frameCount = (sampleRate == 0) ? afFrameCount * minBufCount :
+              afFrameCount * minBufCount * sampleRate / afSampleRate;
+    return NO_ERROR;
+}
 
 // ---------------------------------------------------------------------------
 
diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp
index 7cb01d0..a7a37f8 100644
--- a/opengl/libagl/egl.cpp
+++ b/opengl/libagl/egl.cpp
@@ -485,13 +485,13 @@
     copybit_device_t* const copybit = blitengine;
     if (copybit)  {
         copybit_image_t simg;
-        simg.w = src->width;
+        simg.w = src->stride;
         simg.h = src->height;
         simg.format = src->format;
         simg.handle = const_cast<native_handle_t*>(src->handle);
 
         copybit_image_t dimg;
-        dimg.w = dst->width;
+        dimg.w = dst->stride;
         dimg.h = dst->height;
         dimg.format = dst->format;
         dimg.handle = const_cast<native_handle_t*>(dst->handle);
diff --git a/preloaded-classes b/preloaded-classes
index da5502d..9686fc9 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -684,7 +684,6 @@
 com.android.internal.view.menu.MenuBuilder
 com.android.internal.view.menu.MenuItemImpl
 com.android.internal.view.menu.SubMenuBuilder
-com.android.internal.widget.ContactHeaderWidget
 com.android.internal.widget.DialogTitle
 com.android.internal.widget.EditableInputConnection
 com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
diff --git a/services/java/com/android/server/ProcessStats.java b/services/java/com/android/server/ProcessStats.java
index a02c4e7..4fa89d9 100644
--- a/services/java/com/android/server/ProcessStats.java
+++ b/services/java/com/android/server/ProcessStats.java
@@ -687,7 +687,7 @@
                         break;
                     }
                 }
-                return new String(mBuffer, 0, 0, i);
+                return new String(mBuffer, 0, i);
             }
         } catch (java.io.FileNotFoundException e) {
         } catch (java.io.IOException e) {
diff --git a/services/java/com/android/server/TelephonyRegistry.java b/services/java/com/android/server/TelephonyRegistry.java
index 8fc4d57..b1ca7852 100644
--- a/services/java/com/android/server/TelephonyRegistry.java
+++ b/services/java/com/android/server/TelephonyRegistry.java
@@ -233,6 +233,7 @@
         if (!checkNotifyPermission("notifyCallState()")) {
             return;
         }
+        ArrayList<IBinder> removeList = new ArrayList<IBinder>();
         synchronized (mRecords) {
             mCallState = state;
             mCallIncomingNumber = incomingNumber;
@@ -241,10 +242,11 @@
                     try {
                         r.callback.onCallStateChanged(state, incomingNumber);
                     } catch (RemoteException ex) {
-                        remove(r.binder);
+                        removeList.add(r.binder);
                     }
                 }
             }
+            for (IBinder b : removeList) remove(b);
         }
         broadcastCallStateChanged(state, incomingNumber);
     }
@@ -268,6 +270,7 @@
         if (!checkNotifyPermission("notifySignalStrength()")) {
             return;
         }
+        ArrayList<IBinder> removeList = new ArrayList<IBinder>();
         synchronized (mRecords) {
             mSignalStrength = signalStrength;
             for (Record r : mRecords) {
@@ -280,10 +283,11 @@
                         r.callback.onSignalStrengthChanged((gsmSignalStrength == 99 ? -1
                                 : gsmSignalStrength));
                     } catch (RemoteException ex) {
-                        remove(r.binder);
+                        removeList.add(r.binder);
                     }
                 }
             }
+            for (IBinder b : removeList) remove(b);
         }
         broadcastSignalStrengthChanged(signalStrength);
     }
@@ -292,6 +296,7 @@
         if (!checkNotifyPermission("notifyMessageWaitingChanged()")) {
             return;
         }
+        ArrayList<IBinder> removeList = new ArrayList<IBinder>();
         synchronized (mRecords) {
             mMessageWaiting = mwi;
             for (Record r : mRecords) {
@@ -299,10 +304,11 @@
                     try {
                         r.callback.onMessageWaitingIndicatorChanged(mwi);
                     } catch (RemoteException ex) {
-                        remove(r.binder);
+                        removeList.add(r.binder);
                     }
                 }
             }
+            for (IBinder b : removeList) remove(b);
         }
     }
 
@@ -310,6 +316,7 @@
         if (!checkNotifyPermission("notifyCallForwardingChanged()")) {
             return;
         }
+        ArrayList<IBinder> removeList = new ArrayList<IBinder>();
         synchronized (mRecords) {
             mCallForwarding = cfi;
             for (Record r : mRecords) {
@@ -317,10 +324,11 @@
                     try {
                         r.callback.onCallForwardingIndicatorChanged(cfi);
                     } catch (RemoteException ex) {
-                        remove(r.binder);
+                        removeList.add(r.binder);
                     }
                 }
             }
+            for (IBinder b : removeList) remove(b);
         }
     }
 
@@ -328,6 +336,7 @@
         if (!checkNotifyPermission("notifyDataActivity()" )) {
             return;
         }
+        ArrayList<IBinder> removeList = new ArrayList<IBinder>();
         synchronized (mRecords) {
             mDataActivity = state;
             for (Record r : mRecords) {
@@ -335,10 +344,11 @@
                     try {
                         r.callback.onDataActivity(state);
                     } catch (RemoteException ex) {
-                        remove(r.binder);
+                        removeList.add(r.binder);
                     }
                 }
             }
+            for (IBinder b : removeList) remove(b);
         }
     }
 
@@ -376,15 +386,17 @@
                 modified = true;
             }
             if (modified) {
+                ArrayList<IBinder> removeList = new ArrayList<IBinder>();
                 for (Record r : mRecords) {
                     if ((r.events & PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0) {
                         try {
                             r.callback.onDataConnectionStateChanged(state, networkType);
                         } catch (RemoteException ex) {
-                            remove(r.binder);
+                            removeList.add(r.binder);
                         }
                     }
                 }
+                for (IBinder b : removeList) remove(b);
             }
         }
         broadcastDataConnectionStateChanged(state, isDataConnectivityPossible, reason, apn,
diff --git a/services/java/com/android/server/ThrottleService.java b/services/java/com/android/server/ThrottleService.java
index 2645e42..d841cb3 100644
--- a/services/java/com/android/server/ThrottleService.java
+++ b/services/java/com/android/server/ThrottleService.java
@@ -312,22 +312,6 @@
                 }
             }, new IntentFilter(ACTION_RESET));
 
-        // use a new thread as we don't want to stall the system for file writes
-        mThread = new HandlerThread(TAG);
-        mThread.start();
-        mHandler = new MyHandler(mThread.getLooper());
-        mHandler.obtainMessage(EVENT_REBOOT_RECOVERY).sendToTarget();
-
-        mInterfaceObserver = new InterfaceObserver(mHandler, EVENT_IFACE_UP, mIface);
-        try {
-            mNMService.registerObserver(mInterfaceObserver);
-        } catch (RemoteException e) {
-            Slog.e(TAG, "Could not register InterfaceObserver " + e);
-        }
-
-        mSettingsObserver = new SettingsObserver(mHandler, EVENT_POLICY_CHANGED);
-        mSettingsObserver.observe(mContext);
-
         FileInputStream stream = null;
         try {
             Properties properties = new Properties();
@@ -344,6 +328,22 @@
                 } catch (Exception e) {}
             }
         }
+
+        // use a new thread as we don't want to stall the system for file writes
+        mThread = new HandlerThread(TAG);
+        mThread.start();
+        mHandler = new MyHandler(mThread.getLooper());
+        mHandler.obtainMessage(EVENT_REBOOT_RECOVERY).sendToTarget();
+
+        mInterfaceObserver = new InterfaceObserver(mHandler, EVENT_IFACE_UP, mIface);
+        try {
+            mNMService.registerObserver(mInterfaceObserver);
+        } catch (RemoteException e) {
+            Slog.e(TAG, "Could not register InterfaceObserver " + e);
+        }
+
+        mSettingsObserver = new SettingsObserver(mHandler, EVENT_POLICY_CHANGED);
+        mSettingsObserver.observe(mContext);
     }
 
 
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index ec209eda..4d18191 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -9538,7 +9538,7 @@
             sb.append("Subject: ").append(subject).append("\n");
         }
         sb.append("Build: ").append(Build.FINGERPRINT).append("\n");
-        if (crashInfo.durationMillis != -1) {
+        if (crashInfo != null && crashInfo.durationMillis != -1) {
             sb.append("Duration-Millis: ").append(crashInfo.durationMillis).append("\n");
         }
         sb.append("\n");
diff --git a/telephony/java/com/android/internal/telephony/IccUtils.java b/telephony/java/com/android/internal/telephony/IccUtils.java
index 95bce13..005ae37 100644
--- a/telephony/java/com/android/internal/telephony/IccUtils.java
+++ b/telephony/java/com/android/internal/telephony/IccUtils.java
@@ -51,6 +51,8 @@
             ret.append((char)('0' + v));
 
             v = (data[i] >> 4) & 0xf;
+            // Some PLMNs have 'f' as high nibble, ignore it
+            if (v == 0xf) continue;
             if (v > 9)  break;
             ret.append((char)('0' + v));
         }
diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java
index 5bd9e39..f1d2488 100644
--- a/telephony/java/com/android/internal/telephony/RIL.java
+++ b/telephony/java/com/android/internal/telephony/RIL.java
@@ -2338,7 +2338,7 @@
             case RIL_UNSOL_RESTRICTED_STATE_CHANGED: ret = responseInts(p); break;
             case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:  ret =  responseVoid(p); break;
             case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:  ret =  responseCdmaSms(p); break;
-            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:  ret =  responseString(p); break;
+            case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:  ret =  responseRaw(p); break;
             case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:  ret =  responseVoid(p); break;
             case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break;
             case RIL_UNSOL_CDMA_CALL_WAITING: ret = responseCdmaCallWaiting(p); break;
diff --git a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
index d711a80..d99a348 100644
--- a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
+++ b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
@@ -93,6 +93,7 @@
     static final int SPN_RULE_SHOW_PLMN = 0x02;
 
     // From TS 51.011 EF[SPDI] section
+    static final int TAG_SPDI = 0xA3;
     static final int TAG_SPDI_PLMN_LIST = 0x80;
 
     // Full Name IEI from TS 24.008
@@ -1426,8 +1427,12 @@
 
         byte[] plmnEntries = null;
 
-        // There should only be one TAG_SPDI_PLMN_LIST
         for ( ; tlv.isValidObject() ; tlv.nextObject()) {
+            // Skip SPDI tag, if existant
+            if (tlv.getTag() == TAG_SPDI) {
+              tlv = new SimTlv(tlv.getData(), 0, tlv.getData().length);
+            }
+            // There should only be one TAG_SPDI_PLMN_LIST
             if (tlv.getTag() == TAG_SPDI_PLMN_LIST) {
                 plmnEntries = tlv.getData();
                 break;
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java b/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java
index 5780c43..f0c1054 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/CallbackProxy.java
@@ -74,6 +74,7 @@
     private static final int LAYOUT_SET_CAN_OPEN_WINDOWS = 42;
     private static final int SET_GEOLOCATION_PERMISSION = 43;
     private static final int OVERRIDE_PREFERENCE = 44;
+    private static final int LAYOUT_DUMP_CHILD_FRAMES_TEXT = 45;
     
     CallbackProxy(EventSender eventSender, 
             LayoutTestController layoutTestController) {
@@ -178,6 +179,10 @@
             mLayoutTestController.dumpAsText();
             break;
 
+        case LAYOUT_DUMP_CHILD_FRAMES_TEXT:
+            mLayoutTestController.dumpChildFramesAsText();
+            break;
+
         case LAYOUT_DUMP_HISTORY:
             mLayoutTestController.dumpBackForwardList();
             break;
@@ -380,6 +385,10 @@
         obtainMessage(LAYOUT_DUMP_TEXT).sendToTarget();
     }
 
+    public void dumpChildFramesAsText() {
+        obtainMessage(LAYOUT_DUMP_CHILD_FRAMES_TEXT).sendToTarget();
+    }
+
     public void dumpBackForwardList() {
         obtainMessage(LAYOUT_DUMP_HISTORY).sendToTarget();
     }
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestController.java b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestController.java
index 9236345..57ae487 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestController.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestController.java
@@ -19,6 +19,7 @@
 public interface LayoutTestController {
 
 	public void dumpAsText();
+	public void dumpChildFramesAsText();
 	public void waitUntilDone();
 	public void notifyDone();
 	
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
index e6f7a27..d805b8a 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
@@ -100,6 +100,8 @@
         Log.v(LOGTAG, "message sent to WebView to dump text.");
         switch (mDumpDataType) {
             case DUMP_AS_TEXT:
+                callback.arg1 = mDumpTopFrameAsText ? 1 : 0;
+                callback.arg2 = mDumpChildFramesAsText ? 1 : 0;
                 mWebView.documentAsText(callback);
                 break;
             case EXT_REPR:
@@ -341,12 +343,22 @@
     // LayoutTestController Functions
     public void dumpAsText() {
         mDumpDataType = DumpDataType.DUMP_AS_TEXT;
+        mDumpTopFrameAsText = true;
         if (mWebView != null) {
             String url = mWebView.getUrl();
             Log.v(LOGTAG, "dumpAsText called: "+url);
         }
     }
 
+    public void dumpChildFramesAsText() {
+        mDumpDataType = DumpDataType.DUMP_AS_TEXT;
+        mDumpChildFramesAsText = true;
+        if (mWebView != null) {
+            String url = mWebView.getUrl();
+            Log.v(LOGTAG, "dumpChildFramesAsText called: "+url);
+        }
+    }
+
     public void waitUntilDone() {
         mWaitUntilDone = true;
         String url = mWebView.getUrl();
@@ -738,6 +750,8 @@
     private void resetTestStatus() {
         mWaitUntilDone = false;
         mDumpDataType = mDefaultDumpDataType;
+        mDumpTopFrameAsText = false;
+        mDumpChildFramesAsText = false;
         mTimedOut = false;
         mDumpTitleChanges = false;
         mRequestedWebKitData = false;
@@ -847,6 +861,8 @@
     // Layout test controller variables.
     private DumpDataType mDumpDataType;
     private DumpDataType mDefaultDumpDataType = DumpDataType.EXT_REPR;
+    private boolean mDumpTopFrameAsText;
+    private boolean mDumpChildFramesAsText;
     private boolean mWaitUntilDone;
     private boolean mDumpTitleChanges;
     private StringBuffer mTitleChanges;
diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java
index 5ca5975..5b4faf97 100644
--- a/wifi/java/android/net/wifi/WifiStateTracker.java
+++ b/wifi/java/android/net/wifi/WifiStateTracker.java
@@ -1424,7 +1424,7 @@
         int netId = -1;
         String[] lines = reply.split("\n");
         for (String line : lines) {
-            String[] prop = line.split(" *= *");
+            String[] prop = line.split(" *= *", 2);
             if (prop.length < 2)
                 continue;
             String name = prop[0];