diff options
74 files changed, 1633 insertions, 291 deletions
diff --git a/api/current.txt b/api/current.txt index 5b6e3a1..f076dfb 100644 --- a/api/current.txt +++ b/api/current.txt @@ -11820,6 +11820,66 @@ package android.media { ctor public MediaCryptoException(java.lang.String); } + public final class MediaDrm { + ctor public MediaDrm(java.util.UUID) throws android.media.MediaDrmException; + method public void closeSession(byte[]); + method public android.media.MediaDrm.CryptoSession getCryptoSession(byte[], java.lang.String, java.lang.String); + method public android.media.MediaDrm.KeyRequest getKeyRequest(byte[], byte[], java.lang.String, int, java.util.HashMap<java.lang.String, java.lang.String>); + method public byte[] getPropertyByteArray(java.lang.String); + method public java.lang.String getPropertyString(java.lang.String); + method public android.media.MediaDrm.ProvisionRequest getProvisionRequest(); + method public java.util.List<byte[]> getSecureStops(); + method public static final boolean isCryptoSchemeSupported(java.util.UUID); + method public byte[] openSession(); + method public byte[] provideKeyResponse(byte[], byte[]); + method public void provideProvisionResponse(byte[]); + method public java.util.HashMap<java.lang.String, java.lang.String> queryKeyStatus(byte[]); + method public final void release(); + method public void releaseSecureStops(byte[]); + method public void removeKeys(byte[]); + method public void restoreKeys(byte[], byte[]); + method public void setOnEventListener(android.media.MediaDrm.OnEventListener); + method public void setPropertyByteArray(java.lang.String, byte[]); + method public void setPropertyString(java.lang.String, java.lang.String); + field public static final int EVENT_KEY_EXPIRED = 3; // 0x3 + field public static final int EVENT_KEY_REQUIRED = 2; // 0x2 + field public static final int EVENT_PROVISION_REQUIRED = 1; // 0x1 + field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4 + field public static final int KEY_TYPE_OFFLINE = 2; // 0x2 + field public static final int KEY_TYPE_RELEASE = 3; // 0x3 + field public static final int KEY_TYPE_STREAMING = 1; // 0x1 + field public static final java.lang.String PROPERTY_ALGORITHM = "algorithm"; + field public static final java.lang.String PROPERTY_DESCRIPTION = "description"; + field public static final java.lang.String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId"; + field public static final java.lang.String PROPERTY_VENDOR = "vendor"; + field public static final java.lang.String PROPERTY_VERSION = "version"; + } + + public final class MediaDrm.CryptoSession { + method public byte[] decrypt(byte[], byte[], byte[]); + method public byte[] encrypt(byte[], byte[], byte[]); + method public byte[] sign(byte[], byte[]); + method public boolean verify(byte[], byte[], byte[]); + } + + public static final class MediaDrm.KeyRequest { + method public byte[] getData(); + method public java.lang.String getDefaultUrl(); + } + + public static abstract interface MediaDrm.OnEventListener { + method public abstract void onEvent(android.media.MediaDrm, byte[], int, int, byte[]); + } + + public static final class MediaDrm.ProvisionRequest { + method public byte[] getData(); + method public java.lang.String getDefaultUrl(); + } + + public final class MediaDrmException extends java.lang.Exception { + ctor public MediaDrmException(java.lang.String); + } + public final class MediaExtractor { ctor public MediaExtractor(); method public boolean advance(); @@ -21515,7 +21575,7 @@ package android.telephony { method public int getLac(); method public int getMcc(); method public int getMnc(); - method public int getPsc(); + method public deprecated int getPsc(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; } @@ -21531,6 +21591,17 @@ package android.telephony { field public static final android.os.Parcelable.Creator CREATOR; } + public final class CellIdentityWcdma implements android.os.Parcelable { + method public int describeContents(); + method public int getCid(); + method public int getLac(); + method public int getMcc(); + method public int getMnc(); + method public int getPsc(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public abstract class CellInfo implements android.os.Parcelable { method public int describeContents(); method public long getTimeStamp(); @@ -21560,6 +21631,13 @@ package android.telephony { field public static final android.os.Parcelable.Creator CREATOR; } + public final class CellInfoWcdma extends android.telephony.CellInfo implements android.os.Parcelable { + method public android.telephony.CellIdentityWcdma getCellIdentity(); + method public android.telephony.CellSignalStrengthWcdma getCellSignalStrength(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public abstract class CellLocation { ctor public CellLocation(); method public static android.telephony.CellLocation getEmpty(); @@ -21615,6 +21693,17 @@ package android.telephony { field public static final android.os.Parcelable.Creator CREATOR; } + public final class CellSignalStrengthWcdma extends android.telephony.CellSignalStrength implements android.os.Parcelable { + method public int describeContents(); + method public boolean equals(java.lang.Object); + method public int getAsuLevel(); + method public int getDbm(); + method public int getLevel(); + method public int hashCode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + public class NeighboringCellInfo implements android.os.Parcelable { ctor public deprecated NeighboringCellInfo(); ctor public deprecated NeighboringCellInfo(int, int); diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 64efb18..156fa56 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -134,6 +134,7 @@ <protected-broadcast android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <protected-broadcast android:name="android.net.conn.CONNECTIVITY_CHANGE_IMMEDIATE" /> <protected-broadcast android:name="android.net.conn.DATA_ACTIVITY_CHANGE" /> + <protected-broadcast android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED" /> <protected-broadcast android:name="android.net.conn.CAPTIVE_PORTAL_TEST_COMPLETED" /> <protected-broadcast android:name="android.nfc.action.LLCP_LINK_STATE_CHANGED" /> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 8f7529e..9c93531 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Herlaai"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Die bladsy by \"<xliff:g id="TITLE">%s</xliff:g>\" sê:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Navigeer weg van hierdie bladsy?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Raak OK om voort te gaan, of Kanselleer om op die huidige bladsy te bly."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Bevestig"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Wenk: Dubbeltik om in en uit te zoem."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Outovul"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 7f686c9..db6cd18 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -387,7 +387,7 @@ <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"በሌሎች መተግበሪያዎች የመሸጎጫ ማውጫዎች ውስጥ ያሉትን ፋይሎች በመሰረዝ መተግበሪያው የጡባዊ ማከማቻ ቦታ ነጻ እንዲያስለቅቅ ያስችለዋል። ይሄ ሌሎች መተግበሪያዎች ውሂባቸውን ዳግም ማምጣት ስላለባቸው ይበልጥ ዘግየት ብለው እንዲጀምሩ ሊያደርጋቸው ይችላል።"</string> <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"በሌሎች መተግበሪያዎች የመሸጎጫ ማውጫዎች ውስጥ ያሉትን ፋይሎች በመሰረዝ መተግበሪያው የስልክ ማከማቻ ቦታ ነጻ እንዲያስለቅቅ ያስችለዋል። ይሄ ሌሎች መተግበሪያዎች ውሂባቸውን ዳግም ማምጣት ስላለባቸው ይበልጥ ዘግየት ብለው እንዲጀምሩ ሊያደርጋቸው ይችላል።"</string> <string name="permlab_movePackage" msgid="3289890271645921411">"የመተግበሪያ ሃብቶችን አንቀሳቅስ"</string> - <string name="permdesc_movePackage" msgid="319562217778244524">"ከውስጣዊ ወደ ውጫዊ ሚዲያ እና በተገላቢጦሽ የመተግበሪያ ሃብቶችን ለማንቀሳቀስ ለመተግበሪያው ይፈቅዳሉ፡፡"</string> + <string name="permdesc_movePackage" msgid="319562217778244524">"ከውስጣዊ ወደ ውጫዊ ማህደረ መረጃ እና በተገላቢጦሽ የመተግበሪያ ሃብቶችን ለማንቀሳቀስ ለመተግበሪያው ይፈቅዳሉ፡፡"</string> <string name="permlab_readLogs" msgid="6615778543198967614">"ወሳኝ የማስታወሻ ውሂብ አንብብ"</string> <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">" ከስርዓቱ የተለያዩ የማስታወሻ ፋይሎች ውስጥ ለማንበብ ለመተግበሪያ ይፈቅዳሉ። ይህ ስለ ጡባዊ ተኮህ ምን እያደረክበት እንደሆነ የግላዊ ወይም የግል መረጃን ጨምሮ ጠቅላላ መረጃ ለማግኘት ይፈቅዳል።"</string> <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">" ከስርዓቱ የተለያዩ የማስታወሻ ፋይሎች ውስጥ ለማንበብ ለመተግበሪያይፈቅዳሉ። ይህ ስለ ስልክህ ምን እያደረክበት እንደሆነ የግላዊ ወይም የግል መረጃን ጨምሮ ጠቅላላ መረጃ ለማግኘት ይፈቅዳል።"</string> @@ -403,9 +403,9 @@ <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"ተመራጭ መተግበሪያዎች አዘጋጅ"</string> <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"ተመራጭ መተግበሪያዎችህን ለመቀየር ለመተግበሪያው ይፈቅዳሉ፡፡ ከአንተ የግል ውሂብ ለመሰብሰብ ያሉትን መተግበሪያዎች በመላክ፤ በመሄድ ላይ ያሉ መተግበሪያዎችን ተንኮል አዘል መተግበሪያዎች በዝምታ ሊለውጡ ይችላሉ፡፡"</string> <string name="permlab_writeSettings" msgid="2226195290955224730">"የስርዓት ቅንብሮችን አስተካክል"</string> - <string name="permdesc_writeSettings" msgid="7775723441558907181">"የስርዓት ቅንጅቶችን ውሂብ ለመቀየር ለመተግበሪያው ይፈቅዳሉ፡፡ ተንኮል አዘል መተግበሪያዎች የስርዓትህን አወቃቀር ብልሹ ሊያደርጉት ይችላሉ፡፡"</string> + <string name="permdesc_writeSettings" msgid="7775723441558907181">"የስርዓት ቅንብሮችን ውሂብ ለመቀየር ለመተግበሪያው ይፈቅዳሉ። ተንኮል አዘል መተግበሪያዎች የስርዓትዎን አወቃቀር ብልሹ ሊያደርጉት ይችላሉ።"</string> <string name="permlab_writeSecureSettings" msgid="204676251876718288">"የስርዓት ቅንብሮችንደህንነት ቀይር"</string> - <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"የስርዓቱን ደህንነቱ የተጠበቀ ቅንጅቶችን ውሂብ ለመቀየር ለመተግበሪያው ይፈቅዳሉ፡፡ለመደበኛ ትግበራዎች አያስፈልግም።"</string> + <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"የስርዓቱን ደህንነቱ የተጠበቀ ቅንብሮችን ውሂብ ለመቀየር ለመተግበሪያው ይፈቅዳሉ። ለመደበኛ ትግበራዎች አያስፈልግም።"</string> <string name="permlab_writeGservices" msgid="2149426664226152185">"የGoogle አገልግሎቶች ካርታን ቀይር"</string> <string name="permdesc_writeGservices" msgid="1287309437638380229">"ትግበራ የGoogle ካርታ አገልግሎቶችን ለመቀየር ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string> <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"መነሻ ላይ አሂድ"</string> @@ -541,8 +541,8 @@ <string name="permlab_accountManagerService" msgid="4829262349691386986">"እንደ አውርድአዸራጅአገልግሎት"</string> <string name="permdesc_accountManagerService" msgid="1948455552333615954">" ወደ መለያ አረጋጋጮች ጥሪ ለማድረግ ለመተግበሪያ ይፈቅዳሉ።"</string> <string name="permlab_getAccounts" msgid="1086795467760122114">"መሣሪያው ላይ ያሉ መለያዎችን አግኝ"</string> - <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"መተግበሪያው በጡባዊ ተኮው የሚታወቁትን መለያዎች ዝርዝር እንዲያገኝ ይፈቅድለታል። ይህ በጫንካቸው ማናቸውም መተግበሪያዎች የተፈጠሩ መለያዎችን ሊያጠቃልል ይችላል።"</string> - <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"መተግበሪያው በስልኩ የሚታወቁትን መለያዎች ዝርዝር እንዲያገኝ ይፈቅድለታል። ይህ በጫንካቸው ማናቸውም መተግበሪያዎች የተፈጠሩ መለያዎችን ሊያጠቃልል ይችላል።"</string> + <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"መተግበሪያው በጡባዊ ተኮው የሚታወቁትን መለያዎች ዝርዝር እንዲያገኝ ይፈቅድለታል። ይህ በጫንዋቸው ማናቸውም መተግበሪያዎች የተፈጠሩ መለያዎችን ሊያጠቃልል ይችላል።"</string> + <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"መተግበሪያው በስልኩ የሚታወቁትን መለያዎች ዝርዝር እንዲያገኝ ይፈቅድለታል። ይህ በጫንዋቸው ማናቸውም መተግበሪያዎች የተፈጠሩ መለያዎችን ሊያጠቃልል ይችላል።"</string> <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"መለያዎችን ፍጠርና የይለፍ ቃላትን አስቀምጥ"</string> <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"የመለያ አረጋጋጭ መለያ መናጅ ችሎታን ለመጠቀም፣ መለያ መፍጠር እና የይለፍ ቃሎችን ለማግኘት እና ለማቀናጀት አክሎ ለመተግበሪያው ይፈቅዳሉ ።"</string> <string name="permlab_manageAccounts" msgid="4983126304757177305">"መለያዎችን አክል ወይም አስወግድ"</string> @@ -554,7 +554,7 @@ <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"ሙሉ የአውታረ መረብ መዳረሻ"</string> <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"መተግበሪያው የአውታረ መረብ መሰኪያዎችን እንዲፈጥር እና ብጁ የአውታረ መረብ ፕሮቶኮሎችን እንዲጠቀም ይፈቅድለታል። አሳሹ እና ሌሎች መተግበሪያዎች ውሂብ ወደ በይነመረብ የመላኪያ መንገዶችን ስለሚያቀርቡውሂብ ወደ በይነመረብ ለመላክ ይህ ፍቃድ አያስፈልግም።"</string> <string name="permlab_writeApnSettings" msgid="505660159675751896">"የአውታረ መረብ ቅንብሮች እና ትራፊክ ለውጥ/ አቋርጥ"</string> - <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"የአውታረ መረብ ቅንጅቶችን ለመለወጥ እና ለማቋረጥ እና ሁሉንም የአውታረ መረብ ትራፊክ ለመመርመር፤ለምሳሌ ወኪል እና የማንኛውም APN ወደብ ለመለወጥ ለመተግበሪያው ይፈቅዳሉ፡፡ ተንኮል አዘል መተግበሪያዎች ሊቆጣጠሩ፣ አቅጣጫ ሊያስቀይሩ ፣ ወይም ያለአንተ እውቅና የአውታረ መረብ ፓኬቶችን ሊቀይሩ ይችላሉ፡፡"</string> + <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"የአውታረ መረብ ቅንብሮችን ለመለወጥ እና ለማቋረጥ እና ሁሉንም የአውታረ መረብ ትራፊክ ለመመርመር፤ለምሳሌ ወኪል እና የማንኛውም APN ወደብ ለመለወጥ ለመተግበሪያው ይፈቅዳሉ። ተንኮል አዘል መተግበሪያዎች ሊቆጣጠሩ፣ አቅጣጫ ሊያስቀይሩ ፣ ወይም ያለእርስዎ እውቅና የአውታረ መረብ ፓኬቶችን ሊቀይሩ ይችላሉ።"</string> <string name="permlab_changeNetworkState" msgid="958884291454327309">"የአውታረ መረብ ተያያዥነትን ለውጥ"</string> <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"የእውታረ መረቡን ግንኙነት ሁኔታ ለመለወጥ ለመተግበሪያው ይፈቅዳሉ።"</string> <string name="permlab_changeTetherState" msgid="5952584964373017960">"የተያያዘ ግንኙነት ለውጥ"</string> @@ -601,7 +601,7 @@ <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"ጥበቃ ወደሚደረግለት ማከማቻ ያለ መዳረሻን ፈትሽ"</string> <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"መተግበሪያው በወደፊት መሳሪዎች ላይ ለሚኖር የUSB ማህደረ ትውስታ ፈቃድ እንዲሞክር ይፈቅድለታል።"</string> <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"መተግበሪያው በወደፊት መሳሪዎች ላይ ለሚኖረው SD ካርድ ፈቃድ እንዲሞክር ይፈቅድለታል።"</string> - <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"የUSB ማከማቻህን ይዘቶች ቀይር ወይም ሰርዝ"</string> + <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"የUSB ማከማቻዎን ይዘቶች ይቀይሩ ወይም ይሰርዙ"</string> <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"የSD ካርድህን ይዘቶች ቀይር ወይም ሰርዝ"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"ወደ USB ማህደረ ትውስታው ለመፃፍ ለመተግበሪያው ይፈቅዳሉ፡፡"</string> <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"መተግበሪያውን ወደ SD ካርድ ለመፃፍ ይፈቅዳል።"</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"ድጋሚ አስነሳ"</string> <string name="js_dialog_title" msgid="1987483977834603872">"በ«<xliff:g id="TITLE">%s</xliff:g>» ያለው ገጽ ይህን ይላል፦"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"ጃቫስክሪፕት"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"ከዚህ ገፅ ወጣ ብሎ ይዳስ? "\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n" ለመቀጠል እሺ ፣ወይም የአሁኑ ገፅ ላይ ለመቆየት ይቅር ምረጥ።"</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"አረጋግጥ"</string> <string name="double_tap_toast" msgid="4595046515400268881">"ጠቃሚ ምክር፦ ለማጉላት እና ለማሳነስ ሁለቴ-መታ አድርግ።"</string> <string name="autofill_this_form" msgid="4616758841157816676">"ራስ ሙላ"</string> @@ -1174,20 +1181,20 @@ <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"አዲስ፦ "</font></string> <string name="perms_description_app" msgid="5139836143293299417">"በ<xliff:g id="APP_NAME">%1$s</xliff:g> የቀረበ።"</string> <string name="no_permissions" msgid="7283357728219338112">"ምንም ፍቃዶች አይጠየቁም"</string> - <string name="perm_costs_money" msgid="4902470324142151116">"ይህ ገንዘብ ሊያስወጣዎብዎት ይችላል"</string> + <string name="perm_costs_money" msgid="4902470324142151116">"ይህ ገንዘብ ሊያስወጣዎት ይችላል"</string> <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB ብዙ ማከማቻ"</string> <string name="usb_storage_title" msgid="5901459041398751495">"USB ተያይዟል"</string> <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"ከኮምፒዩተርህ ጋር በUSB በኩል አገናኝተሃል። በኮምፒዩተርህ እና በAndroid SD ማከማቻህ መካከል ፋይሎች ለመቅዳት ከፈለግህ ከዚህ በታች ያለውን አዝራር ንካ።"</string> <string name="usb_storage_message" product="default" msgid="805351000446037811">"ከኮምፒዩተርህ ጋር በUSB በኩል አገናኝተሃል። በኮምፒዩተርህ እና በAndroid SD ማከማቻህ መካከል ፋይሎች ለመቅዳት ከፈለግህ ከዚህ በታች ያለውን አዝራር ንካ።"</string> <string name="usb_storage_button_mount" msgid="1052259930369508235">"የUSB ማከማቻ አብራ"</string> - <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"የUSB ማከማቻህን ለUSB ብዙማከማቻ መጠቀም ችግር አለ።"</string> + <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"የUSB ማከማቻዎን ለUSB ብዙ ማከማቻ መጠቀም ችግር አለ።"</string> <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"የ SD ካርድህን ለUSB ብዙማከማቻ መጠቀም ችግር አለ።"</string> <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB ተያይዟል"</string> <string name="usb_storage_notification_message" msgid="939822783828183763">"ፋይሎችን ከ/ወደ ኮምፒዩተርህ ለመቅዳት ንካ።"</string> <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"የUSB ማከማቻ አጥፋ"</string> <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"የUSB ማከማቻ ለማጥፋት ንካ።"</string> <string name="usb_storage_stop_title" msgid="660129851708775853">"USB ማከማቻ በጥቅም ላይ"</string> - <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"USB ማከማቻን ከማጥፋትህ በፊት፤ የAndroid USB ማከማቻህን ከኮምውተርህ ንቀል (\"አውጣ\")።"</string> + <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"USB ማከማቻን ከማጥፋትዎ በፊት፤ የAndroid USB ማከማቻዎን ከኮምውተርዎ ይንቀሉ (\"ያውጡ\")።"</string> <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"የUSB ማከማቻ ከማጥፋት በፊት የAndroid SD ካርድህን ከኮምፒዩተርህ ላይ ንቀል(“አውጣ”)።"</string> <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB ማከማቻ አጥፋ"</string> <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"የ USB ማከማቻ ለማጥፋት ችግር ነበር። USB አስተናጋጅ መንቀልህን አረጋግጥ፤ ከዛም እንደገና ሞክር።"</string> @@ -1382,7 +1389,7 @@ <string name="storage_usb" msgid="3017954059538517278">"የUSB ማከማቻ"</string> <string name="extract_edit_menu_button" msgid="8940478730496610137">"አርትዕ"</string> <string name="data_usage_warning_title" msgid="1955638862122232342">"የውሂብ አጠቃቀም ማስጠንቀቂየ"</string> - <string name="data_usage_warning_body" msgid="2814673551471969954">"ቅንጅቶችን እና አጠቃቀምን ለማየት ንካ።"</string> + <string name="data_usage_warning_body" msgid="2814673551471969954">"ቅንብሮችን እና አጠቃቀምን ለማየት ይንኩ።"</string> <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G ውሂብ ቦዝኗል"</string> <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G ውሂብ ቦዝኗል"</string> <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"የተንቀሳቃሽ ውሂብ ቦዝኗል"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 004faf3..d68a546 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"إعادة تشغيل"</string> <string name="js_dialog_title" msgid="1987483977834603872">"تعرض الصفحة في \"<xliff:g id="TITLE">%s</xliff:g>\":"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"جافا سكريبت"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"هل تريد الانتقال بعيدًا عن هذه الصفحة؟"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"المس \"موافق\" للمتابعة، أو \"إلغاء\" للبقاء في الصفحة الحالية."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"تأكيد"</string> <string name="double_tap_toast" msgid="4595046515400268881">"نصيحة: اضغط مرتين للتكبير والتصغير."</string> <string name="autofill_this_form" msgid="4616758841157816676">"ملء تلقائي"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 22c20b8..7456890 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Перазагрузіць"</string> <string name="js_dialog_title" msgid="1987483977834603872">"На старонцы з адрасам <xliff:g id="TITLE">%s</xliff:g> вызначана:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Пакiнуць гэту старонку?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Націсніце \"OK\", каб працягнуць, або \"Адмена\", каб застацца на бягучай старонцы."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Пацвердзіць"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Падказка: двойчы націсніце, каб павялічыць або паменшыць."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Аўтазапаўненне"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 8cdd28c..79558d2 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Рестартиране"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Страницата на адрес „<xliff:g id="TITLE">%s</xliff:g>“ съобщава:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Искате ли да напуснете тази страница?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Докоснете „OK“, за да продължите, или „Отказ“, за да останете на нея."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Потвърждение"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Съвет: Докоснете двукратно, за да увеличите или намалите мащаба."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Автопоп."</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index a68437b..0a19f6c 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Reinicia"</string> <string name="js_dialog_title" msgid="1987483977834603872">"La pàgina de \"<xliff:g id="TITLE">%s</xliff:g>\" diu:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Vols sortir d\'aquesta pàgina?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Selecciona D\'acord per continuar o Cancel·la per seguir a la pàgina actual."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Confirma"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Consell: Pica dos cops per ampliar i per reduir."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Em. aut."</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 8d1fa5d..9ab8b91 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -155,7 +155,7 @@ <string name="global_action_lock" msgid="2844945191792119712">"Zámek obrazovky"</string> <string name="global_action_power_off" msgid="4471879440839879722">"Vypnout"</string> <string name="global_action_bug_report" msgid="7934010578922304799">"Hlášení chyb"</string> - <string name="bugreport_title" msgid="2667494803742548533">"Zaznamenat zprávu o chybě"</string> + <string name="bugreport_title" msgid="2667494803742548533">"Vytvořit chybové hlášení"</string> <string name="bugreport_message" msgid="398447048750350456">"Shromažďuje informace o aktuálním stavu zařízení. Tyto informace je následně možné poslat v e-mailové zprávě, chvíli však potrvá, než bude hlášení o chybě připraveno k odeslání. Buďte prosím trpěliví."</string> <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Tichý režim"</string> <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Zvuk je VYPNUTÝ."</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Restartovat"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Stránka <xliff:g id="TITLE">%s</xliff:g> uvádí:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Chcete opustit tuto stránku?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Chcete-li pokračovat, dotkněte se možnosti OK. Chcete-li zůstat na aktuální stránce, dotkněte se možnosti Zrušit."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Potvrdit"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tip: Dvojitým klepnutím můžete zobrazení přiblížit nebo oddálit."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Aut.vyp."</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 36f4b7f..cda47d9 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -156,7 +156,7 @@ <string name="global_action_power_off" msgid="4471879440839879722">"Sluk"</string> <string name="global_action_bug_report" msgid="7934010578922304799">"Fejlrapport"</string> <string name="bugreport_title" msgid="2667494803742548533">"Lav fejlrapport"</string> - <string name="bugreport_message" msgid="398447048750350456">"Der indsamles oplysninger om din enheds aktuelle status, der efterfølgende sendes i en e-mail. Der går lidt tid, fra fejlrapporten påbegyndes, til den er klar til at blive sendt. Tak for tålmodigheden."</string> + <string name="bugreport_message" msgid="398447048750350456">"Der indsamles oplysninger om din enheds aktuelle status, der efterfølgende sendes i en e-mail. Der går lidt tid fra, at fejlrapporten påbegyndes, til den er klar til at blive sendt. Tak for tålmodigheden."</string> <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Lydløs"</string> <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Lyden er slået FRA"</string> <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Lyden er TIL"</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Genstart"</string> <string name="js_dialog_title" msgid="1987483977834603872">"På siden på \"<xliff:g id="TITLE">%s</xliff:g>\" står der:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"Javascript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Vil du gå væk fra denne side?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Tryk på OK for at fortsætte eller Annuller for at blive på den aktuelle side."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Bekræft"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tip! Dobbeltklik for at zoome ind eller ud."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Autofyld"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index cedbb01..b667f53 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Neustart"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Auf der Seite \"<xliff:g id="TITLE">%s</xliff:g>\" steht:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Diese Seite verlassen?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Tippen Sie zum Fortfahren auf \"OK\" oder tippen Sie auf \"Abbrechen\", um auf der aktuellen Seite zu bleiben."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Bestätigen"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tipp: Zum Vergrößern und Verkleinern zweimal tippen"</string> <string name="autofill_this_form" msgid="4616758841157816676">"AutoFill"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 16db147..bd47858 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Επανεκκίνηση"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Η σελίδα στον τίτλο \"<xliff:g id="TITLE">%s</xliff:g>\" λέει:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Απομάκρυνση από αυτή τη σελίδα;"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Αγγίξτε το στοιχείο \"OK\" για συνέχεια ή \"Ακύρωση\" για παραμονή στην τρέχουσα σελίδα."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Επιβεβαίωση"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Συμβουλή: Πατήστε δύο φορές για μεγέθυνση και σμίκρυνση."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Αυτόματη συμπλήρωση"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 905cee3..ff6cf0e 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Reboot"</string> <string name="js_dialog_title" msgid="1987483977834603872">"The page at \"<xliff:g id="TITLE">%s</xliff:g>\" says:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Navigate away from this page?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Touch OK to continue or Cancel to stay on the current page."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Confirm"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tip: double-tap to zoom in and out."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Auto-fill"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 7f3c0db..6c264a4 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -773,7 +773,7 @@ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Presiona el Menú para desbloquear o realizar una llamada de emergencia."</string> <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Presionar Menú para desbloquear."</string> <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Dibujar el patrón de desbloqueo"</string> - <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Llamada de emergencia"</string> + <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Realizar llamada de emergencia"</string> <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Regresar a llamada"</string> <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Correcto"</string> <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Vuelve a intentarlo."</string> @@ -783,7 +783,7 @@ <string name="lockscreen_charged" msgid="321635745684060624">"Cargado"</string> <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string> <string name="lockscreen_low_battery" msgid="1482873981919249740">"Conecta tu cargador."</string> - <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"No hay tarjeta SIM."</string> + <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"Sin tarjeta SIM"</string> <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"No hay tarjeta SIM en el tablet."</string> <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"No hay tarjeta SIM en el dispositivo."</string> <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Inserta una tarjeta SIM."</string> @@ -795,7 +795,7 @@ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Botón Pausa"</string> <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Botón Reproducir"</string> <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Botón Detener"</string> - <string name="emergency_calls_only" msgid="6733978304386365407">"Sólo llamadas de emergencia"</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Solo llamadas de emergencia"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Red bloqueada"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La tarjeta SIM está bloqueada con PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Consulta la guía del usuario o comunícate con el servicio de atención al cliente."</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Reiniciar"</string> <string name="js_dialog_title" msgid="1987483977834603872">"La página \"<xliff:g id="TITLE">%s</xliff:g>\" dice:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"¿Deseas salir de esta página?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Toca Aceptar para continuar o Cancelar para permanecer en la página actual."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Confirmar"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Consejo: Toca dos veces para acercar y alejar la imagen."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Autocompletar"</string> @@ -1439,7 +1446,7 @@ <string name="wifi_display_notification_title" msgid="2223050649240326557">"Se conectó la pantalla inalámbrica"</string> <string name="wifi_display_notification_message" msgid="4498802012464170685">"Esta pantalla se muestra en otro dispositivo."</string> <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Desconectar"</string> - <string name="kg_emergency_call_label" msgid="684946192523830531">"Llamada de emergencia"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Realizar llamada de emergencia"</string> <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"¿Olvidaste el patrón?"</string> <string name="kg_wrong_pattern" msgid="1850806070801358830">"Patrón incorrecto"</string> <string name="kg_wrong_password" msgid="2333281762128113157">"Contraseña incorrecta"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 2b7b476..1b5a024 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Reiniciar"</string> <string name="js_dialog_title" msgid="1987483977834603872">"La página \"<xliff:g id="TITLE">%s</xliff:g>\" dice:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"¿Quieres salir de esta página?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Toca Aceptar para continuar o Cancelar para permanecer en la página actual."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Confirmar"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Sugerencia: toca dos veces para ampliar o reducir el contenido."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Autocompletar"</string> @@ -1195,7 +1202,7 @@ <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Si activas el almacenamiento USB, se detendrán algunas aplicaciones que estás usando y es posible que no estén disponibles hasta que lo desactives."</string> <string name="dlg_error_title" msgid="7323658469626514207">"Error de funcionamiento de USB"</string> <string name="dlg_ok" msgid="7376953167039865701">"Aceptar"</string> - <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectado como disp. multimedia"</string> + <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectado como dispositivo multimedia"</string> <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Conectado como una cámara"</string> <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Conectado como instalador"</string> <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Conectado a un accesorio USB"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 821c899..5679201 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Taaskäivita"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Leht „<xliff:g id="TITLE">%s</xliff:g>” ütleb järgmist."</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Kas soovite sellelt lehelt lahkuda?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Jätkamiseks puudutage valikut OK, praegusele lehele jäämiseks valikut Tühista."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Kinnita"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Vihje: suurendamiseks ja vähendamiseks puudutage kaks korda."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Automaatne täitmine"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index a8f06d9..fff4c7a 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -622,7 +622,7 @@ <string name="permlab_accessNotifications" msgid="7673416487873432268">"اعلانهای دسترسی"</string> <string name="permdesc_accessNotifications" msgid="458457742683431387">"به برنامه اجازه میدهد به بازیابی، بررسی و پاک کردن اعلانها از جمله موارد پست شده توسط سایر برنامهها بپردازد."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"اتصال به یک سرویس شنونده اعلان"</string> - <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"به دارنده اجازه میدهد به یک رابط سطح بالای سرویس شنونده اعلان متصل شود. این هرگز برای برنامههای عادی ضروری نیست."</string> + <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"به دارنده اجازه میدهد به یک رابط سطح بالای سرویس شنونده اعلان متصل شود. هرگز نباید برای برنامههای عادی لازم شود."</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"تنظیم قوانین رمز ورود"</string> <string name="policydesc_limitPassword" msgid="3252114203919510394">"طول و نویسههای مجاز در گذرواژههای بازکردن قفل صفحه را کنترل کنید."</string> <string name="policylab_watchLogin" msgid="914130646942199503">"نمایش تلاشهای قفل گشایی صفحه"</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"راهاندازی مجدد"</string> <string name="js_dialog_title" msgid="1987483977834603872">"صفحه در \"<xliff:g id="TITLE">%s</xliff:g>\" میگوید:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"جاوا اسکریپت"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"از این صفحه خارج میشوید؟"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"برای ادامه روی تأیید و برای ماندن در همین صفحه روی لغو کلیک کنید."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"تأیید"</string> <string name="double_tap_toast" msgid="4595046515400268881">"نکته: برای بزرگنمایی و کوچکنمایی، دو بار ضربه بزنید."</string> <string name="autofill_this_form" msgid="4616758841157816676">"تکمیل خودکار"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index d968b5f..553e0c1 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Käynnistä uudelleen"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Sivu <xliff:g id="TITLE">%s</xliff:g> sanoo:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Siirrytäänkö pois tältä sivulta?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Valitse OK, jos haluat jatkaa, tai Peruuta, jos et halua siirtyä pois sivulta."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Vahvista"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Vinkki: lähennä ja loitonna kaksoisnapauttamalla."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Aut. täyttö"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 9d3fe35..bb7df82 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Redémarrer"</string> <string name="js_dialog_title" msgid="1987483977834603872">"La page \"<xliff:g id="TITLE">%s</xliff:g>\" indique :"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Voulez-vous quitter cette page ?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Appuyez sur \"OK\" pour continuer ou \"Annuler\" pour rester sur la page actuelle."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Confirmer"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Conseil : Appuyez deux fois pour faire un zoom avant ou arrière."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Saisie auto"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 89f13e0..9840400 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"रीबूट करें"</string> <string name="js_dialog_title" msgid="1987483977834603872">"\'<xliff:g id="TITLE">%s</xliff:g>\' पर यह पृष्ठ दर्शाता है:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"इस पृष्ठ से दूर नेविगेट करें?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"जारी रखने के लिए ठीक को चुनें, या वर्तमान पृष्ठ पर रहने के लिए रद्द करें को चुनें."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"पुष्टि करें"</string> <string name="double_tap_toast" msgid="4595046515400268881">"युक्ति: ज़ूम इन और आउट करने के लिए डबल-टैप करें."</string> <string name="autofill_this_form" msgid="4616758841157816676">"स्वत: भरण"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index fcbdeb5..d90717f 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Ponovno pokreni"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Stranica na adresi \"<xliff:g id="TITLE">%s</xliff:g>\" sadrži sljedeće:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Želite otići s ove lokacije?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Za nastavak dodirnite U redu, a za ostanak na trenutačnoj stranici dodirnite Odustani."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Potvrdi"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Savjet: Dvaput dotaknite za povećavanje i smanjivanje."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Aut.pop."</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 684cf67..db629af 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Újraindítás"</string> <string name="js_dialog_title" msgid="1987483977834603872">"A \"<xliff:g id="TITLE">%s</xliff:g>\" címen található oldal szerint:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Elhagyja ezt az oldalt?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"A folytatáshoz érintse meg az OK, a jelenlegi oldalon maradáshoz a Mégse lehetőséget."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Megerősítés"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tipp: érintse meg kétszer a nagyításhoz és kicsinyítéshez."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Kitöltés"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 694a6f7..9ec11e4 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Mulai ulang"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Laman pada \"<xliff:g id="TITLE">%s</xliff:g>\" menyatakan:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Beranjak dari laman ini?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Sentuh Oke untuk melanjutkan atau Batal untuk tetap pada laman ini."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Konfirmasi"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Kiat: Ketuk dua kali untuk memperbesar dan memperkecil."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Isiotomatis"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index b145504..d25f82a 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -440,16 +440,16 @@ <string name="permlab_writeCalendar" msgid="8438874755193825647">"aggiunta o modifica di eventi di calendario e invio di email agli ospiti a insaputa dei proprietari"</string> <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"Consente all\'applicazione di aggiungere, rimuovere, modificare gli eventi che puoi modificare sul tablet, inclusi quelli di amici o colleghi. Ciò potrebbe consentire all\'applicazione di inviare messaggi apparentemente provenienti dai proprietari del calendario o di modificare eventi all\'insaputa dei proprietari."</string> <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"Consente all\'applicazione di aggiungere, rimuovere, modificare gli eventi che puoi modificare sul telefono, inclusi quelli di amici o colleghi. Ciò potrebbe consentire all\'applicazione di inviare messaggi apparentemente provenienti dai proprietari del calendario o di modificare eventi all\'insaputa dei proprietari."</string> - <string name="permlab_accessMockLocation" msgid="8688334974036823330">"fonti di localizzazione fittizie per test"</string> - <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"Crea fonti di localizzazione fittizie per i test o installa un nuovo fornitore di posizione. Ciò consente all\'applicazione di ignorare la posizione e/o lo stato restituito da altre fonti di localizzazione, come il GPS o fornitori di posizione."</string> + <string name="permlab_accessMockLocation" msgid="8688334974036823330">"fonti di geolocalizzazione fittizie per test"</string> + <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"Crea fonti di geolocalizzazione fittizie per i test o installa un nuovo fornitore di posizione. Ciò consente all\'applicazione di ignorare la posizione e/o lo stato restituito da altre fonti di geolocalizzazione, come il GPS o fornitori di posizione."</string> <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"accesso a comandi aggiuntivi del provider di localizz."</string> - <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"Consente all\'applicazione di accedere a ulteriori comandi del fornitore di posizione. Ciò potrebbe consentire all\'applicazione di interferire con il funzionamento del GPS o di altre fonti di localizzazione."</string> + <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"Consente all\'applicazione di accedere a ulteriori comandi del fornitore di posizione. Ciò potrebbe consentire all\'applicazione di interferire con il funzionamento del GPS o di altre fonti di geolocalizzazione."</string> <string name="permlab_installLocationProvider" msgid="6578101199825193873">"autorizzazione a installare un provider di localizzazione"</string> - <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"Crea fonti di localizzazione fittizie per i test o installa un nuovo fornitore di posizione. Ciò consente all\'applicazione di ignorare la posizione e/o lo stato restituito da altre fonti di localizzazione, come il GPS o fornitori di posizione."</string> + <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"Crea fonti di geolocalizzazione fittizie per i test o installa un nuovo fornitore di posizione. Ciò consente all\'applicazione di ignorare la posizione e/o lo stato restituito da altre fonti di geolocalizzazione, come il GPS o fornitori di posizione."</string> <string name="permlab_accessFineLocation" msgid="1191898061965273372">"posizione precisa (GPS e basata sulla rete)"</string> - <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Consente all\'applicazione di ottenere la tua posizione esatta utilizzando il sistema GPS (Global Positioning System) o fonti di localizzazione delle reti come ripetitori di telefonia mobile e Wi-Fi. Questi servizi di localizzazione devono essere attivi e disponibili sul dispositivo per poter essere utilizzati dall\'applicazione. Le applicazioni potrebbero utilizzare questa autorizzazione per stabilire la tua posizione e potrebbero consumare ulteriore batteria."</string> + <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Consente all\'applicazione di ottenere la tua posizione esatta utilizzando il sistema GPS (Global Positioning System) o fonti di geolocalizzazione delle reti come ripetitori di telefonia mobile e Wi-Fi. Questi servizi di localizzazione devono essere attivi e disponibili sul dispositivo per poter essere utilizzati dall\'applicazione. Le applicazioni potrebbero utilizzare questa autorizzazione per stabilire la tua posizione e potrebbero consumare ulteriore batteria."</string> <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"posizione approssimativa (basata sulla rete)"</string> - <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Consente all\'applicazione di ottenere la tua posizione approssimativa. Questa posizione viene ottenuta da servizi di localizzazione utilizzando fonti di localizzazione delle reti come ripetitori di telefonia mobile e Wi-Fi. Questi servizi di localizzazione devono essere attivi e disponibili sul dispositivo per poter essere utilizzati dall\'applicazione. Le applicazioni potrebbero utilizzare questa autorizzazione per stabilire la tua posizione approssimativa."</string> + <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Consente all\'applicazione di ottenere la tua posizione approssimativa. Questa posizione viene ottenuta da servizi di localizzazione utilizzando fonti di geolocalizzazione delle reti come ripetitori di telefonia mobile e Wi-Fi. Questi servizi di localizzazione devono essere attivi e disponibili sul dispositivo per poter essere utilizzati dall\'applicazione. Le applicazioni potrebbero utilizzare questa autorizzazione per stabilire la tua posizione approssimativa."</string> <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"accesso a SurfaceFlinger"</string> <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Consente all\'applicazione l\'utilizzo di funzioni di basso livello SurfaceFlinger."</string> <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lettura buffer di frame"</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Riavvia"</string> <string name="js_dialog_title" msgid="1987483977834603872">"La pagina all\'indirizzo \"<xliff:g id="TITLE">%s</xliff:g>\" indica:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Uscire da questa pagina?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Tocca OK per continuare o Annulla per rimanere nella pagina corrente."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Conferma"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Suggerimento. Tocca due volte per aumentare e diminuire lo zoom."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Compilazione autom."</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 7556103..c9cee96 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"אתחל מחדש"</string> <string name="js_dialog_title" msgid="1987483977834603872">"בדף שבכתובת \'<xliff:g id="TITLE">%s</xliff:g>\' כתוב כך:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"לנווט אל מחוץ לדף זה?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"גע באפשרות \'אישור\' כדי להמשיך, או \'ביטול\' כדי להישאר בדף הנוכחי."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"אשר"</string> <string name="double_tap_toast" msgid="4595046515400268881">"טיפ: הקש פעמיים כדי להגדיל ולהקטין."</string> <string name="autofill_this_form" msgid="4616758841157816676">"מילוי אוטומטי"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index f104bfc..18e00df 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"再起動"</string> <string name="js_dialog_title" msgid="1987483977834603872">"<xliff:g id="TITLE">%s</xliff:g> のページ:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"このページから移動しますか?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"移動する場合は[OK]、現在のページに留まる場合は[キャンセル]をタップしてください。"</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"確認"</string> <string name="double_tap_toast" msgid="4595046515400268881">"ヒント: ダブルタップで拡大/縮小できます。"</string> <string name="autofill_this_form" msgid="4616758841157816676">"自動入力"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index c89e9a0..cd078f6 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"다시 부팅"</string> <string name="js_dialog_title" msgid="1987483977834603872">"\'<xliff:g id="TITLE">%s</xliff:g>\' 페이지 내용:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"자바스크립트"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"다른 페이지를 탐색하시겠습니까?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"계속하려면 \'확인\'을 터치하고 현재 페이지에 그대로 있으려면 \'취소\'를 터치하세요."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"확인"</string> <string name="double_tap_toast" msgid="4595046515400268881">"도움말: 확대/축소하려면 두 번 탭합니다."</string> <string name="autofill_this_form" msgid="4616758841157816676">"자동완성"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index d73f037..f6b92f7 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Pakartotinai įkelti"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Puslapyje šiuo adresu: <xliff:g id="TITLE">%s</xliff:g>, teigiama:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Išeiti iš šio puslapio?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Palieskite „Gerai“, jei norite tęsti, arba palieskite „Atšaukti“, jei norite likti dabartiniame puslapyje."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Patvirtinti"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Patarimas: palieskite dukart, kad padidintumėte ar sumažintumėte mastelį."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Automatinis pildymas"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index b51e291..3df0713 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Atsāknēt"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Lapā <xliff:g id="TITLE">%s</xliff:g> ir teikts:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Vai doties prom no šīs lapas?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Pieskarieties Labi, lai turpinātu, vai Atcelt, lai paliktu pašreizējā lapā."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Apstiprināt"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Padoms. Divreiz pieskarieties, lai tuvinātu un tālinātu."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Automātiskā aizpilde"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index c19d8c5..5fd4bde 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"But semula"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Halaman di \'<xliff:g id="TITLE">%s</xliff:g>\' berkata:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Navigasi keluar dari halaman ini?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Sentuh OK untuk meneruskan, atau Batal untuk terus berada di halaman semasa."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Sahkan"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Petua: Ketik dua kali untuk mengezum masuk dan keluar."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Auto isi"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 82d3bf0..3866612 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Omstart"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Siden på «<xliff:g id="TITLE">%s</xliff:g>» sier:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Vil du navigere bort fra denne siden?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Trykk på OK for å fortsette eller på Avbryt for å bli værende på siden."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Bekreft"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tips: Dobbelttrykk for å zoome inn og ut."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Autofyll"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index eb421ca..5ac5c3d 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Opnieuw opstarten"</string> <string name="js_dialog_title" msgid="1987483977834603872">"De pagina op \'<xliff:g id="TITLE">%s</xliff:g>\' meldt het volgende:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Wilt u deze pagina verlaten?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Kies \'OK\' om door te gaan of \'Annuleren\' om op de huidige pagina te blijven."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Bevestigen"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tip: dubbeltik om in en uit te zoomen."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Autom. aanvullen"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index be314a3..abb5f3a 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Uruchom ponownie"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Komunikat ze strony pod adresem „<xliff:g id="TITLE">%s</xliff:g>”:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Czy opuścić tę stronę?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Dotknij OK, aby kontynuować, lub Anuluj, aby pozostać na tej stronie."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Potwierdź"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Wskazówka: dotknij dwukrotnie, aby powiększyć lub pomniejszyć."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Autouzupełnianie"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 3385bcd..80d3c78 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -144,7 +144,7 @@ <string name="silent_mode_ring" msgid="8592241816194074353">"Campainha ativada"</string> <string name="shutdown_progress" msgid="2281079257329981203">"A encerrar..."</string> <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"O seu tablet irá encerrar."</string> - <string name="shutdown_confirm" product="default" msgid="649792175242821353">"O seu telefone irá encerrar."</string> + <string name="shutdown_confirm" product="default" msgid="649792175242821353">"O seu telefone será encerrado."</string> <string name="shutdown_confirm_question" msgid="2906544768881136183">"Pretende encerrar?"</string> <string name="reboot_safemode_title" msgid="7054509914500140361">"Reiniciar no modo de segurança"</string> <string name="reboot_safemode_confirm" msgid="55293944502784668">"Pretende reiniciar no modo de segurança? Se sim, irá desativar todas as aplicações de terceiros instaladas. Estas serão restauradas quando reiniciar novamente."</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Reiniciar"</string> <string name="js_dialog_title" msgid="1987483977834603872">"A página em \"<xliff:g id="TITLE">%s</xliff:g>\" indica:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Navegar para outra página?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Toque em OK para continuar ou Cancelar para permanecer na página atual."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Confirmar"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Sugestão: toque duas vezes para aumentar ou diminuir o zoom."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Preenchimento Automático"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 2a2490c..3e4f70b 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -160,9 +160,9 @@ <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencioso"</string> <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Som DESATIVADO"</string> <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"O som está ATIVADO"</string> - <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo de avião"</string> - <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo de avião ATIVADO"</string> - <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modo de avião DESATIVADO"</string> + <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avião"</string> + <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo avião ATIVADO"</string> + <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modo avião DESATIVADO"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> <string name="safeMode" msgid="2788228061547930246">"Modo de segurança"</string> <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Reiniciar"</string> <string name="js_dialog_title" msgid="1987483977834603872">"A página em \"<xliff:g id="TITLE">%s</xliff:g>\" diz:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Deseja sair desta página?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Selecione OK para continuar ou Cancelar para permanecer na página atual."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Confirmar"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Dica: toque duas vezes para aumentar e diminuir o zoom."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Preench. aut."</string> diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml index 848c882..27a2bb9 100644 --- a/core/res/res/values-rm/strings.xml +++ b/core/res/res/values-rm/strings.xml @@ -1398,7 +1398,13 @@ <!-- no translation found for js_dialog_title (1987483977834603872) --> <skip /> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <!-- no translation found for js_dialog_before_unload (730366588032430474) --> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> <skip /> <string name="save_password_label" msgid="6860261758665825069">"Confermar"</string> <!-- no translation found for double_tap_toast (4595046515400268881) --> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 7914a4a..56ce802 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -622,7 +622,7 @@ <string name="permlab_accessNotifications" msgid="7673416487873432268">"accesare notificări"</string> <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite aplicației să recupereze, să examineze și să șteargă notificări, inclusiv pe cele postate de alte aplicații."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"conectare la un serviciu de citire a notificărilor"</string> - <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite proprietarului să se conecteze la interfața de nivel superior a unui serviciu de citire a notificărilor. Nu ar trebui să fie niciodată necesară pentru aplicațiile obișnuite."</string> + <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite proprietarului să se conecteze la interfața de nivel superior a unui serviciu de citire a notificărilor. În mod normal aplicațiile nu ar trebui să aibă nevoie de această permisiune."</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"Setaţi reguli pentru parolă"</string> <string name="policydesc_limitPassword" msgid="3252114203919510394">"Stabiliţi lungimea şi tipul de caractere permise în parolele pentru deblocarea ecranului."</string> <string name="policylab_watchLogin" msgid="914130646942199503">"Monitorizaţi încercările de deblocare a ecranului"</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Reporniţi"</string> <string name="js_dialog_title" msgid="1987483977834603872">"La pagina de la „<xliff:g id="TITLE">%s</xliff:g>” apare:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Doriţi să părăsiţi această pagină?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Apăsaţi pe OK pentru a continua sau pe Anulaţi pentru a rămâne pe pagina curentă."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Confirmaţi"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Sfat: măriţi şi micşoraţi prin dublă atingere."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Automat"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 7ae1751..86c655d 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Перезагрузка"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Подтвердите действие на <xliff:g id="TITLE">%s</xliff:g>"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Покинуть эту страницу?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Нажмите \"ОК\", чтобы продолжить, или \"Отмена\", чтобы остаться."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Подтвердите"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Совет: нажмите дважды, чтобы увеличить и уменьшить масштаб."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Автозаполнение"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 0f46bb9..53029bd 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Reštartovať"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Stránka „<xliff:g id="TITLE">%s</xliff:g>“ uvádza:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Chcete opustiť túto stránku?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Ak chcete pokračovať, dotknite sa tlačidla OK. Ak chcete zostať na stránke, dotknite sa tlačidla Zrušiť."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Potvrdiť"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tip: Dvojitým klepnutím môžete zobrazenie priblížiť alebo oddialiť."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Aut.dop."</string> @@ -1051,7 +1058,7 @@ <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Nedostatok ukladacieho priestoru"</string> <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Niektoré systémové funkcie nemusia fungovať"</string> <string name="app_running_notification_title" msgid="8718335121060787914">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> je spustená"</string> - <string name="app_running_notification_text" msgid="4653586947747330058">"Dotknutím sa zobrazíte viac informácií alebo zastavíte aplikáciu."</string> + <string name="app_running_notification_text" msgid="4653586947747330058">"Dotykom si zobrazíte viac informácií alebo zastavíte aplikáciu."</string> <string name="ok" msgid="5970060430562524910">"OK"</string> <string name="cancel" msgid="6442560571259935130">"Zrušiť"</string> <string name="yes" msgid="5362982303337969312">"OK"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 55ac6a2..72503bf 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Znova zaženi"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Na strani na »<xliff:g id="TITLE">%s</xliff:g>« piše:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Ali se želite premakniti s te strani"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Če želite nadaljevati, se dotaknite »V redu«, če želite ostati na trenutni strani, izberite »Prekliči«."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Potrdi"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Nasvet: Tapnite dvakrat, če želite povečati ali pomanjšati."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Samoizp."</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index f0cadc2..ffa0af1 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Поново покрени"</string> <string name="js_dialog_title" msgid="1987483977834603872">"На страници на адреси „<xliff:g id="TITLE">%s</xliff:g>“ пише следеће:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Желите ли да напустите ову страницу?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Додирните Потврди да бисте наставили или Откажи да бисте остали на тренутно отвореној страници."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Потврда"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Савет: Додирните двапут да бисте увећали и умањили приказ."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Аутом. поп."</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 7510b89..0da1033 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Starta om"</string> <string name="js_dialog_title" msgid="1987483977834603872">"På sidan på <xliff:g id="TITLE">%s</xliff:g> står det:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Vill du lämna den här den här sidan?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Tryck på OK om du vill fortsätta eller på Avbryt om du vill vara kvar på den aktuella sidan."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Bekräfta"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tips! Dubbelknacka om du vill zooma in eller ut."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Autofyll"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index a44a069..b685cc5 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -138,7 +138,7 @@ <string name="turn_on_radio" msgid="3912793092339962371">"Washa mtandao-hewa"</string> <string name="turn_off_radio" msgid="8198784949987062346">"Zima pasiwaya"</string> <string name="screen_lock" msgid="799094655496098153">"Funga skrini"</string> - <string name="power_off" msgid="4266614107412865048">"Nishati imezimwa"</string> + <string name="power_off" msgid="4266614107412865048">"Zima simu"</string> <string name="silent_mode_silent" msgid="319298163018473078">"Programu ya milio imezimwa"</string> <string name="silent_mode_vibrate" msgid="7072043388581551395">"Mtetemo wa programu ya milio"</string> <string name="silent_mode_ring" msgid="8592241816194074353">"Programu ya milio imewashwa"</string> @@ -153,7 +153,7 @@ <string name="global_actions" product="tablet" msgid="408477140088053665">"Chaguo za kompyuta ndogo"</string> <string name="global_actions" product="default" msgid="2406416831541615258">"Chaguo za simu"</string> <string name="global_action_lock" msgid="2844945191792119712">"Funga skrini"</string> - <string name="global_action_power_off" msgid="4471879440839879722">"Nishati imezimwa"</string> + <string name="global_action_power_off" msgid="4471879440839879722">"Zima simu"</string> <string name="global_action_bug_report" msgid="7934010578922304799">"Ripoti ya hitilafu"</string> <string name="bugreport_title" msgid="2667494803742548533">"Chukua ripoti ya hitilafu"</string> <string name="bugreport_message" msgid="398447048750350456">"Hii itakusanya maelezo kuhusu hali yako ya sasa ya kifaa, ili kutuma ujumbe wa barua pepe. Itachukua muda mfupi kuanza ripoti ya hitilafu mpaka itakapokuwa tayari kutumwa; tafadhali vumilia."</string> @@ -519,7 +519,7 @@ <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"zuia simu dhidi ya kulala"</string> <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Inaruhusu programu kuzuia kompyuta kibao kwenda kulala."</string> <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Inaruhusu programu kuzuia simu isiende kulala."</string> - <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"Washa au zima kompyuta ndogo"</string> + <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"Washa au zima kompyuta kibao"</string> <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"washa au zima simu"</string> <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Inaruhusu programu kuwasha au kuzima kompyuta kibao."</string> <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Inaruhusu programu kuwasha au kuzima simu."</string> @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Washa tena"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Ukurasa ulio \"<xliff:g id="TITLE">%s</xliff:g>\" unasema:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"HatiJava"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Toka kwa ukurasa huu?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Gusa Sawa ili kuendelea, au Ghairi ili kubaki kwenye ukurasa wa sasa."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Thibitisha"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Kidokezo: Gonga mara mbili ili kukuza ndani na nje."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Kujaza kiotomatiki"</string> @@ -1060,7 +1067,7 @@ <string name="loading" msgid="7933681260296021180">"Inapakia…"</string> <string name="capital_on" msgid="1544682755514494298">"Washa"</string> <string name="capital_off" msgid="6815870386972805832">"ZIMA"</string> - <string name="whichApplication" msgid="4533185947064773386">"Kamilisha kitendo kwa kutumia"</string> + <string name="whichApplication" msgid="4533185947064773386">"Kamilisha kitendo ukitumia"</string> <string name="alwaysUse" msgid="4583018368000610438">"Tumia kama chaguo-msingi la kitendo hiki."</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Futa chaguo-msingi katika mipangilio ya Mfumo > Apps > iliyopakuliwa."</string> <string name="chooseActivity" msgid="7486876147751803333">"Chagua kitendo"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index e8eda68..e72b516 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"รีบูต"</string> <string name="js_dialog_title" msgid="1987483977834603872">"หน้าเว็บที่ \"<xliff:g id="TITLE">%s</xliff:g>\" ระบุว่า:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"ไปจากหน้าเว็บนี้หรือไม่"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"แตะ \"ตกลง\" เพื่อทำต่อ หรือ \"ยกเลิก\" เพื่ออยู่ที่หน้าเว็บปัจจุบัน"</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"ยืนยัน"</string> <string name="double_tap_toast" msgid="4595046515400268881">"เคล็ดลับ: แตะสองครั้งเพื่อขยายและย่อ"</string> <string name="autofill_this_form" msgid="4616758841157816676">"ป้อนอัตโนมัติ"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 93075b9..5a3a305 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"I-reboot"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Isinasaad ng pahina sa \"<xliff:g id="TITLE">%s</xliff:g>\" na:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Mag-navigate palayo mula sa pahinang ito?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Pindutin ang OK upang magpatuloy, o Kanselahin upang manatili sa kasalukuyang pahina."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Kumpirmahin"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Tip: Mag-double tap upang mag-zoom in at out."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Autofill"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 226d54d..2e9c305 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Yeniden başlat"</string> <string name="js_dialog_title" msgid="1987483977834603872">"\"<xliff:g id="TITLE">%s</xliff:g>\" adresindeki sayfada şunlar belirtiliyor:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Bu sayfadan ayrılıyor musunuz?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Devam etmek için Tamam\'ı, mevcut sayfada kalmak için İptal\'i tıklayın."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Onayla"</string> <string name="double_tap_toast" msgid="4595046515400268881">"İpucu: Yakınlaştırmak ve uzaklaştırmak için iki kez hafifçe vurun."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Otomatik Doldur"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index f5b9508..6e03610 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Перезав."</string> <string name="js_dialog_title" msgid="1987483977834603872">"На сторінці за адресою \"<xliff:g id="TITLE">%s</xliff:g>\" написано:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"Javascript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Перейти з цієї сторінки?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Торкніться \"OK\", щоб продовжити, або \"Скасувати\", щоб залишитися на поточній сторінці."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Підтверд."</string> <string name="double_tap_toast" msgid="4595046515400268881">"Порада: двічі торкніться для збільшення чи зменшення."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Автозап."</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 4198f43..783fc48 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Khởi động lại"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Trang tại \"<xliff:g id="TITLE">%s</xliff:g>\" cho biết:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Điều hướng khỏi trang này?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Chạm OK để tiếp tục hoặc Hủy để ở lại trang hiện tại."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Xác nhận"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Mẹo: Nhấn đúp để phóng to và thu nhỏ."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Tự động điền"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index f9bf43f..0f1e42f 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"重新启动"</string> <string name="js_dialog_title" msgid="1987483977834603872">"网址为“<xliff:g id="TITLE">%s</xliff:g>”的网页显示:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"要从此页面导航至其他页面吗?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"触摸“确定”继续,或触摸“取消”留在当前页面。"</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"确认"</string> <string name="double_tap_toast" msgid="4595046515400268881">"提示:点按两次可放大或缩小。"</string> <string name="autofill_this_form" msgid="4616758841157816676">"自动填充"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index b96e6b3..9b0cb6d 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"重新開機"</string> <string name="js_dialog_title" msgid="1987483977834603872">"「<xliff:g id="TITLE">%s</xliff:g>」網頁指出:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"離開這個頁面?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"輕觸 [確定] 離開這個頁面,或輕觸 [取消] 停留在這個頁面。"</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"確認"</string> <string name="double_tap_toast" msgid="4595046515400268881">"提示:輕按兩下即可縮放。"</string> <string name="autofill_this_form" msgid="4616758841157816676">"自動填入功能"</string> @@ -1477,7 +1484,7 @@ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統就會要求您透過電子郵件帳戶解除手機的鎖定狀態。"\n\n"請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string> <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"移除"</string> - <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"要將音量調高到建議等級以上嗎?"\n"長時間聆聽偏高音量可能會損害您的聽力。"</string> + <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"要將音量調高到建議等級以上嗎?"\n"長時間聆聽高音量可能會損害您的聽力。"</string> <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"持續用兩指按住即可啟用協助工具。"</string> <string name="accessibility_enabled" msgid="1381972048564547685">"協助工具已啟用。"</string> <string name="enable_accessibility_canceled" msgid="3833923257966635673">"協助工具已取消。"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index eeb9165..41bd5eb 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -864,7 +864,14 @@ <string name="factorytest_reboot" msgid="6320168203050791643">"Qalisa kabusha"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Ikhasi eliku <xliff:g id="TITLE">%s</xliff:g> lithi:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"i-JavaScript"</string> - <string name="js_dialog_before_unload" msgid="730366588032430474">"Phuma kuleli khasi? "\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n" Thinta KULUNGILE ukuqhubeka, noma Khansela ukuhlala kuleli khasi."</string> + <!-- no translation found for js_dialog_before_unload_title (2619376555525116593) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_positive_button (3112752010600484130) --> + <skip /> + <!-- no translation found for js_dialog_before_unload_negative_button (5614861293026099715) --> + <skip /> + <!-- no translation found for js_dialog_before_unload (3468816357095378590) --> + <skip /> <string name="save_password_label" msgid="6860261758665825069">"Qinisekisa"</string> <string name="double_tap_toast" msgid="4595046515400268881">"Ithiphu: thepha kabili ukusondeza ngaphandle nangaphakathi."</string> <string name="autofill_this_form" msgid="4616758841157816676">"Ukugcwalisa Ngokuzenzakalelayo"</string> diff --git a/docs/html/images/mediadrm_decryption_sequence.png b/docs/html/images/mediadrm_decryption_sequence.png Binary files differnew file mode 100644 index 0000000..2bd95ea --- /dev/null +++ b/docs/html/images/mediadrm_decryption_sequence.png diff --git a/docs/html/images/mediadrm_overview.png b/docs/html/images/mediadrm_overview.png Binary files differnew file mode 100644 index 0000000..dd66bce --- /dev/null +++ b/docs/html/images/mediadrm_overview.png diff --git a/media/java/android/media/MediaDrm.java b/media/java/android/media/MediaDrm.java index 6872278..31fbc4a 100644 --- a/media/java/android/media/MediaDrm.java +++ b/media/java/android/media/MediaDrm.java @@ -29,25 +29,69 @@ import android.os.Parcel; import android.util.Log; /** - * MediaDrm can be used in conjunction with {@link android.media.MediaCrypto} - * to obtain keys for decrypting protected media data. - * - * Crypto schemes are assigned 16 byte UUIDs, - * the method {@link #isCryptoSchemeSupported} can be used to query if a given - * scheme is supported on the device. - * + * MediaDrm can be used to obtain keys for decrypting protected media streams, in + * conjunction with {@link android.media.MediaCrypto}. The MediaDrm APIs + * are designed to support the ISO/IEC 23001-7: Common Encryption standard, but + * may also be used to implement other encryption schemes. + * <p> + * Encrypted content is prepared using an encryption server and stored in a content + * library. The encrypted content is streamed or downloaded from the content library to + * client devices via content servers. Licenses to view the content are obtained from + * a License Server. + * <p> + * <p><img src="../../../images/mediadrm_overview.png" + * alt="MediaDrm Overview diagram" + * border="0" /></p> + * <p> + * Keys are requested from the license server using a key request. The key + * response is delivered to the client app, which provides the response to the + * MediaDrm API. + * <p> + * A Provisioning server may be required to distribute device-unique credentials to + * the devices. + * <p> + * Enforcing requirements related to the number of devices that may play content + * simultaneously can be performed either through key renewal or using the secure + * stop methods. + * <p> + * The following sequence diagram shows the interactions between the objects + * involved while playing back encrypted content: + * <p> + * <p><img src="../../../images/mediadrm_decryption_sequence.png" + * alt="MediaDrm Overview diagram" + * border="0" /></p> + * <p> + * The app first constructs {@link android.media.MediaExtractor} and + * {@link android.media.MediaCodec} objects. It accesses the DRM-scheme-identifying UUID, + * typically from metadata in the content, and uses this UUID to construct an instance + * of a MediaDrm object that is able to support the DRM scheme required by the content. + * Crypto schemes are assigned 16 byte UUIDs. The method {@link #isCryptoSchemeSupported} + * can be used to query if a given scheme is supported on the device. + * <p> + * The app calls {@link #openSession} to generate a sessionId that will uniquely identify + * the session in subsequent interactions. The app next uses the MediaDrm object to + * obtain a key request message and send it to the license server, then provide + * the server's response to the MediaDrm object. + * <p> + * Once the app has a sessionId, it can construct a MediaCrypto object from the UUID and + * sessionId. The MediaCrypto object is registered with the MediaCodec in the + * {@link MediaCodec.#configure} method to enable the codec to decrypt content. + * <p> + * When the app has constructed {@link android.media.MediaExtractor}, + * {@link android.media.MediaCodec} and {@link android.media.MediaCrypto} objects, + * it proceeds to pull samples from the extractor and queue them into the decoder. For + * encrypted content, the samples returned from the extractor remain encrypted, they + * are only decrypted when the samples are delivered to the decoder. + * <p> * <a name="Callbacks"></a> * <h3>Callbacks</h3> - * <p>Applications may want to register for informational events in order - * to be informed of some internal state update during playback or streaming. + * <p>Applications should register for informational events in order + * to be informed of key state updates during playback or streaming. * Registration for these events is done via a call to - * {@link #setOnEventListener(OnInfoListener)}setOnInfoListener, - * In order to receive the respective callback - * associated with this listener, applications are required to create + * {@link #setOnEventListener}. In order to receive the respective + * callback associated with this listener, applications are required to create * MediaDrm objects on a thread with its own Looper running (main UI * thread by default has a Looper running). - * - * @hide -- don't expose yet */ public final class MediaDrm { @@ -116,7 +160,7 @@ public final class MediaDrm { /** * Interface definition for a callback to be invoked when a drm event - * occurs. + * occurs */ public interface OnEventListener { @@ -132,10 +176,30 @@ public final class MediaDrm { void onEvent(MediaDrm md, byte[] sessionId, int event, int extra, byte[] data); } - public static final int MEDIA_DRM_EVENT_PROVISION_REQUIRED = 1; - public static final int MEDIA_DRM_EVENT_KEY_REQUIRED = 2; - public static final int MEDIA_DRM_EVENT_KEY_EXPIRED = 3; - public static final int MEDIA_DRM_EVENT_VENDOR_DEFINED = 4; + /** + * This event type indicates that the app needs to request a certificate from + * the provisioning server. The request message data is obtained using + * {@link #getProvisionRequest} + */ + public static final int EVENT_PROVISION_REQUIRED = 1; + + /** + * This event type indicates that the app needs to request keys from a license + * server. The request message data is obtained using {@link #getKeyRequest}. + */ + public static final int EVENT_KEY_REQUIRED = 2; + + /** + * This event type indicates that the licensed usage duration for keys in a session + * has expired. The keys are no longer valid. + */ + public static final int EVENT_KEY_EXPIRED = 3; + + /** + * This event may indicate some specific vendor-defined condition, see your + * DRM provider documentation for details + */ + public static final int EVENT_VENDOR_DEFINED = 4; private static final int DRM_EVENT = 200; @@ -183,7 +247,7 @@ public final class MediaDrm { } /* - * Called from native code when an interesting event happens. This method + * This method is called from native code when an event occurs. This method * just uses the EventHandler system to post the event back to the main app thread. * We use a weak reference to the original MediaPlayer object so that the native * code is safe from the object disappearing from underneath it. (This is @@ -203,89 +267,117 @@ public final class MediaDrm { } /** - * Open a new session with the MediaDrm object. A session ID is returned. + * Open a new session with the MediaDrm object. A session ID is returned. */ - public native byte[] openSession() throws MediaDrmException; + public native byte[] openSession(); /** - * Close a session on the MediaDrm object that was previously opened - * with {@link #openSession}. + * Close a session on the MediaDrm object that was previously opened + * with {@link #openSession}. */ - public native void closeSession(byte[] sessionId) throws MediaDrmException; + public native void closeSession(byte[] sessionId); - public static final int MEDIA_DRM_KEY_TYPE_STREAMING = 1; - public static final int MEDIA_DRM_KEY_TYPE_OFFLINE = 2; - public static final int MEDIA_DRM_KEY_TYPE_RELEASE = 3; + /** + * This key request type species that the keys will be for online use, they will + * not be saved to the device for subsequent use when the device is not connected + * to a network. + */ + public static final int KEY_TYPE_STREAMING = 1; + + /** + * This key request type specifies that the keys will be for offline use, they + * will be saved to the device for use when the device is not connected to a network. + */ + public static final int KEY_TYPE_OFFLINE = 2; + + /** + * This key request type specifies that previously saved offline keys should be released. + */ + public static final int KEY_TYPE_RELEASE = 3; + + /** + * Contains the opaque data an app uses to request keys from a license server + */ + public final static class KeyRequest { + KeyRequest() {} + + /** + * Get the opaque message data + */ + public byte[] getData() { return mData; } + + /** + * Get the default URL to use when sending the key request message to a + * server, if known. The app may prefer to use a different license + * server URL from other sources. + */ + public String getDefaultUrl() { return mDefaultUrl; } - public final class KeyRequest { - public KeyRequest() {} - public byte[] data; - public String defaultUrl; + private byte[] mData; + private String mDefaultUrl; }; /** * A key request/response exchange occurs between the app and a license server * to obtain or release keys used to decrypt encrypted content. + * <p> * getKeyRequest() is used to obtain an opaque key request byte array that is * delivered to the license server. The opaque key request byte array is returned * in KeyRequest.data. The recommended URL to deliver the key request to is * returned in KeyRequest.defaultUrl. - * + * <p> * After the app has received the key request response from the server, * it should deliver to the response to the DRM engine plugin using the method * {@link #provideKeyResponse}. * * @param scope may be a sessionId or a keySetId, depending on the specified keyType. - * When the keyType is MEDIA_DRM_KEY_TYPE_STREAMING or MEDIA_DRM_KEY_TYPE_OFFLINE, + * When the keyType is KEY_TYPE_STREAMING or KEY_TYPE_OFFLINE, * scope should be set to the sessionId the keys will be provided to. When the keyType - * is MEDIA_DRM_KEY_TYPE_RELEASE, scope should be set to the keySetId of the keys + * is KEY_TYPE_RELEASE, scope should be set to the keySetId of the keys * being released. Releasing keys from a device invalidates them for all sessions. * @param init container-specific data, its meaning is interpreted based on the * mime type provided in the mimeType parameter. It could contain, for example, * the content ID, key ID or other data obtained from the content metadata that is * required in generating the key request. init may be null when keyType is - * MEDIA_DRM_KEY_TYPE_RELEASE. + * KEY_TYPE_RELEASE. * @param mimeType identifies the mime type of the content * @param keyType specifes the type of the request. The request may be to acquire * keys for streaming or offline content, or to release previously acquired * keys, which are identified by a keySetId. - * @param optionalParameters are included in the key request message to * allow a client application to provide additional message parameters to the server. */ public native KeyRequest getKeyRequest(byte[] scope, byte[] init, String mimeType, int keyType, - HashMap<String, String> optionalParameters) - throws MediaDrmException; + HashMap<String, String> optionalParameters); + /** * A key response is received from the license server by the app, then it is * provided to the DRM engine plugin using provideKeyResponse. The byte array * returned is a keySetId that can be used to later restore the keys to a new - * session with the method {@link restoreKeys}, enabling offline key use. + * session with the method {@link #restoreKeys}, enabling offline key use. * * @param sessionId the session ID for the DRM session * @param response the byte array response from the server */ - public native byte[] provideKeyResponse(byte[] sessionId, byte[] response) - throws MediaDrmException; + public native byte[] provideKeyResponse(byte[] sessionId, byte[] response); /** * Restore persisted offline keys into a new session. keySetId identifies the - * keys to load, obtained from a prior call to {@link provideKeyResponse}. + * keys to load, obtained from a prior call to {@link #provideKeyResponse}. * * @param sessionId the session ID for the DRM session * @param keySetId identifies the saved key set to restore */ - public native void restoreKeys(byte[] sessionId, byte[] keySetId) - throws MediaDrmException; + public native void restoreKeys(byte[] sessionId, byte[] keySetId); /** * Remove the current keys from a session. * * @param sessionId the session ID for the DRM session */ - public native void removeKeys(byte[] sessionId) throws MediaDrmException; + public native void removeKeys(byte[] sessionId); /** * Request an informative description of the key status for the session. The status is @@ -296,25 +388,41 @@ public final class MediaDrm { * * @param sessionId the session ID for the DRM session */ - public native HashMap<String, String> queryKeyStatus(byte[] sessionId) - throws MediaDrmException; + public native HashMap<String, String> queryKeyStatus(byte[] sessionId); + + /** + * Contains the opaque data an app uses to request a certificate from a provisioning + * server + */ + public final static class ProvisionRequest { + ProvisionRequest() {} + + /** + * Get the opaque message data + */ + public byte[] getData() { return mData; } + + /** + * Get the default URL to use when sending the provision request + * message to a server, if known. The app may prefer to use a different + * provisioning server URL obtained from other sources. + */ + public String getDefaultUrl() { return mDefaultUrl; } - public final class ProvisionRequest { - public ProvisionRequest() {} - public byte[] data; - public String defaultUrl; + private byte[] mData; + private String mDefaultUrl; } /** * A provision request/response exchange occurs between the app and a provisioning * server to retrieve a device certificate. If provisionining is required, the - * MEDIA_DRM_EVENT_PROVISION_REQUIRED event will be sent to the event handler. + * EVENT_PROVISION_REQUIRED event will be sent to the event handler. * getProvisionRequest is used to obtain the opaque provision request byte array that * should be delivered to the provisioning server. The provision request byte array * is returned in ProvisionRequest.data. The recommended URL to deliver the provision * request to is returned in ProvisionRequest.defaultUrl. */ - public native ProvisionRequest getProvisionRequest() throws MediaDrmException; + public native ProvisionRequest getProvisionRequest(); /** * After a provision response is received by the app, it is provided to the DRM @@ -323,92 +431,91 @@ public final class MediaDrm { * @param response the opaque provisioning response byte array to provide to the * DRM engine plugin. */ - public native void provideProvisionResponse(byte[] response) - throws MediaDrmException; + public native void provideProvisionResponse(byte[] response); /** - * A means of enforcing the contractual requirement for a concurrent stream limit - * per subscriber across devices is provided via SecureStop. SecureStop is a means - * of securely monitoring the lifetime of sessions. Since playback on a device can - * be interrupted due to reboot, power failure, etc. a means of persisting the - * lifetime information on the device is needed. - * - * A signed version of the sessionID is written to persistent storage on the device - * when each MediaCrypto object is created. The sessionID is signed by the device - * private key to prevent tampering. - * + * A means of enforcing limits on the number of concurrent streams per subscriber + * across devices is provided via SecureStop. This is achieved by securely + * monitoring the lifetime of sessions. + * <p> + * Information from the server related to the current playback session is written + * to persistent storage on the device when each MediaCrypto object is created. + * <p> * In the normal case, playback will be completed, the session destroyed and the - * Secure Stops will be queried. The App queries secure stops and forwards the + * Secure Stops will be queried. The app queries secure stops and forwards the * secure stop message to the server which verifies the signature and notifies the * server side database that the session destruction has been confirmed. The persisted * record on the client is only removed after positive confirmation that the server * received the message using releaseSecureStops(). */ - public native List<byte[]> getSecureStops() throws MediaDrmException; + public native List<byte[]> getSecureStops(); /** * Process the SecureStop server response message ssRelease. After authenticating - * the message, remove the SecureStops identiied in the response. + * the message, remove the SecureStops identified in the response. * * @param ssRelease the server response indicating which secure stops to release */ - public native void releaseSecureStops(byte[] ssRelease) - throws MediaDrmException; + public native void releaseSecureStops(byte[] ssRelease); /** - * Read a DRM engine plugin property value, given the property name string. There are - * several forms of property access functions, depending on the data type returned. - * + * String property name: identifies the maker of the DRM engine plugin + */ + public static final String PROPERTY_VENDOR = "vendor"; + + /** + * String property name: identifies the version of the DRM engine plugin + */ + public static final String PROPERTY_VERSION = "version"; + + /** + * String property name: describes the DRM engine plugin + */ + public static final String PROPERTY_DESCRIPTION = "description"; + + /** + * String property name: a comma-separated list of cipher and mac algorithms + * supported by CryptoSession. The list may be empty if the DRM engine + * plugin does not support CryptoSession operations. + */ + public static final String PROPERTY_ALGORITHM = "algorithm"; + + /** + * Read a DRM engine plugin String property value, given the property name string. + * <p> * Standard fields names are: - * vendor String - identifies the maker of the DRM engine plugin - * version String - identifies the version of the DRM engine plugin - * description String - describes the DRM engine plugin - * deviceUniqueId byte[] - The device unique identifier is established during device - * provisioning and provides a means of uniquely identifying - * each device - * algorithms String - a comma-separate list of cipher and mac algorithms supported - * by CryptoSession. The list may be empty if the DRM engine - * plugin does not support CryptoSession operations. + * {@link #PROPERTY_VENDOR}, {@link #PROPERTY_VERSION}, + * {@link #PROPERTY_DESCRIPTION}, {@link #PROPERTY_ALGORITHM} */ - public native String getPropertyString(String propertyName) - throws MediaDrmException; + public native String getPropertyString(String propertyName); - public native byte[] getPropertyByteArray(String propertyName) - throws MediaDrmException; /** - * Write a DRM engine plugin property value. There are several forms of - * property setting functions, depending on the data type being set. + * The device unique identifier is established during device provisioning and + * provides a means of uniquely identifying each device */ - public native void setPropertyString(String propertyName, String value) - throws MediaDrmException; + public static final String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId"; + + /** + * Read a DRM engine plugin byte array property value, given the property name string. + * <p> + * Standard fields names are {@link #PROPERTY_DEVICE_UNIQUE_ID} + */ + public native byte[] getPropertyByteArray(String propertyName); - public native void setPropertyByteArray(String propertyName, byte[] value) - throws MediaDrmException; /** - * In addition to supporting decryption of DASH Common Encrypted Media, the - * MediaDrm APIs provide the ability to securely deliver session keys from - * an operator's session key server to a client device, based on the factory-installed - * root of trust, and provide the ability to do encrypt, decrypt, sign and verify - * with the session key on arbitrary user data. - * - * The CryptoSession class implements generic encrypt/decrypt/sign/verify methods - * based on the established session keys. These keys are exchanged using the - * getKeyRequest/provideKeyResponse methods. - * - * Applications of this capability could include securing various types of - * purchased or private content, such as applications, books and other media, - * photos or media delivery protocols. - * - * Operators can create session key servers that are functionally similar to a - * license key server, except that instead of receiving license key requests and - * providing encrypted content keys which are used specifically to decrypt A/V media - * content, the session key server receives session key requests and provides - * encrypted session keys which can be used for general purpose crypto operations. + * Set a DRM engine plugin String property value. + */ + public native void setPropertyString(String propertyName, String value); + + /** + * Set a DRM engine plugin byte array property value. */ + public native void setPropertyByteArray(String propertyName, byte[] value); + private static final native void setCipherAlgorithmNative(MediaDrm drm, byte[] sessionId, String algorithm); @@ -429,61 +536,112 @@ public final class MediaDrm { byte[] keyId, byte[] message, byte[] signature); + /** + * In addition to supporting decryption of DASH Common Encrypted Media, the + * MediaDrm APIs provide the ability to securely deliver session keys from + * an operator's session key server to a client device, based on the factory-installed + * root of trust, and then perform encrypt, decrypt, sign and verify operations + * with the session key on arbitrary user data. + * <p> + * The CryptoSession class implements generic encrypt/decrypt/sign/verify methods + * based on the established session keys. These keys are exchanged using the + * getKeyRequest/provideKeyResponse methods. + * <p> + * Applications of this capability could include securing various types of + * purchased or private content, such as applications, books and other media, + * photos or media delivery protocols. + * <p> + * Operators can create session key servers that are functionally similar to a + * license key server, except that instead of receiving license key requests and + * providing encrypted content keys which are used specifically to decrypt A/V media + * content, the session key server receives session key requests and provides + * encrypted session keys which can be used for general purpose crypto operations. + * <p> + * A CryptoSession is obtained using {@link #getCryptoSession} + */ public final class CryptoSession { private MediaDrm mDrm; private byte[] mSessionId; - /** - * Construct a CryptoSession which can be used to encrypt, decrypt, - * sign and verify messages or data using the session keys established - * for the session using methods {@link getKeyRequest} and - * {@link provideKeyResponse} using a session key server. - * - * @param sessionId the session ID for the session containing keys - * to be used for encrypt, decrypt, sign and/or verify - * - * @param cipherAlgorithm the algorithm to use for encryption and - * decryption ciphers. The algorithm string conforms to JCA Standard - * Names for Cipher Transforms and is case insensitive. For example - * "AES/CBC/PKCS5Padding". - * - * @param macAlgorithm the algorithm to use for sign and verify - * The algorithm string conforms to JCA Standard Names for Mac - * Algorithms and is case insensitive. For example "HmacSHA256". - * - * The list of supported algorithms for a DRM engine plugin can be obtained - * using the method {@link getPropertyString("algorithms")} - */ - - public CryptoSession(MediaDrm drm, byte[] sessionId, - String cipherAlgorithm, String macAlgorithm) - throws MediaDrmException { + CryptoSession(MediaDrm drm, byte[] sessionId, + String cipherAlgorithm, String macAlgorithm) + { mSessionId = sessionId; mDrm = drm; setCipherAlgorithmNative(drm, sessionId, cipherAlgorithm); setMacAlgorithmNative(drm, sessionId, macAlgorithm); } + /** + * Encrypt data using the CryptoSession's cipher algorithm + * + * @param keyid specifies which key to use + * @param input the data to encrypt + * @param iv the initialization vector to use for the cipher + */ public byte[] encrypt(byte[] keyid, byte[] input, byte[] iv) { return encryptNative(mDrm, mSessionId, keyid, input, iv); } + /** + * Decrypt data using the CryptoSessions's cipher algorithm + * + * @param keyid specifies which key to use + * @param input the data to encrypt + * @param iv the initialization vector to use for the cipher + */ public byte[] decrypt(byte[] keyid, byte[] input, byte[] iv) { return decryptNative(mDrm, mSessionId, keyid, input, iv); } + /** + * Sign data using the CryptoSessions's mac algorithm. + * + * @param keyid specifies which key to use + * @param message the data for which a signature is to be computed + */ public byte[] sign(byte[] keyid, byte[] message) { return signNative(mDrm, mSessionId, keyid, message); } + + /** + * Verify a signature using the CryptoSessions's mac algorithm. Return true + * if the signatures match, false if they do no. + * + * @param keyid specifies which key to use + * @param message the data to verify + * @param signature the reference signature which will be compared with the + * computed signature + */ public boolean verify(byte[] keyid, byte[] message, byte[] signature) { return verifyNative(mDrm, mSessionId, keyid, message, signature); } }; + /** + * Obtain a CryptoSession object which can be used to encrypt, decrypt, + * sign and verify messages or data using the session keys established + * for the session using methods {@link #getKeyRequest} and + * {@link #provideKeyResponse} using a session key server. + * + * @param sessionId the session ID for the session containing keys + * to be used for encrypt, decrypt, sign and/or verify + * @param cipherAlgorithm the algorithm to use for encryption and + * decryption ciphers. The algorithm string conforms to JCA Standard + * Names for Cipher Transforms and is case insensitive. For example + * "AES/CBC/NoPadding". + * @param macAlgorithm the algorithm to use for sign and verify + * The algorithm string conforms to JCA Standard Names for Mac + * Algorithms and is case insensitive. For example "HmacSHA256". + * <p> + * The list of supported algorithms for a DRM engine plugin can be obtained + * using the method {@link #getPropertyString} with the property name + * "algorithms". + */ public CryptoSession getCryptoSession(byte[] sessionId, String cipherAlgorithm, String macAlgorithm) - throws MediaDrmException { + { return new CryptoSession(this, sessionId, cipherAlgorithm, macAlgorithm); } @@ -495,8 +653,7 @@ public final class MediaDrm { public native final void release(); private static native final void native_init(); - private native final void native_setup(Object mediadrm_this, byte[] uuid) - throws MediaDrmException; + private native final void native_setup(Object mediadrm_this, byte[] uuid); private native final void native_finalize(); diff --git a/media/java/android/media/MediaDrmException.java b/media/java/android/media/MediaDrmException.java index 6f81f90..d6f5ff4 100644 --- a/media/java/android/media/MediaDrmException.java +++ b/media/java/android/media/MediaDrmException.java @@ -19,8 +19,6 @@ package android.media; /** * Exception thrown if MediaDrm object could not be instantiated for * whatever reason. - * - * @hide -- don't expose yet */ public final class MediaDrmException extends Exception { public MediaDrmException(String detailMessage) { diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp index c32ba9d..d9d466e 100644 --- a/media/jni/android_media_MediaDrm.cpp +++ b/media/jni/android_media_MediaDrm.cpp @@ -458,22 +458,22 @@ static void android_media_MediaDrm_native_init(JNIEnv *env) { "(Ljava/lang/Object;IILjava/lang/Object;)V"); jfieldID field; - GET_STATIC_FIELD_ID(field, clazz, "MEDIA_DRM_EVENT_PROVISION_REQUIRED", "I"); + GET_STATIC_FIELD_ID(field, clazz, "EVENT_PROVISION_REQUIRED", "I"); gEventTypes.kEventProvisionRequired = env->GetStaticIntField(clazz, field); - GET_STATIC_FIELD_ID(field, clazz, "MEDIA_DRM_EVENT_KEY_REQUIRED", "I"); + GET_STATIC_FIELD_ID(field, clazz, "EVENT_KEY_REQUIRED", "I"); gEventTypes.kEventKeyRequired = env->GetStaticIntField(clazz, field); - GET_STATIC_FIELD_ID(field, clazz, "MEDIA_DRM_EVENT_KEY_EXPIRED", "I"); + GET_STATIC_FIELD_ID(field, clazz, "EVENT_KEY_EXPIRED", "I"); gEventTypes.kEventKeyExpired = env->GetStaticIntField(clazz, field); - GET_STATIC_FIELD_ID(field, clazz, "MEDIA_DRM_EVENT_VENDOR_DEFINED", "I"); + GET_STATIC_FIELD_ID(field, clazz, "EVENT_VENDOR_DEFINED", "I"); gEventTypes.kEventVendorDefined = env->GetStaticIntField(clazz, field); FIND_CLASS(clazz, "android/media/MediaDrm$KeyRequest"); - GET_FIELD_ID(gFields.keyRequest.data, clazz, "data", "[B"); - GET_FIELD_ID(gFields.keyRequest.defaultUrl, clazz, "defaultUrl", "Ljava/lang/String;"); + GET_FIELD_ID(gFields.keyRequest.data, clazz, "mData", "[B"); + GET_FIELD_ID(gFields.keyRequest.defaultUrl, clazz, "mDefaultUrl", "Ljava/lang/String;"); FIND_CLASS(clazz, "android/media/MediaDrm$ProvisionRequest"); - GET_FIELD_ID(gFields.provisionRequest.data, clazz, "data", "[B"); - GET_FIELD_ID(gFields.provisionRequest.defaultUrl, clazz, "defaultUrl", "Ljava/lang/String;"); + GET_FIELD_ID(gFields.provisionRequest.data, clazz, "mData", "[B"); + GET_FIELD_ID(gFields.provisionRequest.defaultUrl, clazz, "mDefaultUrl", "Ljava/lang/String;"); FIND_CLASS(clazz, "java/util/ArrayList"); GET_METHOD_ID(gFields.arraylist.init, clazz, "<init>", "()V"); diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 0789b29..49d689d 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -131,7 +131,7 @@ <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string> - <string name="accessibility_no_sim" msgid="8274017118472455155">"No hay tarjeta SIM."</string> + <string name="accessibility_no_sim" msgid="8274017118472455155">"Sin tarjeta SIM"</string> <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conexión mediante Bluetooth"</string> <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string> <!-- String.format failed for translation --> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index a14ee38..2262204 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -133,7 +133,7 @@ <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string> <string name="accessibility_no_sim" msgid="8274017118472455155">"Sem SIM."</string> <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string> - <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avião."</string> + <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avião."</string> <!-- String.format failed for translation --> <!-- no translation found for accessibility_battery_level (7451474187113371965) --> <skip /> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 3552f2e..d5c8282 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -40,7 +40,7 @@ <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Mipangilio"</string> <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Mtandao-Hewa"</string> <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Hali ya Ndege"</string> - <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Zungusha otomatiki skrini"</string> + <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Skrini ijizungushe kiotomatiki"</string> <string name="status_bar_settings_mute_label" msgid="554682549917429396">"PUUZA"</string> <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"KIOTOMATIKI"</string> <string name="status_bar_settings_notifications" msgid="397146176280905137">"Arifa"</string> diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java index 1f3ac96..7a5f55a 100644 --- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -1160,7 +1160,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { boolean setInputFilter = false; AccessibilityInputFilter inputFilter = null; synchronized (mLock) { - if (userState.mIsAccessibilityEnabled) { + // Accessibility enabled means at least one service is enabled. + if (userState.mIsAccessibilityEnabled + || userState.mIsDisplayMagnificationEnabled) { if (!mHasInputFilter) { mHasInputFilter = true; if (mInputFilter == null) { @@ -1174,7 +1176,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (userState.mIsDisplayMagnificationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_SCREEN_MAGNIFIER; } - if (userState.mIsTouchExplorationEnabled) { + // Touch exploration without accessibility makes no sense. + if (userState.mIsAccessibilityEnabled && userState.mIsTouchExplorationEnabled) { flags |= AccessibilityInputFilter.FLAG_FEATURE_TOUCH_EXPLORATION; } mInputFilter.setEnabledFeatures(flags); diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 4f0000e..f3be0ea 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -218,6 +218,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final boolean DEBUG_POWER_QUICK = DEBUG_POWER || false; static final boolean DEBUG_MU = localLOGV || false; static final boolean DEBUG_IMMERSIVE = localLOGV || false; + static final boolean DEBUG_STACK = localLOGV || false; static final boolean VALIDATE_TOKENS = true; static final boolean SHOW_ACTIVITY_START_TIME = true; diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 5aa056c..0711f74 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -82,6 +82,7 @@ final class ActivityStack { static final boolean DEBUG_CONFIGURATION = ActivityManagerService.DEBUG_CONFIGURATION; static final boolean DEBUG_TASKS = ActivityManagerService.DEBUG_TASKS; static final boolean DEBUG_CLEANUP = ActivityManagerService.DEBUG_CLEANUP; + static final boolean DEBUG_STACK = ActivityManagerService.DEBUG_STACK; static final boolean DEBUG_STATES = ActivityStackSupervisor.DEBUG_STATES; static final boolean DEBUG_ADD_REMOVE = ActivityStackSupervisor.DEBUG_ADD_REMOVE; @@ -2836,6 +2837,8 @@ final class ActivityStack { } final TaskRecord task = r.task; if (task != null && task.removeActivity(r)) { + if (DEBUG_STACK) Slog.i(TAG, + "removeActivityFromHistoryLocked: last activity removed from " + this); mStackSupervisor.removeTask(task); } r.takeFromHistory(); diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java index 8b946e4..7a6687e 100644 --- a/services/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/java/com/android/server/am/ActivityStackSupervisor.java @@ -72,6 +72,8 @@ import java.util.ArrayList; import java.util.List; public class ActivityStackSupervisor { + static final boolean DEBUG_STACK = ActivityManagerService.DEBUG_STACK; + static final boolean DEBUG = ActivityManagerService.DEBUG || false; static final boolean DEBUG_ADD_REMOVE = DEBUG || false; static final boolean DEBUG_APP = DEBUG || false; @@ -237,9 +239,11 @@ public class ActivityStackSupervisor { void removeTask(TaskRecord task) { final ActivityStack stack = task.stack; if (stack.removeTask(task) && !stack.isHomeStack()) { + if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing stack " + stack); mStacks.remove(stack); final int stackId = stack.mStackId; final int nextStackId = mService.mWindowManager.removeStack(stackId); + // TODO: Perhaps we need to let the ActivityManager determine the next focus... if (mFocusedStack.mStackId == stackId) { mFocusedStack = nextStackId == HOME_STACK_ID ? null : getStack(nextStackId); } diff --git a/services/java/com/android/server/wm/FocusedStackFrame.java b/services/java/com/android/server/wm/FocusedStackFrame.java new file mode 100644 index 0000000..29949ad --- /dev/null +++ b/services/java/com/android/server/wm/FocusedStackFrame.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wm; + +import static com.android.server.wm.WindowManagerService.DEBUG_STACK; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.Region; +import android.util.Slog; +import android.view.Display; +import android.view.Surface; +import android.view.SurfaceControl; +import android.view.SurfaceSession; + +class FocusedStackFrame { + private static final String TAG = "FocusedStackFrame"; + private static final int THICKNESS = 10; + private static final float ALPHA = 0.3f; + + private final SurfaceControl mSurfaceControl; + private final Surface mSurface = new Surface(); + private Rect mLastBounds = new Rect(); + private Rect mBounds = new Rect(); + private Rect mTmpDrawRect = new Rect(); + + public FocusedStackFrame(Display display, SurfaceSession session) { + SurfaceControl ctrl = null; + try { + ctrl = new SurfaceControl(session, "FocusedStackFrame", + 1, 1, PixelFormat.TRANSLUCENT, SurfaceControl.HIDDEN); + ctrl.setLayerStack(display.getLayerStack()); + ctrl.setLayer(WindowManagerService.TYPE_LAYER_MULTIPLIER * 102); + ctrl.setAlpha(ALPHA); + mSurface.copyFrom(ctrl); + } catch (SurfaceControl.OutOfResourcesException e) { + } + mSurfaceControl = ctrl; + } + + private void draw(Rect bounds, int color) { + if (DEBUG_STACK) Slog.i(TAG, "draw: bounds=" + bounds.toShortString() + + " color=" + Integer.toHexString(color)); + mTmpDrawRect.set(bounds); + Canvas c = null; + try { + c = mSurface.lockCanvas(mTmpDrawRect); + } catch (IllegalArgumentException e) { + } catch (Surface.OutOfResourcesException e) { + } + if (c == null) { + return; + } + + final int w = bounds.width(); + final int h = bounds.height(); + + // Top + mTmpDrawRect.set(0, 0, w, THICKNESS); + c.clipRect(mTmpDrawRect, Region.Op.REPLACE); + c.drawColor(color); + // Left (not including Top or Bottom stripe). + mTmpDrawRect.set(0, THICKNESS, THICKNESS, h - THICKNESS); + c.clipRect(mTmpDrawRect, Region.Op.REPLACE); + c.drawColor(color); + // Right (not including Top or Bottom stripe). + mTmpDrawRect.set(w - THICKNESS, THICKNESS, w, h - THICKNESS); + c.clipRect(mTmpDrawRect, Region.Op.REPLACE); + c.drawColor(color); + // Bottom + mTmpDrawRect.set(0, h - THICKNESS, w, h); + c.clipRect(mTmpDrawRect, Region.Op.REPLACE); + c.drawColor(color); + + mSurface.unlockCanvasAndPost(c); + } + + private void positionSurface(Rect bounds) { + if (DEBUG_STACK) Slog.i(TAG, "positionSurface: bounds=" + bounds.toShortString()); + mSurfaceControl.setSize(bounds.width(), bounds.height()); + mSurfaceControl.setPosition(bounds.left, bounds.top); + } + + // Note: caller responsible for being inside + // Surface.openTransaction() / closeTransaction() + public void setVisibility(boolean on) { + if (DEBUG_STACK) Slog.i(TAG, "setVisibility: on=" + on + + " mLastBounds=" + mLastBounds.toShortString() + + " mBounds=" + mBounds.toShortString()); + if (mSurfaceControl == null) { + return; + } + if (on) { + if (!mLastBounds.equals(mBounds)) { + // Erase the previous rectangle. + positionSurface(mLastBounds); + draw(mLastBounds, Color.TRANSPARENT); + // Draw the latest rectangle. + positionSurface(mBounds); + draw(mBounds, Color.WHITE); + // Update the history. + mLastBounds.set(mBounds); + } + mSurfaceControl.show(); + } else { + mSurfaceControl.hide(); + } + } + + public void setBounds(Rect bounds) { + if (DEBUG_STACK) Slog.i(TAG, "setBounds: bounds=" + bounds); + mBounds.set(bounds); + } +} diff --git a/services/java/com/android/server/wm/StackBox.java b/services/java/com/android/server/wm/StackBox.java index b195f0b..83f32e9 100644 --- a/services/java/com/android/server/wm/StackBox.java +++ b/services/java/com/android/server/wm/StackBox.java @@ -17,8 +17,11 @@ package com.android.server.wm; import android.graphics.Rect; +import android.util.Slog; import static com.android.server.am.ActivityStackSupervisor.HOME_STACK_ID; +import static com.android.server.wm.WindowManagerService.DEBUG_STACK; +import static com.android.server.wm.WindowManagerService.TAG; import java.io.PrintWriter; import java.util.ArrayList; @@ -230,24 +233,28 @@ public class StackBox { * @return The first stackId of the resulting StackBox. */ int remove() { if (mStack != null) { + if (DEBUG_STACK) Slog.i(TAG, "StackBox.remove: removing stackId=" + mStack.mStackId); mDisplayContent.mStackHistory.remove(mStack); } mDisplayContent.layoutNeeded = true; if (mParent == null) { // This is the top-plane stack. + if (DEBUG_STACK) Slog.i(TAG, "StackBox.remove: removing top plane."); mDisplayContent.removeStackBox(this); return HOME_STACK_ID; } StackBox sibling = isFirstChild() ? mParent.mSecond : mParent.mFirst; StackBox grandparent = mParent.mParent; + sibling.mParent = grandparent; if (grandparent == null) { // mParent is a top-plane stack. Now sibling will be. + if (DEBUG_STACK) Slog.i(TAG, "StackBox.remove: grandparent null"); mDisplayContent.removeStackBox(mParent); mDisplayContent.addStackBox(sibling, true); } else { - sibling.mParent = grandparent; + if (DEBUG_STACK) Slog.i(TAG, "StackBox.remove: grandparent getting sibling"); if (mParent.isFirstChild()) { grandparent.mFirst = sibling; } else { diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index a5df7d9..d21b111 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -401,6 +401,7 @@ public class WindowManagerService extends IWindowManager.Stub final SurfaceSession mFxSession; Watermark mWatermark; StrictModeFlash mStrictModeFlash; + FocusedStackFrame mFocusedStackFrame; final float[] mTmpFloats = new float[9]; @@ -793,6 +794,8 @@ public class WindowManagerService extends IWindowManager.Stub SurfaceControl.openTransaction(); try { createWatermarkInTransaction(); + mFocusedStackFrame = new FocusedStackFrame( + getDefaultDisplayContentLocked().getDisplay(), mFxSession); } finally { SurfaceControl.closeTransaction(); } @@ -3682,6 +3685,25 @@ public class WindowManagerService extends IWindowManager.Stub } } + void setFocusedStackFrame(TaskStack stack) { + if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> OPEN TRANSACTION setFocusedStackFrame"); + SurfaceControl.openTransaction(); + try { + if (stack == null) { + mFocusedStackFrame.setVisibility(false); + } else { + final StackBox box = stack.mStackBox; + final Rect bounds = box.mBounds; + final boolean multipleStacks = box.mParent != null; + mFocusedStackFrame.setBounds(bounds); + mFocusedStackFrame.setVisibility(multipleStacks); + } + } finally { + SurfaceControl.closeTransaction(); + if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, ">>> CLOSE TRANSACTION setFocusedStackFrame"); + } + } + @Override public void setFocusedApp(IBinder token, boolean moveFocusNow) { if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS, @@ -4746,13 +4768,16 @@ public class WindowManagerService extends IWindowManager.Stub } public int removeStack(int stackId) { - final TaskStack stack = mStackIdToStack.get(stackId); - if (stack != null) { - mStackIdToStack.delete(stackId); - int nextStackId = stack.remove(); - stack.getDisplayContent().layoutNeeded = true; - performLayoutAndPlaceSurfacesLocked(); - return nextStackId; + synchronized (mWindowMap) { + final TaskStack stack = mStackIdToStack.get(stackId); + if (stack != null) { + mStackIdToStack.delete(stackId); + int nextStackId = stack.remove(); + stack.getDisplayContent().layoutNeeded = true; + performLayoutAndPlaceSurfacesLocked(); + return nextStackId; + } + if (DEBUG_STACK) Slog.i(TAG, "removeStack: could not find stackId=" + stackId); } return HOME_STACK_ID; } @@ -9236,6 +9261,10 @@ public class WindowManagerService extends IWindowManager.Stub } } + final TaskStack stack = mFocusedApp != null ? + mTaskIdToTask.get(mFocusedApp.groupId).mStack : null; + setFocusedStackFrame(stack); + // Check to see if we are now in a state where the screen should // be enabled, because the window obscured flags have changed. enableScreenIfNeededLocked(); diff --git a/telephony/java/android/telephony/CellIdentityCdma.java b/telephony/java/android/telephony/CellIdentityCdma.java index 31e01c0..dbd48d9 100644 --- a/telephony/java/android/telephony/CellIdentityCdma.java +++ b/telephony/java/android/telephony/CellIdentityCdma.java @@ -93,21 +93,21 @@ public final class CellIdentityCdma implements Parcelable { } /** - * @return Network Id 0..65535 + * @return Network Id 0..65535, Integer.MAX_VALUE if unknown */ public int getNetworkId() { return mNetworkId; } /** - * @return System Id 0..32767 + * @return System Id 0..32767, Integer.MAX_VALUE if unknown */ public int getSystemId() { return mSystemId; } /** - * @return Base Station Id 0..65535 + * @return Base Station Id 0..65535, Integer.MAX_VALUE if unknown */ public int getBasestationId() { return mBasestationId; @@ -118,7 +118,7 @@ public final class CellIdentityCdma implements Parcelable { * specified in 3GPP2 C.S0005-A v6.0. It is represented in units * of 0.25 seconds and ranges from -2592000 to 2592000, both * values inclusive (corresponding to a range of -180 - * to +180 degrees). + * to +180 degrees). Integer.MAX_VALUE if unknown. */ public int getLongitude() { return mLongitude; @@ -129,7 +129,7 @@ public final class CellIdentityCdma implements Parcelable { * specified in 3GPP2 C.S0005-A v6.0. It is represented in units * of 0.25 seconds and ranges from -1296000 to 1296000, both * values inclusive (corresponding to a range of -90 - * to +90 degrees). + * to +90 degrees). Integer.MAX_VALUE if unknown. */ public int getLatitude() { return mLatitude; @@ -162,7 +162,7 @@ public final class CellIdentityCdma implements Parcelable { @Override public String toString() { - StringBuilder sb = new StringBuilder("CellIdentitiyCdma:{"); + StringBuilder sb = new StringBuilder("CellIdentityCdma:{"); sb.append(" mNetworkId="); sb.append(mNetworkId); sb.append(" mSystemId="); sb.append(mSystemId); sb.append(" mBasestationId="); sb.append(mBasestationId); diff --git a/telephony/java/android/telephony/CellIdentityGsm.java b/telephony/java/android/telephony/CellIdentityGsm.java index 98113e7..6f8cc91 100644 --- a/telephony/java/android/telephony/CellIdentityGsm.java +++ b/telephony/java/android/telephony/CellIdentityGsm.java @@ -21,7 +21,7 @@ import android.os.Parcelable; import android.telephony.Rlog; /** - * CellIdentity to represent a unique GSM or UMTS cell + * CellIdentity to represent a unique GSM cell */ public final class CellIdentityGsm implements Parcelable { @@ -35,10 +35,7 @@ public final class CellIdentityGsm implements Parcelable { // 16-bit Location Area Code, 0..65535 private final int mLac; // 16-bit GSM Cell Identity described in TS 27.007, 0..65535 - // 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455 private final int mCid; - // 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511 - private final int mPsc; /** * @hide @@ -48,7 +45,6 @@ public final class CellIdentityGsm implements Parcelable { mMnc = Integer.MAX_VALUE; mLac = Integer.MAX_VALUE; mCid = Integer.MAX_VALUE; - mPsc = Integer.MAX_VALUE; } /** * public constructor @@ -56,16 +52,14 @@ public final class CellIdentityGsm implements Parcelable { * @param mnc 2 or 3-digit Mobile Network Code, 0..999 * @param lac 16-bit Location Area Code, 0..65535 * @param cid 16-bit GSM Cell Identity or 28-bit UMTS Cell Identity - * @param psc 9-bit UMTS Primary Scrambling Code * * @hide */ - public CellIdentityGsm (int mcc, int mnc, int lac, int cid, int psc) { + public CellIdentityGsm (int mcc, int mnc, int lac, int cid) { mMcc = mcc; mMnc = mnc; mLac = lac; mCid = cid; - mPsc = psc; } private CellIdentityGsm(CellIdentityGsm cid) { @@ -73,7 +67,6 @@ public final class CellIdentityGsm implements Parcelable { mMnc = cid.mMnc; mLac = cid.mLac; mCid = cid.mCid; - mPsc = cid.mPsc; } CellIdentityGsm copy() { @@ -81,21 +74,21 @@ public final class CellIdentityGsm implements Parcelable { } /** - * @return 3-digit Mobile Country Code, 0..999 + * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown */ public int getMcc() { return mMcc; } /** - * @return 2 or 3-digit Mobile Network Code, 0..999 + * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown */ public int getMnc() { return mMnc; } /** - * @return 16-bit Location Area Code, 0..65535 + * @return 16-bit Location Area Code, 0..65535, Integer.MAX_VALUE if unknown */ public int getLac() { return mLac; @@ -104,27 +97,24 @@ public final class CellIdentityGsm implements Parcelable { /** * @return CID * Either 16-bit GSM Cell Identity described - * in TS 27.007, 0..65535 - * or 28-bit UMTS Cell Identity described - * in TS 25.331, 0..268435455 + * in TS 27.007, 0..65535, Integer.MAX_VALUE if unknown */ public int getCid() { return mCid; } /** - * @return 9-bit UMTS Primary Scrambling Code described in - * TS 25.331, 0..511 + * @return Integer.MAX_VALUE, undefined for GSM */ + @Deprecated public int getPsc() { - return mPsc; + return Integer.MAX_VALUE; } @Override public int hashCode() { int primeNum = 31; - return (mMcc * primeNum) + (mMnc * primeNum) + (mLac * primeNum) + (mCid * primeNum) + - (mPsc * primeNum); + return (mMcc * primeNum) + (mMnc * primeNum) + (mLac * primeNum) + (mCid * primeNum); } @Override @@ -135,8 +125,7 @@ public final class CellIdentityGsm implements Parcelable { return mMcc == o.mMcc && mMnc == o.mMnc && mLac == o.mLac && - mCid == o.mCid && - mPsc == o.mPsc; + mCid == o.mCid; } catch (ClassCastException e) { return false; } @@ -147,12 +136,11 @@ public final class CellIdentityGsm implements Parcelable { @Override public String toString() { - StringBuilder sb = new StringBuilder("CellIdentitiyGsm:{"); + StringBuilder sb = new StringBuilder("CellIdentityGsm:{"); sb.append(" mMcc=").append(mMcc); sb.append(" mMnc=").append(mMnc); sb.append(" mLac=").append(mLac); sb.append(" mCid=").append(mCid); - sb.append(" mPsc=").append(mPsc); sb.append("}"); return sb.toString(); @@ -172,7 +160,6 @@ public final class CellIdentityGsm implements Parcelable { dest.writeInt(mMnc); dest.writeInt(mLac); dest.writeInt(mCid); - dest.writeInt(mPsc); } /** Construct from Parcel, type has already been processed */ @@ -181,7 +168,6 @@ public final class CellIdentityGsm implements Parcelable { mMnc = in.readInt(); mLac = in.readInt(); mCid = in.readInt(); - mPsc = in.readInt(); if (DBG) log("CellIdentityGsm(Parcel): " + toString()); } diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java index 86924bd..13b39c9 100644 --- a/telephony/java/android/telephony/CellIdentityLte.java +++ b/telephony/java/android/telephony/CellIdentityLte.java @@ -81,35 +81,35 @@ public final class CellIdentityLte implements Parcelable { } /** - * @return 3-digit Mobile Country Code, 0..999 + * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown */ public int getMcc() { return mMcc; } /** - * @return 2 or 3-digit Mobile Network Code, 0..999 + * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown */ public int getMnc() { return mMnc; } /** - * @return 28-bit Cell Identity + * @return 28-bit Cell Identity, Integer.MAX_VALUE if unknown */ public int getCi() { return mCi; } /** - * @return Physical Cell Id 0..503 + * @return Physical Cell Id 0..503, Integer.MAX_VALUE if unknown */ public int getPci() { return mPci; } /** - * @return 16-bit Tracking Area Code + * @return 16-bit Tracking Area Code, Integer.MAX_VALUE if unknown */ public int getTac() { return mTac; @@ -142,7 +142,7 @@ public final class CellIdentityLte implements Parcelable { @Override public String toString() { - StringBuilder sb = new StringBuilder("CellIdentitiyLte:{"); + StringBuilder sb = new StringBuilder("CellIdentityLte:{"); sb.append(" mMcc="); sb.append(mMcc); sb.append(" mMnc="); sb.append(mMnc); sb.append(" mCi="); sb.append(mCi); diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java new file mode 100644 index 0000000..2f8fa42 --- /dev/null +++ b/telephony/java/android/telephony/CellIdentityWcdma.java @@ -0,0 +1,205 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.telephony; + +import android.os.Parcel; +import android.os.Parcelable; +import android.telephony.Rlog; + +/** + * CellIdentity to represent a unique UMTS cell + */ +public final class CellIdentityWcdma implements Parcelable { + + private static final String LOG_TAG = "CellIdentityWcdma"; + private static final boolean DBG = false; + + // 3-digit Mobile Country Code, 0..999 + private final int mMcc; + // 2 or 3-digit Mobile Network Code, 0..999 + private final int mMnc; + // 16-bit Location Area Code, 0..65535 + private final int mLac; + // 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455 + private final int mCid; + // 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511 + private final int mPsc; + + /** + * @hide + */ + public CellIdentityWcdma() { + mMcc = Integer.MAX_VALUE; + mMnc = Integer.MAX_VALUE; + mLac = Integer.MAX_VALUE; + mCid = Integer.MAX_VALUE; + mPsc = Integer.MAX_VALUE; + } + /** + * public constructor + * @param mcc 3-digit Mobile Country Code, 0..999 + * @param mnc 2 or 3-digit Mobile Network Code, 0..999 + * @param lac 16-bit Location Area Code, 0..65535 + * @param cid 28-bit UMTS Cell Identity + * @param psc 9-bit UMTS Primary Scrambling Code + * + * @hide + */ + public CellIdentityWcdma (int mcc, int mnc, int lac, int cid, int psc) { + mMcc = mcc; + mMnc = mnc; + mLac = lac; + mCid = cid; + mPsc = psc; + } + + private CellIdentityWcdma(CellIdentityWcdma cid) { + mMcc = cid.mMcc; + mMnc = cid.mMnc; + mLac = cid.mLac; + mCid = cid.mCid; + mPsc = cid.mPsc; + } + + CellIdentityWcdma copy() { + return new CellIdentityWcdma(this); + } + + /** + * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown + */ + public int getMcc() { + return mMcc; + } + + /** + * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown + */ + public int getMnc() { + return mMnc; + } + + /** + * @return 16-bit Location Area Code, 0..65535, Integer.MAX_VALUE if unknown + */ + public int getLac() { + return mLac; + } + + /** + * @return CID + * 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, Integer.MAX_VALUE if unknown + */ + public int getCid() { + return mCid; + } + + /** + * @return 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511, Integer.MAX_VALUE + * if unknown + */ + public int getPsc() { + return mPsc; + } + + @Override + public int hashCode() { + int primeNum = 31; + return (mMcc * primeNum) + (mMnc * primeNum) + (mLac * primeNum) + (mCid * primeNum) + + (mPsc * primeNum); + } + + @Override + public boolean equals(Object other) { + if (super.equals(other)) { + try { + CellIdentityWcdma o = (CellIdentityWcdma)other; + return mMcc == o.mMcc && + mMnc == o.mMnc && + mLac == o.mLac && + mCid == o.mCid && + mPsc == o.mPsc; + } catch (ClassCastException e) { + return false; + } + } else { + return false; + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("CellIdentityWcdma:{"); + sb.append(" mMcc=").append(mMcc); + sb.append(" mMnc=").append(mMnc); + sb.append(" mLac=").append(mLac); + sb.append(" mCid=").append(mCid); + sb.append(" mPsc=").append(mPsc); + sb.append("}"); + + return sb.toString(); + } + + /** Implement the Parcelable interface */ + @Override + public int describeContents() { + return 0; + } + + /** Implement the Parcelable interface */ + @Override + public void writeToParcel(Parcel dest, int flags) { + if (DBG) log("writeToParcel(Parcel, int): " + toString()); + dest.writeInt(mMcc); + dest.writeInt(mMnc); + dest.writeInt(mLac); + dest.writeInt(mCid); + dest.writeInt(mPsc); + } + + /** Construct from Parcel, type has already been processed */ + private CellIdentityWcdma(Parcel in) { + mMcc = in.readInt(); + mMnc = in.readInt(); + mLac = in.readInt(); + mCid = in.readInt(); + mPsc = in.readInt(); + if (DBG) log("CellIdentityWcdma(Parcel): " + toString()); + } + + /** Implement the Parcelable interface */ + @SuppressWarnings("hiding") + public static final Creator<CellIdentityWcdma> CREATOR = + new Creator<CellIdentityWcdma>() { + @Override + public CellIdentityWcdma createFromParcel(Parcel in) { + return new CellIdentityWcdma(in); + } + + @Override + public CellIdentityWcdma[] newArray(int size) { + return new CellIdentityWcdma[size]; + } + }; + + /** + * log + */ + private static void log(String s) { + Rlog.w(LOG_TAG, s); + } +} diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java index fe3c68b..bfa0942 100644 --- a/telephony/java/android/telephony/CellInfo.java +++ b/telephony/java/android/telephony/CellInfo.java @@ -31,6 +31,8 @@ public abstract class CellInfo implements Parcelable { protected static final int TYPE_CDMA = 2; /** @hide */ protected static final int TYPE_LTE = 3; + /** @hide */ + protected static final int TYPE_WCDMA = 4; // Type to distinguish where time stamp gets recorded. @@ -201,6 +203,7 @@ public abstract class CellInfo implements Parcelable { case TYPE_GSM: return CellInfoGsm.createFromParcelBody(in); case TYPE_CDMA: return CellInfoCdma.createFromParcelBody(in); case TYPE_LTE: return CellInfoLte.createFromParcelBody(in); + case TYPE_WCDMA: return CellInfoWcdma.createFromParcelBody(in); default: throw new RuntimeException("Bad CellInfo Parcel"); } } diff --git a/telephony/java/android/telephony/CellInfoWcdma.java b/telephony/java/android/telephony/CellInfoWcdma.java new file mode 100644 index 0000000..0615702 --- /dev/null +++ b/telephony/java/android/telephony/CellInfoWcdma.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.telephony; + +import android.os.Parcel; +import android.os.Parcelable; +import android.telephony.Rlog; + +/** + * Immutable cell information from a point in time. + */ +public final class CellInfoWcdma extends CellInfo implements Parcelable { + + private static final String LOG_TAG = "CellInfoWcdma"; + private static final boolean DBG = false; + + private CellIdentityWcdma mCellIdentityWcdma; + private CellSignalStrengthWcdma mCellSignalStrengthWcdma; + + /** @hide */ + public CellInfoWcdma() { + super(); + mCellIdentityWcdma = new CellIdentityWcdma(); + mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(); + } + + /** @hide */ + public CellInfoWcdma(CellInfoWcdma ci) { + super(ci); + this.mCellIdentityWcdma = ci.mCellIdentityWcdma.copy(); + this.mCellSignalStrengthWcdma = ci.mCellSignalStrengthWcdma.copy(); + } + + public CellIdentityWcdma getCellIdentity() { + return mCellIdentityWcdma; + } + /** @hide */ + public void setCellIdentity(CellIdentityWcdma cid) { + mCellIdentityWcdma = cid; + } + + public CellSignalStrengthWcdma getCellSignalStrength() { + return mCellSignalStrengthWcdma; + } + /** @hide */ + public void setCellSignalStrength(CellSignalStrengthWcdma css) { + mCellSignalStrengthWcdma = css; + } + + /** + * @return hash code + */ + @Override + public int hashCode() { + return super.hashCode() + mCellIdentityWcdma.hashCode() + mCellSignalStrengthWcdma.hashCode(); + } + + @Override + public boolean equals(Object other) { + if (!super.equals(other)) { + return false; + } + try { + CellInfoWcdma o = (CellInfoWcdma) other; + return mCellIdentityWcdma.equals(o.mCellIdentityWcdma) + && mCellSignalStrengthWcdma.equals(o.mCellSignalStrengthWcdma); + } catch (ClassCastException e) { + return false; + } + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + + sb.append("CellInfoWcdma:{"); + sb.append(super.toString()); + sb.append(" ").append(mCellIdentityWcdma); + sb.append(" ").append(mCellSignalStrengthWcdma); + sb.append("}"); + + return sb.toString(); + } + + /** Implement the Parcelable interface */ + @Override + public int describeContents() { + return 0; + } + + /** Implement the Parcelable interface */ + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags, TYPE_WCDMA); + mCellIdentityWcdma.writeToParcel(dest, flags); + mCellSignalStrengthWcdma.writeToParcel(dest, flags); + } + + /** + * Construct a CellInfoWcdma object from the given parcel + * where the token is already been processed. + */ + private CellInfoWcdma(Parcel in) { + super(in); + mCellIdentityWcdma = CellIdentityWcdma.CREATOR.createFromParcel(in); + mCellSignalStrengthWcdma = CellSignalStrengthWcdma.CREATOR.createFromParcel(in); + } + + /** Implement the Parcelable interface */ + public static final Creator<CellInfoWcdma> CREATOR = new Creator<CellInfoWcdma>() { + @Override + public CellInfoWcdma createFromParcel(Parcel in) { + in.readInt(); // Skip past token, we know what it is + return createFromParcelBody(in); + } + + @Override + public CellInfoWcdma[] newArray(int size) { + return new CellInfoWcdma[size]; + } + }; + + /** @hide */ + protected static CellInfoWcdma createFromParcelBody(Parcel in) { + return new CellInfoWcdma(in); + } + + /** + * log + */ + private static void log(String s) { + Rlog.w(LOG_TAG, s); + } +} diff --git a/telephony/java/android/telephony/CellSignalStrengthGsm.java b/telephony/java/android/telephony/CellSignalStrengthGsm.java index 2c36344..d27fcec 100644 --- a/telephony/java/android/telephony/CellSignalStrengthGsm.java +++ b/telephony/java/android/telephony/CellSignalStrengthGsm.java @@ -21,7 +21,7 @@ import android.os.Parcelable; import android.telephony.Rlog; /** - * LTE signal strength related information. + * GSM signal strength related information. */ public final class CellSignalStrengthGsm extends CellSignalStrength implements Parcelable { @@ -30,7 +30,7 @@ public final class CellSignalStrengthGsm extends CellSignalStrength implements P private static final int GSM_SIGNAL_STRENGTH_GREAT = 12; private static final int GSM_SIGNAL_STRENGTH_GOOD = 8; - private static final int GSM_SIGNAL_STRENGTH_MODERATE = 8; + private static final int GSM_SIGNAL_STRENGTH_MODERATE = 5; private int mSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5 private int mBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5 @@ -67,7 +67,8 @@ public final class CellSignalStrengthGsm extends CellSignalStrength implements P /** * Initialize all the values * - * @param SignalStrength + * @param ss SignalStrength as ASU value + * @param ber is Bit Error Rate * * @hide */ @@ -139,7 +140,7 @@ public final class CellSignalStrengthGsm extends CellSignalStrength implements P } /** - * Get the LTE signal level as an asu value between 0..97, 99 is unknown + * Get the signal level as an asu value between 0..31, 99 is unknown * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69 */ @Override diff --git a/telephony/java/android/telephony/CellSignalStrengthWcdma.java b/telephony/java/android/telephony/CellSignalStrengthWcdma.java new file mode 100644 index 0000000..b94b01d --- /dev/null +++ b/telephony/java/android/telephony/CellSignalStrengthWcdma.java @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.telephony; + +import android.os.Parcel; +import android.os.Parcelable; +import android.telephony.Rlog; + +/** + * Wcdma signal strength related information. + */ +public final class CellSignalStrengthWcdma extends CellSignalStrength implements Parcelable { + + private static final String LOG_TAG = "CellSignalStrengthWcdma"; + private static final boolean DBG = false; + + private static final int WCDMA_SIGNAL_STRENGTH_GREAT = 12; + private static final int WCDMA_SIGNAL_STRENGTH_GOOD = 8; + private static final int WCDMA_SIGNAL_STRENGTH_MODERATE = 5; + + private int mSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5 + private int mBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5 + + /** + * Empty constructor + * + * @hide + */ + public CellSignalStrengthWcdma() { + setDefaultValues(); + } + + /** + * Constructor + * + * @hide + */ + public CellSignalStrengthWcdma(int ss, int ber) { + initialize(ss, ber); + } + + /** + * Copy constructors + * + * @param s Source SignalStrength + * + * @hide + */ + public CellSignalStrengthWcdma(CellSignalStrengthWcdma s) { + copyFrom(s); + } + + /** + * Initialize all the values + * + * @param ss SignalStrength as ASU value + * @param ber is Bit Error Rate + * + * @hide + */ + public void initialize(int ss, int ber) { + mSignalStrength = ss; + mBitErrorRate = ber; + } + + /** + * @hide + */ + protected void copyFrom(CellSignalStrengthWcdma s) { + mSignalStrength = s.mSignalStrength; + mBitErrorRate = s.mBitErrorRate; + } + + /** + * @hide + */ + @Override + public CellSignalStrengthWcdma copy() { + return new CellSignalStrengthWcdma(this); + } + + /** @hide */ + @Override + public void setDefaultValues() { + mSignalStrength = Integer.MAX_VALUE; + mBitErrorRate = Integer.MAX_VALUE; + } + + /** + * Get signal level as an int from 0..4 + */ + @Override + public int getLevel() { + int level; + + // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5 + // asu = 0 (-113dB or less) is very weak + // signal, its better to show 0 bars to the user in such cases. + // asu = 99 is a special case, where the signal strength is unknown. + int asu = mSignalStrength; + if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN; + else if (asu >= WCDMA_SIGNAL_STRENGTH_GREAT) level = SIGNAL_STRENGTH_GREAT; + else if (asu >= WCDMA_SIGNAL_STRENGTH_GOOD) level = SIGNAL_STRENGTH_GOOD; + else if (asu >= WCDMA_SIGNAL_STRENGTH_MODERATE) level = SIGNAL_STRENGTH_MODERATE; + else level = SIGNAL_STRENGTH_POOR; + if (DBG) log("getLevel=" + level); + return level; + } + + /** + * Get the signal strength as dBm + */ + @Override + public int getDbm() { + int dBm; + + int level = mSignalStrength; + int asu = (level == 99 ? Integer.MAX_VALUE : level); + if (asu != Integer.MAX_VALUE) { + dBm = -113 + (2 * asu); + } else { + dBm = Integer.MAX_VALUE; + } + if (DBG) log("getDbm=" + dBm); + return dBm; + } + + /** + * Get the signal level as an asu value between 0..31, 99 is unknown + * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69 + */ + @Override + public int getAsuLevel() { + // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5 + // asu = 0 (-113dB or less) is very weak + // signal, its better to show 0 bars to the user in such cases. + // asu = 99 is a special case, where the signal strength is unknown. + int level = mSignalStrength; + if (DBG) log("getAsuLevel=" + level); + return level; + } + + @Override + public int hashCode() { + int primeNum = 31; + return (mSignalStrength * primeNum) + (mBitErrorRate * primeNum); + } + + @Override + public boolean equals (Object o) { + CellSignalStrengthWcdma s; + + try { + s = (CellSignalStrengthWcdma) o; + } catch (ClassCastException ex) { + return false; + } + + if (o == null) { + return false; + } + + return mSignalStrength == s.mSignalStrength && mBitErrorRate == s.mBitErrorRate; + } + + /** + * @return string representation. + */ + @Override + public String toString() { + return "CellSignalStrengthWcdma:" + + " ss=" + mSignalStrength + + " ber=" + mBitErrorRate; + } + + /** Implement the Parcelable interface */ + @Override + public void writeToParcel(Parcel dest, int flags) { + if (DBG) log("writeToParcel(Parcel, int): " + toString()); + dest.writeInt(mSignalStrength); + dest.writeInt(mBitErrorRate); + } + + /** + * Construct a SignalStrength object from the given parcel + * where the token is already been processed. + */ + private CellSignalStrengthWcdma(Parcel in) { + mSignalStrength = in.readInt(); + mBitErrorRate = in.readInt(); + if (DBG) log("CellSignalStrengthWcdma(Parcel): " + toString()); + } + + /** Implement the Parcelable interface */ + @Override + public int describeContents() { + return 0; + } + + /** Implement the Parcelable interface */ + @SuppressWarnings("hiding") + public static final Parcelable.Creator<CellSignalStrengthWcdma> CREATOR = + new Parcelable.Creator<CellSignalStrengthWcdma>() { + @Override + public CellSignalStrengthWcdma createFromParcel(Parcel in) { + return new CellSignalStrengthWcdma(in); + } + + @Override + public CellSignalStrengthWcdma[] newArray(int size) { + return new CellSignalStrengthWcdma[size]; + } + }; + + /** + * log + */ + private static void log(String s) { + Rlog.w(LOG_TAG, s); + } +} |
