Merge change 6820 into donut

* changes:
  Fixed NPE bugs in Uri. Fixes internal issue #1724719. Modified getQueryParameter() to use the encoded query string. Fixes internal issue #1749094.
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index 6d6aca4..9f44c7e 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -962,19 +962,18 @@
                         && event.getAction() == KeyEvent.ACTION_UP) {
                     v.cancelLongPress();
 
-                    if (mSearchable.autoUrlDetect()) {
-                        // If this is a url entered by the user & we displayed the 'Go' button which
-                        // the user clicked, launch the url instead of using it as a search query.
-                        if ((mSearchAutoCompleteImeOptions & EditorInfo.IME_MASK_ACTION)
+                    // If this is a url entered by the user & we displayed the 'Go' button which
+                    // the user clicked, launch the url instead of using it as a search query.
+                    if (mSearchable.autoUrlDetect() &&
+                        (mSearchAutoCompleteImeOptions & EditorInfo.IME_MASK_ACTION)
                                 == EditorInfo.IME_ACTION_GO) {
-                            Uri uri = Uri.parse(fixUrl(mSearchAutoComplete.getText().toString()));
-                            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
-                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                            launchIntent(intent);
-                        } else {
-                            // Launch as a regular search.
-                            launchQuerySearch();
-                        }
+                        Uri uri = Uri.parse(fixUrl(mSearchAutoComplete.getText().toString()));
+                        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                        launchIntent(intent);
+                    } else {
+                        // Launch as a regular search.
+                        launchQuerySearch();
                     }
                     return true;
                 }
diff --git a/core/java/android/gesture/Gesture.java b/core/java/android/gesture/Gesture.java
index c92f665..62330e1 100755
--- a/core/java/android/gesture/Gesture.java
+++ b/core/java/android/gesture/Gesture.java
@@ -31,6 +31,7 @@
 import java.io.ByteArrayOutputStream;
 import java.io.ByteArrayInputStream;
 import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * A gesture can have a single or multiple strokes
@@ -44,7 +45,7 @@
     private static final boolean BITMAP_RENDERING_ANTIALIAS = true;
     private static final boolean BITMAP_RENDERING_DITHER = true;
 
-    private static int sGestureCount = 0;
+    private static final AtomicInteger sGestureCount = new AtomicInteger(0);
 
     private final RectF mBoundingBox = new RectF();
 
@@ -54,7 +55,7 @@
     private final ArrayList<GestureStroke> mStrokes = new ArrayList<GestureStroke>();
 
     public Gesture() {
-        mGestureID = GESTURE_ID_BASE + sGestureCount++;
+        mGestureID = GESTURE_ID_BASE + sGestureCount.incrementAndGet();
     }
 
     /**
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index f86b37c..46e514c 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -286,18 +286,20 @@
             return;
         }
 
-        final View child = getChildAt(0);
-        int width = getMeasuredWidth();
-        if (child.getMeasuredWidth() < width) {
-            final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
-            int childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec, mPaddingTop
-                    + mPaddingBottom, lp.height);
-            width -= mPaddingLeft;
-            width -= mPaddingRight;
-            int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
-
-            child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
+        if (getChildCount() > 0) {
+            final View child = getChildAt(0);
+            int width = getMeasuredWidth();
+            if (child.getMeasuredWidth() < width) {
+                final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams();
+    
+                int childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec, mPaddingTop
+                        + mPaddingBottom, lp.height);
+                width -= mPaddingLeft;
+                width -= mPaddingRight;
+                int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
+    
+                child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
+            }
         }
     }
 
@@ -636,7 +638,7 @@
             mTempRect.left = getScrollX() + width;
             int count = getChildCount();
             if (count > 0) {
-                View view = getChildAt(count - 1);
+                View view = getChildAt(0);
                 if (mTempRect.left + width > view.getRight()) {
                     mTempRect.left = view.getRight() - width;
                 }
@@ -674,7 +676,7 @@
         if (right) {
             int count = getChildCount();
             if (count > 0) {
-                View view = getChildAt(count - 1);
+                View view = getChildAt(0);
                 mTempRect.right = view.getRight();
                 mTempRect.left = mTempRect.right - width;
             }
@@ -751,9 +753,9 @@
 
             if (direction == View.FOCUS_LEFT && getScrollX() < scrollDelta) {
                 scrollDelta = getScrollX();
-            } else if (direction == View.FOCUS_RIGHT) {
-
-                int daRight = getChildAt(getChildCount() - 1).getRight();
+            } else if (direction == View.FOCUS_RIGHT && getChildCount() > 0) {
+                
+                int daRight = getChildAt(0).getRight();
 
                 int screenRight = getScrollX() + getWidth();
 
@@ -975,6 +977,7 @@
      * @return The scroll delta.
      */
     protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
+        if (getChildCount() == 0) return 0;
 
         int width = getWidth();
         int screenLeft = getScrollX();
@@ -1008,7 +1011,7 @@
             }
 
             // make sure we aren't scrolling beyond the end of our content
