Merge "Import translations. DO NOT MERGE" into klp-dev
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 0d5590d..215d108 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -174,6 +174,7 @@
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/print/IPrinterDiscoverySessionObserver.*)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/print/IPrinterDiscoverySessionClient.*)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/os/IBattery*)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/docs/html/distribute/googleplay/policies/ads.jd b/docs/html/distribute/googleplay/policies/ads.jd
index 8920499..815dd08 100644
--- a/docs/html/distribute/googleplay/policies/ads.jd
+++ b/docs/html/distribute/googleplay/policies/ads.jd
@@ -9,8 +9,8 @@
<li><a href="#context">Context and Behavior</a></li>
<li><a href="#disclosure" style="clear:right">Disclosure</a></li>
<li><a href="#impersonation">Impersonation of System UI</a></li>
- <li><a href="#adwalls">Adwalls</a></li>
- <li><a href="#interfering" style="clear:right;">Interference with Ads and Websites</a></li>
+ <li><a href="#adwalls">Adwalls and Interstitial Ads</a></li>
+ <li><a href="#interfering" style="clear:right;">Interference with Apps and Third-Party Ads</a></li>
</ol>
<h2>More Resources</h2>
@@ -130,22 +130,20 @@
</li>
<li>
- <strong>Make sure app origin is clear</strong>—When you display an
- ad, it must be clear to the user that the ad has originated from your app.
- If you show the ad in your app's UI while your app has focus, the user
- understands the ad origin without explicit attribution. However, if you
- display the ad outside of your app, such as in a notification, you must
- explicitly indicate the origin.
- </li>
-
- <li>
<strong>Don't make changes outside of the app without consent</strong>
—Ads must not make changes outside of the app without the user's
- full knowledge and consent. For example, ads should not install shortcuts,
- bookmarks, or icons, or change default settings without user consent.
+ full knowledge and consent.
</li>
<li>
+ <div class="example-block bad" style="width:360px;margin:1em 0 0 2em;">
+ <div class="heading">Ads through system-level notifications</div>
+ <img src="{@docRoot}images/gp-policy-ads-notif-attr-violation.png">
+ </div>
+ <div class="example-block good" style="width:360px;margin:.5em 0 0 2em;">
+ <div class="heading">Notification that's part of the app's feature set</div>
+ <img src="{@docRoot}images/gp-policy-ads-notif-attr.png">
+ </div>
<strong>Changes outside the app must be reversible</strong>—If an
ad makes changes outside the app as described above, the changes (and
origin app) must be evident and easily reversible. For example, the user
@@ -154,51 +152,31 @@
</li>
<li>
- <strong>Notification ads require user opt-in</strong>—Your app
- should not create <a href=
+ <strong>Notification ads are prohibited</strong>—Your app
+ should not create system-level <a href=
"{@docRoot}design/patterns/notifications.html">notifications</a>
- containing ads unless the user has specifically opted-in to this behavior
- and is able to easily opt-out.
+ containing ads unless the notifications are part of the explicit
+ feature set of the app.
</li>
<li>
- <strong>Use low priority for notification ads</strong>—Always
- assign your notification ads <a href="
- {@docRoot}reference/android/app/Notification.html#PRIORITY_LOW">low
- priority</a> (for API level 16 and above).
+ <strong>Don't add shortcuts, bookmarks, or icons</strong>—Your app
+ and its ads must not add homescreen shortcuts, browser bookmarks, or icons
+ on the user's device as a service to third parties or for advertising
+ purposes.
</li>
</ul>
-<div class="example-block bad" style="width:400px;margin:.5em 0 0 2em;">
- <div class="heading">Does not fully indicate origin app</div>
- <img src="{@docRoot}images/gp-policy-ads-notif-attr-violation.png">
-</div>
-<div class="example-block good" style="width:400px;margin:.5em 0 0 2em;">
- <div class="heading">Indicates origin app by name and icon</div>
- <img src="{@docRoot}images/gp-policy-ads-notif-attr.png">
-</div>
-
<p>
- In particular, note that notification ads must clearly identify your app as
- the ad origin. If your app sends notification ads that do not sufficiently
- identify your app as the origin, the app will be in violation of policy.
+ Above right is an example notification ad that violates ad policy by
+ providing ads through system level notification.
</p>
-
<p>
- To identify your app as the origin, you should display the <strong>app's full
- name and and icon</strong> in the notification to provide the clearest
- identification and best policy compliance. Displaying a partial app name can
- also be sufficient, provided the name unambiguously identifies your app.
+ Below right, the notification ad complies with policy because the
+ nature of the notification is part of the explicit feature set of the app,
+ and it also provides attribution of the origin app.
</p>
-<p>
- Above right is an example notification ad that violates ad policy by not
- providing attribution of the origin app. Below right, the notification ads
- comply with policy by providing both the app icon and full app name (in this
- case, "Turtle Test").
-</p>
-
-
<h2 id="disclosure" style="clear:right">Disclosure of Ads to Users</h2>
<p>
@@ -218,6 +196,14 @@
</li>
<li>
+ <div class="example-block good" style="width:213px;margin-left:.5em;">
+ <div class="heading">Disclosure in Terms</div>
+ <img src="{@docRoot}images/gp-policy-ads-terms.png">
+ </div>
+ <div class="example-block bad" style="width:213px;">
+ <div class="heading">Disclosure is hidden</div>
+ <img src="{@docRoot}images/gp-policy-ads-eula-violation.png">
+ </div>
<strong>Make sure users know</strong>—Present your ads disclosure
is an easy-to-see location, rather than hiding it where users are not
likely to find it.
@@ -240,53 +226,40 @@
</p>
<p>
- If your app adds homescreen icons and/or browser bookmarks, an acceptable
- practice for revealing that behavior is to provide a disclosure in both the
- app description and an opt-in EULA on app launch. This ensures that the
- behaviors are clearly explained to the user up-front and requires the user’s
- consent in a pop-up EULA to continue using the app.
-</p>
-
-<div class="example-block good" style="width:213px;margin-right:2em;">
- <div class="heading">Disclosure in Terms</div>
- <img src="{@docRoot}images/gp-policy-ads-terms.png">
-</div>
-
-<div class="example-block good" style="width:213px;">
- <div class="heading">Disclosure in EULA</div>
- <img src="{@docRoot}images/gp-policy-ads-eula.png">
-</div>
-
-<div class="example-block bad" style="width:213px;margin-left:0em;">
- <div class="heading">Disclosure is hidden</div>
- <img src="{@docRoot}images/gp-policy-ads-eula-violation.png">
-</div>
-
-<p style="clear:right">
Above left is an example of ads disclosure that is hidden in a long EULA. The
disclosure information itself is not clearly indicated in the document text
and it's not visible unless the user happens to scroll down far enough in the
- EULA. Above middle and right show two alternative approaches that
- present the disclosure in an obvious and clear manner at the top of a
- EULA and in a dedicated Terms agreement.
+ EULA.
+</p>
+<p>
+ Above right shows an approach that presents the disclosure in an obvious
+ and clear manner in a EULA and a dedicated Terms agreement.
</p>
<h2 id="impersonation">Impersonation of System UI</h2>
-<div class="example-block bad">
- <div class="heading">Ad impersonates system dialog</div>
- <img src="{@docRoot}images/gp-policy-ads-impersonate-violation.png">
-</div>
+
+
+
+
+
+
<p>
- Your app must not display any ad that attempts to impersonate or represent a
+ Ads must not simulate or impersonate the user interface of any app, or
+ notification and warning elements of an operating system. Your app must not
+ display any ad that attempts to impersonate or represent a
system function or UI component. If such an ad is displayed in your app, your
app will be in violation of policy and subject to suspension. Here are some
guidelines:
</p>
-<ul>
+<ul>
+ <li>
+ <strong>No fake app UI notifications</strong>—Ads should not impersonate
+ the interface of an application for advertising purposes.
+ </li>
<li>
<strong>No fake system dialogs or warnings</strong>—Any ad that
presents itself as a system dialog or warning and asks for user input is in
@@ -299,23 +272,26 @@
</li>
</ul>
-<p>
- At right is an example of a pop-up ad impersonating a system dialog, warning
- the user about viruses. This is a violation of policy.
+<div class="example-block bad" style="width:213px;">
+ <div class="heading">Ad impersonates app UI</div>
+ <img src="{@docRoot}images/gp-policy-ads-impersonate-violation-app-ui.png">
+</div>
+<div class="example-block bad" style="width:213px;">
+ <div class="heading">Ad impersonates system warning</div>
+ <img src="{@docRoot}images/gp-policy-ads-impersonate-violation-sys-warning.png">
+</div>
+<div class="example-block bad" style="width:213px;">
+ <div class="heading">Ad impersonates system dialog</div>
+ <img src="{@docRoot}images/gp-policy-ads-impersonate-violation.png">
+</div>
+<p style="clear:both">
+ Above are examples of impersonations — a pop-up ad that impersonates a
+ system dialog, an ad that impersonates a system warning, and an ad that impersonates
+ an application UI. All of these are in violation of policy.
</p>
-<h2 id="adwalls">Adwalls</h2>
-
-<div class="example-block good" style="width:213px;">
- <div class="heading">Adwall lets user cancel</div>
- <img src="{@docRoot}images/gp-policy-ads-paywall.png">
-</div>
-
-<div class="example-block bad" style="width:213px;">
- <div class="heading">Adwall forces user action</div>
- <img src="{@docRoot}images/gp-policy-ads-paywall-violation.png">
-</div>
+<h2 id="adwalls">Adwalls and Interstitial Ads</h2>
<p>
If your app uses adwalls to drive affiliate traffic, those adwalls must not
@@ -330,23 +306,45 @@
<p>
For this reason, <strong>all adwalls must give the user the option to
- cancel</strong> or otherwise dismiss the ad without penalty.
+ cancel</strong> or otherwise dismiss the ad without penalty. Interstitial ads
+ may only be displayed inside of the app they came with. Forcing the user to
+ click on ads or submit personal information for advertising purposes in order
+ to fully use an app is prohibited.
</p>
-<p>
- At right is an example of an app that requires the user to click through the
+<div class="example-block bad" style="width:213px;">
+ <div class="heading">Interstitial, modal ad</div>
+ <img src="{@docRoot}images/gp-policy-ads-interstitial-violation.png">
+</div>
+
+<div class="example-block good" style="width:213px;">
+ <div class="heading">Adwall lets user cancel</div>
+ <img src="{@docRoot}images/gp-policy-ads-paywall.png">
+</div>
+
+<div class="example-block bad" style="width:213px;">
+ <div class="heading">Adwall forces user action</div>
+ <img src="{@docRoot}images/gp-policy-ads-paywall-violation.png">
+</div>
+
+<p style="clear:both">
+ At left is an example of an app that requires the user to click through the
ad to fully use the app. This is a violation of policy.
</p>
<p>
- The adjacent example demonstrates an adequate option to let the user dismiss
- the ad wall easily by cancelling.
+ The center example demonstrates an adequate option to let the user dismiss
+ the ad wall easily by cancelling. This is not a violation of policy.
</p>
+<p>
+ At right is an example of an interstitial, modal ad that is displayed outside
+ of the app. This is no a violation of policy.
+</p>
-<h2 id="interfering" style="clear:right;">Interference with Third-party Ads and Websites</h2>
+<h2 id="interfering" style="clear:right;">Interfering with Apps and Third-Party Ads</h2>
<p>
- Ads associated with your app <strong>must not interfere</strong> with any
- other ads originating in other applications.
+ Ads associated with your app <strong>must not interfere</strong> with other
+ apps or their ads.
</p>
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/policies/spam.jd b/docs/html/distribute/googleplay/policies/spam.jd
index 602c89a..f4d303c 100644
--- a/docs/html/distribute/googleplay/policies/spam.jd
+++ b/docs/html/distribute/googleplay/policies/spam.jd
@@ -251,6 +251,11 @@
<h2 id="ratings">Spam in Ratings and Reviews</h2>
+<div class="example-block bad" style="width:440px;">
+ <div class="heading">Inappropriate content in a review</div>
+ <img src="{@docRoot}images/gp-policy-spam-negreview.png">
+</div>
+
<p>
Ratings and reviews are benchmarks of app quality and users depend on them to
be authentic and relevant. As an app developer, you should not attempt to
@@ -276,12 +281,7 @@
more information.
</p>
-<div class="example-block bad" style="width:440px;">
- <div class="heading">Inappropriate content in a review</div>
- <img src="{@docRoot}images/gp-policy-spam-negreview.png">
-</div>
-
-<div class="example-block bad" style="margin-top:3em;">
+<div class="example-block bad" style="margin-top:3em;width:213px;">
<div class="heading">Soliciting ratings</div>
<img src="{@docRoot}images/gp-policy-spam-reqrating.png">
</div>
diff --git a/docs/html/images/gp-policy-ads-eula-violation.png b/docs/html/images/gp-policy-ads-eula-violation.png
index e8ffa5b..204c320 100644
--- a/docs/html/images/gp-policy-ads-eula-violation.png
+++ b/docs/html/images/gp-policy-ads-eula-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-eula.png b/docs/html/images/gp-policy-ads-eula.png
deleted file mode 100644
index 68a6b95..0000000
--- a/docs/html/images/gp-policy-ads-eula.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-impersonate-violation-app-ui.png b/docs/html/images/gp-policy-ads-impersonate-violation-app-ui.png
new file mode 100644
index 0000000..a2a39a9
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-impersonate-violation-app-ui.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-impersonate-violation-sys-warning.png b/docs/html/images/gp-policy-ads-impersonate-violation-sys-warning.png
new file mode 100644
index 0000000..f323b06
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-impersonate-violation-sys-warning.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-interstitial-violation.png b/docs/html/images/gp-policy-ads-interstitial-violation.png
new file mode 100644
index 0000000..4871493
--- /dev/null
+++ b/docs/html/images/gp-policy-ads-interstitial-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-notif-attr-violation.png b/docs/html/images/gp-policy-ads-notif-attr-violation.png
index af53f10..3d6393b 100644
--- a/docs/html/images/gp-policy-ads-notif-attr-violation.png
+++ b/docs/html/images/gp-policy-ads-notif-attr-violation.png
Binary files differ
diff --git a/docs/html/images/gp-policy-ads-notif-attr.png b/docs/html/images/gp-policy-ads-notif-attr.png
index 4934d21..da39cfb 100644
--- a/docs/html/images/gp-policy-ads-notif-attr.png
+++ b/docs/html/images/gp-policy-ads-notif-attr.png
Binary files differ
diff --git a/docs/html/images/gp-policy-spam-reqrating.png b/docs/html/images/gp-policy-spam-reqrating.png
index aaf9e53..3dc7d6f 100644
--- a/docs/html/images/gp-policy-spam-reqrating.png
+++ b/docs/html/images/gp-policy-spam-reqrating.png
Binary files differ
diff --git a/media/java/android/media/Image.java b/media/java/android/media/Image.java
index d06eeb31..9f442f5 100644
--- a/media/java/android/media/Image.java
+++ b/media/java/android/media/Image.java
@@ -55,11 +55,11 @@
* the planes is as follows:
*
* <table>
- * <th>
- * <td>Format</td>
- * <td>Plane count</td>
- * <td>Layout details</td>
- * </th>
+ * <tr>
+ * <th>Format</th>
+ * <th>Plane count</th>
+ * <th>Layout details</th>
+ * </tr>
* <tr>
* <td>{@link android.graphics.ImageFormat#JPEG}</td>
* <td>1</td>
diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp
index 7d914d2..7f1d946 100644
--- a/media/jni/android_media_ImageReader.cpp
+++ b/media/jni/android_media_ImageReader.cpp
@@ -35,7 +35,6 @@
#define ALIGN(x, mask) ( ((x) + (mask) - 1) & ~((mask) - 1) )
-#define ANDROID_MEDIA_IMAGEREADER_JNI_ID "mCpuConsumer"
#define ANDROID_MEDIA_IMAGEREADER_CTX_JNI_ID "mNativeContext"
#define ANDROID_MEDIA_SURFACEIMAGE_BUFFER_JNI_ID "mLockedBuffer"
#define ANDROID_MEDIA_SURFACEIMAGE_TS_JNI_ID "mTimestamp"
diff --git a/packages/ExternalStorageProvider/res/values-af/strings.xml b/packages/ExternalStorageProvider/res/values-af/strings.xml
new file mode 100644
index 0000000..56552fd
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-af/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"Eksterne berging"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Interne berging"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-da/strings.xml b/packages/ExternalStorageProvider/res/values-da/strings.xml
new file mode 100644
index 0000000..b94e665
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-da/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"Ekstern lagerplads"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Intern lagerplads"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-el/strings.xml b/packages/ExternalStorageProvider/res/values-el/strings.xml
new file mode 100644
index 0000000..06e26d7
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-el/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"Εξωτερικός αποθηκευτικός χώρος"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Εσωτερικός αποθηκευτικός χώρος"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml b/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..360d941
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..360d941
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-es/strings.xml b/packages/ExternalStorageProvider/res/values-es/strings.xml
new file mode 100644
index 0000000..8e35245
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-es/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"Almacenamiento externo"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Almacenamiento interno"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-it/strings.xml b/packages/ExternalStorageProvider/res/values-it/strings.xml
new file mode 100644
index 0000000..c5dcacd
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-it/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"Archivio esterno"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Memoria interna"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-iw/strings.xml b/packages/ExternalStorageProvider/res/values-iw/strings.xml
new file mode 100644
index 0000000..62f4471
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-iw/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"אחסון חיצוני"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"אחסון פנימי"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml b/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..dd6e55a
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"ບ່ອນຈັດເກັບຂໍ້ມູນພາຍນອກ"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"ບ່ອນຈັດເກັບຂໍ້ມູນພາຍໃນ"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-nb/strings.xml b/packages/ExternalStorageProvider/res/values-nb/strings.xml
new file mode 100644
index 0000000..223eb7a
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-nb/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"Ekstern lagring"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-nl/strings.xml b/packages/ExternalStorageProvider/res/values-nl/strings.xml
new file mode 100644
index 0000000..402c94b
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-nl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"Externe opslag"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Interne opslag"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-sv/strings.xml b/packages/ExternalStorageProvider/res/values-sv/strings.xml
new file mode 100644
index 0000000..6b82ab3
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-sv/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"Extern lagring"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-uk/strings.xml b/packages/ExternalStorageProvider/res/values-uk/strings.xml
new file mode 100644
index 0000000..7a8c161
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-uk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7123375275748530234">"Зовнішня пам’ять"</string>
+ <string name="root_internal_storage" msgid="827844243068584127">"Внутрішня пам’ять"</string>
+</resources>
diff --git a/packages/services/Proxy/AndroidManifest.xml b/packages/services/Proxy/AndroidManifest.xml
index 09b8327..bbcd6b9 100644
--- a/packages/services/Proxy/AndroidManifest.xml
+++ b/packages/services/Proxy/AndroidManifest.xml
@@ -13,12 +13,5 @@
android:exported="true">
</service>
- <receiver android:name=".ProxyServiceReceiver">
-
- <intent-filter>
- <action android:name="android.intent.action.PROXY_CHANGE" />
- </intent-filter>
- </receiver>
-
</application>
</manifest>
diff --git a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java b/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java
index 5d8689e..77f3c8c 100644
--- a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java
+++ b/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java
@@ -1,7 +1,20 @@
-
+/**
+ * Copyright (c) 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.android.proxyhandler;
-import android.net.ProxyProperties;
import android.util.Log;
import com.google.android.collect.Lists;
@@ -36,7 +49,6 @@
public boolean mIsRunning = false;
private ServerSocket serverSocket;
- private ProxyProperties mProxy;
private class ProxyConnection implements Runnable {
private Socket connection;
@@ -48,8 +60,6 @@
@Override
public void run() {
try {
- android.net.Proxy.setHttpProxySystemProperty(mProxy);
-
String requestLine = getLine(connection.getInputStream());
if (requestLine == null) {
connection.close();
@@ -212,8 +222,4 @@
}
}
}
-
- public void setProxy(ProxyProperties proxy) {
- mProxy = proxy;
- }
}
diff --git a/packages/services/Proxy/src/com/android/proxyhandler/ProxyService.java b/packages/services/Proxy/src/com/android/proxyhandler/ProxyService.java
index 18ed645..cef3659 100644
--- a/packages/services/Proxy/src/com/android/proxyhandler/ProxyService.java
+++ b/packages/services/Proxy/src/com/android/proxyhandler/ProxyService.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright (c) 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.android.proxyhandler;
import android.app.Service;
@@ -18,43 +33,17 @@
/** Keep these values up-to-date with PacManager.java */
public static final String KEY_PROXY = "keyProxy";
public static final String HOST = "localhost";
+ // STOPSHIP This being a static port means it can be hijacked by other apps.
public static final int PORT = 8182;
public static final String EXCL_LIST = "";
@Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- if (intent != null) {
- if (handleCommand(intent)) {
- return START_REDELIVER_INTENT;
- }
- }
- return START_NOT_STICKY;
- }
-
- private boolean handleCommand(Intent intent) {
- Bundle bundle = intent.getExtras();
- ProxyProperties proxy = null;
- if ((bundle != null) && bundle.containsKey(Proxy.EXTRA_PROXY_INFO)) {
- proxy = bundle.getParcelable(Proxy.EXTRA_PROXY_INFO);
- if ((proxy != null) && !TextUtils.isEmpty(proxy.getPacFileUrl())) {
- startProxy(proxy);
- return true;
- } else {
- stopSelf();
- }
- } else {
- stopSelf();
- }
- return false;
- }
-
-
- private void startProxy(ProxyProperties proxy) {
+ public void onCreate() {
+ super.onCreate();
if (server == null) {
server = new ProxyServer();
server.startServer();
}
- server.setProxy(proxy);
}
@Override
diff --git a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServiceReceiver.java b/packages/services/Proxy/src/com/android/proxyhandler/ProxyServiceReceiver.java
deleted file mode 100644
index 4638def..0000000
--- a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServiceReceiver.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.android.proxyhandler;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Proxy;
-import android.net.ProxyProperties;
-import android.os.Bundle;
-import android.text.TextUtils;
-
-public class ProxyServiceReceiver extends BroadcastReceiver {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- Intent service = new Intent(context, ProxyService.class);
- Bundle bundle = intent.getExtras();
- ProxyProperties proxy = null;
- if (bundle != null) {
- proxy = bundle.getParcelable(Proxy.EXTRA_PROXY_INFO);
- service.putExtra(Proxy.EXTRA_PROXY_INFO, proxy);
- }
- if ((proxy != null) && (!TextUtils.isEmpty(proxy.getPacFileUrl()))) {
- context.startService(service);
- } else {
- context.stopService(service);
- }
- }
-
-}
diff --git a/services/java/com/android/server/connectivity/PacManager.java b/services/java/com/android/server/connectivity/PacManager.java
index 0b68ff5..c8cc85e 100644
--- a/services/java/com/android/server/connectivity/PacManager.java
+++ b/services/java/com/android/server/connectivity/PacManager.java
@@ -48,10 +48,12 @@
* @hide
*/
public class PacManager {
- public static final String PROXY_PACKAGE = "com.android.pacprocessor";
- public static final String PROXY_SERVICE = "com.android.pacprocessor.PacService";
- public static final String PROXY_SERVICE_NAME = "com.android.net.IProxyService";
+ public static final String PAC_PACKAGE = "com.android.pacprocessor";
+ public static final String PAC_SERVICE = "com.android.pacprocessor.PacService";
+ public static final String PAC_SERVICE_NAME = "com.android.net.IProxyService";
+ public static final String PROXY_PACKAGE = "com.android.proxyhandler";
+ public static final String PROXY_SERVICE = "com.android.proxyhandler.ProxyService";
private static final String TAG = "PacManager";
@@ -73,6 +75,7 @@
private IProxyService mProxyService;
private PendingIntent mPacRefreshIntent;
private ServiceConnection mConnection;
+ private ServiceConnection mProxyConnection;
private Context mContext;
private int mCurrentDelay;
@@ -229,7 +232,7 @@
return;
}
Intent intent = new Intent();
- intent.setClassName(PROXY_PACKAGE, PROXY_SERVICE);
+ intent.setClassName(PAC_PACKAGE, PAC_SERVICE);
mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName component) {
@@ -242,12 +245,12 @@
public void onServiceConnected(ComponentName component, IBinder binder) {
synchronized (mProxyLock) {
try {
- Log.d(TAG, "Adding service " + PROXY_SERVICE_NAME + " "
+ Log.d(TAG, "Adding service " + PAC_SERVICE_NAME + " "
+ binder.getInterfaceDescriptor());
} catch (RemoteException e1) {
Log.e(TAG, "Remote Exception", e1);
}
- ServiceManager.addService(PROXY_SERVICE_NAME, binder);
+ ServiceManager.addService(PAC_SERVICE_NAME, binder);
mProxyService = IProxyService.Stub.asInterface(binder);
if (mProxyService == null) {
Log.e(TAG, "No proxy service");
@@ -262,13 +265,27 @@
}
}
};
- Log.e(TAG, "Attempting to bind");
mContext.bindService(intent, mConnection,
Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND | Context.BIND_NOT_VISIBLE);
+
+ intent = new Intent();
+ intent.setClassName(PROXY_PACKAGE, PROXY_SERVICE);
+ mProxyConnection = new ServiceConnection() {
+ @Override
+ public void onServiceDisconnected(ComponentName component) {
+ }
+
+ @Override
+ public void onServiceConnected(ComponentName component, IBinder binder) {
+ }
+ };
+ mContext.bindService(intent, mProxyConnection,
+ Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND | Context.BIND_NOT_VISIBLE);
}
private void unbind() {
mContext.unbindService(mConnection);
+ mContext.unbindService(mProxyConnection);
mConnection = null;
}
}