Merge "Add a testcase to test PNG files support for KenBurn effect."
diff --git a/api/13.xml b/api/13.xml
index 9af0640..2bfa04e 100644
--- a/api/13.xml
+++ b/api/13.xml
@@ -25290,7 +25290,7 @@
abstract="false"
static="false"
final="false"
- deprecated="not deprecated"
+ deprecated="deprecated"
visibility="public"
>
<constructor name="ActivityGroup"
@@ -30614,6 +30614,17 @@
visibility="public"
>
</method>
+<method name="isDetached"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="isHidden"
return="boolean"
abstract="false"
@@ -33935,7 +33946,7 @@
abstract="false"
static="false"
final="false"
- deprecated="not deprecated"
+ deprecated="deprecated"
visibility="public"
>
<constructor name="LocalActivityManager"
@@ -37009,7 +37020,7 @@
abstract="false"
static="false"
final="false"
- deprecated="not deprecated"
+ deprecated="deprecated"
visibility="public"
>
<constructor name="TabActivity"
@@ -61810,6 +61821,28 @@
visibility="public"
>
</field>
+<field name="FEATURE_SCREEN_LANDSCAPE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""android.hardware.screen.landscape""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="FEATURE_SCREEN_PORTRAIT"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""android.hardware.screen.portrait""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="FEATURE_SENSOR_ACCELEROMETER"
type="java.lang.String"
transient="false"
@@ -148973,6 +149006,17 @@
visibility="public"
>
</field>
+<field name="TWEET_TRANSACTION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1599362900"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
</interface>
<interface name="IBinder.DeathRecipient"
abstract="true"
diff --git a/api/current.txt b/api/current.txt
index 2df88e4..e2f7f8b 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -7419,6 +7419,7 @@
method public static final android.graphics.Bitmap.CompressFormat[] values();
enum_constant public static final android.graphics.Bitmap.CompressFormat JPEG;
enum_constant public static final android.graphics.Bitmap.CompressFormat PNG;
+ enum_constant public static final android.graphics.Bitmap.CompressFormat WEBP;
}
public static final class Bitmap.Config extends java.lang.Enum {
@@ -15279,11 +15280,11 @@
public final class ContactsContract {
ctor public ContactsContract();
+ field public static final java.lang.String ALLOW_PROFILE = "allow_profile";
field public static final java.lang.String AUTHORITY = "com.android.contacts";
field public static final android.net.Uri AUTHORITY_URI;
field public static final java.lang.String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter";
field public static final java.lang.String DIRECTORY_PARAM_KEY = "directory";
- field public static final java.lang.String INCLUDE_PROFILE = "include_profile";
field public static final java.lang.String LIMIT_PARAM_KEY = "limit";
field public static final java.lang.String PRIMARY_ACCOUNT_NAME = "name_for_primary_account";
field public static final java.lang.String PRIMARY_ACCOUNT_TYPE = "type_for_primary_account";
diff --git a/core/java/android/net/http/SslCertificate.java b/core/java/android/net/http/SslCertificate.java
index 5079c23..f35002a 100644
--- a/core/java/android/net/http/SslCertificate.java
+++ b/core/java/android/net/http/SslCertificate.java
@@ -16,15 +16,19 @@
package android.net.http;
+import android.content.Context;
import android.os.Bundle;
+import android.text.format.DateFormat;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+import java.security.cert.X509Certificate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
-import java.security.cert.X509Certificate;
-
import com.android.org.bouncycastle.asn1.DERObjectIdentifier;
import com.android.org.bouncycastle.asn1.x509.X509Name;
@@ -58,7 +62,7 @@
*/
private Date mValidNotAfter;
- /**
+ /**
* Bundle key names
*/
private static final String ISSUED_TO = "issued-to";
@@ -108,8 +112,10 @@
* Creates a new SSL certificate object
* @param issuedTo The entity this certificate is issued to
* @param issuedBy The entity that issued this certificate
- * @param validNotBefore The not-before date from the certificate validity period in ISO 8601 format
- * @param validNotAfter The not-after date from the certificate validity period in ISO 8601 format
+ * @param validNotBefore The not-before date from the certificate
+ * validity period in ISO 8601 format
+ * @param validNotAfter The not-after date from the certificate
+ * validity period in ISO 8601 format
* @deprecated Use {@link #SslCertificate(X509Certificate)}
*/
@Deprecated
@@ -202,9 +208,8 @@
* @return A string representation of this certificate for debugging
*/
public String toString() {
- return
- "Issued to: " + mIssuedTo.getDName() + ";\n" +
- "Issued by: " + mIssuedBy.getDName() + ";\n";
+ return ("Issued to: " + mIssuedTo.getDName() + ";\n"
+ + "Issued by: " + mIssuedBy.getDName() + ";\n");
}
/**
@@ -328,4 +333,65 @@
return mUName != null ? mUName : "";
}
}
+
+ /**
+ * Inflates the SSL certificate view (helper method).
+ * @return The resultant certificate view with issued-to, issued-by,
+ * issued-on, expires-on, and possibly other fields set.
+ * If the input certificate is null, returns null.
+ *
+ * @hide Used by Browser and Settings
+ */
+ public View inflateCertificateView(Context context) {
+ LayoutInflater factory = LayoutInflater.from(context);
+
+ View certificateView = factory.inflate(
+ com.android.internal.R.layout.ssl_certificate, null);
+
+ // issued to:
+ SslCertificate.DName issuedTo = getIssuedTo();
+ if (issuedTo != null) {
+ ((TextView) certificateView.findViewById(com.android.internal.R.id.to_common))
+ .setText(issuedTo.getCName());
+ ((TextView) certificateView.findViewById(com.android.internal.R.id.to_org))
+ .setText(issuedTo.getOName());
+ ((TextView) certificateView.findViewById(com.android.internal.R.id.to_org_unit))
+ .setText(issuedTo.getUName());
+ }
+
+ // issued by:
+ SslCertificate.DName issuedBy = getIssuedBy();
+ if (issuedBy != null) {
+ ((TextView) certificateView.findViewById(com.android.internal.R.id.by_common))
+ .setText(issuedBy.getCName());
+ ((TextView) certificateView.findViewById(com.android.internal.R.id.by_org))
+ .setText(issuedBy.getOName());
+ ((TextView) certificateView.findViewById(com.android.internal.R.id.by_org_unit))
+ .setText(issuedBy.getUName());
+ }
+
+ // issued on:
+ String issuedOn = formatCertificateDate(context, getValidNotBeforeDate());
+ ((TextView) certificateView.findViewById(com.android.internal.R.id.issued_on))
+ .setText(issuedOn);
+
+ // expires on:
+ String expiresOn = formatCertificateDate(context, getValidNotAfterDate());
+ ((TextView) certificateView.findViewById(com.android.internal.R.id.expires_on))
+ .setText(expiresOn);
+
+ return certificateView;
+ }
+
+ /**
+ * Formats the certificate date to a properly localized date string.
+ * @return Properly localized version of the certificate date string and
+ * the "" if it fails to localize.
+ */
+ private String formatCertificateDate(Context context, Date certificateDate) {
+ if (certificateDate == null) {
+ return "";
+ }
+ return DateFormat.getDateFormat(context).format(certificateDate);
+ }
}
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index a17983a..21373ec 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -313,8 +313,8 @@
*/
public void release(int flags) {
synchronized (mToken) {
- mHandler.removeCallbacks(mReleaser);
if (!mRefCounted || --mCount == 0) {
+ mHandler.removeCallbacks(mReleaser);
try {
mService.releaseWakeLock(mToken, flags);
} catch (RemoteException e) {
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index b5a11ab..cb96bfd2 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -123,14 +123,16 @@
/**
* An optional URI parameter for selection queries that instructs the
- * provider to include the user's personal profile contact entry (if any)
- * in the contact results. If present, the user's profile will always be
- * the first entry returned. The default value is false.
+ * provider to allow the user's personal profile contact entry (if any)
+ * to appear in a list of contact results. It is only useful when issuing
+ * a query that may retrieve more than one contact. If present, the user's
+ * profile will always be the first entry returned. The default value is
+ * false.
*
* Specifying this parameter will result in a security error if the calling
* application does not have android.permission.READ_PROFILE permission.
*/
- public static final String INCLUDE_PROFILE = "include_profile";
+ public static final String ALLOW_PROFILE = "allow_profile";
/**
* A query parameter key used to specify the package that is requesting a query.
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 1b22e2d..18bd754 100644
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -273,7 +273,8 @@
// These must match the int values in Bitmap.java
enum JavaEncodeFormat {
kJPEG_JavaEncodeFormat = 0,
- kPNG_JavaEncodeFormat = 1
+ kPNG_JavaEncodeFormat = 1,
+ kWEBP_JavaEncodeFormat = 2
};
static bool Bitmap_compress(JNIEnv* env, jobject clazz, SkBitmap* bitmap,
@@ -288,6 +289,9 @@
case kPNG_JavaEncodeFormat:
fm = SkImageEncoder::kPNG_Type;
break;
+ case kWEBP_JavaEncodeFormat:
+ fm = SkImageEncoder::kWEBP_Type;
+ break;
default:
return false;
}
diff --git a/core/res/res/layout-land/ssl_certificate.xml b/core/res/res/layout-land/ssl_certificate.xml
new file mode 100644
index 0000000..56e4e70
--- /dev/null
+++ b/core/res/res/layout-land/ssl_certificate.xml
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<ScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+
+ <!-- Placeholder for the success message or one or more warnings -->
+ <LinearLayout
+ android:id="@+id/placeholder"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_marginTop="12dip"
+ android:orientation="vertical" />
+
+ <!-- Dialog-title line separator -->
+ <ImageView
+ android:id="@+id/title_separator"
+ android:src="@android:drawable/divider_horizontal_dark"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:scaleType="fitXY"
+ android:layout_weight="1"
+ android:gravity="fill_horizontal"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="12dip" />
+
+ <TableLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:shrinkColumns="1"
+ android:orientation="vertical">
+
+ <!-- Issued to: -->
+ <TextView
+ android:id="@+id/issued_to_header"
+ android:text="@string/issued_to"
+ android:textStyle="bold"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="7dip" />
+
+ <!-- Common name: -->
+ <TableRow>
+ <TextView
+ android:id="@+id/to_common_header"
+ android:text="@string/common_name"
+ android:gravity="left"
+ android:layout_marginLeft="20dip" />
+
+ <TextView
+ android:id="@+id/to_common"
+ android:gravity="left"
+ android:layout_marginLeft="10dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="7dip" />
+ </TableRow>
+
+ <!-- Organization: -->
+ <TableRow>
+ <TextView
+ android:id="@+id/to_org_header"
+ android:text="@string/org_name"
+ android:gravity="left"
+ android:layout_marginLeft="20dip" />
+
+ <TextView
+ android:id="@+id/to_org"
+ android:gravity="left"
+ android:layout_marginLeft="10dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="7dip" />
+ </TableRow>
+
+ <!-- Organizational unit: -->
+ <TableRow>
+ <TextView
+ android:id="@+id/to_org_unit_header"
+ android:text="@string/org_unit"
+ android:gravity="left"
+ android:layout_marginLeft="20dip" />
+
+ <TextView
+ android:id="@+id/to_org_unit"
+ android:gravity="left"
+ android:layout_marginLeft="10dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="12dip" />
+ </TableRow>
+
+ <!-- Issued by: -->
+ <TextView
+ android:id="@+id/issued_to_header"
+ android:text="@string/issued_by"
+ android:textStyle="bold"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="7dip" />
+
+ <!-- Common name: -->
+ <TableRow>
+ <TextView
+ android:id="@+id/by_common_header"
+ android:text="@string/common_name"
+ android:gravity="left"
+ android:layout_marginLeft="20dip" />
+
+ <TextView
+ android:id="@+id/by_common"
+ android:gravity="left"
+ android:layout_marginLeft="10dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="7dip" />
+ </TableRow>
+
+ <!-- Organization: -->
+ <TableRow>
+ <TextView
+ android:id="@+id/by_org_header"
+ android:text="@string/org_name"
+ android:gravity="left"
+ android:layout_marginLeft="20dip" />
+
+ <TextView
+ android:id="@+id/by_org"
+ android:gravity="left"
+ android:layout_marginLeft="10dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="7dip" />
+ </TableRow>
+
+ <!-- Organizational unit: -->
+ <TableRow>
+ <TextView
+ android:id="@+id/by_org_unit_header"
+ android:text="@string/org_unit"
+ android:gravity="left"
+ android:layout_marginLeft="20dip" />
+
+ <TextView
+ android:id="@+id/by_org_unit"
+ android:gravity="left"
+ android:layout_marginLeft="10dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="12dip" />
+ </TableRow>
+
+ <!-- Validity Dates: -->
+ <TextView
+ android:id="@+id/validity_header"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/validity_period"
+ android:textStyle="bold"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="7dip" />
+
+ <!-- Issued On: -->
+ <TableRow>
+ <TextView
+ android:id="@+id/issued_on_header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/issued_on"
+ android:gravity="left"
+ android:layout_marginLeft="20dip" />
+
+ <TextView
+ android:id="@+id/issued_on"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="10dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="7dip" />
+
+ </TableRow>
+
+ <!-- Expires On: -->
+ <TableRow>
+ <TextView
+ android:id="@+id/expires_on_header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/expires_on"
+ android:gravity="left"
+ android:layout_marginLeft="20dip" />
+
+ <TextView
+ android:id="@+id/expires_on"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="10dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="12dip" />
+ </TableRow>
+
+ </TableLayout>
+
+ </LinearLayout>
+
+</ScrollView>
diff --git a/core/res/res/layout/ssl_certificate.xml b/core/res/res/layout/ssl_certificate.xml
new file mode 100644
index 0000000..7206077
--- /dev/null
+++ b/core/res/res/layout/ssl_certificate.xml
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<ScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+
+ <!-- Placeholder for the success message or one or more warnings -->
+ <LinearLayout
+ android:id="@+id/placeholder"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_marginTop="12dip"
+ android:orientation="vertical" />
+
+ <!-- Dialog-title line separator -->
+ <ImageView
+ android:id="@+id/title_separator"
+ android:src="@android:drawable/divider_horizontal_dark"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:scaleType="fitXY"
+ android:layout_weight="1"
+ android:gravity="fill_horizontal"
+ android:layout_marginRight="20dip"
+ android:layout_marginLeft="20dip"
+ android:layout_marginBottom="12dip" />
+
+ <TableLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <!-- Issued to: -->
+ <TextView
+ android:id="@+id/issued_to_header"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/issued_to"
+ android:textStyle="bold"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="10dip" />
+
+ <!-- Common name: -->
+ <TextView
+ android:id="@+id/to_common_header"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/common_name"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip" />
+
+ <TextView
+ android:id="@+id/to_common"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="10dip" />
+
+ <!-- Organization: -->
+ <TextView
+ android:id="@+id/to_org_header"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/org_name"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip" />
+
+ <TextView
+ android:id="@+id/to_org"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="10dip" />
+
+ <!-- Organizational unit: -->
+ <TextView
+ android:id="@+id/to_org_unit_header"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/org_unit"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip" />
+
+ <TextView
+ android:id="@+id/to_org_unit"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="12dip" />
+
+ <!-- Issued by: -->
+ <TextView
+ android:id="@+id/issued_to_header"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/issued_by"
+ android:textStyle="bold"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="10dip" />
+
+ <!-- Common name: -->
+ <TextView
+ android:id="@+id/by_common_header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/common_name"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip" />
+
+ <TextView
+ android:id="@+id/by_common"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="10dip" />
+
+ <!-- Organization: -->
+ <TextView
+ android:id="@+id/by_org_header"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/org_name"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip" />
+
+ <TextView
+ android:id="@+id/by_org"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="10dip" />
+
+ <!-- Organizational unit: -->
+ <TextView
+ android:id="@+id/by_org_unit_header"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/org_unit"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip" />
+
+ <TextView
+ android:id="@+id/by_org_unit"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="12dip" />
+
+ <!-- Validity Dates: -->
+ <TextView
+ android:id="@+id/validity_header"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/validity_period"
+ android:textStyle="bold"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="10dip" />
+
+ <!-- Issued On: -->
+ <TextView
+ android:id="@+id/issued_on_header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/issued_on"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip" />
+
+ <TextView
+ android:id="@+id/issued_on"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="10dip" />
+
+ <!-- Expires On: -->
+ <TextView
+ android:id="@+id/expires_on_header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/expires_on"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip" />
+
+ <TextView
+ android:id="@+id/expires_on"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:gravity="left"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:layout_marginBottom="12dip" />
+
+ </TableLayout>
+
+ </LinearLayout>
+
+</ScrollView>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index a326712..648f665 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"شهادة الأمان"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"هذه الشهادة صالحة."</string>
+ <string name="issued_to" msgid="9032338008819841339">"تم الإصدار إلى:"</string>
+ <string name="common_name" msgid="5745530093500062357">"الاسم الشائع:"</string>
+ <string name="org_name" msgid="8868889052889991293">"المؤسسة:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"وحدة تنظيمية:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"تم الإصدار بواسطة:"</string>
+ <string name="validity_period" msgid="57988851973181309">"الصلاحية:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"تم الإصدار في:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"تنتهي الصلاحية في:"</string>
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 5633807..6401b1c 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Сертификат за сигурност"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Сертификатът е валиден."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Издаден на:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Общо име:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Организация:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Организационна единица:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Издаден от:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Валидност:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Издаден на:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Изтича на:"</string>
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index e812217..a2e75d3e 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certificat de seguretat"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Aquest certificat és vàlid."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Emès per a:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nom comú:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organització:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Unitat organitzativa:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Publicat per:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Validesa:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Publicat el:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Caduca el:"</string>
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index d10e1b4..ca3035d 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certifikát zabezpečení"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Tento certifikát je platný."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Vydáno komu:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Běžný název:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organizace:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organizační jednotka:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Vydal:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Platnost:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Datum vydání:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Platnost vyprší:"</string>
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index a7f62ec..7153416 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Sikkerhedscertifikat"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Dette certifikat er gyldigt."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Udstedt til:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Fællesnavn:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisation:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organisatorisk enhed:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Udstedt af:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Gyldighed:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Udstedt den:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Udløber den:"</string>
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index afa606f..9753482 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Sicherheitszertifikat"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Dies ist ein gültiges Zertifikat."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Ausgegeben an:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Allgemeiner Name."</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisation:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organisationseinheit:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Ausgegeben von:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Gültigkeit:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Ausgegeben am:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Läuft ab am:"</string>
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 65d04b4..81b9107 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Πιστοποιητικό ασφαλείας"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Αυτό το πιστοποιητικό είναι έγκυρο."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Εκδόθηκε στις:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Κοινό όνομα:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Οργανισμός:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Μονάδα οργάνωσης:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Εκδόθηκε:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Ισχύς:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Εκδόθηκε στις:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Λήγει:"</string>
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index c048b99..7c2cc2f 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certificado de seguridad"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Este certificado es válido."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Emitido para:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nombre común:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organización:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Departamento:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Emitido por:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Validez:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Fecha de emisión:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Fecha de caducidad:"</string>
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 4ea2aa7..48ad6f1 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"گواهی امنیتی"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"این گواهی معتبر است."</string>
+ <string name="issued_to" msgid="9032338008819841339">"صدور برای:"</string>
+ <string name="common_name" msgid="5745530093500062357">"نام عادی:"</string>
+ <string name="org_name" msgid="8868889052889991293">"سازمان:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"واحد سازمانی:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"صدور توسط:"</string>
+ <string name="validity_period" msgid="57988851973181309">"اعتبار:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"صدور در:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"تاریخ انقضا:"</string>
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 50c0268..5ddbb45 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Suojausvarmenne"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Varmenne on voimassa."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Varmenteen saaja:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Yleinen nimi:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisaatio:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organisaatioyksikkö:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Myöntäjä:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Voimassa:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Myönnetty:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Vanhenee:"</string>
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 8d95338..fe1dd13 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certificat de sécurité"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Ce certificat est valide."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Émis à :"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nom commun :"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisation :"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Unité d\'organisation :"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Émis par :"</string>
+ <string name="validity_period" msgid="57988851973181309">"Validité :"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Émis le :"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Expire le :"</string>
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 71d49cc..391fd08 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certifikat o sigurnosti"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Ovaj je certifikat valjan."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Izdano do:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Zajednički naziv:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Tvrtka ili ustanova:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organizacijska jedinica:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Izdao:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Vrijedi do:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Izdano dana:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Ističe dana:"</string>
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index bbe635f..c5e16cf 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Biztonsági tanúsítvány"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"A tanúsítvány érvényes."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Kiállítva a következőnek:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Név:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Szervezet:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Szervezeti egység:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Kiállította:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Érvényesség:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Kiállítva:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Lejár:"</string>
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 53d245a..4e7504a 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Sertifikat keamanan"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Sertifikat ini valid."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Diterbitkan ke:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nama umum:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisasi:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Unit organisasi:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Diterbitkan oleh:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Validitas:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Diterbitkan pada:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Kedaluwarsa pada:"</string>
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 3c9d909..10d1787 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certificato di protezione"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Questo certificato è valido."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Rilasciato a:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nome comune:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organizzazione:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Unità organizzativa:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Rilasciato da:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Validità:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Rilasciato il:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Scade il:"</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 71aa9f1..3fce696 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"אישור אבטחה"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"אישור זה תקף."</string>
+ <string name="issued_to" msgid="9032338008819841339">"הופק עבור:"</string>
+ <string name="common_name" msgid="5745530093500062357">"שם משותף:"</string>
+ <string name="org_name" msgid="8868889052889991293">"ארגון:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"יחידה ארגונית:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"הופק על ידי:"</string>
+ <string name="validity_period" msgid="57988851973181309">"חוקיות:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"הונפק בתאריך:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"פג תוקף ב:"</string>
</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 388b47b..9771a29 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"セキュリティ証明書"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"この証明書は有効です。"</string>
+ <string name="issued_to" msgid="9032338008819841339">"発行先:"</string>
+ <string name="common_name" msgid="5745530093500062357">"共通名:"</string>
+ <string name="org_name" msgid="8868889052889991293">"組織:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"組織単位:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"発行者:"</string>
+ <string name="validity_period" msgid="57988851973181309">"有効期間:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"発行:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"有効期限:"</string>
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index f7e1a75..a50f743 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"보안 인증서"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"유효한 인증서입니다."</string>
+ <string name="issued_to" msgid="9032338008819841339">"발급 대상:"</string>
+ <string name="common_name" msgid="5745530093500062357">"일반 이름:"</string>
+ <string name="org_name" msgid="8868889052889991293">"조직:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"조직 구성 단위:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"발급 기관:"</string>
+ <string name="validity_period" msgid="57988851973181309">"유효성:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"발급 날짜:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"만료 날짜:"</string>
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 549641f..d99d0ec 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Saugos sertifikatas"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Šis sertifikatas galioja."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Išduota:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Bendras pavadinimas:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organizacija:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organizacinis vienetas:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Išdavė:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Galiojimas:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Išduota:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Galiojimas baigiasi:"</string>
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index e32df3b..553f3ee 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Drošības sertifikāts"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Sertifikāts ir derīgs."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Izdots:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Kopējais nosaukums:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organizācija:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organizācijas vienība:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Izsniedzējs:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Derīgums:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Izsniegšanas datums:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Derīguma termiņš:"</string>
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 15896ae..f432672 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1127,4 +1127,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Sijil keselamatan"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Sijil ini sah."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Dikeluarkan kepada:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nama biasa:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisasi:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Unit Organisasi:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Dikeluarkan oleh:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Kesahan:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Dikeluarkan pada:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Tamat tempoh pada:"</string>
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index ca6d608..aca95fd 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Sikkerhetssertifikat"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Sertifikatet er gyldig."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Utstedt til:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Ordinært navn:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisasjon:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organisasjonsenhet:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Utstedt av:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Gyldighet:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Utstedt:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Utløper den:"</string>
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 8f54331..5fe75fc 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Beveiligingscertificaat"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Dit certificaat is geldig."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Uitgegeven voor:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Algemene naam:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisatie:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organisatie-eenheid:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Uitgegeven door:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Geldigheid:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Uitgegeven op:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Verloopt op:"</string>
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 10bc614..0221da7 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certyfikat zabezpieczeń"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Ten certyfikat jest prawidłowy."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Otrzymujący:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nazwa pospolita:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organizacja:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Jednostka organizacyjna:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Wystawca:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Poprawność:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Data wystawienia:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Wygasa:"</string>
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index a17277e..09f0876 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certificado de segurança"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Este certificado é válido."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Emitido para:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nome comum:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organização:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Unidade organizacional:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Emitido por:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Validade:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Emitido em:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Expira em:"</string>
</resources>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index b1fa217..c6fea8e 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -1223,4 +1223,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certificat da segirezza"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Quest certificat è valid."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Emess a:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Num general:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisaziun:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Unitad d\'organisaziun:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Emess da:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Validitad:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Emess ils:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Scroda ils:"</string>
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 404570a..25fdb54 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certificat de securitate"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Certificatul este valid."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Emis de:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nume comun:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organizaţie:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organizaţie:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Emis de:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Validitate:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Emis pe:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Expiră pe:"</string>
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 44cc9df..170ee85 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Сертификат безопасности"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Этот сертификат действителен."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Владелец сертификата:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Стандартное имя:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Организация:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Подразделение организации:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Выпущен:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Срок действия:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Дата издания:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Дата окончания действия:"</string>
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index dc962b1..4ef89b7 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certifikát zabezpečenia"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Certifikát je platný."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Vydané pre:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Bežný názov:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organizácia:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organizačná jednotka:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Vydal:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Platnosť:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Dátum vydania:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Platnosť vyprší:"</string>
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index e613bf0..86546e02 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Varnostno potrdilo"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Potrdilo je veljavno."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Izdano za:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Pogosto ime:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organizacija:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organizacijska enota:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Izdal:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Veljavnost:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Izdano:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Velja do:"</string>
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 455e1a9..2fd051c 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Безбедносни сертификат"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Овај сертификат је важећи."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Издато за:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Уобичајени назив:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Организација:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Организациона јединица:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Издавалац:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Ваљаност:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Издато дана:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Датум истека:"</string>
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 22ca7e2..a17dc8d 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Säkerhetscertifikat"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Detta certifikat är giltigt."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Utfärdat till:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Nätverksnamn:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Organisation:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Organisationsenhet:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Utfärdat av:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Giltighet:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Utfärdat den:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Upphör att gälla:"</string>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index b6de800..2eb1b79 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"ใบรับรองความปลอดภัย"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"ใบรับรองนี้ใช้งานได้"</string>
+ <string name="issued_to" msgid="9032338008819841339">"ออกให้แก่:"</string>
+ <string name="common_name" msgid="5745530093500062357">"ชื่อทั่วไป:"</string>
+ <string name="org_name" msgid="8868889052889991293">"องค์กร:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"หน่วยองค์กร:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"ออกโดย:"</string>
+ <string name="validity_period" msgid="57988851973181309">"อายุการใช้งาน:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"ออกเมื่อ:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"หมดอายุวันที่:"</string>
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index bba5e2f..760724b 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Certificate na pangseguridad"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Wasto ang certificate na ito."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Ibinigay kay:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Karaniwang pangalan:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Samahan:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Unit na pangsamahan:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Ibinigay ni:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Pagpapatunay:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Ibinigay noong:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Mag-e-expire sa:"</string>
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 3bce91b..f9f2a16 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Güvenlik sertifikası"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Bu sertifika geçerli."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Alıcı:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Ortak ad:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Kuruluş:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Kuruluş birimi:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Yayınlayan:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Geçerlilik:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Yayınlanma tarihi:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Sona erme tarihi:"</string>
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 3bb3788..02636af 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Сертифікат безпеки"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Цей сертифікат є дійсним."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Кому видано:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Загальне ім\'я:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Організація:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Організац. підрозділ:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Ким видано:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Чинність:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Дата видачі:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Діє до:"</string>
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index db408d8..1b1c8ba 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1106,4 +1106,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <string name="ssl_certificate" msgid="5226747157992111668">"Chứng chỉ bảo mật"</string>
+ <string name="ssl_certificate_is_valid" msgid="7096160815933145579">"Chứng chỉ này hợp lệ."</string>
+ <string name="issued_to" msgid="9032338008819841339">"Cấp cho:"</string>
+ <string name="common_name" msgid="5745530093500062357">"Tên chung:"</string>
+ <string name="org_name" msgid="8868889052889991293">"Tổ chức:"</string>
+ <string name="org_unit" msgid="4489056376307768196">"Đơn vị tổ chức:"</string>
+ <string name="issued_by" msgid="6959484326943152487">"Cấp bởi:"</string>
+ <string name="validity_period" msgid="57988851973181309">"Tính hợp lệ:"</string>
+ <string name="issued_on" msgid="2082890654801808368">"Cấp vào:"</string>
+ <string name="expires_on" msgid="8061200430557020704">"Hết hạn vào:"</string>
</resources>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index c9ac57a..03b332e 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -1021,7 +1021,7 @@
{@link #AndroidManifest manifest} tag. -->
<declare-styleable name="AndroidManifestSupportsScreens" parent="AndroidManifest">
<!-- Starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2},
- this is the new way to specify the screens an application is
+ this is the new way to specify the minimum screen size an application is
compatible with. This attribute provides the required minimum
"smallest screen width" (as per the -swNNNdp resource configuration)
that the application can run on. For example, a typical phone
@@ -1032,17 +1032,15 @@
or xlargeScreens attributes will be used instead. -->
<attr name="requiresSmallestWidthDp" format="integer" />
<!-- Starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2},
- this is the new way to specify the screens an application is
+ this is the new way to specify the largest screens an application is
compatible with. This attribute provides the maximum
"smallest screen width" (as per the -swNNNdp resource configuration)
that the application is designed for. If this value is smaller than
the "smallest screen width" of the device it is running on, the user
- will of offered to run it in a compatibility mode that emulates a
- smaller screen. Currently the compatibility mode only emulates
- phone screens, so it will not be used it the application provides
- a requiresSmallestWidthDp that is larger than 320. Typical values
- used with this attribute are 320 for a phone screen, 600 for a
- 7" tablet, and 720 for a 10" tablet. -->
+ is offered to run it in a compatibility mode that emulates a
+ smaller screen and zooms it to fit the screen. Currently the compatibility mode only
+ emulates phone screens with a 320dp width, so compatibility mode is not applied if the
+ value for compatibleWidthLimitDp is larger than 320. -->
<attr name="compatibleWidthLimitDp" format="integer" />
<!-- Starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2},
this is the new way to specify the screens an application is
@@ -1051,9 +1049,9 @@
that the application can work well on. If this value is smaller than
the "smallest screen width" of the device it is running on, the
application will be forced in to screen compatibility mode with
- no way for the user to turn it off. Currently the compatibility mode
- only emulates phone screens, so even if this value is larger than 320
- the width the app runs in will be a 320 phone dimension. -->
+ no way for the user to turn it off. Currently the compatibility mode only
+ emulates phone screens with a 320dp width, so compatibility mode is not applied if the
+ value for largestWidthLimitDp is larger than 320. -->
<attr name="largestWidthLimitDp" format="integer" />
<!-- Indicates whether the application supports smaller screen form-factors.
A small screen is defined as one with a smaller aspect ratio than
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index b5f4084..cd52a5a 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2959,4 +2959,26 @@
<!-- Notification body when data usage has exceeded limit threshold, and has been disabled. [CHAR LIMIT=32] -->
<string name="data_usage_limit_body">tap to enable</string>
+ <!-- SSL Certificate dialogs -->
+ <!-- Title for an SSL Certificate dialog -->
+ <string name="ssl_certificate">Security certificate</string>
+ <!-- Message on an SSL Certificate dialog -->
+ <string name="ssl_certificate_is_valid">This certificate is valid.</string>
+ <!-- Label for an information field on an SSL Certificate Dialog -->
+ <string name="issued_to">Issued to:</string>
+ <!-- Label for an information field on an SSL Certificate Dialog -->
+ <string name="common_name">Common name:</string>
+ <!-- Label for an information field on an SSL Certificate Dialog -->
+ <string name="org_name">Organization:</string>
+ <!-- Label for an information field on an SSL Certificate Dialog -->
+ <string name="org_unit">Organizational unit:</string>
+ <!-- Label for an information field on an SSL Certificate Dialog -->
+ <string name="issued_by">Issued by:</string>
+ <!-- Label for an information field on an SSL Certificate Dialog -->
+ <string name="validity_period">Validity:</string>
+ <!-- Label for an information field on an SSL Certificate Dialog -->
+ <string name="issued_on">Issued on:</string>
+ <!-- Label for an information field on an SSL Certificate Dialog -->
+ <string name="expires_on">Expires on:</string>
+
</resources>
diff --git a/data/fonts/DroidSansEthiopic-Bold.ttf b/data/fonts/DroidSansEthiopic-Bold.ttf
index 0d4500c..e06cac2 100644
--- a/data/fonts/DroidSansEthiopic-Bold.ttf
+++ b/data/fonts/DroidSansEthiopic-Bold.ttf
Binary files differ
diff --git a/data/fonts/DroidSansEthiopic-Regular.ttf b/data/fonts/DroidSansEthiopic-Regular.ttf
index dd88aa1..0adcbbe 100644
--- a/data/fonts/DroidSansEthiopic-Regular.ttf
+++ b/data/fonts/DroidSansEthiopic-Regular.ttf
Binary files differ
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index abea85b..3ec174e 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -222,7 +222,8 @@
<li><a href="<?cs var:toroot ?>guide/topics/manifest/receiver-element.html"><receiver></a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/service-element.html"><service></a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/supports-gl-texture-element.html"><supports-gl-texture></a></li>
- <li><a href="<?cs var:toroot ?>guide/topics/manifest/supports-screens-element.html"><supports-screens></a></li> <!-- ##api level 4## -->
+ <li><a href="<?cs var:toroot ?>guide/topics/manifest/supports-screens-element.html"><supports-screens></a>
+ <span class="new">updated</span></li> <!-- ##api level 4## -->
<li><a href="<?cs var:toroot ?>guide/topics/manifest/uses-configuration-element.html"><uses-configuration></a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/uses-feature-element.html"><uses-feature></a></li> <!-- ##api level 4## -->
<li><a href="<?cs var:toroot ?>guide/topics/manifest/uses-library-element.html"><uses-library></a></li>
@@ -256,7 +257,7 @@
<div><a href="<?cs var:toroot ?>guide/topics/renderscript/index.html">
<span class="en">RenderScript</span>
</a>
- <span class="new-child">new!</span></div>
+ <span class="new">new!</span></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/topics/renderscript/graphics.html">
<span class="en">3D Graphics</span>
diff --git a/docs/html/guide/topics/manifest/supports-screens-element.jd b/docs/html/guide/topics/manifest/supports-screens-element.jd
index ee99a37..605a2bb 100644
--- a/docs/html/guide/topics/manifest/supports-screens-element.jd
+++ b/docs/html/guide/topics/manifest/supports-screens-element.jd
@@ -8,12 +8,15 @@
<dt>syntax:</dt>
<dd>
<pre class="stx">
-<supports-screens android:<a href="#resizeable">resizeable</a>=["true" | "false"]
- android:<a href="#small">smallScreens</a>=["true" | "false"]
- android:<a href="#normal">normalScreens</a>=["true" | "false"]
- android:<a href="#large">largeScreens</a>=["true" | "false"]
+<supports-screens android:<a href="#requiresSmallest">requiresSmallestWidthDp</a>="<em>integer</em>"
+ android:<a href="#compatibleWidth">compatibleWidthLimitDp</a>="<em>integer</em>"
+ android:<a href="#largestWidth">largestWidthLimitDp</a>="<em>integer</em>"
+ android:<a href="#resizeable">resizeable</a>=["true"| "false"]
+ android:<a href="#small">smallScreens</a>=["true" | "false"]
+ android:<a href="#normal">normalScreens</a>=["true" | "false"]
+ android:<a href="#large">largeScreens</a>=["true" | "false"]
android:<a href="#xlarge">xlargeScreens</a>=["true" | "false"]
- android:<a href="#any">anyDensity</a>=["true" | "false"] />
+ android:<a href="#any">anyDensity</a>=["true" | "false"] />
</pre>
</dd>
@@ -21,36 +24,37 @@
<dd><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code></dd>
<dt>description:</dt>
-<dd>Lets you specify the screen dimensions the
-application supports. By default, a modern application (using API Level 4 or higher) supports all
-screen sizes; older applications are assumed to support only the "normal" screen size. Screen
-size is determined as the available pixels to an application after density scaling has been
-applied. (Note that screen size is a separate axis from screen density.)
+<dd>Lets you specify the screen sizes your application supports and enable screen
+compatibility mode for screens larger than what your application supports. By default, a modern
+application (using API Level 4 or higher) supports all screen sizes; older applications are assumed
+to support only the "normal" screen size. Screen size is determined by the number of pixels on the
+screen after the system accounts for screen density scaling.
-<p>An application "supports" a given screen size if it fills the entire screen and works as
-expected. By default, the system will resize your application to fill the screen, if you have set
+<p>An application "supports" a given screen size if it resizes properly to fill the entire screen.
+By default, the system resizes your application UI to fill the screen if you have set
either <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
minSdkVersion}</a> or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
-targetSdkVersion}</a> to {@code "4"} or higher. Resizing works well for most applications and
-you don't have to do any extra work to make your application work on larger screens.</p>
+targetSdkVersion}</a> to {@code "4"} or higher. Normal resizing works well for most applications and
+you don't have to do any extra work to make your application work on screens larger than a
+handset device.</p>
-<p>In addition to allowing the system to resize your application, you can add additional support
-for different screen sizes by providing <a
+<p>In addition to allowing the system to resize your application to fit the current screen, you can
+optimize your UI for different screen sizes by providing <a
href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">alternative
layout resources</a> for different sizes. For instance, you might want to modify the layout
of an activity when it is on a tablet or similar device that has an <em>xlarge</em> screen.</p>
-<p>If your application does not support <em>large</em> or <em>xlarge</em> screens, then you should
-declare that it is not resizeable by setting <a href="#resizeable">{@code android:resizeable}</a> to
-{@code "false"}, so that the system will not resize your application on larger screens.</p>
+<p>However, if your application does not work well when resized to fit different screen sizes,
+you can use the attributes of the {@code <supports-screens>} element to control whether
+your application should be distributed to smaller screens or have its UI scaled up to fit larger
+screens using the system's screen compatibility mode. When you have not designed for larger screen
+sizes and the normal resizing does not achieve the appropriate results, <em>screen compatibility
+mode</em> will scale your UI by emulating a <em>normal</em> size screen and then zooming in on it so
+that it fills the entire screen—thus achieving the same layout as a normal handset device on
+the large screen (but this usually causes pixelation and blurring of your UI).</p>
-<p>If your application does not support <em>small</em> screens, then
-there isn't much the system can do to make the application work well on a smaller screen, so
-external services (such as Android Market) should not allow users to install the application on such
-screens.</p>
-
-
-<p>For more information, see
+<p>For more information about how to properly support different screen sizes so that you can avoid
+using screen compatibility mode, read
<a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
@@ -59,6 +63,74 @@
<dd>
<dl class="attr">
+ <dt id="requiresSmallest">{@code android:requiresSmallestWidthDp}</dt>
+ <dd>This attribute specifies the minimum "smallest screen width" with which your
+application is compatible. In order for a device to be considered compatible with your
+application, the shortest side of the available screen space must be equal to or greater than this
+value.
+<p>The width against which your value is compared takes into account screen decorations and system
+UI. For example, if the device has some persistent UI elements on the left or right edge of the
+display, the system declares the device's available width as one that is smaller than the actual
+screen size, accounting for these UI elements because those are screen pixels not available for your
+UI. Thus, the value you use should be the actual smallest width required by your layout.</p>
+<p>If your application properly resizes for smaller screen sizes (down to the
+<em>small</em> size or a minimum width of 320dp), you do
+not need to use this attribute. Otherwise, you should use a value for this attribute that
+matches the smallest value used by your application for the <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#SmallestScreenWidthQualifier">
+smallest screen width qualifier</a> ({@code sw<N>dp}).</p>
+
+<p>For example, a typical handset screen has a minimum width of 320dp, a 7" tablet has a minimum
+width of 600dp, and a 10" tablet has a minimum width of 720dp. If the smallest available screen
+width on a device is less than the value you supply here, then the application is considered
+incompatible with that
+device. External services such as Android Market use this to determine whether a device
+is compatible with your application and prevent incompatible devices from installing it.</p>
+<p>Beginning with Android 3.2 (API level 13), using this attribute is the preferred way to
+specify the minimum screen size your application requires, instead of using the other attributes
+for small, normal, large, and xlarge screens. The advantage of using this attribute is that you
+have more control over exactly how much screen space your application needs at a minimum in order
+to properly display its UI, rather than relying on the generalized size groups.</p>
+<p>This attribute has no default value. If this attribute is not specified, then any of the old
+<code><a href="#small">smallScreens</a></code>, <code><a href="#normal">normalScreens</a></code>,
+<code><a href="#large">largeScreens</a></code>, or <code><a href="#xlarge">xlargeScreens</a></code>
+attributes are used instead to determine the smallest screen required.</p>
+ <p>This attribute was introduced in API level 13.</p>
+ </dd>
+
+ <dt id="compatibleWidth">{@code android:compatibleWidthLimitDp}</dt>
+ <dd>This attribute allows you to enable screen compatibility mode as a user-optional feature by
+specifying the maximum "smallest screen width" for which your application is designed. If the value
+you supply here is less than the shortest side of the available screen space, users can still
+install your application, but are offered to run it in screen compatibility mode. By default, screen
+compatibility mode is disabled and your layout is resized to fit the screen as usual, but a
+button is available in the system bar that allows the user to toggle screen compatibility mode on
+and off.
+ <p>If your application is compatible with all screen sizes and its layout properly resizes, you do
+not need to use this attribute.</p>
+ <p class="note"><strong>Note:</strong> Currently, screen compatibility mode only emulates handset
+screens with a 320dp width, so screen compatibility mode is not applied if your value for {@code
+android:compatibleWidthLimitDp} is larger than 320.</p>
+ <p>This attribute was introduced in API level 13.</p>
+ </dd>
+
+ <dt id="largestWidth">{@code android:largestWidthLimitDp}</dt>
+ <dd>This attribute allows you to force enable screen compatibility mode by specifying the maximum
+"smallest screen width" for which your application is designed. If the value you supply here is less
+than the shortest side of the available screen space, the application runs in screen
+compatibility mode with no way for the user to disable it.
+ <p>If your application is compatible with all screen sizes and its layout properly resizes, you do
+not need to use this attribute. Otherwise, you should first consider using the <a
+href="#compatibleWidth">{@code android:compatibleWidthLimitDp}</a> attribute. You should use the
+{@code android:largestWidthLimitDp} attribute only when your application is functionally broken when
+resized for larger screens and screen compatibility mode is the only way that users should use
+your application.</p>
+ <p class="note"><strong>Note:</strong> Currently, screen compatibility mode only emulates handset
+screens with a 320dp width, so screen compatibility mode is not applied if your value for {@code
+android:largestWidthLimitDp} is larger than 320.</p>
+ <p>This attribute was introduced in API level 13.</p>
+ </dd>
+
<dt><a name="resizeable"></a>{@code android:resizeable}</dt>
<dd>Indicates whether the application is resizeable for different screen sizes. This attribute is
true, by default, if you have set either <a
@@ -75,6 +147,7 @@
application does not work well on larger screens, follow the guide to <a
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> to enable
additional screen support.</p>
+ <p><strong>This attribute is deprecated</strong> as of API level 13.</p>
</dd>
@@ -91,6 +164,7 @@
{@code "4"} or higher,
the default value for this is {@code "true"}, any value less than {@code "4"} results in this set to
{@code "false"}.
+ <p><strong>This attribute is deprecated</strong> as of API level 13.</p>
</dd>
<dt><a name="normal"></a>{@code android:normalScreens}</dt>
@@ -99,12 +173,13 @@
screen, but WQVGA low density and WVGA high density are also
considered to be normal. This attribute is "true" by default,
and applications currently should leave it that way.
+ <p><strong>This attribute is deprecated</strong> as of API level 13.</p>
</dd>
<dt><a name="large"></a>{@code android:largeScreens}</dt>
<dd>Indicates whether the application supports larger screen form-factors.
A large screen is defined as a screen that is significantly larger
- than a "normal" phone screen, and thus might require some special care
+ than a "normal" handset screen, and thus might require some special care
on the application's part to make good use of it, though it may rely on resizing by the
system to fill the screen. If the application has set either <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> or <a
@@ -112,6 +187,7 @@
{@code "4"} or higher,
the default value for this is {@code "true"}, any value less than {@code "4"} results in this set to
{@code "false"}.
+ <p><strong>This attribute is deprecated</strong> as of API level 13.</p>
</dd>
<dt><a name="xlarge"></a>{@code android:xlargeScreens}</dt>
@@ -125,7 +201,8 @@
{@code "4"} or higher,
the default value for this is {@code "true"}, any value less than {@code "4"} results in this set to
{@code "false"}.
- <p>This attribute was introduced in API Level 9.</p>
+ <p>This attribute was introduced in API level 9.</p>
+ <p><strong>This attribute is deprecated</strong> as of API level 13.</p>
</dd>
<dt><a name="any"></a>{@code android:anyDensity}</dt>
@@ -142,6 +219,7 @@
down application assets by a factor of 0.75 (low dpi screens) or scale them up by a factor of 1.5
(high dpi screens), when you don't provide alternative resources for a specifc screen density. The
screen density is expressed as dots-per-inch (dpi).</p>
+ <p><strong>This attribute is deprecated</strong> as of API level 13.</p>
</dd>
diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd
index a996ccc..ea778c1 100644
--- a/docs/html/guide/topics/resources/providing-resources.jd
+++ b/docs/html/guide/topics/resources/providing-resources.jd
@@ -335,80 +335,101 @@
</tr>
<tr id="SmallestScreenWidthQualifier">
<td>Smallest screen width</td>
- <td>Examples:<br/>
+ <td><code>sw<N>dp</code><br/><br/>
+ Examples:<br/>
<code>sw320dp</code><br/>
<code>sw600dp</code><br/>
<code>sw720dp</code><br/>
etc.
</td>
<td>
- <p>Specifies a minimum "smallest screen width," in "dp" units, at which the resource
- should be used. This configuration value represents the base screen size
- of the device, regardless of the orientation of the display. It is based
- on the smallest width the application will have in which to perform its
- UI layout (in dp units) regardless of the orientation of the screen. The
- value here takes into account screen decorations so if the device has some
- persistent UI elements on the left or right edge of the display it must
- present a value here that is smaller than the real screen size, accounting
- for these UI elements reducing the application's available space.</p>
- <p>Some values you may use here for common screen sizes:</p>
+ <p>Specifies the "smallest width" in {@code dp} units that must be available to your
+ application in order for the resources to be used, regardless of the screen's current
+ orientation. For example, if your layout requires that its shortest side be at least 600
+ dp in length at all times, then you can use this to create the layout resources, {@code
+ res/layout-sw600dp/}, and the system will use them only when the shortest side of
+ available screen space it at least 600dp.</p>
+ <p>The width against which the system compares your value takes into account screen
+ decorations and system UI. For example, if the device has some persistent UI elements on the
+ left or right edge of the display, the system declares its own available width as one that
+ is smaller than the actual screen size, accounting for these UI elements because those are
+ screen pixels not available for your UI. Thus, the value you use should be the actual
+ smallest width required by your layout.</p>
+ <p>Some values you might use here for common screen sizes:</p>
<ul>
- <li>240x320 ldpi (QVGA phone): 320
- <li>320x480 mdpi (phone): 320
- <li>480x800 hdpi (high density phone): 320
- <li>480x800 mdpi (tablet/phone): 480
- <li>600x1024 mdpi (7" tablet): 600
- <li>720x1280 mdpi (10" tablet): 720
+ <li>320, for devices with screen configurations such as:
+ <ul>
+ <li>240x320 ldpi (QVGA handset)</li>
+ <li>320x480 mdpi (handset)</li>
+ <li>480x800 hdpi (high density handset)</li>
+ </ul>
+ </li>
+ <li>480, for screens such as 480x800 mdpi (tablet/handset).</li>
+ <li>600, for screens such as 600x1024 mdpi (7" tablet).</li>
+ <li>720, for screens such as 720x1280 mdpi (10" tablet).</li>
</ul>
- <p><em>Added in API Level 13.</em></p>
- <p>Also see the {@link android.content.res.Configuration#smallestScreenWidthDp}
- configuration field, which holds the current smallest screen width.</p>
+ <p>When your application provides multiple resource directories with different values for
+ this qualifier, the system uses the one closest to (without exceeding) the smallest width
+ for the available space. </p>
+ <p><em>Added in API level 13.</em></p>
+ <p>Also see the <a
+ href="{@docRoot}guide/topics/manifest/supports-screens-element.html#requiresSmallest">{@code
+ android:requiresSmallestWidthDp}</a> attribute, which declares the smallest available width
+ with which your application is compatible, and the {@link
+ android.content.res.Configuration#smallestScreenWidthDp} configuration field, which holds
+ the current smallest screen width for the device.</p>
</td>
</tr>
<tr id="ScreenWidthQualifier">
<td>Screen width</td>
- <td>Examples:<br/>
+ <td><code>w<N>dp</code><br/><br/>
+ Examples:<br/>
<code>w720dp</code><br/>
<code>w1024dp</code><br/>
etc.
</td>
<td>
- <p>Specifies a minimum screen width, in "dp" units, at which the resource
- should be used. This configuration value will change when the orientation
- changes between landscape and portrait to match the current actual width.
- When multiple screen width configurations are available, the closest to
- the current screen width will be used. The
- value here takes into account screen decorations so if the device has some
- persistent UI elements on the left or right edge of the display it must
- present a value here that is smaller than the real screen size, accounting
- for these UI elements reducing the application's available space.</p>
- <p><em>Added in API Level 13.</em></p>
+ <p>Specifies a minimum screen width, in {@code dp} units at which the resource
+ should be used—defined by the <code><N></code> value. This
+ configuration value will change when the orientation
+ changes between landscape and portrait to match the current actual width.</p>
+ <p>When your application provides multiple resource directories with different values
+ for this configuration, the system uses the one closest to (without exceeding)
+ the device's current screen width. The
+ value here takes into account screen decorations, so if the device has some
+ persistent UI elements on the left or right edge of the display, it
+ uses a value for the width that is smaller than the real screen size, accounting
+ for these UI elements and reducing the application's available space.</p>
+ <p><em>Added in API level 13.</em></p>
<p>Also see the {@link android.content.res.Configuration#screenWidthDp}
configuration field, which holds the current screen width.</p>
</td>
</tr>
<tr id="ScreenHeightQualifier">
<td>Screen height</td>
- <td>Examples:<br/>
+ <td><code>h<N>dp</code><br/><br/>
+ Examples:<br/>
<code>h720dp</code><br/>
<code>h1024dp</code><br/>
etc.
</td>
<td>
- <p>Specifies a minimum screen height, in "dp" units, at which the resource
- should be used. This configuration value will change when the orientation
- changes between landscape and portrait to match the current actual height.
- When multiple screen height configurations are available, the closest to
- the current screen height will be used. The
- value here takes into account screen decorations so if the device has some
- persistent UI elements on the left or right edge of the display it must
- present a value here that is smaller than the real screen size, accounting
- for these UI elements reducing the application's available space. Screen
+ <p>Specifies a minimum screen height, in "dp" units at which the resource
+ should be used—defined by the <code><N></code> value. This
+ configuration value will change when the orientation
+ changes between landscape and portrait to match the current actual height.</p>
+ <p>When your application provides multiple resource directories with different values
+ for this configuration, the system uses the one closest to (without exceeding)
+ the device's current screen height. The
+ value here takes into account screen decorations, so if the device has some
+ persistent UI elements on the top or bottom edge of the display, it uses
+ a value for the height that is smaller than the real screen size, accounting
+ for these UI elements and reducing the application's available space. Screen
decorations that are not fixed (such as a phone status bar that can be
hidden when full screen) are <em>not</em> accounted for here, nor are
- window decorations like title bar, so applications must be prepared to
+ window decorations like the title bar or action bar, so applications must be prepared to
deal with a somewhat smaller space than they specify.
- <p><em>Added in API Level 13.</em></p>
+ <p><em>Added in API level 13.</em></p>
<p>Also see the {@link android.content.res.Configuration#screenHeightDp}
configuration field, which holds the current screen width.</p>
</td>
@@ -444,9 +465,9 @@
medium-density HVGA screen. The minimum layout size for this screen configuration
is approximately 720x960 dp units. In most cases, devices with extra large
screens would be too large to carry in a pocket and would most likely
- be tablet-style devices. <em>Added in API Level 9.</em></li>
+ be tablet-style devices. <em>Added in API level 9.</em></li>
</ul>
- <p><em>Added in API Level 4.</em></p>
+ <p><em>Added in API level 4.</em></p>
<p>See <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
Screens</a> for more information.</p>
<p>Also see the {@link android.content.res.Configuration#screenLayout} configuration field,
@@ -465,7 +486,7 @@
<li>{@code long}: Long screens, such as WQVGA, WVGA, FWVGA</li>
<li>{@code notlong}: Not long screens, such as QVGA, HVGA, and VGA</li>
</ul>
- <p><em>Added in API Level 4.</em></p>
+ <p><em>Added in API level 4.</em></p>
<p>This is based purely on the aspect ratio of the screen (a "long" screen is wider). This
is not related to the screen orientation.</p>
<p>Also see the {@link android.content.res.Configuration#screenLayout} configuration field,
@@ -503,7 +524,7 @@
<li>{@code car}: Device is in a car dock</li>
<li>{@code desk}: Device is in a desk dock</li>
</ul>
- <p><em>Added in API Level 8.</em></p>
+ <p><em>Added in API level 8.</em></p>
<p>This can change during the life of your application if the user places the device in a
dock. You can enable or disable this mode using {@link
android.app.UiModeManager}. See <a href="runtime-changes.html">Handling Runtime Changes</a> for
@@ -521,7 +542,7 @@
<li>{@code night}: Night time</li>
<li>{@code notnight}: Day time</li>
</ul>
- <p><em>Added in API Level 8.</em></p>
+ <p><em>Added in API level 8.</em></p>
<p>This can change during the life of your application if night mode is left in
auto mode (default), in which case the mode changes based on the time of day. You can enable
or disable this mode using {@link android.app.UiModeManager}. See <a
@@ -549,7 +570,7 @@
<li>{@code nodpi}: This can be used for bitmap resources that you do not want to be scaled
to match the device density.</li>
</ul>
- <p><em>Added in API Level 4.</em></p>
+ <p><em>Added in API level 4.</em></p>
<p>There is thus a 3:4:6:8 scaling ratio between the four densities, so a 9x9 bitmap
in ldpi is 12x12 in mdpi, 18x18 in hdpi and 24x24 in xhdpi.</p>
<p>When Android selects which resource files to use,
@@ -689,17 +710,17 @@
</tr>
-->
<tr id="VersionQualifier">
- <td>Platform Version (API Level)</td>
+ <td>Platform Version (API level)</td>
<td>Examples:<br/>
<code>v3</code><br/>
<code>v4</code><br/>
<code>v7</code><br/>
etc.</td>
<td>
- <p>The API Level supported by the device. For example, <code>v1</code> for API Level
-1 (devices with Android 1.0 or higher) and <code>v4</code> for API Level 4 (devices with Android
+ <p>The API level supported by the device. For example, <code>v1</code> for API level
+1 (devices with Android 1.0 or higher) and <code>v4</code> for API level 4 (devices with Android
1.6 or higher). See the <a
-href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a> document for more information
+href="{@docRoot}guide/appendix/api-levels.html">Android API levels</a> document for more information
about these values.</p>
<p class="caution"><strong>Caution:</strong> Android 1.5 and 1.6 only match resources
with this qualifier when it exactly matches the platform version. See the section below about <a
@@ -863,7 +884,7 @@
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
minSdkVersion}</a> is set to 4, and you qualify all of your drawable resources using <a
href="#NightQualifier">night mode</a> ({@code night} or {@code notnight}, which were added in API
-Level 8), then an API Level 4 device cannot access your drawable resources and will crash. In this
+Level 8), then an API level 4 device cannot access your drawable resources and will crash. In this
case, you probably want {@code notnight} to be your default resources, so you should exclude that
qualifier so your drawable resources are in either {@code drawable/} or {@code drawable-night/}.</p>
@@ -896,7 +917,7 @@
<dd>{@code long} and {@code notlong}</dd>
</dl>
-<p>These configuration qualifiers were introduced in Android 1.6, so Android 1.5 (API Level 3) and
+<p>These configuration qualifiers were introduced in Android 1.6, so Android 1.5 (API level 3) and
lower does not support them. If you use these configuration qualifiers and do not provide
corresponding default resources, then an Android 1.5 device might use any one of the resource
directories named with the above screen configuration qualifiers, because it ignores these
@@ -926,9 +947,9 @@
<p>You need SDK Tools, Revision 6 (or greater), because it includes a new packaging tool that
automatically applies an appropriate <a href="#VersionQualifier">version qualifier</a> to any
resource directory named with a qualifier that does not exist in Android 1.0. For example, because
-the density qualifier was introduced in Android 1.6 (API Level 4), when the packaging tool
+the density qualifier was introduced in Android 1.6 (API level 4), when the packaging tool
encounters a resource directory using the density qualifier, it adds {@code v4} to the directory
-name to ensure that older versions do not use those resources (only API Level 4 and higher support
+name to ensure that older versions do not use those resources (only API level 4 and higher support
that qualifier). Thus, by putting your medium-density resources in a directory <em>without</em> the
{@code mdpi} qualifier, they are still accessible by Android 1.5, and any device that supports the
density qualifer and has a medium-density screen also uses the default resources (which are mdpi)
@@ -937,7 +958,7 @@
</li>
</ol>
-<p class="note"><strong>Note:</strong> Later versions of Android, such as API Level 8,
+<p class="note"><strong>Note:</strong> Later versions of Android, such as API level 8,
introduce other configuration qualifiers that older version do not support. To provide the best
compatibility, you should always include a set of default resources for each type of resource
that your application uses, as discussed above to provide the best device compatibility.</p>
@@ -1068,7 +1089,7 @@
<p>The correct behavior is for the system to match resources marked with a <a
href="#VersionQualifier">version qualifier</a> equal
-to or less than the platform version on the device, but on Android 1.5 and 1.6, (API Level 3 and 4),
+to or less than the platform version on the device, but on Android 1.5 and 1.6, (API level 3 and 4),
there is a bug that causes the system to match resources marked with the version qualifier
only when it exactly matches the version on the device.</p>
diff --git a/docs/html/guide/topics/search/index.jd b/docs/html/guide/topics/search/index.jd
index 7ac5ff1..218511b 100644
--- a/docs/html/guide/topics/search/index.jd
+++ b/docs/html/guide/topics/search/index.jd
@@ -52,7 +52,13 @@
<p class="note"><strong>Note</strong>: The search framework does <em>not</em> provide APIs to
search your data. To perform a search, you need to use APIs appropriate for your data. For example,
if your data is stored in an SQLite database, you should use the {@link android.database.sqlite}
-APIs to perform searches.</p>
+APIs to perform searches.
+<br/><br/>
+Also, there is no guarantee that every device provides a dedicated SEARCH button to invoke the
+search interface in your application. When using the search dialog or a custom interface, you
+must always provide a search button in your UI that activates the search interface. For more
+information, see <a href="search-dialog.html#InvokingTheSearchDialog">Invoking the search
+dialog</a>.</p>
<p>The following documents show you how to use Android's framework to implement search:</p>
diff --git a/docs/html/guide/topics/search/search-dialog.jd b/docs/html/guide/topics/search/search-dialog.jd
index af6c8f2..d869a44 100644
--- a/docs/html/guide/topics/search/search-dialog.jd
+++ b/docs/html/guide/topics/search/search-dialog.jd
@@ -17,29 +17,30 @@
<h2>In this document</h2>
<ol>
-<li><a href="#TheBasics">The Basics</a></li>
-<li><a href="#SearchableConfiguration">Creating a Searchable Configuration</a></li>
-<li><a href="#SearchableActivity">Creating a Searchable Activity</a>
- <ol>
- <li><a href="#DeclaringSearchableActivity">Declaring a searchable activity</a></li>
- <li><a href="#EnableSearch">Enabling the search dialog and search widget</a></li>
- <li><a href="#PerformingSearch">Performing a search</a></li>
- </ol>
-</li>
-<li><a href="#UsingTheSearchDialog">Using the Search Dialog</a>
- <ol>
- <li><a href="#LifeCycle">The impact of the search dialog on your activity lifecycle</a></li>
- <li><a href="#SearchContextData">Passing search context data</a></li>
- </ol>
-</li>
-<li><a href="#UsingSearchWidget">Using the Search Widget</a>
- <ol>
- <li><a href="#ConfiguringWidget">Configuring the search widget</a></li>
- <li><a href="#WidgetFeatures">Other search widget features</a></li>
- </ol>
-</li>
-<li><a href="#VoiceSearch">Adding Voice Search</a></li>
-<li><a href="#SearchSuggestions">Adding Search Suggestions</a></li>
+ <li><a href="#TheBasics">The Basics</a></li>
+ <li><a href="#SearchableConfiguration">Creating a Searchable Configuration</a></li>
+ <li><a href="#SearchableActivity">Creating a Searchable Activity</a>
+ <ol>
+ <li><a href="#DeclaringSearchableActivity">Declaring a searchable activity</a></li>
+ <li><a href="#PerformingSearch">Performing a search</a></li>
+ </ol>
+ </li>
+ <li><a href="#SearchDialog">Using the Search Dialog</a>
+ <ol>
+ <li><a href="#InvokingTheSearchDialog">Invoking the search dialog</a></li>
+ <li><a href="#LifeCycle">The impact of the search dialog on your activity lifecycle</a></li>
+ <li><a href="#SearchContextData">Passing search context data</a></li>
+ </ol>
+ </li>
+ <li><a href="#UsingSearchWidget">Using the Search Widget</a>
+ <ol>
+ <li><a href="#ConfiguringWidget">Configuring the search widget</a></li>
+ <li><a href="#WidgetFeatures">Other search widget features</a></li>
+ <li><a href="#UsingBoth">Using both the widget and the dialog</a></li>
+ </ol>
+ </li>
+ <li><a href="#VoiceSearch">Adding Voice Search</a></li>
+ <li><a href="#SearchSuggestions">Adding Search Suggestions</a></li>
</ol>
<h2>Key classes</h2>
@@ -494,13 +495,13 @@
<h3 id="InvokingTheSearchDialog">Invoking the search dialog</h3>
-<p>As mentioned above, the device SEARCH button and {@link android.app.Activity#onSearchRequested
-onSearchRequested()} method will open the search dialog, as long as the current activity
-has declared the searchable activity to use, as shown in the previous section.</p>
+<p>As mentioned above, the device SEARCH button will open the search dialog as long as the current
+activity has declared in the manifest the searchable activity to use.</p>
-<p>However, you should not assume that a SEARCH button is available on the user's device. You
-should always provide another search button in your UI that activates the search dialog by calling
-{@link android.app.Activity#onSearchRequested()}.</p>
+<p>However, some devices do not include a dedicated SEARCH button, so you should not assume that
+it's always available. When using the search dialog, you must <strong>always provide another search
+button in your UI</strong> that activates the search dialog by calling {@link
+android.app.Activity#onSearchRequested()}.</p>
<p>For instance, you should either provide a menu item in your <a
href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a> or a button in your
@@ -510,12 +511,6 @@
medium and high density screens, which you can use for your search menu item or button (low-density
screens scale-down the hdpi image by one half). </p>
-<!-- ... maybe this should go into the Creating Menus document ....
-<p>If you chose to provide a shortcut key for the menu item, using {@link
-android.view.MenuItem#setAlphabeticShortcut(char)}, then SearchManager.MENU_KEY is the recommended
-key character, representing the default search key.</p>
--->
-
<p>You can also enable "type-to-search" functionality, which activates the search dialog when the
user starts typing on the keyboard—the keystrokes are inserted into the search dialog. You can
enable type-to-search in your activity by calling
diff --git a/docs/html/resources/tutorials/views/hello-spinner.jd b/docs/html/resources/tutorials/views/hello-spinner.jd
index 7a3a9c3..e9dc20f 100644
--- a/docs/html/resources/tutorials/views/hello-spinner.jd
+++ b/docs/html/resources/tutorials/views/hello-spinner.jd
@@ -105,7 +105,7 @@
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
- Toast.makeText(parent.getContext()), "The planet is " +
+ Toast.makeText(parent.getContext(), "The planet is " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 12dc93c..40d54bb 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -681,7 +681,8 @@
*/
public enum CompressFormat {
JPEG (0),
- PNG (1);
+ PNG (1),
+ WEBP (2);
CompressFormat(int nativeInt) {
this.nativeInt = nativeInt;
diff --git a/include/binder/IMemory.h b/include/binder/IMemory.h
index 74d2cc7..2d0db00 100644
--- a/include/binder/IMemory.h
+++ b/include/binder/IMemory.h
@@ -43,6 +43,7 @@
virtual void* getBase() const = 0;
virtual size_t getSize() const = 0;
virtual uint32_t getFlags() const = 0;
+ virtual uint32_t getOffset() const = 0;
// these are there just for backward source compatibility
int32_t heapID() const { return getHeapID(); }
diff --git a/include/binder/MemoryHeapBase.h b/include/binder/MemoryHeapBase.h
index 2f2e31b..bbbda9c 100644
--- a/include/binder/MemoryHeapBase.h
+++ b/include/binder/MemoryHeapBase.h
@@ -27,7 +27,7 @@
// ---------------------------------------------------------------------------
-class MemoryHeapBase : public virtual BnMemoryHeap
+class MemoryHeapBase : public virtual BnMemoryHeap
{
public:
enum {
@@ -38,12 +38,12 @@
NO_CACHING = 0x00000200
};
- /*
+ /*
* maps the memory referenced by fd. but DOESN'T take ownership
* of the filedescriptor (it makes a copy with dup()
*/
MemoryHeapBase(int fd, size_t size, uint32_t flags = 0, uint32_t offset = 0);
-
+
/*
* maps memory from the given device
*/
@@ -61,9 +61,10 @@
virtual void* getBase() const;
virtual size_t getSize() const;
virtual uint32_t getFlags() const;
+ virtual uint32_t getOffset() const;
const char* getDevice() const;
-
+
/* this closes this heap -- use carefully */
void dispose();
@@ -74,12 +75,12 @@
mDevice = device;
return mDevice ? NO_ERROR : ALREADY_EXISTS;
}
-
+
protected:
MemoryHeapBase();
// init() takes ownership of fd
status_t init(int fd, void *base, int size,
- int flags = 0, const char* device = NULL);
+ int flags = 0, const char* device = NULL);
private:
status_t mapfd(int fd, size_t size, uint32_t offset = 0);
@@ -90,6 +91,7 @@
uint32_t mFlags;
const char* mDevice;
bool mNeedUnmap;
+ uint32_t mOffset;
};
// ---------------------------------------------------------------------------
diff --git a/keystore/java/android/security/IKeyChainService.aidl b/keystore/java/android/security/IKeyChainService.aidl
index 2763e46..23ffd59 100644
--- a/keystore/java/android/security/IKeyChainService.aidl
+++ b/keystore/java/android/security/IKeyChainService.aidl
@@ -30,5 +30,6 @@
void installCaCertificate(in byte[] caCertificate);
// APIs used by Settings
+ boolean deleteCaCertificate(String alias);
boolean reset();
}
diff --git a/libs/binder/IMemory.cpp b/libs/binder/IMemory.cpp
index bc8c412..1ace8f8 100644
--- a/libs/binder/IMemory.cpp
+++ b/libs/binder/IMemory.cpp
@@ -42,11 +42,11 @@
public:
HeapCache();
virtual ~HeapCache();
-
+
virtual void binderDied(const wp<IBinder>& who);
- sp<IMemoryHeap> find_heap(const sp<IBinder>& binder);
- void free_heap(const sp<IBinder>& binder);
+ sp<IMemoryHeap> find_heap(const sp<IBinder>& binder);
+ void free_heap(const sp<IBinder>& binder);
sp<IMemoryHeap> get_heap(const sp<IBinder>& binder);
void dump_heaps();
@@ -57,7 +57,7 @@
int32_t count;
};
- void free_heap(const wp<IBinder>& binder);
+ void free_heap(const wp<IBinder>& binder);
Mutex mHeapCacheLock;
KeyedVector< wp<IBinder>, heap_info_t > mHeapCache;
@@ -81,11 +81,12 @@
virtual void* getBase() const;
virtual size_t getSize() const;
virtual uint32_t getFlags() const;
+ virtual uint32_t getOffset() const;
private:
friend class IMemory;
friend class HeapCache;
-
+
// for debugging in this module
static inline sp<IMemoryHeap> find_heap(const sp<IBinder>& binder) {
return gHeapCache->find_heap(binder);
@@ -97,7 +98,7 @@
return gHeapCache->get_heap(binder);
}
static inline void dump_heaps() {
- gHeapCache->dump_heaps();
+ gHeapCache->dump_heaps();
}
void assertMapped() const;
@@ -107,6 +108,7 @@
mutable void* mBase;
mutable size_t mSize;
mutable uint32_t mFlags;
+ mutable uint32_t mOffset;
mutable bool mRealHeap;
mutable Mutex mLock;
};
@@ -123,7 +125,7 @@
BpMemory(const sp<IBinder>& impl);
virtual ~BpMemory();
virtual sp<IMemoryHeap> getMemory(ssize_t* offset=0, size_t* size=0) const;
-
+
private:
mutable sp<IMemoryHeap> mHeap;
mutable ssize_t mOffset;
@@ -203,7 +205,7 @@
BnMemory::BnMemory() {
}
-BnMemory::~BnMemory() {
+BnMemory::~BnMemory() {
}
status_t BnMemory::onTransact(
@@ -229,7 +231,7 @@
BpMemoryHeap::BpMemoryHeap(const sp<IBinder>& impl)
: BpInterface<IMemoryHeap>(impl),
- mHeapId(-1), mBase(MAP_FAILED), mSize(0), mFlags(0), mRealHeap(false)
+ mHeapId(-1), mBase(MAP_FAILED), mSize(0), mFlags(0), mOffset(0), mRealHeap(false)
{
}
@@ -242,7 +244,7 @@
sp<IBinder> binder = const_cast<BpMemoryHeap*>(this)->asBinder();
if (VERBOSE) {
- LOGD("UNMAPPING binder=%p, heap=%p, size=%d, fd=%d",
+ LOGD("UNMAPPING binder=%p, heap=%p, size=%d, fd=%d",
binder.get(), this, mSize, mHeapId);
CallStack stack;
stack.update();
@@ -270,6 +272,7 @@
if (mHeapId == -1) {
mBase = heap->mBase;
mSize = heap->mSize;
+ mOffset = heap->mOffset;
android_atomic_write( dup( heap->mHeapId ), &mHeapId );
}
} else {
@@ -286,13 +289,14 @@
// remote call without mLock held, worse case scenario, we end up
// calling transact() from multiple threads, but that's not a problem,
// only mmap below must be in the critical section.
-
+
Parcel data, reply;
data.writeInterfaceToken(IMemoryHeap::getInterfaceDescriptor());
status_t err = remote()->transact(HEAP_ID, data, &reply);
int parcel_fd = reply.readFileDescriptor();
ssize_t size = reply.readInt32();
uint32_t flags = reply.readInt32();
+ uint32_t offset = reply.readInt32();
LOGE_IF(err, "binder=%p transaction failed fd=%d, size=%ld, err=%d (%s)",
asBinder().get(), parcel_fd, size, err, strerror(-err));
@@ -309,7 +313,7 @@
Mutex::Autolock _l(mLock);
if (mHeapId == -1) {
mRealHeap = true;
- mBase = mmap(0, size, access, MAP_SHARED, fd, 0);
+ mBase = mmap(0, size, access, MAP_SHARED, fd, offset);
if (mBase == MAP_FAILED) {
LOGE("cannot map BpMemoryHeap (binder=%p), size=%ld, fd=%d (%s)",
asBinder().get(), size, fd, strerror(errno));
@@ -317,6 +321,7 @@
} else {
mSize = size;
mFlags = flags;
+ mOffset = offset;
android_atomic_write(fd, &mHeapId);
}
}
@@ -343,14 +348,19 @@
return mFlags;
}
+uint32_t BpMemoryHeap::getOffset() const {
+ assertMapped();
+ return mOffset;
+}
+
// ---------------------------------------------------------------------------
IMPLEMENT_META_INTERFACE(MemoryHeap, "android.utils.IMemoryHeap");
-BnMemoryHeap::BnMemoryHeap() {
+BnMemoryHeap::BnMemoryHeap() {
}
-BnMemoryHeap::~BnMemoryHeap() {
+BnMemoryHeap::~BnMemoryHeap() {
}
status_t BnMemoryHeap::onTransact(
@@ -362,6 +372,7 @@
reply->writeFileDescriptor(getHeapID());
reply->writeInt32(getSize());
reply->writeInt32(getFlags());
+ reply->writeInt32(getOffset());
return NO_ERROR;
} break;
default:
@@ -383,17 +394,17 @@
void HeapCache::binderDied(const wp<IBinder>& binder)
{
//LOGD("binderDied binder=%p", binder.unsafe_get());
- free_heap(binder);
+ free_heap(binder);
}
-sp<IMemoryHeap> HeapCache::find_heap(const sp<IBinder>& binder)
+sp<IMemoryHeap> HeapCache::find_heap(const sp<IBinder>& binder)
{
Mutex::Autolock _l(mHeapCacheLock);
ssize_t i = mHeapCache.indexOfKey(binder);
if (i>=0) {
heap_info_t& info = mHeapCache.editValueAt(i);
LOGD_IF(VERBOSE,
- "found binder=%p, heap=%p, size=%d, fd=%d, count=%d",
+ "found binder=%p, heap=%p, size=%d, fd=%d, count=%d",
binder.get(), info.heap.get(),
static_cast<BpMemoryHeap*>(info.heap.get())->mSize,
static_cast<BpMemoryHeap*>(info.heap.get())->mHeapId,
@@ -415,7 +426,7 @@
free_heap( wp<IBinder>(binder) );
}
-void HeapCache::free_heap(const wp<IBinder>& binder)
+void HeapCache::free_heap(const wp<IBinder>& binder)
{
sp<IMemoryHeap> rel;
{
@@ -426,7 +437,7 @@
int32_t c = android_atomic_dec(&info.count);
if (c == 1) {
LOGD_IF(VERBOSE,
- "removing binder=%p, heap=%p, size=%d, fd=%d, count=%d",
+ "removing binder=%p, heap=%p, size=%d, fd=%d, count=%d",
binder.unsafe_get(), info.heap.get(),
static_cast<BpMemoryHeap*>(info.heap.get())->mSize,
static_cast<BpMemoryHeap*>(info.heap.get())->mHeapId,
@@ -450,7 +461,7 @@
return realHeap;
}
-void HeapCache::dump_heaps()
+void HeapCache::dump_heaps()
{
Mutex::Autolock _l(mHeapCacheLock);
int c = mHeapCache.size();
@@ -459,7 +470,7 @@
BpMemoryHeap const* h(static_cast<BpMemoryHeap const *>(info.heap.get()));
LOGD("hey=%p, heap=%p, count=%d, (fd=%d, base=%p, size=%d)",
mHeapCache.keyAt(i).unsafe_get(),
- info.heap.get(), info.count,
+ info.heap.get(), info.count,
h->mHeapId, h->mBase, h->mSize);
}
}
diff --git a/libs/binder/MemoryHeapBase.cpp b/libs/binder/MemoryHeapBase.cpp
index 9f501e2..bf4a73f 100644
--- a/libs/binder/MemoryHeapBase.cpp
+++ b/libs/binder/MemoryHeapBase.cpp
@@ -40,15 +40,15 @@
// ---------------------------------------------------------------------------
-MemoryHeapBase::MemoryHeapBase()
+MemoryHeapBase::MemoryHeapBase()
: mFD(-1), mSize(0), mBase(MAP_FAILED),
- mDevice(NULL), mNeedUnmap(false)
+ mDevice(NULL), mNeedUnmap(false), mOffset(0)
{
}
MemoryHeapBase::MemoryHeapBase(size_t size, uint32_t flags, char const * name)
: mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(flags),
- mDevice(0), mNeedUnmap(false)
+ mDevice(0), mNeedUnmap(false), mOffset(0)
{
const size_t pagesize = getpagesize();
size = ((size + pagesize-1) & ~(pagesize-1));
@@ -65,7 +65,7 @@
MemoryHeapBase::MemoryHeapBase(const char* device, size_t size, uint32_t flags)
: mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(flags),
- mDevice(0), mNeedUnmap(false)
+ mDevice(0), mNeedUnmap(false), mOffset(0)
{
int open_flags = O_RDWR;
if (flags & NO_CACHING)
@@ -84,7 +84,7 @@
MemoryHeapBase::MemoryHeapBase(int fd, size_t size, uint32_t flags, uint32_t offset)
: mFD(-1), mSize(0), mBase(MAP_FAILED), mFlags(flags),
- mDevice(0), mNeedUnmap(false)
+ mDevice(0), mNeedUnmap(false), mOffset(0)
{
const size_t pagesize = getpagesize();
size = ((size + pagesize-1) & ~(pagesize-1));
@@ -141,6 +141,7 @@
}
mFD = fd;
mSize = size;
+ mOffset = offset;
return NO_ERROR;
}
@@ -183,5 +184,9 @@
return mDevice;
}
+uint32_t MemoryHeapBase::getOffset() const {
+ return mOffset;
+}
+
// ---------------------------------------------------------------------------
}; // namespace android
diff --git a/services/camera/libcameraservice/CameraHardwareInterface.h b/services/camera/libcameraservice/CameraHardwareInterface.h
index a3749cf..a583aad 100644
--- a/services/camera/libcameraservice/CameraHardwareInterface.h
+++ b/services/camera/libcameraservice/CameraHardwareInterface.h
@@ -559,13 +559,8 @@
ANativeWindowBuffer* anb;
rc = a->dequeueBuffer(a, &anb);
if (!rc) {
- rc = a->lockBuffer(a, anb);
- if (!rc) {
- *buffer = &anb->handle;
- *stride = anb->stride;
- }
- else
- a->cancelBuffer(a, anb);
+ *buffer = &anb->handle;
+ *stride = anb->stride;
}
return rc;
}
@@ -576,6 +571,14 @@
(type *) ((char *) __mptr - (char *)(&((type *)0)->member)); })
#endif
+ static int __lock_buffer(struct preview_stream_ops* w,
+ buffer_handle_t* buffer)
+ {
+ ANativeWindow *a = anw(w);
+ return a->lockBuffer(a,
+ container_of(buffer, ANativeWindowBuffer, handle));
+ }
+
static int __enqueue_buffer(struct preview_stream_ops* w,
buffer_handle_t* buffer)
{
@@ -641,6 +644,7 @@
void initHalPreviewWindow()
{
mHalPreviewWindow.nw.cancel_buffer = __cancel_buffer;
+ mHalPreviewWindow.nw.lock_buffer = __lock_buffer;
mHalPreviewWindow.nw.dequeue_buffer = __dequeue_buffer;
mHalPreviewWindow.nw.enqueue_buffer = __enqueue_buffer;
mHalPreviewWindow.nw.set_buffer_count = __set_buffer_count;
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 8ac8f2b..8fb6274 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -1610,6 +1610,16 @@
}
}
}
+
+ // TODO: Temporary notifying upstread change to Tethering.
+ // @see bug/4455071
+ /** Notify TetheringService if interface name has been changed. */
+ if (TextUtils.equals(mNetTrackers[netType].getNetworkInfo().getReason(),
+ Phone.REASON_LINK_PROPERTIES_CHANGED)) {
+ if (isTetheringSupported()) {
+ mTethering.handleTetherIfaceChange();
+ }
+ }
}
private void addPrivateDnsRoutes(NetworkStateTracker nt) {
@@ -2035,7 +2045,10 @@
break;
case NetworkStateTracker.EVENT_CONFIGURATION_CHANGED:
info = (NetworkInfo) msg.obj;
- handleConnectivityChange(info.getType(), true);
+ // TODO: Temporary allowing network configuration
+ // change not resetting sockets.
+ // @see bug/4455071
+ handleConnectivityChange(info.getType(), false);
break;
case EVENT_CLEAR_NET_TRANSITION_WAKELOCK:
String causedBy = null;
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index a23bacf..cd68c68 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -209,9 +209,11 @@
bluetoothA2dp);
bluetooth.initAfterA2dpRegistration();
+ int airplaneModeOn = Settings.System.getInt(mContentResolver,
+ Settings.System.AIRPLANE_MODE_ON, 0);
int bluetoothOn = Settings.Secure.getInt(mContentResolver,
Settings.Secure.BLUETOOTH_ON, 0);
- if (bluetoothOn > 0) {
+ if (airplaneModeOn == 0 && bluetoothOn != 0) {
bluetooth.enable();
}
}
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index 5f6c963..6bb7949 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -694,6 +694,14 @@
return retVal;
}
+ //TODO: Temporary handling upstream change triggered without
+ // CONNECTIVITY_ACTION. Only to accomodate interface
+ // switch during HO.
+ // @see bug/4455071
+ public void handleTetherIfaceChange() {
+ mTetherMasterSM.sendMessage(TetherMasterSM.CMD_UPSTREAM_CHANGED);
+ }
+
class TetherInterfaceSM extends StateMachine {
// notification from the master SM that it's not in tether mode
static final int CMD_TETHER_MODE_DEAD = 1;