-            int right = getChildAt(getChildCount() - 1).getRight();
+            int right = getChildAt(0).getRight();
             int distanceToRight = right - screenRight;
             scrollXDelta = Math.min(scrollXDelta, distanceToRight);
 
@@ -1148,27 +1151,29 @@
      *                  which means we want to scroll towards the left.
      */
     public void fling(int velocityX) {
-        int width = getWidth() - mPaddingRight - mPaddingLeft;
-        int right = getChildAt(0).getWidth();
-
-        mScroller.fling(mScrollX, mScrollY, velocityX, 0, 0, right - width, 0, 0);
-
-        final boolean movingRight = velocityX > 0;
-
-        View newFocused = findFocusableViewInMyBounds(movingRight,
-                mScroller.getFinalX(), findFocus());
-
-        if (newFocused == null) {
-            newFocused = this;
+        if (getChildCount() > 0) {
+            int width = getWidth() - mPaddingRight - mPaddingLeft;
+            int right = getChildAt(0).getWidth();
+    
+            mScroller.fling(mScrollX, mScrollY, velocityX, 0, 0, right - width, 0, 0);
+    
+            final boolean movingRight = velocityX > 0;
+    
+            View newFocused = findFocusableViewInMyBounds(movingRight,
+                    mScroller.getFinalX(), findFocus());
+    
+            if (newFocused == null) {
+                newFocused = this;
+            }
+    
+            if (newFocused != findFocus()
+                    && newFocused.requestFocus(movingRight ? View.FOCUS_RIGHT : View.FOCUS_LEFT)) {
+                mScrollViewMovedFocus = true;
+                mScrollViewMovedFocus = false;
+            }
+    
+            invalidate();
         }
-
-        if (newFocused != findFocus()
-                && newFocused.requestFocus(movingRight ? View.FOCUS_RIGHT : View.FOCUS_LEFT)) {
-            mScrollViewMovedFocus = true;
-            mScrollViewMovedFocus = false;
-        }
-
-        invalidate();
     }
 
     /**
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 90e1242..703cd8e2 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -20,8 +20,6 @@
 import android.content.res.TypedArray;
 import android.graphics.Rect;
 import android.util.AttributeSet;
-import android.util.Config;
-import android.util.Log;
 import android.view.FocusFinder;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
@@ -54,7 +52,6 @@
  */
 public class ScrollView extends FrameLayout {
     static final String TAG = "ScrollView";
-    static final boolean localLOGV = false || Config.LOGV;
     
     static final int ANIMATED_SCROLL_GAP = 250;
 
@@ -287,18 +284,21 @@
             return;
         }
 
-        final View child = getChildAt(0);
-        int height = getMeasuredHeight();
-        if (child.getMeasuredHeight() < height) {
-            final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
-            int childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, mPaddingLeft
-                    + mPaddingRight, lp.width);
-            height -= mPaddingTop;
-            height -= mPaddingBottom;
-            int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
-
-            child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
+        if (getChildCount() > 0) {
+            final View child = getChildAt(0);
+            int height = getMeasuredHeight();
+            if (child.getMeasuredHeight() < height) {
+                final FrameLayout.LayoutParams lp = (LayoutParams) child.getLayoutParams();
+    
+                int childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, mPaddingLeft
+                        + mPaddingRight, lp.width);
+                height -= mPaddingTop;
+                height -= mPaddingBottom;
+                int childHeightMeasureSpec =
+                        MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
+    
+                child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
+            }
         }
     }
 
@@ -756,13 +756,14 @@
             if (direction == View.FOCUS_UP && getScrollY() < scrollDelta) {
                 scrollDelta = getScrollY();
             } else if (direction == View.FOCUS_DOWN) {
-
-                int daBottom = getChildAt(getChildCount() - 1).getBottom();
-
-                int screenBottom = getScrollY() + getHeight();
-
-                if (daBottom - screenBottom < maxJump) {
-                    scrollDelta = daBottom - screenBottom;
+                if (getChildCount() > 0) {
+                    int daBottom = getChildAt(0).getBottom();
+    
+                    int screenBottom = getScrollY() + getHeight();
+    
+                    if (daBottom - screenBottom < maxJump) {
+                        scrollDelta = daBottom - screenBottom;
+                    }
                 }
             }
             if (scrollDelta == 0) {
@@ -830,16 +831,12 @@
     public final void smoothScrollBy(int dx, int dy) {
         long duration = AnimationUtils.currentAnimationTimeMillis() - mLastScroll;
         if (duration > ANIMATED_SCROLL_GAP) {
-            if (localLOGV) Log.v(TAG, "Smooth scroll: mScrollY=" + mScrollY
-                    + " dy=" + dy);
             mScroller.startScroll(mScrollX, mScrollY, dx, dy);
             invalidate();
         } else {
             if (!mScroller.isFinished()) {
                 mScroller.abortAnimation();
             }
-            if (localLOGV) Log.v(TAG, "Immediate scroll: mScrollY=" + mScrollY
-                    + " dy=" + dy);
             scrollBy(dx, dy);
         }
         mLastScroll = AnimationUtils.currentAnimationTimeMillis();
@@ -922,9 +919,6 @@
                 View child = getChildAt(0);
                 mScrollX = clamp(x, getWidth() - mPaddingRight - mPaddingLeft, child.getWidth());
                 mScrollY = clamp(y, getHeight() - mPaddingBottom - mPaddingTop, child.getHeight());
-                if (localLOGV) Log.v(TAG, "mScrollY=" + mScrollY + " y=" + y
-                        + " height=" + this.getHeight()
-                        + " child height=" + child.getHeight());
             } else {
                 mScrollX = x;
                 mScrollY = y;
@@ -986,6 +980,7 @@
      * @return The scroll delta.
      */
     protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
+        if (getChildCount() == 0) return 0;
 
         int height = getHeight();
         int screenTop = getScrollY();
@@ -1005,9 +1000,6 @@
 
         int scrollYDelta = 0;
 
-        if (localLOGV) Log.v(TAG, "child=" + rect.toShortString()
-                + " screenTop=" + screenTop + " screenBottom=" + screenBottom
-                + " height=" + height);
         if (rect.bottom > screenBottom && rect.top > screenTop) {
             // need to move down to get it in view: move down just enough so
             // that the entire rectangle is in view (or at least the first
@@ -1022,10 +1014,8 @@
             }
 
             // make sure we aren't scrolling beyond the end of our content
-            int bottom = getChildAt(getChildCount() - 1).getBottom();
+            int bottom = getChildAt(0).getBottom();
             int distanceToBottom = bottom - screenBottom;
-            if (localLOGV) Log.v(TAG, "scrollYDelta=" + scrollYDelta
-                    + " distanceToBottom=" + distanceToBottom);
             scrollYDelta = Math.min(scrollYDelta, distanceToBottom);
 
         } else if (rect.top < screenTop && rect.bottom < screenBottom) {
@@ -1164,26 +1154,28 @@
      *                  which means we want to scroll towards the top.
      */
     public void fling(int velocityY) {
-        int height = getHeight() - mPaddingBottom - mPaddingTop;
-        int bottom = getChildAt(0).getHeight();
-
-        mScroller.fling(mScrollX, mScrollY, 0, velocityY, 0, 0, 0, bottom - height);
-
-        final boolean movingDown = velocityY > 0;
-
-        View newFocused =
-                findFocusableViewInMyBounds(movingDown, mScroller.getFinalY(), findFocus());
-        if (newFocused == null) {
-            newFocused = this;
+        if (getChildCount() > 0) {
+            int height = getHeight() - mPaddingBottom - mPaddingTop;
+            int bottom = getChildAt(0).getHeight();
+    
+            mScroller.fling(mScrollX, mScrollY, 0, velocityY, 0, 0, 0, bottom - height);
+    
+            final boolean movingDown = velocityY > 0;
+    
+            View newFocused =
+                    findFocusableViewInMyBounds(movingDown, mScroller.getFinalY(), findFocus());
+            if (newFocused == null) {
+                newFocused = this;
+            }
+    
+            if (newFocused != findFocus()
+                    && newFocused.requestFocus(movingDown ? View.FOCUS_DOWN : View.FOCUS_UP)) {
+                mScrollViewMovedFocus = true;
+                mScrollViewMovedFocus = false;
+            }
+    
+            invalidate();
         }
-
-        if (newFocused != findFocus()
-                && newFocused.requestFocus(movingDown ? View.FOCUS_DOWN : View.FOCUS_UP)) {
-            mScrollViewMovedFocus = true;
-            mScrollViewMovedFocus = false;
-        }
-
-        invalidate();
     }
 
     /**
diff --git a/core/res/res/values-hr-rHR/donottranslate-cldr.xml b/core/res/res/values-hr-rHR/donottranslate-cldr.xml
new file mode 100644
index 0000000..6f8d6e5
--- /dev/null
+++ b/core/res/res/values-hr-rHR/donottranslate-cldr.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="month_long_standalone_january">siječanj</string>
+    <string name="month_long_standalone_february">veljača</string>
+    <string name="month_long_standalone_march">ožujak</string>
+    <string name="month_long_standalone_april">travanj</string>
+    <string name="month_long_standalone_may">svibanj</string>
+    <string name="month_long_standalone_june">lipanj</string>
+    <string name="month_long_standalone_july">srpanj</string>
+    <string name="month_long_standalone_august">kolovoz</string>
+    <string name="month_long_standalone_september">rujan</string>
+    <string name="month_long_standalone_october">listopad</string>
+    <string name="month_long_standalone_november">studeni</string>
+    <string name="month_long_standalone_december">prosinac</string>
+
+    <string name="month_long_january">siječnja</string>
+    <string name="month_long_february">veljače</string>
+    <string name="month_long_march">ožujka</string>
+    <string name="month_long_april">travnja</string>
+    <string name="month_long_may">svibnja</string>
+    <string name="month_long_june">lipnja</string>
+    <string name="month_long_july">srpnja</string>
+    <string name="month_long_august">kolovoza</string>
+    <string name="month_long_september">rujna</string>
+    <string name="month_long_october">listopada</string>
+    <string name="month_long_november">studenoga</string>
+    <string name="month_long_december">prosinca</string>
+
+    <string name="month_medium_january">01.</string>
+    <string name="month_medium_february">02.</string>
+    <string name="month_medium_march">03.</string>
+    <string name="month_medium_april">04.</string>
+    <string name="month_medium_may">05.</string>
+    <string name="month_medium_june">06.</string>
+    <string name="month_medium_july">07.</string>
+    <string name="month_medium_august">08.</string>
+    <string name="month_medium_september">09.</string>
+    <string name="month_medium_october">10.</string>
+    <string name="month_medium_november">11.</string>
+    <string name="month_medium_december">12.</string>
+
+    <string name="month_shortest_january">1.</string>
+    <string name="month_shortest_february">2.</string>
+    <string name="month_shortest_march">3.</string>
+    <string name="month_shortest_april">4.</string>
+    <string name="month_shortest_may">5.</string>
+    <string name="month_shortest_june">6.</string>
+    <string name="month_shortest_july">7.</string>
+    <string name="month_shortest_august">8.</string>
+    <string name="month_shortest_september">9.</string>
+    <string name="month_shortest_october">10.</string>
+    <string name="month_shortest_november">11.</string>
+    <string name="month_shortest_december">12.</string>
+
+    <string name="day_of_week_long_sunday">nedjelja</string>
+    <string name="day_of_week_long_monday">ponedjeljak</string>
+    <string name="day_of_week_long_tuesday">utorak</string>
+    <string name="day_of_week_long_wednesday">srijeda</string>
+    <string name="day_of_week_long_thursday">četvrtak</string>
+    <string name="day_of_week_long_friday">petak</string>
+    <string name="day_of_week_long_saturday">subota</string>
+
+    <string name="day_of_week_medium_sunday">ned</string>
+    <string name="day_of_week_medium_monday">pon</string>
+    <string name="day_of_week_medium_tuesday">uto</string>
+    <string name="day_of_week_medium_wednesday">sri</string>
+    <string name="day_of_week_medium_thursday">čet</string>
+    <string name="day_of_week_medium_friday">pet</string>
+    <string name="day_of_week_medium_saturday">sub</string>
+
+    <string name="day_of_week_short_sunday">ned</string>
+    <string name="day_of_week_short_monday">pon</string>
+    <string name="day_of_week_short_tuesday">uto</string>
+    <string name="day_of_week_short_wednesday">sri</string>
+    <string name="day_of_week_short_thursday">čet</string>
+    <string name="day_of_week_short_friday">pet</string>
+    <string name="day_of_week_short_saturday">sub</string>
+
+    <string name="day_of_week_shortest_sunday">n</string>
+    <string name="day_of_week_shortest_monday">p</string>
+    <string name="day_of_week_shortest_tuesday">u</string>
+    <string name="day_of_week_shortest_wednesday">s</string>
+    <string name="day_of_week_shortest_thursday">č</string>
+    <string name="day_of_week_shortest_friday">p</string>
+    <string name="day_of_week_shortest_saturday">s</string>
+
+    <string name="am">AM</string>
+    <string name="pm">PM</string>
+    <string name="yesterday">jučer</string>
+    <string name="today">danas</string>
+    <string name="tomorrow">sutra</string>
+
+    <string name="hour_minute_24">%-k:%M</string>
+    <string name="hour_minute_ampm">%-l:%M %p</string>
+    <string name="hour_minute_cap_ampm">%-l:%M %^p</string>
+    <string name="twelve_hour_time_format">h:mm a</string>
+    <string name="twenty_four_hour_time_format">H:mm</string>
+    <string name="numeric_date">%-e.%-m.%Y.</string>
+    <string name="numeric_date_format">d.M.yyyy.</string>
+    <string name="numeric_date_template">"%s.%s.%s."</string>
+    <string name="month_day_year">%-e. %B %Y.</string>
+    <string name="time_of_day">%H:%M:%S</string>
+    <string name="date_and_time">%H:%M:%S %-e.%b.%Y.</string>
+    <string name="date_time">%2$s %1$s</string>
+    <string name="time_date">%1$s %3$s</string>
+    <string name="abbrev_month_day_year">%-e.%b.%Y.</string>
+    <string name="month_day">%-e. %B</string>
+    <string name="month">%-B</string>
+    <string name="month_year">%B %Y.</string>
+    <string name="abbrev_month_day">%-e.%b.</string>
+    <string name="abbrev_month">%-b.</string>
+    <string name="abbrev_month_year">%b.%Y.</string>
+    <string name="time1_time2">%1$s - %2$s</string>
+    <string name="date1_date2">%2$s - %5$s</string>
+    <string name="numeric_md1_md2">%3$s.%2$s. - %8$s.%7$s.</string>
+    <string name="numeric_wday1_md1_wday2_md2">%1$s, %3$s.%2$s. - %6$s, %8$s.%7$s.</string>
+    <string name="numeric_mdy1_mdy2">%3$s.%2$s.%4$s. - %8$s.%7$s.%9$s.</string>
+    <string name="numeric_wday1_mdy1_wday2_mdy2">%1$s, %3$s.%2$s.%4$s. - %6$s, %8$s.%7$s.%9$s.</string>
+    <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">%5$s %1$s, %3$s.%2$s.%4$s. - %10$s %6$s, %8$s.%7$s.%9$s.</string>
+    <string name="numeric_md1_time1_md2_time2">%5$s %3$s.%2$s. - %10$s %8$s.%7$s.</string>
+    <string name="numeric_wday1_md1_time1_wday2_md2_time2">%5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s.</string>
+    <string name="numeric_mdy1_time1_mdy2_time2">%5$s %3$s.%2$s.%4$s. - %10$s %8$s.%7$s.%9$s.</string>
+    <string name="wday1_date1_time1_wday2_date2_time2">%3$s %1$s, %2$s - %6$s %4$s, %5$s</string>
+    <string name="wday1_date1_wday2_date2">%1$s, %2$s - %4$s, %5$s</string>
+    <string name="date1_time1_date2_time2">%3$s %2$s - %6$s %5$s</string>
+    <string name="time_wday_date">%1$s %2$s, %3$s</string>
+    <string name="wday_date">%2$s, %3$s</string>
+    <string name="time_wday">%1$s %2$s</string>
+    <string name="same_year_md1_md2">%3$s. %2$s - %8$s. %7$s</string>
+    <string name="same_year_wday1_md1_wday2_md2">%1$s, %3$s.%2$s. - %6$s, %8$s.%7$s.</string>
+    <string name="same_year_md1_time1_md2_time2">%5$s %3$s. %2$s - %10$s %8$s. %7$s</string>
+    <string name="same_month_md1_time1_md2_time2">%5$s %3$s. %2$s - %10$s %8$s. %7$s</string>
+    <string name="same_year_wday1_md1_time1_wday2_md2_time2">%5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s.</string>
+    <string name="same_month_wday1_md1_time1_wday2_md2_time2">%5$s %1$s, %3$s.%2$s. - %10$s %6$s, %8$s.%7$s.</string>
+    <string name="same_year_mdy1_time1_mdy2_time2">%5$s %3$s.%2$s.%4$s. - %10$s %8$s.%7$s.%9$s.</string>
+    <string name="same_month_mdy1_time1_mdy2_time2">%5$s %3$s.%2$s.%4$s. - %10$s %8$s.%7$s.%9$s.</string>
+    <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">%5$s %1$s, %3$s.%2$s.%4$s. - %10$s %6$s, %8$s.%7$s.%9$s.</string>
+    <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">%5$s %1$s, %3$s.%2$s.%4$s. - %10$s %6$s, %8$s.%7$s.%9$s.</string>
+    <string name="same_month_wday1_mdy1_wday2_mdy2">%1$s, %3$s.%2$s.%4$s. - %6$s, %8$s.%7$s.%9$s.</string>
+    <string name="same_month_md1_md2">%3$s. - %8$s.%2$s.</string>
+    <string name="same_month_wday1_md1_wday2_md2">%1$s, %3$s.%2$s. - %6$s, %8$s.%7$s.</string>
+    <string name="same_year_mdy1_mdy2">%3$s.%2$s. - %8$s.%7$s.%9$s.</string>
+    <string name="same_month_mdy1_mdy2">%3$s. - %8$s.%2$s.%9$s.</string>
+    <string name="same_year_wday1_mdy1_wday2_mdy2">%1$s, %3$s.%2$s. - %6$s, %8$s.%7$s.%9$s.</string>
+    <string name="short_format_month">%b</string>
+</resources>
diff --git a/core/res/res/values-nb-rNO/donottranslate-cldr.xml b/core/res/res/values-nb-rNO/donottranslate-cldr.xml
new file mode 100644
index 0000000..ecf0111
--- /dev/null
+++ b/core/res/res/values-nb-rNO/donottranslate-cldr.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="month_long_standalone_january">januar</string>
+    <string name="month_long_standalone_february">februar</string>
+    <string name="month_long_standalone_march">mars</string>
+    <string name="month_long_standalone_april">april</string>
+    <string name="month_long_standalone_may">mai</string>
+    <string name="month_long_standalone_june">juni</string>
+    <string name="month_long_standalone_july">juli</string>
+    <string name="month_long_standalone_august">august</string>
+    <string name="month_long_standalone_september">september</string>
+    <string name="month_long_standalone_october">oktober</string>
+    <string name="month_long_standalone_november">november</string>
+    <string name="month_long_standalone_december">desember</string>
+
+    <string name="month_long_january">januar</string>
+    <string name="month_long_february">februar</string>
+    <string name="month_long_march">mars</string>
+    <string name="month_long_april">april</string>
+    <string name="month_long_may">mai</string>
+    <string name="month_long_june">juni</string>
+    <string name="month_long_july">juli</string>
+    <string name="month_long_august">august</string>
+    <string name="month_long_september">september</string>
+    <string name="month_long_october">oktober</string>
+    <string name="month_long_november">november</string>
+    <string name="month_long_december">desember</string>
+
+    <string name="month_medium_january">jan.</string>
+    <string name="month_medium_february">feb.</string>
+    <string name="month_medium_march">mars</string>
+    <string name="month_medium_april">apr.</string>
+    <string name="month_medium_may">mai</string>
+    <string name="month_medium_june">juni</string>
+    <string name="month_medium_july">juli</string>
+    <string name="month_medium_august">aug.</string>
+    <string name="month_medium_september">sep.</string>
+    <string name="month_medium_october">okt.</string>
+    <string name="month_medium_november">nov.</string>
+    <string name="month_medium_december">des.</string>
+
+    <string name="month_shortest_january">J</string>
+    <string name="month_shortest_february">F</string>
+    <string name="month_shortest_march">M</string>
+    <string name="month_shortest_april">A</string>
+    <string name="month_shortest_may">M</string>
+    <string name="month_shortest_june">J</string>
+    <string name="month_shortest_july">J</string>
+    <string name="month_shortest_august">A</string>
+    <string name="month_shortest_september">S</string>
+    <string name="month_shortest_october">O</string>
+    <string name="month_shortest_november">N</string>
+    <string name="month_shortest_december">D</string>
+
+    <string name="day_of_week_long_sunday">søndag</string>
+    <string name="day_of_week_long_monday">mandag</string>
+    <string name="day_of_week_long_tuesday">tirsdag</string>
+    <string name="day_of_week_long_wednesday">onsdag</string>
+    <string name="day_of_week_long_thursday">torsdag</string>
+    <string name="day_of_week_long_friday">fredag</string>
+    <string name="day_of_week_long_saturday">lørdag</string>
+
+    <string name="day_of_week_medium_sunday">søn.</string>
+    <string name="day_of_week_medium_monday">man.</string>
+    <string name="day_of_week_medium_tuesday">tir.</string>
+    <string name="day_of_week_medium_wednesday">ons.</string>
+    <string name="day_of_week_medium_thursday">tor.</string>
+    <string name="day_of_week_medium_friday">fre.</string>
+    <string name="day_of_week_medium_saturday">lør.</string>
+
+    <string name="day_of_week_short_sunday">søn.</string>
+    <string name="day_of_week_short_monday">man.</string>
+    <string name="day_of_week_short_tuesday">tir.</string>
+    <string name="day_of_week_short_wednesday">ons.</string>
+    <string name="day_of_week_short_thursday">tor.</string>
+    <string name="day_of_week_short_friday">fre.</string>
+    <string name="day_of_week_short_saturday">lør.</string>
+
+    <string name="day_of_week_shortest_sunday">S</string>
+    <string name="day_of_week_shortest_monday">M</string>
+    <string name="day_of_week_shortest_tuesday">T</string>
+    <string name="day_of_week_shortest_wednesday">O</string>
+    <string name="day_of_week_shortest_thursday">T</string>
+    <string name="day_of_week_shortest_friday">F</string>
+    <string name="day_of_week_shortest_saturday">L</string>
+
+    <string name="am">AM</string>
+    <string name="pm">PM</string>
+    <string name="yesterday">i går</string>
+    <string name="today">i dag</string>
+    <string name="tomorrow">i morgen</string>
+
+    <string name="hour_minute_24">%H.%M</string>
+    <string name="hour_minute_ampm">%-l.%M %p</string>
+    <string name="hour_minute_cap_ampm">%-l.%M %^p</string>
+    <string name="twelve_hour_time_format">h.mm a</string>
+    <string name="twenty_four_hour_time_format">HH.mm</string>
+    <string name="numeric_date">%d.%m.%Y</string>
+    <string name="numeric_date_format">dd.MM.yyyy</string>
+    <string name="numeric_date_template">"%s.%s.%s"</string>
+    <string name="month_day_year">%-e. %B %Y</string>
+    <string name="time_of_day">%H.%M.%S</string>
+    <string name="date_and_time">%H.%M.%S %-e. %b %Y</string>
+    <string name="date_time">%2$s %1$s</string>
+    <string name="time_date">%1$s %3$s</string>
+    <string name="abbrev_month_day_year">%-e. %b %Y</string>
+    <string name="month_day">%-e. %B</string>
+    <string name="month">%-B</string>
+    <string name="month_year">%B %Y</string>
+    <string name="abbrev_month_day">%-e. %b</string>
+    <string name="abbrev_month">%-b</string>
+    <string name="abbrev_month_year">%b %Y</string>
+    <string name="time1_time2">%1$s–%2$s</string>
+    <string name="date1_date2">%2$s–%5$s</string>
+    <string name="numeric_md1_md2">%3$s.%2$s.–%8$s.%7$s.</string>
+    <string name="numeric_wday1_md1_wday2_md2">%1$s %3$s.%2$s.–%6$s %8$s.%7$s.</string>
+    <string name="numeric_mdy1_mdy2">%3$s.%2$s.%4$s–%8$s.%7$s.%9$s</string>
+    <string name="numeric_wday1_mdy1_wday2_mdy2">%1$s %3$s.%2$s.%4$s–%6$s %8$s.%7$s.%9$s</string>
+    <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">%5$s %1$s %3$s.%2$s.%4$s–%10$s %6$s %8$s.%7$s.%9$s</string>
+    <string name="numeric_md1_time1_md2_time2">%5$s %3$s.%2$s.–%10$s %8$s.%7$s.</string>
+    <string name="numeric_wday1_md1_time1_wday2_md2_time2">%5$s %1$s %3$s.%2$s–%10$s %6$s %8$s.%7$s</string>
+    <string name="numeric_mdy1_time1_mdy2_time2">%5$s %3$s.%2$s.%4$s–%10$s %8$s.%7$s.%9$s</string>
+    <string name="wday1_date1_time1_wday2_date2_time2">%3$s %1$s %2$s–%6$s %4$s %5$s</string>
+    <string name="wday1_date1_wday2_date2">%1$s %2$s–%4$s %5$s</string>
+    <string name="date1_time1_date2_time2">%3$s %2$s–%6$s %5$s</string>
+    <string name="time_wday_date">%1$s %2$s %3$s</string>
+    <string name="wday_date">%2$s %3$s</string>
+    <string name="time_wday">%1$s %2$s</string>
+    <string name="same_year_md1_md2">%3$s. %2$s–%8$s. %7$s</string>
+    <string name="same_year_wday1_md1_wday2_md2">%1$s %3$s. %2$s–%6$s %8$s. %7$s</string>
+    <string name="same_year_md1_time1_md2_time2">%5$s %3$s. %2$s–%10$s %8$s. %7$s</string>
+    <string name="same_month_md1_time1_md2_time2">%5$s %3$s. %2$s–%10$s %8$s. %7$s</string>
+    <string name="same_year_wday1_md1_time1_wday2_md2_time2">%5$s %1$s %3$s. %2$s–%10$s %6$s %8$s. %7$s</string>
+    <string name="same_month_wday1_md1_time1_wday2_md2_time2">%5$s %1$s %3$s. %2$s–%10$s %6$s %8$s. %7$s</string>
+    <string name="same_year_mdy1_time1_mdy2_time2">%5$s %3$s. %2$s %4$s–%10$s %8$s. %7$s %9$s</string>
+    <string name="same_month_mdy1_time1_mdy2_time2">%5$s %3$s. %2$s %4$s–%10$s %8$s. %7$s %9$s</string>
+    <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">%5$s %1$s %3$s. %2$s %4$s–%10$s %6$s %8$s. %7$s %9$s</string>
+    <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">%5$s %1$s %3$s. %2$s %4$s–%10$s %6$s %8$s. %7$s %9$s</string>
+    <string name="same_month_wday1_mdy1_wday2_mdy2">%1$s %3$s. %2$s %4$s–%6$s %8$s. %7$s %9$s</string>
+    <string name="same_month_md1_md2">%3$s.–%8$s. %2$s</string>
+    <string name="same_month_wday1_md1_wday2_md2">%1$s %3$s. %2$s–%6$s %8$s. %7$s</string>
+    <string name="same_year_mdy1_mdy2">%3$s. %2$s–%8$s. %7$s %9$s</string>
+    <string name="same_month_mdy1_mdy2">%3$s.–%8$s. %2$s %9$s</string>
+    <string name="same_year_wday1_mdy1_wday2_mdy2">%1$s %3$s. %2$s–%6$s %8$s. %7$s %9$s</string>
+    <string name="short_format_month">%b</string>
+</resources>