diff options
578 files changed, 5183 insertions, 5743 deletions
diff --git a/Android.mk b/Android.mk index 69c8c2cae858..2b16c02aac48 100644 --- a/Android.mk +++ b/Android.mk @@ -1013,7 +1013,7 @@ framework_docs_LOCAL_DROIDDOC_OPTIONS := \ -since $(SRC_API_DIR)/23.txt 23 \ -since $(SRC_API_DIR)/24.txt 24 \ -since $(SRC_API_DIR)/25.txt 25 \ - -since ./frameworks/base/api/current.txt O \ + -since $(SRC_API_DIR)/26.txt 26 \ -werror -hide 111 -hide 113 -hide 121 \ -overview $(LOCAL_PATH)/core/java/overview.html \ diff --git a/api/current.txt b/api/current.txt index 7a2cecd930ab..56b608c1a962 100644 --- a/api/current.txt +++ b/api/current.txt @@ -11956,6 +11956,7 @@ package android.database.sqlite { public static final class SQLiteDatabase.OpenParams { method public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory(); method public android.database.DatabaseErrorHandler getErrorHandler(); + method public long getIdleConnectionTimeout(); method public int getLookasideSlotCount(); method public int getLookasideSlotSize(); method public int getOpenFlags(); @@ -11969,6 +11970,7 @@ package android.database.sqlite { method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder removeOpenFlags(int); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setErrorHandler(android.database.DatabaseErrorHandler); + method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setIdleConnectionTimeout(long); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setLookasideConfig(int, int); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setOpenFlags(int); } @@ -12026,6 +12028,7 @@ package android.database.sqlite { method public void onDowngrade(android.database.sqlite.SQLiteDatabase, int, int); method public void onOpen(android.database.sqlite.SQLiteDatabase); method public abstract void onUpgrade(android.database.sqlite.SQLiteDatabase, int, int); + method public void setIdleConnectionTimeout(long); method public void setLookasideConfig(int, int); method public void setWriteAheadLoggingEnabled(boolean); } @@ -39538,7 +39541,7 @@ package android.telephony { method public android.os.PersistableBundle getConfigForSubId(int); method public void notifyConfigChangedForSubId(int); field public static final java.lang.String ACTION_CARRIER_CONFIG_CHANGED = "android.telephony.action.CARRIER_CONFIG_CHANGED"; - field public static final deprecated int DATA_CYCLE_THRESHOLD_DISABLED = -2; // 0xfffffffe + field public static final int DATA_CYCLE_THRESHOLD_DISABLED = -2; // 0xfffffffe field public static final java.lang.String KEY_ADDITIONAL_CALL_SETTING_BOOL = "additional_call_setting_bool"; field public static final java.lang.String KEY_ALLOW_ADDING_APNS_BOOL = "allow_adding_apns_bool"; field public static final java.lang.String KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL = "allow_add_call_during_video_call"; @@ -39580,10 +39583,9 @@ package android.telephony { field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING = "ci_action_on_sys_update_extra_val_string"; field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING = "ci_action_on_sys_update_intent_string"; field public static final java.lang.String KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING = "config_ims_package_override_string"; - field public static final java.lang.String KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING = "config_plans_package_override_string"; field public static final java.lang.String KEY_CSP_ENABLED_BOOL = "csp_enabled_bool"; - field public static final deprecated java.lang.String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long"; - field public static final deprecated java.lang.String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long"; + field public static final java.lang.String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long"; + field public static final java.lang.String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long"; field public static final java.lang.String KEY_DEFAULT_SIM_CALL_MANAGER_STRING = "default_sim_call_manager_string"; field public static final java.lang.String KEY_DEFAULT_VM_NUMBER_STRING = "default_vm_number_string"; field public static final java.lang.String KEY_DIAL_STRING_REPLACE_STRING_ARRAY = "dial_string_replace_string_array"; @@ -39640,7 +39642,7 @@ package android.telephony { field public static final java.lang.String KEY_MMS_UA_PROF_TAG_NAME_STRING = "uaProfTagName"; field public static final java.lang.String KEY_MMS_UA_PROF_URL_STRING = "uaProfUrl"; field public static final java.lang.String KEY_MMS_USER_AGENT_STRING = "userAgent"; - field public static final deprecated java.lang.String KEY_MONTHLY_DATA_CYCLE_DAY_INT = "monthly_data_cycle_day_int"; + field public static final java.lang.String KEY_MONTHLY_DATA_CYCLE_DAY_INT = "monthly_data_cycle_day_int"; field public static final java.lang.String KEY_ONLY_SINGLE_DC_ALLOWED_INT_ARRAY = "only_single_dc_allowed_int_array"; field public static final java.lang.String KEY_OPERATOR_SELECTION_EXPAND_BOOL = "operator_selection_expand_bool"; field public static final java.lang.String KEY_PREFER_2G_BOOL = "prefer_2g_bool"; @@ -40152,10 +40154,8 @@ package android.telephony { method public static int getDefaultSmsSubscriptionId(); method public static int getDefaultSubscriptionId(); method public static int getDefaultVoiceSubscriptionId(); - method public java.util.List<android.telephony.SubscriptionPlan> getSubscriptionPlans(int); method public boolean isNetworkRoaming(int); method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); - method public void setSubscriptionPlans(int, java.util.List<android.telephony.SubscriptionPlan>); field public static final java.lang.String ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED"; field public static final java.lang.String ACTION_DEFAULT_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED"; field public static final int DATA_ROAMING_DISABLE = 0; // 0x0 @@ -40169,38 +40169,6 @@ package android.telephony { method public void onSubscriptionsChanged(); } - public final class SubscriptionPlan implements android.os.Parcelable { - method public java.util.Iterator<android.util.Pair<java.time.ZonedDateTime, java.time.ZonedDateTime>> cycleIterator(); - method public int describeContents(); - method public int getDataLimitBehavior(); - method public long getDataLimitBytes(); - method public long getDataUsageBytes(); - method public long getDataUsageTime(); - method public java.lang.CharSequence getSummary(); - method public java.lang.CharSequence getTitle(); - method public void writeToParcel(android.os.Parcel, int); - field public static final long BYTES_UNKNOWN = -1L; // 0xffffffffffffffffL - field public static final long BYTES_UNLIMITED = 9223372036854775807L; // 0x7fffffffffffffffL - field public static final android.os.Parcelable.Creator<android.telephony.SubscriptionPlan> CREATOR; - field public static final int LIMIT_BEHAVIOR_BILLED = 1; // 0x1 - field public static final int LIMIT_BEHAVIOR_DISABLED = 0; // 0x0 - field public static final int LIMIT_BEHAVIOR_THROTTLED = 2; // 0x2 - field public static final int LIMIT_BEHAVIOR_UNKNOWN = -1; // 0xffffffff - field public static final long TIME_UNKNOWN = -1L; // 0xffffffffffffffffL - } - - public static class SubscriptionPlan.Builder { - method public android.telephony.SubscriptionPlan build(); - method public static android.telephony.SubscriptionPlan.Builder createNonrecurring(java.time.ZonedDateTime, java.time.ZonedDateTime); - method public static android.telephony.SubscriptionPlan.Builder createRecurringDaily(java.time.ZonedDateTime); - method public static android.telephony.SubscriptionPlan.Builder createRecurringMonthly(java.time.ZonedDateTime); - method public static android.telephony.SubscriptionPlan.Builder createRecurringWeekly(java.time.ZonedDateTime); - method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int); - method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long); - method public android.telephony.SubscriptionPlan.Builder setSummary(java.lang.CharSequence); - method public android.telephony.SubscriptionPlan.Builder setTitle(java.lang.CharSequence); - } - public class TelephonyManager { method public boolean canChangeDtmfToneLength(); method public android.telephony.TelephonyManager createForPhoneAccountHandle(android.telecom.PhoneAccountHandle); @@ -49085,6 +49053,7 @@ package android.webkit { method public int getRendererRequestedPriority(); method public deprecated float getScale(); method public android.webkit.WebSettings getSettings(); + method public android.view.textclassifier.TextClassifier getTextClassifier(); method public java.lang.String getTitle(); method public java.lang.String getUrl(); method public android.webkit.WebChromeClient getWebChromeClient(); @@ -49133,6 +49102,7 @@ package android.webkit { method public deprecated void setPictureListener(android.webkit.WebView.PictureListener); method public void setRendererPriorityPolicy(int, boolean); method public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>); + method public void setTextClassifier(android.view.textclassifier.TextClassifier); method public deprecated void setVerticalScrollbarOverlay(boolean); method public void setWebChromeClient(android.webkit.WebChromeClient); method public static void setWebContentsDebuggingEnabled(boolean); diff --git a/api/system-current.txt b/api/system-current.txt index 27d3ee4299cc..eeeecb307eb9 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -149,6 +149,7 @@ package android { field public static final java.lang.String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS"; field public static final java.lang.String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS"; field public static final java.lang.String MANAGE_OWN_CALLS = "android.permission.MANAGE_OWN_CALLS"; + field public static final java.lang.String MANAGE_SUBSCRIPTION_PLANS = "android.permission.MANAGE_SUBSCRIPTION_PLANS"; field public static final java.lang.String MANAGE_USB = "android.permission.MANAGE_USB"; field public static final java.lang.String MANAGE_USERS = "android.permission.MANAGE_USERS"; field public static final java.lang.String MANAGE_USER_OEM_UNLOCK_STATE = "android.permission.MANAGE_USER_OEM_UNLOCK_STATE"; @@ -12751,6 +12752,7 @@ package android.database.sqlite { public static final class SQLiteDatabase.OpenParams { method public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory(); method public android.database.DatabaseErrorHandler getErrorHandler(); + method public long getIdleConnectionTimeout(); method public int getLookasideSlotCount(); method public int getLookasideSlotSize(); method public int getOpenFlags(); @@ -12764,6 +12766,7 @@ package android.database.sqlite { method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder removeOpenFlags(int); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setErrorHandler(android.database.DatabaseErrorHandler); + method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setIdleConnectionTimeout(long); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setLookasideConfig(int, int); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setOpenFlags(int); } @@ -12821,6 +12824,7 @@ package android.database.sqlite { method public void onDowngrade(android.database.sqlite.SQLiteDatabase, int, int); method public void onOpen(android.database.sqlite.SQLiteDatabase); method public abstract void onUpgrade(android.database.sqlite.SQLiteDatabase, int, int); + method public void setIdleConnectionTimeout(long); method public void setLookasideConfig(int, int); method public void setWriteAheadLoggingEnabled(boolean); } @@ -43087,7 +43091,7 @@ package android.telephony { method public void notifyConfigChangedForSubId(int); method public void updateConfigForPhoneId(int, java.lang.String); field public static final java.lang.String ACTION_CARRIER_CONFIG_CHANGED = "android.telephony.action.CARRIER_CONFIG_CHANGED"; - field public static final deprecated int DATA_CYCLE_THRESHOLD_DISABLED = -2; // 0xfffffffe + field public static final int DATA_CYCLE_THRESHOLD_DISABLED = -2; // 0xfffffffe field public static final java.lang.String KEY_ADDITIONAL_CALL_SETTING_BOOL = "additional_call_setting_bool"; field public static final java.lang.String KEY_ALLOW_ADDING_APNS_BOOL = "allow_adding_apns_bool"; field public static final java.lang.String KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL = "allow_add_call_during_video_call"; @@ -43131,8 +43135,8 @@ package android.telephony { field public static final java.lang.String KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING = "config_ims_package_override_string"; field public static final java.lang.String KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING = "config_plans_package_override_string"; field public static final java.lang.String KEY_CSP_ENABLED_BOOL = "csp_enabled_bool"; - field public static final deprecated java.lang.String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long"; - field public static final deprecated java.lang.String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long"; + field public static final java.lang.String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long"; + field public static final java.lang.String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long"; field public static final java.lang.String KEY_DEFAULT_SIM_CALL_MANAGER_STRING = "default_sim_call_manager_string"; field public static final java.lang.String KEY_DEFAULT_VM_NUMBER_STRING = "default_vm_number_string"; field public static final java.lang.String KEY_DIAL_STRING_REPLACE_STRING_ARRAY = "dial_string_replace_string_array"; @@ -43189,7 +43193,7 @@ package android.telephony { field public static final java.lang.String KEY_MMS_UA_PROF_TAG_NAME_STRING = "uaProfTagName"; field public static final java.lang.String KEY_MMS_UA_PROF_URL_STRING = "uaProfUrl"; field public static final java.lang.String KEY_MMS_USER_AGENT_STRING = "userAgent"; - field public static final deprecated java.lang.String KEY_MONTHLY_DATA_CYCLE_DAY_INT = "monthly_data_cycle_day_int"; + field public static final java.lang.String KEY_MONTHLY_DATA_CYCLE_DAY_INT = "monthly_data_cycle_day_int"; field public static final java.lang.String KEY_ONLY_SINGLE_DC_ALLOWED_INT_ARRAY = "only_single_dc_allowed_int_array"; field public static final java.lang.String KEY_OPERATOR_SELECTION_EXPAND_BOOL = "operator_selection_expand_bool"; field public static final java.lang.String KEY_PREFER_2G_BOOL = "prefer_2g_bool"; @@ -52842,6 +52846,7 @@ package android.webkit { method public int getRendererRequestedPriority(); method public deprecated float getScale(); method public android.webkit.WebSettings getSettings(); + method public android.view.textclassifier.TextClassifier getTextClassifier(); method public java.lang.String getTitle(); method public java.lang.String getUrl(); method public android.webkit.WebChromeClient getWebChromeClient(); @@ -52891,6 +52896,7 @@ package android.webkit { method public deprecated void setPictureListener(android.webkit.WebView.PictureListener); method public void setRendererPriorityPolicy(int, boolean); method public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>); + method public void setTextClassifier(android.view.textclassifier.TextClassifier); method public deprecated void setVerticalScrollbarOverlay(boolean); method public void setWebChromeClient(android.webkit.WebChromeClient); method public static void setWebContentsDebuggingEnabled(boolean); diff --git a/api/test-current.txt b/api/test-current.txt index 282e9d0893bd..84eea3692959 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -12000,6 +12000,7 @@ package android.database.sqlite { public static final class SQLiteDatabase.OpenParams { method public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory(); method public android.database.DatabaseErrorHandler getErrorHandler(); + method public long getIdleConnectionTimeout(); method public int getLookasideSlotCount(); method public int getLookasideSlotSize(); method public int getOpenFlags(); @@ -12013,6 +12014,7 @@ package android.database.sqlite { method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder removeOpenFlags(int); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setErrorHandler(android.database.DatabaseErrorHandler); + method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setIdleConnectionTimeout(long); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setLookasideConfig(int, int); method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setOpenFlags(int); } @@ -12032,6 +12034,31 @@ package android.database.sqlite { ctor public SQLiteDatatypeMismatchException(java.lang.String); } + public final class SQLiteDebug { + method public static void dump(android.util.Printer, java.lang.String[]); + method public static android.database.sqlite.SQLiteDebug.PagerStats getDatabaseInfo(); + field public static final boolean DEBUG_SQL_LOG; + field public static final boolean DEBUG_SQL_STATEMENTS; + field public static final boolean DEBUG_SQL_TIME; + } + + public static class SQLiteDebug.DbStats { + ctor public SQLiteDebug.DbStats(java.lang.String, long, long, int, int, int, int); + field public java.lang.String cache; + field public java.lang.String dbName; + field public long dbSize; + field public int lookaside; + field public long pageSize; + } + + public static class SQLiteDebug.PagerStats { + ctor public SQLiteDebug.PagerStats(); + field public java.util.ArrayList<android.database.sqlite.SQLiteDebug.DbStats> dbStats; + field public int largestMemAlloc; + field public int memoryUsed; + field public int pageCacheOverflow; + } + public class SQLiteDiskIOException extends android.database.sqlite.SQLiteException { ctor public SQLiteDiskIOException(); ctor public SQLiteDiskIOException(java.lang.String); @@ -12070,6 +12097,7 @@ package android.database.sqlite { method public void onDowngrade(android.database.sqlite.SQLiteDatabase, int, int); method public void onOpen(android.database.sqlite.SQLiteDatabase); method public abstract void onUpgrade(android.database.sqlite.SQLiteDatabase, int, int); + method public void setIdleConnectionTimeout(long); method public void setLookasideConfig(int, int); method public void setWriteAheadLoggingEnabled(boolean); } @@ -39764,7 +39792,7 @@ package android.telephony { method public android.os.PersistableBundle getConfigForSubId(int); method public void notifyConfigChangedForSubId(int); field public static final java.lang.String ACTION_CARRIER_CONFIG_CHANGED = "android.telephony.action.CARRIER_CONFIG_CHANGED"; - field public static final deprecated int DATA_CYCLE_THRESHOLD_DISABLED = -2; // 0xfffffffe + field public static final int DATA_CYCLE_THRESHOLD_DISABLED = -2; // 0xfffffffe field public static final java.lang.String KEY_ADDITIONAL_CALL_SETTING_BOOL = "additional_call_setting_bool"; field public static final java.lang.String KEY_ALLOW_ADDING_APNS_BOOL = "allow_adding_apns_bool"; field public static final java.lang.String KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL = "allow_add_call_during_video_call"; @@ -39806,10 +39834,9 @@ package android.telephony { field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING = "ci_action_on_sys_update_extra_val_string"; field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING = "ci_action_on_sys_update_intent_string"; field public static final java.lang.String KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING = "config_ims_package_override_string"; - field public static final java.lang.String KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING = "config_plans_package_override_string"; field public static final java.lang.String KEY_CSP_ENABLED_BOOL = "csp_enabled_bool"; - field public static final deprecated java.lang.String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long"; - field public static final deprecated java.lang.String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long"; + field public static final java.lang.String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long"; + field public static final java.lang.String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long"; field public static final java.lang.String KEY_DEFAULT_SIM_CALL_MANAGER_STRING = "default_sim_call_manager_string"; field public static final java.lang.String KEY_DEFAULT_VM_NUMBER_STRING = "default_vm_number_string"; field public static final java.lang.String KEY_DIAL_STRING_REPLACE_STRING_ARRAY = "dial_string_replace_string_array"; @@ -39866,7 +39893,7 @@ package android.telephony { field public static final java.lang.String KEY_MMS_UA_PROF_TAG_NAME_STRING = "uaProfTagName"; field public static final java.lang.String KEY_MMS_UA_PROF_URL_STRING = "uaProfUrl"; field public static final java.lang.String KEY_MMS_USER_AGENT_STRING = "userAgent"; - field public static final deprecated java.lang.String KEY_MONTHLY_DATA_CYCLE_DAY_INT = "monthly_data_cycle_day_int"; + field public static final java.lang.String KEY_MONTHLY_DATA_CYCLE_DAY_INT = "monthly_data_cycle_day_int"; field public static final java.lang.String KEY_ONLY_SINGLE_DC_ALLOWED_INT_ARRAY = "only_single_dc_allowed_int_array"; field public static final java.lang.String KEY_OPERATOR_SELECTION_EXPAND_BOOL = "operator_selection_expand_bool"; field public static final java.lang.String KEY_PREFER_2G_BOOL = "prefer_2g_bool"; @@ -40378,10 +40405,8 @@ package android.telephony { method public static int getDefaultSmsSubscriptionId(); method public static int getDefaultSubscriptionId(); method public static int getDefaultVoiceSubscriptionId(); - method public java.util.List<android.telephony.SubscriptionPlan> getSubscriptionPlans(int); method public boolean isNetworkRoaming(int); method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); - method public void setSubscriptionPlans(int, java.util.List<android.telephony.SubscriptionPlan>); field public static final java.lang.String ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED"; field public static final java.lang.String ACTION_DEFAULT_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED"; field public static final int DATA_ROAMING_DISABLE = 0; // 0x0 @@ -40395,38 +40420,6 @@ package android.telephony { method public void onSubscriptionsChanged(); } - public final class SubscriptionPlan implements android.os.Parcelable { - method public java.util.Iterator<android.util.Pair<java.time.ZonedDateTime, java.time.ZonedDateTime>> cycleIterator(); - method public int describeContents(); - method public int getDataLimitBehavior(); - method public long getDataLimitBytes(); - method public long getDataUsageBytes(); - method public long getDataUsageTime(); - method public java.lang.CharSequence getSummary(); - method public java.lang.CharSequence getTitle(); - method public void writeToParcel(android.os.Parcel, int); - field public static final long BYTES_UNKNOWN = -1L; // 0xffffffffffffffffL - field public static final long BYTES_UNLIMITED = 9223372036854775807L; // 0x7fffffffffffffffL - field public static final android.os.Parcelable.Creator<android.telephony.SubscriptionPlan> CREATOR; - field public static final int LIMIT_BEHAVIOR_BILLED = 1; // 0x1 - field public static final int LIMIT_BEHAVIOR_DISABLED = 0; // 0x0 - field public static final int LIMIT_BEHAVIOR_THROTTLED = 2; // 0x2 - field public static final int LIMIT_BEHAVIOR_UNKNOWN = -1; // 0xffffffff - field public static final long TIME_UNKNOWN = -1L; // 0xffffffffffffffffL - } - - public static class SubscriptionPlan.Builder { - method public android.telephony.SubscriptionPlan build(); - method public static android.telephony.SubscriptionPlan.Builder createNonrecurring(java.time.ZonedDateTime, java.time.ZonedDateTime); - method public static android.telephony.SubscriptionPlan.Builder createRecurringDaily(java.time.ZonedDateTime); - method public static android.telephony.SubscriptionPlan.Builder createRecurringMonthly(java.time.ZonedDateTime); - method public static android.telephony.SubscriptionPlan.Builder createRecurringWeekly(java.time.ZonedDateTime); - method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int); - method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long); - method public android.telephony.SubscriptionPlan.Builder setSummary(java.lang.CharSequence); - method public android.telephony.SubscriptionPlan.Builder setTitle(java.lang.CharSequence); - } - public class TelephonyManager { method public boolean canChangeDtmfToneLength(); method public android.telephony.TelephonyManager createForPhoneAccountHandle(android.telecom.PhoneAccountHandle); @@ -49507,6 +49500,7 @@ package android.webkit { method public int getRendererRequestedPriority(); method public deprecated float getScale(); method public android.webkit.WebSettings getSettings(); + method public android.view.textclassifier.TextClassifier getTextClassifier(); method public java.lang.String getTitle(); method public java.lang.String getUrl(); method public android.webkit.WebChromeClient getWebChromeClient(); @@ -49555,6 +49549,7 @@ package android.webkit { method public deprecated void setPictureListener(android.webkit.WebView.PictureListener); method public void setRendererPriorityPolicy(int, boolean); method public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>); + method public void setTextClassifier(android.view.textclassifier.TextClassifier); method public deprecated void setVerticalScrollbarOverlay(boolean); method public void setWebChromeClient(android.webkit.WebChromeClient); method public static void setWebContentsDebuggingEnabled(boolean); diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp index 23668786abee..35f8bbb57e50 100644 --- a/cmds/screencap/screencap.cpp +++ b/cmds/screencap/screencap.cpp @@ -116,13 +116,6 @@ static status_t notifyMediaScanner(const char* fileName) { int main(int argc, char** argv) { - // setThreadPoolMaxThreadCount(0) actually tells the kernel it's - // not allowed to spawn any additional threads, but we still spawn - // a binder thread from userspace when we call startThreadPool(). - // See b/36066697 for rationale - ProcessState::self()->setThreadPoolMaxThreadCount(0); - ProcessState::self()->startThreadPool(); - const char* pname = argv[0]; bool png = false; int32_t displayId = DEFAULT_DISPLAY_ID; @@ -182,11 +175,19 @@ int main(int argc, char** argv) ISurfaceComposer::eRotate90, // 3 == DISPLAY_ORIENTATION_270 }; + // setThreadPoolMaxThreadCount(0) actually tells the kernel it's + // not allowed to spawn any additional threads, but we still spawn + // a binder thread from userspace when we call startThreadPool(). + // See b/36066697 for rationale + ProcessState::self()->setThreadPoolMaxThreadCount(0); + ProcessState::self()->startThreadPool(); + ScreenshotClient screenshot; sp<IBinder> display = SurfaceComposerClient::getBuiltInDisplay(displayId); if (display == NULL) { fprintf(stderr, "Unable to get handle for display %d\n", displayId); - return 1; + // b/36066697: Avoid running static destructors. + _exit(1); } Vector<DisplayInfo> configs; @@ -195,7 +196,8 @@ int main(int argc, char** argv) if (static_cast<size_t>(activeConfig) >= configs.size()) { fprintf(stderr, "Active config %d not inside configs (size %zu)\n", activeConfig, configs.size()); - return 1; + // b/36066697: Avoid running static destructors. + _exit(1); } uint8_t displayOrientation = configs[activeConfig].orientation; uint32_t captureOrientation = ORIENTATION_MAP[displayOrientation]; diff --git a/compiled-classes-phone b/compiled-classes-phone index cf4b28b6ea8f..d11f0baf067a 100644 --- a/compiled-classes-phone +++ b/compiled-classes-phone @@ -441,7 +441,6 @@ android.app.ResourcesManager$1 android.app.ResourcesManager$ActivityResources android.app.ResultInfo android.app.ResultInfo$1 -android.app.RetailDemoModeServiceInternal android.app.SearchableInfo android.app.SearchableInfo$1 android.app.Service @@ -3115,6 +3114,7 @@ android.os.-$Lambda$-dncxFEc2F2bgG2fsIoC6FC6WNE android.os.-$Lambda$-dncxFEc2F2bgG2fsIoC6FC6WNE$1 android.os.-$Lambda$6x30vPJhBKUfNY8tswxuZo3DCe0 android.os.AsyncResult +android.os.AsyncTask android.os.AsyncTask$1 android.os.AsyncTask$2 android.os.AsyncTask$3 diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index d03b3474d268..4a4bab55f054 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -4893,7 +4893,8 @@ public final class ActivityThread { // If the new config is the same as the config this Activity is already running with and // the override config also didn't change, then don't bother calling // onConfigurationChanged. - int diff = activity.mCurrentConfig.diff(newConfig); + final int diff = activity.mCurrentConfig.diffPublicOnly(newConfig); + if (diff != 0 || !mResourcesManager.isSameResourcesOverrideConfig(activityToken, amOverrideConfig)) { // Always send the task-level config changes. For system-level configuration, if @@ -4981,6 +4982,14 @@ public final class ActivityThread { int configDiff = 0; + // This flag tracks whether the new configuration is fundamentally equivalent to the + // existing configuration. This is necessary to determine whether non-activity + // callbacks should receive notice when the only changes are related to non-public fields. + // We do not gate calling {@link #performActivityConfigurationChanged} based on this flag + // as that method uses the same check on the activity config override as well. + final boolean equivalent = config != null && mConfiguration != null + && (0 == mConfiguration.diffPublicOnly(config)); + synchronized (mResourcesManager) { if (mPendingConfiguration != null) { if (!mPendingConfiguration.isOtherSeqNewer(config)) { @@ -5037,7 +5046,7 @@ public final class ActivityThread { Activity a = (Activity) cb; performConfigurationChangedForActivity(mActivities.get(a.getActivityToken()), config); - } else { + } else if (!equivalent) { performConfigurationChanged(cb, config); } } diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index acceed05943c..7fc9a69a1f92 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -285,7 +285,8 @@ public class ApplicationPackageManager extends PackageManager { public PermissionInfo getPermissionInfo(String name, int flags) throws NameNotFoundException { try { - PermissionInfo pi = mPM.getPermissionInfo(name, flags); + PermissionInfo pi = mPM.getPermissionInfo(name, + mContext.getOpPackageName(), flags); if (pi != null) { return pi; } diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java index 6f326de76150..595ecd201e57 100644 --- a/core/java/android/app/ResourcesManager.java +++ b/core/java/android/app/ResourcesManager.java @@ -44,8 +44,6 @@ import com.android.internal.util.ArrayUtils; import java.lang.ref.WeakReference; import java.util.ArrayList; -import java.util.Iterator; -import java.util.Map; import java.util.Objects; import java.util.WeakHashMap; import java.util.function.Predicate; @@ -417,7 +415,12 @@ public class ResourcesManager { if (activityResources == null) { return overrideConfig == null; } else { - return Objects.equals(activityResources.overrideConfig, overrideConfig); + // The two configurations must either be equal or publicly equivalent to be + // considered the same. + return Objects.equals(activityResources.overrideConfig, overrideConfig) + || (overrideConfig != null && activityResources.overrideConfig != null + && 0 == overrideConfig.diffPublicOnly( + activityResources.overrideConfig)); } } } @@ -984,8 +987,6 @@ public class ResourcesManager { } } - invalidatePath("/"); - redirectResourcesToNewImplLocked(updatedResourceKeys); } finally { Trace.traceEnd(Trace.TRACE_TAG_RESOURCES); diff --git a/core/java/android/app/RetailDemoModeServiceInternal.java b/core/java/android/app/RetailDemoModeServiceInternal.java deleted file mode 100644 index 7ca214aae602..000000000000 --- a/core/java/android/app/RetailDemoModeServiceInternal.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2016 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.app; - -/** - * Retail Demo Mode Service interface to be used locally inside system server - * - * @hide Only for use inside system server - */ -public interface RetailDemoModeServiceInternal { - /** - * Used to notify RetailDemoModeService of any user activity. - */ - public void onUserActivity(); -}
\ No newline at end of file diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java index 1eac395bd06c..e3bc78e5a2bb 100644 --- a/core/java/android/bluetooth/le/BluetoothLeScanner.java +++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java @@ -205,7 +205,8 @@ public final class BluetoothLeScanner { } synchronized (mLeScanClients) { if (callback != null && mLeScanClients.containsKey(callback)) { - postCallbackError(callback, ScanCallback.SCAN_FAILED_ALREADY_STARTED); + return postCallbackErrorOrReturn(callback, + ScanCallback.SCAN_FAILED_ALREADY_STARTED); } IBluetoothGatt gatt; try { diff --git a/core/java/android/content/AbstractThreadedSyncAdapter.java b/core/java/android/content/AbstractThreadedSyncAdapter.java index 58bd5cda825d..2629929e91ce 100644 --- a/core/java/android/content/AbstractThreadedSyncAdapter.java +++ b/core/java/android/content/AbstractThreadedSyncAdapter.java @@ -17,11 +17,12 @@ package android.content; import android.accounts.Account; +import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.os.Process; -import android.os.RemoteException; import android.os.Trace; +import android.util.Log; import java.util.HashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -95,6 +96,8 @@ import java.util.concurrent.atomic.AtomicInteger; * </ul> */ public abstract class AbstractThreadedSyncAdapter { + private static final String TAG = "SyncAdapter"; + /** * Kernel event log tag. Also listed in data/etc/event-log-tags. * @deprecated Private constant. May go away in the next release. @@ -102,6 +105,8 @@ public abstract class AbstractThreadedSyncAdapter { @Deprecated public static final int LOG_SYNC_DETAILS = 2743; + private static final boolean ENABLE_LOG = Build.IS_DEBUGGABLE && Log.isLoggable(TAG, Log.DEBUG); + private final Context mContext; private final AtomicInteger mNumSyncStarts; private final ISyncAdapterImpl mISyncAdapterImpl; @@ -163,71 +168,104 @@ public abstract class AbstractThreadedSyncAdapter { @Override public void startSync(ISyncContext syncContext, String authority, Account account, Bundle extras) { - final SyncContext syncContextClient = new SyncContext(syncContext); - - boolean alreadyInProgress; - // synchronize to make sure that mSyncThreads doesn't change between when we - // check it and when we use it - final Account threadsKey = toSyncKey(account); - synchronized (mSyncThreadLock) { - if (!mSyncThreads.containsKey(threadsKey)) { - if (mAutoInitialize - && extras != null - && extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false)) { - try { - if (ContentResolver.getIsSyncable(account, authority) < 0) { - ContentResolver.setIsSyncable(account, authority, 1); + if (ENABLE_LOG) { + if (extras != null) { + extras.size(); // Unparcel so its toString() will show the contents. + } + Log.d(TAG, "startSync() start " + authority + " " + account + " " + extras); + } + try { + final SyncContext syncContextClient = new SyncContext(syncContext); + + boolean alreadyInProgress; + // synchronize to make sure that mSyncThreads doesn't change between when we + // check it and when we use it + final Account threadsKey = toSyncKey(account); + synchronized (mSyncThreadLock) { + if (!mSyncThreads.containsKey(threadsKey)) { + if (mAutoInitialize + && extras != null + && extras.getBoolean( + ContentResolver.SYNC_EXTRAS_INITIALIZE, false)) { + try { + if (ContentResolver.getIsSyncable(account, authority) < 0) { + ContentResolver.setIsSyncable(account, authority, 1); + } + } finally { + syncContextClient.onFinished(new SyncResult()); } - } finally { - syncContextClient.onFinished(new SyncResult()); + return; + } + SyncThread syncThread = new SyncThread( + "SyncAdapterThread-" + mNumSyncStarts.incrementAndGet(), + syncContextClient, authority, account, extras); + mSyncThreads.put(threadsKey, syncThread); + syncThread.start(); + alreadyInProgress = false; + } else { + if (ENABLE_LOG) { + Log.d(TAG, " alreadyInProgress"); } - return; + alreadyInProgress = true; } - SyncThread syncThread = new SyncThread( - "SyncAdapterThread-" + mNumSyncStarts.incrementAndGet(), - syncContextClient, authority, account, extras); - mSyncThreads.put(threadsKey, syncThread); - syncThread.start(); - alreadyInProgress = false; - } else { - alreadyInProgress = true; } - } - // do this outside since we don't want to call back into the syncContext while - // holding the synchronization lock - if (alreadyInProgress) { - syncContextClient.onFinished(SyncResult.ALREADY_IN_PROGRESS); + // do this outside since we don't want to call back into the syncContext while + // holding the synchronization lock + if (alreadyInProgress) { + syncContextClient.onFinished(SyncResult.ALREADY_IN_PROGRESS); + } + } catch (RuntimeException | Error th) { + if (ENABLE_LOG) { + Log.d(TAG, "startSync() caught exception", th); + } + throw th; + } finally { + if (ENABLE_LOG) { + Log.d(TAG, "startSync() finishing"); + } } } @Override public void cancelSync(ISyncContext syncContext) { - // synchronize to make sure that mSyncThreads doesn't change between when we - // check it and when we use it - SyncThread info = null; - synchronized (mSyncThreadLock) { - for (SyncThread current : mSyncThreads.values()) { - if (current.mSyncContext.getSyncContextBinder() == syncContext.asBinder()) { - info = current; - break; + try { + // synchronize to make sure that mSyncThreads doesn't change between when we + // check it and when we use it + SyncThread info = null; + synchronized (mSyncThreadLock) { + for (SyncThread current : mSyncThreads.values()) { + if (current.mSyncContext.getSyncContextBinder() == syncContext.asBinder()) { + info = current; + break; + } } } - } - if (info != null) { - if (mAllowParallelSyncs) { - onSyncCanceled(info); + if (info != null) { + if (ENABLE_LOG) { + Log.d(TAG, "cancelSync() " + info.mAuthority + " " + info.mAccount); + } + if (mAllowParallelSyncs) { + onSyncCanceled(info); + } else { + onSyncCanceled(); + } } else { - onSyncCanceled(); + if (ENABLE_LOG) { + Log.w(TAG, "cancelSync() unknown context"); + } + } + } catch (RuntimeException | Error th) { + if (ENABLE_LOG) { + Log.d(TAG, "cancelSync() caught exception", th); + } + throw th; + } finally { + if (ENABLE_LOG) { + Log.d(TAG, "cancelSync() finishing"); } } } - - public void initialize(Account account, String authority) throws RemoteException { - Bundle extras = new Bundle(); - extras.putBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, true); - startSync(null, authority, account, extras); - } } /** @@ -256,6 +294,10 @@ public abstract class AbstractThreadedSyncAdapter { public void run() { Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); + if (ENABLE_LOG) { + Log.d(TAG, "Thread started"); + } + // Trace this sync instance. Note, conceptually this should be in // SyncStorageEngine.insertStartSyncEvent(), but the trace functions require unique // threads in order to track overlapping operations, so we'll do it here for now. @@ -265,8 +307,15 @@ public abstract class AbstractThreadedSyncAdapter { ContentProviderClient provider = null; try { if (isCanceled()) { + if (ENABLE_LOG) { + Log.d(TAG, "Already canceled"); + } return; } + if (ENABLE_LOG) { + Log.d(TAG, "Calling onPerformSync..."); + } + provider = mContext.getContentResolver().acquireContentProviderClient(mAuthority); if (provider != null) { AbstractThreadedSyncAdapter.this.onPerformSync(mAccount, mExtras, @@ -274,10 +323,23 @@ public abstract class AbstractThreadedSyncAdapter { } else { syncResult.databaseError = true; } + + if (ENABLE_LOG) { + Log.d(TAG, "onPerformSync done"); + } + } catch (SecurityException e) { + if (ENABLE_LOG) { + Log.d(TAG, "SecurityException", e); + } AbstractThreadedSyncAdapter.this.onSecurityException(mAccount, mExtras, mAuthority, syncResult); syncResult.databaseError = true; + } catch (RuntimeException | Error th) { + if (ENABLE_LOG) { + Log.d(TAG, "caught exception", th); + } + throw th; } finally { Trace.traceEnd(Trace.TRACE_TAG_SYNC_MANAGER); @@ -292,6 +354,10 @@ public abstract class AbstractThreadedSyncAdapter { synchronized (mSyncThreadLock) { mSyncThreads.remove(mThreadsKey); } + + if (ENABLE_LOG) { + Log.d(TAG, "Thread finished"); + } } } diff --git a/core/java/android/content/ISyncAdapter.aidl b/core/java/android/content/ISyncAdapter.aidl index dd9d14edc418..4660527925c5 100644 --- a/core/java/android/content/ISyncAdapter.aidl +++ b/core/java/android/content/ISyncAdapter.aidl @@ -44,12 +44,4 @@ oneway interface ISyncAdapter { * @param syncContext the ISyncContext that was passed to {@link #startSync} */ void cancelSync(ISyncContext syncContext); - - /** - * Initialize the SyncAdapter for this account and authority. - * - * @param account the account that should be synced - * @param authority the authority that should be synced - */ - void initialize(in Account account, String authority); } diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index bab39802da3f..ca5fa6be1323 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -28,8 +28,6 @@ import android.util.Printer; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_ROTATE; - /** * Information you can retrieve about a particular application * activity or receiver. This corresponds to information collected @@ -782,16 +780,6 @@ public class ActivityInfo extends ComponentInfo * constant starts at the high bits. */ public static final int CONFIG_FONT_SCALE = 0x40000000; - /** - * Bit in {@link #configChanges} that indicates that the activity - * can itself handle changes to the rotation. Set from the - * {@link android.R.attr#configChanges} attribute. This is - * not a core resource configuration, but a higher-level value, so its - * constant starts at the high bits. - * @hide We do not want apps to handle this. It will eventually be moved out of - * {@link Configuration}. - */ - public static final int CONFIG_ROTATION = 0x20000000; /** @hide * Unfortunately the constants for config changes in native code are diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 9b795aa58a26..64d687e9d3de 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -72,7 +72,7 @@ interface IPackageManager { String[] currentToCanonicalPackageNames(in String[] names); String[] canonicalToCurrentPackageNames(in String[] names); - PermissionInfo getPermissionInfo(String name, int flags); + PermissionInfo getPermissionInfo(String name, String packageName, int flags); ParceledListSlice queryPermissionsByGroup(String group, int flags); diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java index 7f1198541668..cf0edcad7e2b 100644 --- a/core/java/android/content/pm/PackageInfo.java +++ b/core/java/android/content/pm/PackageInfo.java @@ -252,6 +252,9 @@ public class PackageInfo implements Parcelable { public int installLocation = INSTALL_LOCATION_INTERNAL_ONLY; /** @hide */ + public boolean isStub; + + /** @hide */ public boolean coreApp; /** @hide */ @@ -324,6 +327,7 @@ public class PackageInfo implements Parcelable { dest.writeTypedArray(reqFeatures, parcelableFlags); dest.writeTypedArray(featureGroups, parcelableFlags); dest.writeInt(installLocation); + dest.writeInt(isStub ? 1 : 0); dest.writeInt(coreApp ? 1 : 0); dest.writeInt(requiredForAllUsers ? 1 : 0); dest.writeString(restrictedAccountType); @@ -375,6 +379,7 @@ public class PackageInfo implements Parcelable { reqFeatures = source.createTypedArray(FeatureInfo.CREATOR); featureGroups = source.createTypedArray(FeatureGroupInfo.CREATOR); installLocation = source.readInt(); + isStub = source.readInt() != 0; coreApp = source.readInt() != 0; requiredForAllUsers = source.readInt() != 0; restrictedAccountType = source.readString(); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index cc197a23d835..175293d82203 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -4021,6 +4021,7 @@ public abstract class PackageManager { * @hide */ @SystemApi + @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS) public List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent, @ResolveInfoFlags int flags, UserHandle userHandle) { return queryBroadcastReceiversAsUser(intent, flags, userHandle.getIdentifier()); @@ -4809,6 +4810,7 @@ public abstract class PackageManager { * @hide */ @SystemApi + @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract int getIntentVerificationStatusAsUser(String packageName, @UserIdInt int userId); /** @@ -4878,6 +4880,7 @@ public abstract class PackageManager { */ @TestApi @SystemApi + @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract String getDefaultBrowserPackageNameAsUser(@UserIdInt int userId); /** @@ -4893,7 +4896,9 @@ public abstract class PackageManager { * @hide */ @SystemApi - @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS) + @RequiresPermission(allOf = { + Manifest.permission.SET_PREFERRED_APPLICATIONS, + Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public abstract boolean setDefaultBrowserPackageNameAsUser(String packageName, @UserIdInt int userId); diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index c76ca6dbbe49..efcd3c9389c2 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -50,6 +50,8 @@ import android.app.ActivityManager; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageParserCacheHelper.ReadHelper; +import android.content.pm.PackageParserCacheHelper.WriteHelper; import android.content.pm.split.DefaultSplitAssetLoader; import android.content.pm.split.SplitAssetDependencyLoader; import android.content.pm.split.SplitAssetLoader; @@ -665,6 +667,7 @@ public class PackageParser { pi.sharedUserLabel = p.mSharedUserLabel; pi.applicationInfo = generateApplicationInfo(p, flags, state, userId); pi.installLocation = p.installLocation; + pi.isStub = p.isStub; pi.coreApp = p.coreApp; if ((pi.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) != 0 || (pi.applicationInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { @@ -1023,11 +1026,17 @@ public class PackageParser { @VisibleForTesting protected Package fromCacheEntry(byte[] bytes) throws IOException { - Parcel p = Parcel.obtain(); + final ReadHelper helper = new ReadHelper(); + + final Parcel p = Parcel.obtain(); + p.setReadWriteHelper(helper); + p.unmarshall(bytes, 0, bytes.length); p.setDataPosition(0); + helper.start(p); PackageParser.Package pkg = new PackageParser.Package(p); + p.recycle(); return pkg; @@ -1035,8 +1044,15 @@ public class PackageParser { @VisibleForTesting protected byte[] toCacheEntry(Package pkg) throws IOException { - Parcel p = Parcel.obtain(); + final WriteHelper helper = new WriteHelper(); + + final Parcel p = Parcel.obtain(); + p.setReadWriteHelper(helper); + pkg.writeToParcel(p, 0 /* flags */); + + helper.finish(p); + byte[] serialized = p.marshall(); p.recycle(); @@ -5879,10 +5895,10 @@ public class PackageParser { public byte[] restrictUpdateHash; - /** - * Set if the app or any of its components are visible to Instant Apps. - */ + /** Set if the app or any of its components are visible to instant applications. */ public boolean visibleToInstantApps; + /** Whether or not the package is a stub and must be replaced by the full version. */ + public boolean isStub; public Package(String packageName) { this.packageName = packageName; diff --git a/core/java/android/content/pm/PackageParserCacheHelper.java b/core/java/android/content/pm/PackageParserCacheHelper.java new file mode 100644 index 000000000000..638bc1359b85 --- /dev/null +++ b/core/java/android/content/pm/PackageParserCacheHelper.java @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2017 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.content.pm; + +import android.os.Parcel; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * Helper classes to read from and write to Parcel with pooled strings. + * + * @hide + */ +public class PackageParserCacheHelper { + private PackageParserCacheHelper() { + } + + /** + * Parcel read helper with a string pool. + */ + public static class ReadHelper extends Parcel.ReadWriteHelper { + private final ArrayList<String> mStrings = new ArrayList<>(); + + public ReadHelper() { + } + + /** + * Prepare a parcel. + */ + public void start(Parcel p) { + mStrings.clear(); + + final int poolPosition = p.readInt(); + final int startPosition = p.dataPosition(); + + // The pool is at the end of the parcel. + p.setDataPosition(poolPosition); + p.readStringList(mStrings); + + // Then move back. + p.setDataPosition(startPosition); + } + + /** + * Read an string index from a parcel, and returns the corresponding string from the pool. + */ + @Override + public String readString(Parcel p) { + return mStrings.get(p.readInt()); + } + } + + /** + * Parcel write helper with a string pool. + */ + public static class WriteHelper extends Parcel.ReadWriteHelper { + private final ArrayList<String> mStrings = new ArrayList<>(); + + private final HashMap<String, Integer> mIndexes = new HashMap<>(); + + public WriteHelper() { + } + + /** + * Instead of writing a string directly to a parcel, this method adds it to the pool, + * and write the index in the pool to the parcel. + */ + @Override + public void writeString(Parcel p, String s) { + final Integer cur = mIndexes.get(s); + if (cur != null) { + // String already in the pool. Just write the index. + p.writeInt(cur); // Already in the pool. + } else { + // Note in the pool. Add to the pool, and write the index. + final int index = mStrings.size(); + mIndexes.put(s, index); + mStrings.add(s); + + p.writeInt(index); + } + } + + /** + * Closes a parcel by appending the string pool at the end and updating the pool offset, + * which it assumes is at the first byte. + */ + public void finish(Parcel p) { + final int poolPosition = p.readInt(); + p.writeStringList(mStrings); + + p.setDataPosition(0); + p.writeInt(poolPosition); + + // Move back to the end. + p.setDataPosition(p.dataSize()); + } + } +} diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 68d4cd8c5f7d..f7cccd56f079 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -42,8 +42,6 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Locale; -import static android.view.Surface.ROTATION_0; -import static android.view.Surface.ROTATION_UNDEFINED; /** * This class describes all device configuration information that can @@ -600,13 +598,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration */ public int orientation; - /** - * The mRotation used at the time orientation was determined. - * TODO(b/36812336): Move mRotation out of {@link Configuration}. - * {@hide} - */ - private int mRotation; - /** Constant for {@link #uiMode}: bits that encode the mode type. */ public static final int UI_MODE_TYPE_MASK = 0x0f; /** Constant for {@link #uiMode}: a {@link #UI_MODE_TYPE_MASK} @@ -894,7 +885,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration navigation = o.navigation; navigationHidden = o.navigationHidden; orientation = o.orientation; - mRotation = o.mRotation; screenLayout = o.screenLayout; colorMode = o.colorMode; uiMode = o.uiMode; @@ -1085,7 +1075,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration navigation = NAVIGATION_UNDEFINED; navigationHidden = NAVIGATIONHIDDEN_UNDEFINED; orientation = ORIENTATION_UNDEFINED; - mRotation = ROTATION_UNDEFINED; screenLayout = SCREENLAYOUT_UNDEFINED; colorMode = COLOR_MODE_UNDEFINED; uiMode = UI_MODE_TYPE_UNDEFINED; @@ -1194,11 +1183,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration changed |= ActivityInfo.CONFIG_ORIENTATION; orientation = delta.orientation; } - if (delta.mRotation != ROTATION_UNDEFINED - && mRotation != delta.mRotation) { - changed |= ActivityInfo.CONFIG_ORIENTATION; - mRotation = delta.mRotation; - } if (((delta.screenLayout & SCREENLAYOUT_SIZE_MASK) != SCREENLAYOUT_SIZE_UNDEFINED) && (delta.screenLayout & SCREENLAYOUT_SIZE_MASK) @@ -1334,7 +1318,19 @@ public final class Configuration implements Parcelable, Comparable<Configuration * PackageManager.ActivityInfo.CONFIG_LAYOUT_DIRECTION}. */ public int diff(Configuration delta) { - return diff(delta, false /* compareUndefined */); + return diff(delta, false /* compareUndefined */, false /* publicOnly */); + } + + /** + * Returns the diff against the provided {@link Configuration} excluding values that would + * publicly be equivalent, such as appBounds. + * @param delta {@link Configuration} to compare to. + * + * TODO(b/36812336): Remove once appBounds has been moved out of Configuration. + * {@hide} + */ + public int diffPublicOnly(Configuration delta) { + return diff(delta, false /* compareUndefined */, true /* publicOnly */); } /** @@ -1342,7 +1338,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration * * @hide */ - public int diff(Configuration delta, boolean compareUndefined) { + public int diff(Configuration delta, boolean compareUndefined, boolean publicOnly) { int changed = 0; if ((compareUndefined || delta.fontScale > 0) && fontScale != delta.fontScale) { changed |= ActivityInfo.CONFIG_FONT_SCALE; @@ -1393,10 +1389,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration && orientation != delta.orientation) { changed |= ActivityInfo.CONFIG_ORIENTATION; } - if ((compareUndefined || delta.mRotation != ROTATION_UNDEFINED) - && mRotation != delta.mRotation) { - changed |= ActivityInfo.CONFIG_ROTATION; - } if ((compareUndefined || getScreenLayoutNoDirection(delta.screenLayout) != (SCREENLAYOUT_SIZE_UNDEFINED | SCREENLAYOUT_LONG_UNDEFINED)) && getScreenLayoutNoDirection(screenLayout) != @@ -1444,7 +1436,9 @@ public final class Configuration implements Parcelable, Comparable<Configuration // Make sure that one of the values is not null and that they are not equal. if ((compareUndefined || delta.appBounds != null) && appBounds != delta.appBounds - && (appBounds == null || !appBounds.equals(delta.appBounds))) { + && (appBounds == null || (!publicOnly && !appBounds.equals(delta.appBounds)) + || (publicOnly && (appBounds.width() != delta.appBounds.width() + || appBounds.height() != delta.appBounds.height())))) { changed |= ActivityInfo.CONFIG_SCREEN_SIZE; } @@ -1533,7 +1527,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration dest.writeInt(navigation); dest.writeInt(navigationHidden); dest.writeInt(orientation); - dest.writeInt(mRotation); dest.writeInt(screenLayout); dest.writeInt(colorMode); dest.writeInt(uiMode); @@ -1570,7 +1563,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration navigation = source.readInt(); navigationHidden = source.readInt(); orientation = source.readInt(); - mRotation = source.readInt(); screenLayout = source.readInt(); colorMode = source.readInt(); uiMode = source.readInt(); @@ -1655,8 +1647,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration if (n != 0) return n; n = this.orientation - that.orientation; if (n != 0) return n; - n = this.mRotation - that.mRotation; - if (n != 0) return n; n = this.colorMode - that.colorMode; if (n != 0) return n; n = this.screenLayout - that.screenLayout; @@ -1805,24 +1795,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration /** * @hide * - * Setter for orientation converts from {@link Surface} values to internal representation. - */ - public void setRotation(int rotation) { - this.mRotation = rotation; - } - - /** - * @hide - * - * Getter for orientation. Converts from internal representation to {@link Surface} values. - */ - public int getRotation() { - return mRotation != ROTATION_UNDEFINED ? mRotation : ROTATION_0; - } - - /** - * @hide - * * Clears the locale without changing layout direction. */ public void clearLocales() { @@ -2253,10 +2225,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration delta.orientation = change.orientation; } - if (base.mRotation != change.mRotation) { - base.mRotation = change.mRotation; - } - if ((base.screenLayout & SCREENLAYOUT_SIZE_MASK) != (change.screenLayout & SCREENLAYOUT_SIZE_MASK)) { delta.screenLayout |= change.screenLayout & SCREENLAYOUT_SIZE_MASK; @@ -2388,8 +2356,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration DENSITY_DPI_UNDEFINED); configOut.appBounds = Rect.unflattenFromString(XmlUtils.readStringAttribute(parser, XML_ATTR_APP_BOUNDS)); - configOut.mRotation = XmlUtils.readIntAttribute(parser, XML_ATTR_ROTATION, - ROTATION_UNDEFINED); // For persistence, we don't care about assetsSeq, so do not read it out. } @@ -2466,10 +2432,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration config.appBounds.flattenToString()); } - if (config.mRotation != ROTATION_UNDEFINED) { - XmlUtils.writeIntAttribute(xml, XML_ATTR_ROTATION, config.mRotation); - } - // For persistence, we do not care about assetsSeq, so do not write it out. } } diff --git a/core/java/android/database/AbstractCursor.java b/core/java/android/database/AbstractCursor.java index 581fe7fce5eb..fdb702f01e9d 100644 --- a/core/java/android/database/AbstractCursor.java +++ b/core/java/android/database/AbstractCursor.java @@ -23,6 +23,7 @@ import android.os.UserHandle; import android.util.Log; import java.lang.ref.WeakReference; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -330,7 +331,14 @@ public abstract class AbstractCursor implements CrossProcessCursor { public int getColumnIndexOrThrow(String columnName) { final int index = getColumnIndex(columnName); if (index < 0) { - throw new IllegalArgumentException("column '" + columnName + "' does not exist"); + String availableColumns = ""; + try { + availableColumns = Arrays.toString(getColumnNames()); + } catch (Exception e) { + Log.d(TAG, "Cannot collect column names for debug purposes", e); + } + throw new IllegalArgumentException("column '" + columnName + + "' does not exist. Available columns: " + availableColumns); } return index; } diff --git a/core/java/android/database/sqlite/SQLiteConnectionPool.java b/core/java/android/database/sqlite/SQLiteConnectionPool.java index 765f27ec7cf8..b66bf18fca1d 100644 --- a/core/java/android/database/sqlite/SQLiteConnectionPool.java +++ b/core/java/android/database/sqlite/SQLiteConnectionPool.java @@ -16,7 +16,6 @@ package android.database.sqlite; -import android.app.ActivityManager; import android.database.sqlite.SQLiteDebug.DbStats; import android.os.CancellationSignal; import android.os.Handler; @@ -24,7 +23,6 @@ import android.os.Looper; import android.os.Message; import android.os.OperationCanceledException; import android.os.SystemClock; -import android.os.SystemProperties; import android.util.Log; import android.util.PrefixPrinter; import android.util.Printer; @@ -84,15 +82,6 @@ public final class SQLiteConnectionPool implements Closeable { // and logging a message about the connection pool being busy. private static final long CONNECTION_POOL_BUSY_MILLIS = 30 * 1000; // 30 seconds - // TODO b/63398887 Move to SQLiteGlobal - private static final long IDLE_CONNECTION_CLOSE_DELAY_MILLIS = SystemProperties - .getInt("persist.debug.sqlite.idle_connection_close_delay", 30000); - - // TODO b/63398887 STOPSHIP. - // Temporarily enabled for testing across a broader set of dogfood devices. - private static final boolean CLOSE_IDLE_CONNECTIONS = SystemProperties - .getBoolean("persist.debug.sqlite.close_idle_connections", true); - private final CloseGuard mCloseGuard = CloseGuard.get(); private final Object mLock = new Object(); @@ -167,16 +156,12 @@ public final class SQLiteConnectionPool implements Closeable { private SQLiteConnectionPool(SQLiteDatabaseConfiguration configuration) { mConfiguration = new SQLiteDatabaseConfiguration(configuration); - // Disable lookaside allocator on low-RAM devices - if (ActivityManager.isLowRamDeviceStatic()) { - mConfiguration.lookasideSlotCount = 0; - mConfiguration.lookasideSlotSize = 0; - } setMaxConnectionPoolSizeLocked(); - - // Do not close idle connections for in-memory databases - if (CLOSE_IDLE_CONNECTIONS && !configuration.isInMemoryDb()) { - setupIdleConnectionHandler(Looper.getMainLooper(), IDLE_CONNECTION_CLOSE_DELAY_MILLIS); + // If timeout is set, setup idle connection handler + // In case of MAX_VALUE - idle connections are never closed + if (mConfiguration.idleConnectionTimeoutMs != Long.MAX_VALUE) { + setupIdleConnectionHandler(Looper.getMainLooper(), + mConfiguration.idleConnectionTimeoutMs); } } @@ -214,6 +199,12 @@ public final class SQLiteConnectionPool implements Closeable { // This might throw if the database is corrupt. mAvailablePrimaryConnection = openConnectionLocked(mConfiguration, true /*primaryConnection*/); // might throw + // Mark it released so it can be closed after idle timeout + synchronized (mLock) { + if (mIdleConnectionHandler != null) { + mIdleConnectionHandler.connectionReleased(mAvailablePrimaryConnection); + } + } // Mark the pool as being open for business. mIsOpen = true; @@ -1009,24 +1000,26 @@ public final class SQLiteConnectionPool implements Closeable { } private void setMaxConnectionPoolSizeLocked() { - if ((mConfiguration.openFlags & SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING) != 0) { + if (!mConfiguration.isInMemoryDb() + && (mConfiguration.openFlags & SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING) != 0) { mMaxConnectionPoolSize = SQLiteGlobal.getWALConnectionPoolSize(); } else { - // TODO: We don't actually need to restrict the connection pool size to 1 + // We don't actually need to always restrict the connection pool size to 1 // for non-WAL databases. There might be reasons to use connection pooling - // with other journal modes. For now, enabling connection pooling and - // using WAL are the same thing in the API. + // with other journal modes. However, we should always keep pool size of 1 for in-memory + // databases since every :memory: db is separate from another. + // For now, enabling connection pooling and using WAL are the same thing in the API. mMaxConnectionPoolSize = 1; } } /** - * Set up the handler based on the provided looper and delay. + * Set up the handler based on the provided looper and timeout. */ @VisibleForTesting - public void setupIdleConnectionHandler(Looper looper, long delayMs) { + public void setupIdleConnectionHandler(Looper looper, long timeoutMs) { synchronized (mLock) { - mIdleConnectionHandler = new IdleConnectionHandler(looper, delayMs); + mIdleConnectionHandler = new IdleConnectionHandler(looper, timeoutMs); } } @@ -1087,6 +1080,10 @@ public final class SQLiteConnectionPool implements Closeable { printer.println(" Lookaside config: sz=" + mConfiguration.lookasideSlotSize + " cnt=" + mConfiguration.lookasideSlotCount); } + if (mConfiguration.idleConnectionTimeoutMs != Long.MAX_VALUE) { + printer.println( + " Idle connection timeout: " + mConfiguration.idleConnectionTimeoutMs); + } printer.println(" Available primary connection:"); if (mAvailablePrimaryConnection != null) { mAvailablePrimaryConnection.dump(indentedPrinter, verbose); @@ -1153,11 +1150,11 @@ public final class SQLiteConnectionPool implements Closeable { } private class IdleConnectionHandler extends Handler { - private final long mDelay; + private final long mTimeout; - IdleConnectionHandler(Looper looper, long delay) { + IdleConnectionHandler(Looper looper, long timeout) { super(looper); - mDelay = delay; + mTimeout = timeout; } @Override @@ -1170,14 +1167,14 @@ public final class SQLiteConnectionPool implements Closeable { if (closeAvailableConnectionLocked(msg.what)) { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "Closed idle connection " + mConfiguration.label + " " + msg.what - + " after " + mDelay); + + " after " + mTimeout); } } } } void connectionReleased(SQLiteConnection con) { - sendEmptyMessageDelayed(con.getConnectionId(), mDelay); + sendEmptyMessageDelayed(con.getConnectionId(), mTimeout); } void connectionAcquired(SQLiteConnection con) { diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java index af6df1554a86..5b6efd4dcffe 100644 --- a/core/java/android/database/sqlite/SQLiteDatabase.java +++ b/core/java/android/database/sqlite/SQLiteDatabase.java @@ -20,6 +20,7 @@ import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.app.ActivityManager; import android.content.ContentValues; import android.database.Cursor; import android.database.DatabaseErrorHandler; @@ -30,6 +31,7 @@ import android.database.sqlite.SQLiteDebug.DbStats; import android.os.CancellationSignal; import android.os.Looper; import android.os.OperationCanceledException; +import android.os.SystemProperties; import android.text.TextUtils; import android.util.EventLog; import android.util.Log; @@ -77,21 +79,21 @@ public final class SQLiteDatabase extends SQLiteClosable { private static final int EVENT_DB_CORRUPT = 75004; + // TODO b/63398887 STOPSHIP. + // Temporarily enabled for testing across a broader set of dogfood devices. + private static final boolean DEBUG_CLOSE_IDLE_CONNECTIONS = SystemProperties + .getBoolean("persist.debug.sqlite.close_idle_connections", true); + // Stores reference to all databases opened in the current process. // (The referent Object is not used at this time.) // INVARIANT: Guarded by sActiveDatabases. - private static WeakHashMap<SQLiteDatabase, Object> sActiveDatabases = - new WeakHashMap<SQLiteDatabase, Object>(); + private static WeakHashMap<SQLiteDatabase, Object> sActiveDatabases = new WeakHashMap<>(); // Thread-local for database sessions that belong to this database. // Each thread has its own database session. // INVARIANT: Immutable. - private final ThreadLocal<SQLiteSession> mThreadSession = new ThreadLocal<SQLiteSession>() { - @Override - protected SQLiteSession initialValue() { - return createSession(); - } - }; + private final ThreadLocal<SQLiteSession> mThreadSession = ThreadLocal + .withInitial(this::createSession); // The optional factory to use when creating new Cursors. May be null. // INVARIANT: Immutable. @@ -261,12 +263,29 @@ public final class SQLiteDatabase extends SQLiteClosable { private SQLiteDatabase(final String path, final int openFlags, CursorFactory cursorFactory, DatabaseErrorHandler errorHandler, - int lookasideSlotSize, int lookasideSlotCount) { + int lookasideSlotSize, int lookasideSlotCount, long idleConnectionTimeoutMs) { mCursorFactory = cursorFactory; mErrorHandler = errorHandler != null ? errorHandler : new DefaultDatabaseErrorHandler(); mConfigurationLocked = new SQLiteDatabaseConfiguration(path, openFlags); mConfigurationLocked.lookasideSlotSize = lookasideSlotSize; mConfigurationLocked.lookasideSlotCount = lookasideSlotCount; + // Disable lookaside allocator on low-RAM devices + if (ActivityManager.isLowRamDeviceStatic()) { + mConfigurationLocked.lookasideSlotCount = 0; + mConfigurationLocked.lookasideSlotSize = 0; + } + long effectiveTimeoutMs = Long.MAX_VALUE; + // Never close idle connections for in-memory databases + if (!mConfigurationLocked.isInMemoryDb()) { + // First, check app-specific value. Otherwise use defaults + // -1 in idleConnectionTimeoutMs indicates unset value + if (idleConnectionTimeoutMs >= 0) { + effectiveTimeoutMs = idleConnectionTimeoutMs; + } else if (DEBUG_CLOSE_IDLE_CONNECTIONS) { + effectiveTimeoutMs = SQLiteGlobal.getIdleConnectionTimeout(); + } + } + mConfigurationLocked.idleConnectionTimeoutMs = effectiveTimeoutMs; } @Override @@ -694,7 +713,8 @@ public final class SQLiteDatabase extends SQLiteClosable { Preconditions.checkArgument(openParams != null, "OpenParams cannot be null"); SQLiteDatabase db = new SQLiteDatabase(path, openParams.mOpenFlags, openParams.mCursorFactory, openParams.mErrorHandler, - openParams.mLookasideSlotSize, openParams.mLookasideSlotCount); + openParams.mLookasideSlotSize, openParams.mLookasideSlotCount, + openParams.mIdleConnectionTimeout); db.open(); return db; } @@ -720,7 +740,7 @@ public final class SQLiteDatabase extends SQLiteClosable { */ public static SQLiteDatabase openDatabase(@NonNull String path, @Nullable CursorFactory factory, @DatabaseOpenFlags int flags, @Nullable DatabaseErrorHandler errorHandler) { - SQLiteDatabase db = new SQLiteDatabase(path, flags, factory, errorHandler, -1, -1); + SQLiteDatabase db = new SQLiteDatabase(path, flags, factory, errorHandler, -1, -1, -1); db.open(); return db; } @@ -2267,14 +2287,17 @@ public final class SQLiteDatabase extends SQLiteClosable { private final DatabaseErrorHandler mErrorHandler; private final int mLookasideSlotSize; private final int mLookasideSlotCount; + private long mIdleConnectionTimeout; private OpenParams(int openFlags, CursorFactory cursorFactory, - DatabaseErrorHandler errorHandler, int lookasideSlotSize, int lookasideSlotCount) { + DatabaseErrorHandler errorHandler, int lookasideSlotSize, int lookasideSlotCount, + long idleConnectionTimeout) { mOpenFlags = openFlags; mCursorFactory = cursorFactory; mErrorHandler = errorHandler; mLookasideSlotSize = lookasideSlotSize; mLookasideSlotCount = lookasideSlotCount; + mIdleConnectionTimeout = idleConnectionTimeout; } /** @@ -2330,6 +2353,17 @@ public final class SQLiteDatabase extends SQLiteClosable { } /** + * Returns maximum number of milliseconds that SQLite connection is allowed to be idle + * before it is closed and removed from the pool. + * <p>If the value isn't set, the timeout defaults to the system wide timeout + * + * @return timeout in milliseconds or -1 if the value wasn't set. + */ + public long getIdleConnectionTimeout() { + return mIdleConnectionTimeout; + } + + /** * Creates a new instance of builder {@link Builder#Builder(OpenParams) initialized} with * {@code this} parameters. * @hide @@ -2345,6 +2379,7 @@ public final class SQLiteDatabase extends SQLiteClosable { public static final class Builder { private int mLookasideSlotSize = -1; private int mLookasideSlotCount = -1; + private long mIdleConnectionTimeout = -1; private int mOpenFlags; private CursorFactory mCursorFactory; private DatabaseErrorHandler mErrorHandler; @@ -2474,13 +2509,29 @@ public final class SQLiteDatabase extends SQLiteClosable { } /** + * Sets the maximum number of milliseconds that SQLite connection is allowed to be idle + * before it is closed and removed from the pool. + * + * @param idleConnectionTimeoutMs timeout in milliseconds. Use {@link Long#MAX_VALUE} + * to allow unlimited idle connections. + */ + @NonNull + public Builder setIdleConnectionTimeout( + @IntRange(from = 0) long idleConnectionTimeoutMs) { + Preconditions.checkArgument(idleConnectionTimeoutMs >= 0, + "idle connection timeout cannot be negative"); + mIdleConnectionTimeout = idleConnectionTimeoutMs; + return this; + } + + /** * Creates an instance of {@link OpenParams} with the options that were previously set * on this builder */ @NonNull public OpenParams build() { return new OpenParams(mOpenFlags, mCursorFactory, mErrorHandler, mLookasideSlotSize, - mLookasideSlotCount); + mLookasideSlotCount, mIdleConnectionTimeout); } } } diff --git a/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java b/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java index 7f09b73adaa7..34c9b3395d1a 100644 --- a/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java +++ b/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java @@ -94,14 +94,21 @@ public final class SQLiteDatabaseConfiguration { * * <p>If negative, the default lookaside configuration will be used */ - public int lookasideSlotSize; + public int lookasideSlotSize = -1; /** * The total number of lookaside memory slots per database connection * * <p>If negative, the default lookaside configuration will be used */ - public int lookasideSlotCount; + public int lookasideSlotCount = -1; + + /** + * The number of milliseconds that SQLite connection is allowed to be idle before it + * is closed and removed from the pool. + * <p>By default, idle connections are not closed + */ + public long idleConnectionTimeoutMs = Long.MAX_VALUE; /** * Creates a database configuration with the required parameters for opening a @@ -122,8 +129,6 @@ public final class SQLiteDatabaseConfiguration { // Set default values for optional parameters. maxSqlCacheSize = 25; locale = Locale.getDefault(); - lookasideSlotSize = -1; - lookasideSlotCount = -1; } /** @@ -164,6 +169,7 @@ public final class SQLiteDatabaseConfiguration { customFunctions.addAll(other.customFunctions); lookasideSlotSize = other.lookasideSlotSize; lookasideSlotCount = other.lookasideSlotCount; + idleConnectionTimeoutMs = other.idleConnectionTimeoutMs; } /** diff --git a/core/java/android/database/sqlite/SQLiteDebug.java b/core/java/android/database/sqlite/SQLiteDebug.java index 11973312a3a3..a921aa34eb92 100644 --- a/core/java/android/database/sqlite/SQLiteDebug.java +++ b/core/java/android/database/sqlite/SQLiteDebug.java @@ -16,13 +16,14 @@ package android.database.sqlite; -import java.util.ArrayList; - +import android.annotation.TestApi; import android.os.Build; import android.os.SystemProperties; import android.util.Log; import android.util.Printer; +import java.util.ArrayList; + /** * Provides debugging info about all SQLite databases running in the current process. * @@ -117,6 +118,7 @@ public final class SQLiteDebug { /** * contains statistics about a database */ + @TestApi public static class DbStats { /** name of the database */ public String dbName; @@ -127,7 +129,8 @@ public final class SQLiteDebug { /** the database size */ public long dbSize; - /** documented here http://www.sqlite.org/c3ref/c_dbstatus_lookaside_used.html */ + /** + * Number of lookaside slots: http://www.sqlite.org/c3ref/c_dbstatus_lookaside_used.html */ public int lookaside; /** statement cache stats: hits/misses/cachesize */ @@ -147,6 +150,7 @@ public final class SQLiteDebug { * return all pager and database stats for the current process. * @return {@link PagerStats} */ + @TestApi public static PagerStats getDatabaseInfo() { PagerStats stats = new PagerStats(); nativeGetPagerStats(stats); diff --git a/core/java/android/database/sqlite/SQLiteGlobal.java b/core/java/android/database/sqlite/SQLiteGlobal.java index 922d11b6ae65..571656a22240 100644 --- a/core/java/android/database/sqlite/SQLiteGlobal.java +++ b/core/java/android/database/sqlite/SQLiteGlobal.java @@ -124,4 +124,15 @@ public final class SQLiteGlobal { com.android.internal.R.integer.db_connection_pool_size)); return Math.max(2, value); } + + /** + * The default number of milliseconds that SQLite connection is allowed to be idle before it + * is closed and removed from the pool. + */ + public static int getIdleConnectionTimeout() { + return SystemProperties.getInt("debug.sqlite.idle_connection_timeout", + Resources.getSystem().getInteger( + com.android.internal.R.integer.db_default_idle_connection_timeout)); + } + } diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java index c19db82a81f7..dfaf714963eb 100644 --- a/core/java/android/database/sqlite/SQLiteOpenHelper.java +++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java @@ -195,6 +195,26 @@ public abstract class SQLiteOpenHelper { } /** + * Sets the maximum number of milliseconds that SQLite connection is allowed to be idle + * before it is closed and removed from the pool. + * + * <p>This method should be called from the constructor of the subclass, + * before opening the database + * + * @param idleConnectionTimeoutMs timeout in milliseconds. Use {@link Long#MAX_VALUE} value + * to allow unlimited idle connections. + */ + public void setIdleConnectionTimeout(@IntRange(from = 0) final long idleConnectionTimeoutMs) { + synchronized (this) { + if (mDatabase != null && mDatabase.isOpen()) { + throw new IllegalStateException( + "Connection timeout setting cannot be changed after opening the database"); + } + mOpenParamsBuilder.setIdleConnectionTimeout(idleConnectionTimeoutMs); + } + } + + /** * Create and/or open a database that will be used for reading and writing. * The first time this is called, the database will be opened and * {@link #onCreate}, {@link #onUpgrade} and/or {@link #onOpen} will be diff --git a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java index 6825d363b918..c7654c9e74e1 100644 --- a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java @@ -412,6 +412,9 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession // If no sequences are pending, fire #onClosed immediately mSequenceDrainer.beginDrain(); } + if (mInput != null) { + mInput.release(); + } } /** diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index 305cf7695e5e..d2af0235809d 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -24,6 +24,7 @@ import com.android.internal.util.BitUtils; import com.android.internal.util.Preconditions; import java.util.Objects; +import java.util.StringJoiner; /** * This class represents the capabilities of a network. This is used both to specify @@ -347,11 +348,6 @@ public final class NetworkCapabilities implements Parcelable { return (nc.mNetworkCapabilities == this.mNetworkCapabilities); } - private boolean equalsNetCapabilitiesImmutable(NetworkCapabilities that) { - return ((this.mNetworkCapabilities & ~MUTABLE_CAPABILITIES) == - (that.mNetworkCapabilities & ~MUTABLE_CAPABILITIES)); - } - private boolean equalsNetCapabilitiesRequestable(NetworkCapabilities that) { return ((this.mNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES) == (that.mNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES)); @@ -502,10 +498,12 @@ public final class NetworkCapabilities implements Parcelable { private void combineTransportTypes(NetworkCapabilities nc) { this.mTransportTypes |= nc.mTransportTypes; } + private boolean satisfiedByTransportTypes(NetworkCapabilities nc) { return ((this.mTransportTypes == 0) || ((this.mTransportTypes & nc.mTransportTypes) != 0)); } + /** @hide */ public boolean equalsTransportTypes(NetworkCapabilities nc) { return (nc.mTransportTypes == this.mTransportTypes); @@ -760,15 +758,43 @@ public final class NetworkCapabilities implements Parcelable { /** * Checks that our immutable capabilities are the same as those of the given - * {@code NetworkCapabilities}. + * {@code NetworkCapabilities} and return a String describing any difference. + * The returned String is empty if there is no difference. * * @hide */ - public boolean equalImmutableCapabilities(NetworkCapabilities nc) { - if (nc == null) return false; - return (equalsNetCapabilitiesImmutable(nc) && - equalsTransportTypes(nc) && - equalsSpecifier(nc)); + public String describeImmutableDifferences(NetworkCapabilities that) { + if (that == null) { + return "other NetworkCapabilities was null"; + } + + StringJoiner joiner = new StringJoiner(", "); + + // TODO: consider only enforcing that capabilities are not removed, allowing addition. + // Ignore NOT_METERED being added or removed as it is effectively dynamic. http://b/63326103 + // TODO: properly support NOT_METERED as a mutable and requestable capability. + final long mask = ~MUTABLE_CAPABILITIES & ~NET_CAPABILITY_NOT_METERED; + long oldImmutableCapabilities = this.mNetworkCapabilities & mask; + long newImmutableCapabilities = that.mNetworkCapabilities & mask; + if (oldImmutableCapabilities != newImmutableCapabilities) { + String before = capabilityNamesOf(BitUtils.unpackBits(oldImmutableCapabilities)); + String after = capabilityNamesOf(BitUtils.unpackBits(newImmutableCapabilities)); + joiner.add(String.format("immutable capabilities changed: %s -> %s", before, after)); + } + + if (!equalsSpecifier(that)) { + NetworkSpecifier before = this.getNetworkSpecifier(); + NetworkSpecifier after = that.getNetworkSpecifier(); + joiner.add(String.format("specifier changed: %s -> %s", before, after)); + } + + if (!equalsTransportTypes(that)) { + String before = transportNamesOf(this.getTransportTypes()); + String after = transportNamesOf(that.getTransportTypes()); + joiner.add(String.format("transports changed: %s -> %s", before, after)); + } + + return joiner.toString(); } /** @@ -843,33 +869,15 @@ public final class NetworkCapabilities implements Parcelable { @Override public String toString() { + // TODO: enumerate bits for transports and capabilities instead of creating arrays. + // TODO: use a StringBuilder instead of string concatenation. int[] types = getTransportTypes(); String transports = (types.length > 0) ? " Transports: " + transportNamesOf(types) : ""; types = getCapabilities(); String capabilities = (types.length > 0 ? " Capabilities: " : ""); for (int i = 0; i < types.length; ) { - switch (types[i]) { - case NET_CAPABILITY_MMS: capabilities += "MMS"; break; - case NET_CAPABILITY_SUPL: capabilities += "SUPL"; break; - case NET_CAPABILITY_DUN: capabilities += "DUN"; break; - case NET_CAPABILITY_FOTA: capabilities += "FOTA"; break; - case NET_CAPABILITY_IMS: capabilities += "IMS"; break; - case NET_CAPABILITY_CBS: capabilities += "CBS"; break; - case NET_CAPABILITY_WIFI_P2P: capabilities += "WIFI_P2P"; break; - case NET_CAPABILITY_IA: capabilities += "IA"; break; - case NET_CAPABILITY_RCS: capabilities += "RCS"; break; - case NET_CAPABILITY_XCAP: capabilities += "XCAP"; break; - case NET_CAPABILITY_EIMS: capabilities += "EIMS"; break; - case NET_CAPABILITY_NOT_METERED: capabilities += "NOT_METERED"; break; - case NET_CAPABILITY_INTERNET: capabilities += "INTERNET"; break; - case NET_CAPABILITY_NOT_RESTRICTED: capabilities += "NOT_RESTRICTED"; break; - case NET_CAPABILITY_TRUSTED: capabilities += "TRUSTED"; break; - case NET_CAPABILITY_NOT_VPN: capabilities += "NOT_VPN"; break; - case NET_CAPABILITY_VALIDATED: capabilities += "VALIDATED"; break; - case NET_CAPABILITY_CAPTIVE_PORTAL: capabilities += "CAPTIVE_PORTAL"; break; - case NET_CAPABILITY_FOREGROUND: capabilities += "FOREGROUND"; break; - } + capabilities += capabilityNameOf(types[i]); if (++i < types.length) capabilities += "&"; } @@ -889,15 +897,55 @@ public final class NetworkCapabilities implements Parcelable { /** * @hide */ - public static String transportNamesOf(int[] types) { - if (types == null || types.length == 0) { - return ""; + public static String capabilityNamesOf(int[] capabilities) { + StringJoiner joiner = new StringJoiner("|"); + if (capabilities != null) { + for (int c : capabilities) { + joiner.add(capabilityNameOf(c)); + } + } + return joiner.toString(); + } + + /** + * @hide + */ + public static String capabilityNameOf(int capability) { + switch (capability) { + case NET_CAPABILITY_MMS: return "MMS"; + case NET_CAPABILITY_SUPL: return "SUPL"; + case NET_CAPABILITY_DUN: return "DUN"; + case NET_CAPABILITY_FOTA: return "FOTA"; + case NET_CAPABILITY_IMS: return "IMS"; + case NET_CAPABILITY_CBS: return "CBS"; + case NET_CAPABILITY_WIFI_P2P: return "WIFI_P2P"; + case NET_CAPABILITY_IA: return "IA"; + case NET_CAPABILITY_RCS: return "RCS"; + case NET_CAPABILITY_XCAP: return "XCAP"; + case NET_CAPABILITY_EIMS: return "EIMS"; + case NET_CAPABILITY_NOT_METERED: return "NOT_METERED"; + case NET_CAPABILITY_INTERNET: return "INTERNET"; + case NET_CAPABILITY_NOT_RESTRICTED: return "NOT_RESTRICTED"; + case NET_CAPABILITY_TRUSTED: return "TRUSTED"; + case NET_CAPABILITY_NOT_VPN: return "NOT_VPN"; + case NET_CAPABILITY_VALIDATED: return "VALIDATED"; + case NET_CAPABILITY_CAPTIVE_PORTAL: return "CAPTIVE_PORTAL"; + case NET_CAPABILITY_FOREGROUND: return "FOREGROUND"; + default: return Integer.toString(capability); } - StringBuilder transports = new StringBuilder(); - for (int t : types) { - transports.append("|").append(transportNameOf(t)); + } + + /** + * @hide + */ + public static String transportNamesOf(int[] types) { + StringJoiner joiner = new StringJoiner("|"); + if (types != null) { + for (int t : types) { + joiner.add(transportNameOf(t)); + } } - return transports.substring(1); + return joiner.toString(); } /** diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 10331b9229e3..5284e0de45c9 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -291,7 +291,7 @@ public final class Parcel { private static native void nativeWriteFloat(long nativePtr, float val); @FastNative private static native void nativeWriteDouble(long nativePtr, double val); - private static native void nativeWriteString(long nativePtr, String val); + static native void nativeWriteString(long nativePtr, String val); private static native void nativeWriteStrongBinder(long nativePtr, IBinder val); private static native long nativeWriteFileDescriptor(long nativePtr, FileDescriptor val); @@ -306,7 +306,7 @@ public final class Parcel { private static native float nativeReadFloat(long nativePtr); @CriticalNative private static native double nativeReadDouble(long nativePtr); - private static native String nativeReadString(long nativePtr); + static native String nativeReadString(long nativePtr); private static native IBinder nativeReadStrongBinder(long nativePtr); private static native FileDescriptor nativeReadFileDescriptor(long nativePtr); @@ -339,6 +339,33 @@ public final class Parcel { }; /** + * @hide + */ + public static class ReadWriteHelper { + public static final ReadWriteHelper DEFAULT = new ReadWriteHelper(); + + /** + * Called when writing a string to a parcel. Subclasses wanting to write a string + * must use {@link #writeStringNoHelper(String)} to avoid + * infinity recursive calls. + */ + public void writeString(Parcel p, String s) { + nativeWriteString(p.mNativePtr, s); + } + + /** + * Called when reading a string to a parcel. Subclasses wanting to read a string + * must use {@link #readStringNoHelper()} to avoid + * infinity recursive calls. + */ + public String readString(Parcel p) { + return nativeReadString(p.mNativePtr); + } + } + + private ReadWriteHelper mReadWriteHelper = ReadWriteHelper.DEFAULT; + + /** * Retrieve a new Parcel object from the pool. */ public static Parcel obtain() { @@ -352,6 +379,7 @@ public final class Parcel { if (DEBUG_RECYCLE) { p.mStack = new RuntimeException(); } + p.mReadWriteHelper = ReadWriteHelper.DEFAULT; return p; } } @@ -385,6 +413,16 @@ public final class Parcel { } } + /** + * Set a {@link ReadWriteHelper}, which can be used to avoid having duplicate strings, for + * example. + * + * @hide + */ + public void setReadWriteHelper(ReadWriteHelper helper) { + mReadWriteHelper = helper != null ? helper : ReadWriteHelper.DEFAULT; + } + /** @hide */ public static native long getGlobalAllocSize(); @@ -625,6 +663,17 @@ public final class Parcel { * growing dataCapacity() if needed. */ public final void writeString(String val) { + mReadWriteHelper.writeString(this, val); + } + + /** + * Write a string without going though a {@link ReadWriteHelper}. Subclasses of + * {@link ReadWriteHelper} must use this method instead of {@link #writeString} to avoid + * infinity recursive calls. + * + * @hide + */ + public void writeStringNoHelper(String val) { nativeWriteString(mNativePtr, val); } @@ -1996,6 +2045,17 @@ public final class Parcel { * Read a string value from the parcel at the current dataPosition(). */ public final String readString() { + return mReadWriteHelper.readString(this); + } + + /** + * Read a string without going though a {@link ReadWriteHelper}. Subclasses of + * {@link ReadWriteHelper} must use this method instead of {@link #readString} to avoid + * infinity recursive calls. + * + * @hide + */ + public String readStringNoHelper() { return nativeReadString(mNativePtr); } @@ -2996,6 +3056,7 @@ public final class Parcel { if (mOwnsNativeParcelObject) { updateNativeSize(nativeFreeBuffer(mNativePtr)); } + mReadWriteHelper = ReadWriteHelper.DEFAULT; } private void destroy() { @@ -3006,6 +3067,7 @@ public final class Parcel { } mNativePtr = 0; } + mReadWriteHelper = null; } @Override diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java index 6a4fef2b67e8..e8ebf6312cdd 100644 --- a/core/java/android/os/UserHandle.java +++ b/core/java/android/os/UserHandle.java @@ -158,6 +158,11 @@ public final class UserHandle implements Parcelable { } /** @hide */ + public static @AppIdInt int getCallingAppId() { + return getAppId(Binder.getCallingUid()); + } + + /** @hide */ @SystemApi public static UserHandle of(@UserIdInt int userId) { return userId == USER_SYSTEM ? SYSTEM : new UserHandle(userId); diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 12013fce2fef..6ec755b61142 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -303,10 +303,12 @@ public class UserManager { public static final String DISALLOW_DEBUGGING_FEATURES = "no_debugging_features"; /** - * Specifies if a user is disallowed from configuring VPN. - * The default value is <code>false</code>. - * This restriction has an effect in a managed profile only from - * {@link android.os.Build.VERSION_CODES#M} + * Specifies if a user is disallowed from configuring a VPN. The default value is + * <code>false</code>. This restriction has an effect when set by device owners and, in Android + * 6.0 ({@linkplain android.os.Build.VERSION_CODES#M API level 23}) or higher, profile owners. + * <p>This restriction also prevents VPNs from starting. However, in Android 7.0 + * ({@linkplain android.os.Build.VERSION_CODES#N API level 24}) or higher, the system does + * start always-on VPNs created by the device or profile owner. * * <p>Key for user restrictions. * <p>Type: Boolean diff --git a/core/java/android/service/autofill/Dataset.java b/core/java/android/service/autofill/Dataset.java index a2ec0993c2c9..65b0efcbe032 100644 --- a/core/java/android/service/autofill/Dataset.java +++ b/core/java/android/service/autofill/Dataset.java @@ -26,6 +26,7 @@ import android.os.Parcelable; import android.view.autofill.AutofillId; import android.view.autofill.AutofillValue; import android.widget.RemoteViews; + import com.android.internal.util.Preconditions; import java.util.ArrayList; diff --git a/core/java/android/service/autofill/FillResponse.java b/core/java/android/service/autofill/FillResponse.java index e13fdf68c831..95e8c88a12f4 100644 --- a/core/java/android/service/autofill/FillResponse.java +++ b/core/java/android/service/autofill/FillResponse.java @@ -23,15 +23,16 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.content.IntentSender; +import android.content.pm.ParceledListSlice; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.view.autofill.AutofillId; -import android.view.autofill.AutofillManager; import android.widget.RemoteViews; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** * Response for a {@link @@ -41,7 +42,7 @@ import java.util.Arrays; */ public final class FillResponse implements Parcelable { - private final @Nullable ArrayList<Dataset> mDatasets; + private final @Nullable ParceledListSlice<Dataset> mDatasets; private final @Nullable SaveInfo mSaveInfo; private final @Nullable Bundle mClientState; private final @Nullable RemoteViews mPresentation; @@ -51,7 +52,7 @@ public final class FillResponse implements Parcelable { private int mRequestId; private FillResponse(@NonNull Builder builder) { - mDatasets = builder.mDatasets; + mDatasets = (builder.mDatasets != null) ? new ParceledListSlice<>(builder.mDatasets) : null; mSaveInfo = builder.mSaveInfo; mClientState = builder.mCLientState; mPresentation = builder.mPresentation; @@ -67,8 +68,8 @@ public final class FillResponse implements Parcelable { } /** @hide */ - public @Nullable ArrayList<Dataset> getDatasets() { - return mDatasets; + public @Nullable List<Dataset> getDatasets() { + return (mDatasets != null) ? mDatasets.getList() : null; } /** @hide */ @@ -143,12 +144,13 @@ public final class FillResponse implements Parcelable { * for the user to trigger your authentication flow. * * <p>When a user triggers autofill, the system launches the provided intent - * whose extras will have the {@link AutofillManager#EXTRA_ASSIST_STRUCTURE screen + * whose extras will have the + * {@link android.view.autofill.AutofillManager#EXTRA_ASSIST_STRUCTURE screen * content} and your {@link android.view.autofill.AutofillManager#EXTRA_CLIENT_STATE * client state}. Once you complete your authentication flow you should set the * {@link Activity} result to {@link android.app.Activity#RESULT_OK} and provide the fully - * populated {@link FillResponse response} by setting it to the {@link - * AutofillManager#EXTRA_AUTHENTICATION_RESULT} extra. + * populated {@link FillResponse response} by setting it to the + * {@link android.view.autofill.AutofillManager#EXTRA_AUTHENTICATION_RESULT} extra. * For example, if you provided an empty {@link FillResponse resppnse} because the * user's data was locked and marked that the response needs an authentication then * in the response returned if authentication succeeds you need to provide all @@ -205,6 +207,15 @@ public final class FillResponse implements Parcelable { /** * Adds a new {@link Dataset} to this response. * + * <p><b>Note: </b> on Android {@link android.os.Build.VERSION_CODES#O}, the total number of + * datasets is limited by the Binder transaction size, so it's recommended to keep it + * small (in the range of 10-20 at most) and use pagination by adding a fake + * {@link Dataset.Builder#setAuthentication(IntentSender) authenticated} at the end with + * a presentation string like "Next 10" that would return a new {@link FillResponse} with + * the next 10 datasets, and so on. This limitation was lifted on + * Android {@link android.os.Build.VERSION_CODES#O_MR1}, although the Binder transaction + * size can still be reached if each dataset itself is too big. + * * @return This builder. */ public @NonNull Builder addDataset(@Nullable Dataset dataset) { @@ -313,7 +324,7 @@ public final class FillResponse implements Parcelable { @Override public void writeToParcel(Parcel parcel, int flags) { - parcel.writeTypedArrayList(mDatasets, flags); + parcel.writeParcelable(mDatasets, flags); parcel.writeParcelable(mSaveInfo, flags); parcel.writeParcelable(mClientState, flags); parcel.writeParcelableArray(mAuthenticationIds, flags); @@ -331,7 +342,8 @@ public final class FillResponse implements Parcelable { // the system obeys the contract of the builder to avoid attacks // using specially crafted parcels. final Builder builder = new Builder(); - final ArrayList<Dataset> datasets = parcel.readTypedArrayList(null); + final ParceledListSlice<Dataset> datasetSlice = parcel.readParcelable(null); + final List<Dataset> datasets = (datasetSlice != null) ? datasetSlice.getList() : null; final int datasetCount = (datasets != null) ? datasets.size() : 0; for (int i = 0; i < datasetCount; i++) { builder.addDataset(datasets.get(i)); diff --git a/core/java/android/service/autofill/SaveInfo.java b/core/java/android/service/autofill/SaveInfo.java index 389341b0836e..f8a94d6ce467 100644 --- a/core/java/android/service/autofill/SaveInfo.java +++ b/core/java/android/service/autofill/SaveInfo.java @@ -118,6 +118,9 @@ import java.util.Arrays; * <li>The {@link AutofillValue} of at least one view (be it required or optional) has changed * (i.e., it's neither the same value passed in a {@link Dataset}, nor the initial value * presented in the view). + * <li>There is no {@link Dataset} in the last {@link FillResponse} that completely matches the + * screen state (i.e., all required and optional fields in the dataset have the same value as + * the fields in the screen). * <li>The user explicitly tapped the UI affordance asking to save data for autofill. * </ul> * diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java index 6ba11b9954c4..7bec898ac347 100644 --- a/core/java/android/service/notification/ZenModeConfig.java +++ b/core/java/android/service/notification/ZenModeConfig.java @@ -712,7 +712,8 @@ public class ZenModeConfig implements Parcelable { int userHandle, boolean shortVersion) { final int num; String summary, line1, line2; - final CharSequence formattedTime = getFormattedTime(context, time, userHandle); + final CharSequence formattedTime = + getFormattedTime(context, time, isToday(time), userHandle); final Resources res = context.getResources(); if (minutes < 60) { // display as minutes @@ -738,33 +739,43 @@ public class ZenModeConfig implements Parcelable { // display as day/time summary = line1 = line2 = res.getString(R.string.zen_mode_until, formattedTime); } - final Uri id = toCountdownConditionId(time); + final Uri id = toCountdownConditionId(time, false); return new Condition(id, summary, line1, line2, 0, Condition.STATE_TRUE, Condition.FLAG_RELEVANT_NOW); } - public static Condition toNextAlarmCondition(Context context, long now, long alarm, + /** + * Converts countdown to alarm parameters into a condition with user facing summary + */ + public static Condition toNextAlarmCondition(Context context, long alarm, int userHandle) { - final CharSequence formattedTime = getFormattedTime(context, alarm, userHandle); + boolean isSameDay = isToday(alarm); + final CharSequence formattedTime = getFormattedTime(context, alarm, isSameDay, userHandle); final Resources res = context.getResources(); - final String line1 = res.getString(R.string.zen_mode_alarm, formattedTime); - final Uri id = toCountdownConditionId(alarm); + final String line1 = res.getString(R.string.zen_mode_until, formattedTime); + final Uri id = toCountdownConditionId(alarm, true); return new Condition(id, "", line1, "", 0, Condition.STATE_TRUE, Condition.FLAG_RELEVANT_NOW); } - private static CharSequence getFormattedTime(Context context, long time, int userHandle) { - String skeleton = "EEE " + (DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma"); + private static CharSequence getFormattedTime(Context context, long time, boolean isSameDay, + int userHandle) { + String skeleton = (!isSameDay ? "EEE " : "") + + (DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma"); + final String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton); + return DateFormat.format(pattern, time); + } + + private static boolean isToday(long time) { GregorianCalendar now = new GregorianCalendar(); GregorianCalendar endTime = new GregorianCalendar(); endTime.setTimeInMillis(time); if (now.get(Calendar.YEAR) == endTime.get(Calendar.YEAR) && now.get(Calendar.MONTH) == endTime.get(Calendar.MONTH) && now.get(Calendar.DATE) == endTime.get(Calendar.DATE)) { - skeleton = DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma"; + return true; } - final String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton); - return DateFormat.format(pattern, time); + return false; } // ==== Built-in system conditions ==== @@ -775,17 +786,24 @@ public class ZenModeConfig implements Parcelable { public static final String COUNTDOWN_PATH = "countdown"; - public static Uri toCountdownConditionId(long time) { + public static final String IS_ALARM_PATH = "alarm"; + + /** + * Converts countdown condition parameters into a condition id. + */ + public static Uri toCountdownConditionId(long time, boolean alarm) { return new Uri.Builder().scheme(Condition.SCHEME) .authority(SYSTEM_AUTHORITY) .appendPath(COUNTDOWN_PATH) .appendPath(Long.toString(time)) + .appendPath(IS_ALARM_PATH) + .appendPath(Boolean.toString(alarm)) .build(); } public static long tryParseCountdownConditionId(Uri conditionId) { if (!Condition.isValidId(conditionId, SYSTEM_AUTHORITY)) return 0; - if (conditionId.getPathSegments().size() != 2 + if (conditionId.getPathSegments().size() < 2 || !COUNTDOWN_PATH.equals(conditionId.getPathSegments().get(0))) return 0; try { return Long.parseLong(conditionId.getPathSegments().get(1)); @@ -795,10 +813,32 @@ public class ZenModeConfig implements Parcelable { } } + /** + * Returns whether this condition is a countdown condition. + */ public static boolean isValidCountdownConditionId(Uri conditionId) { return tryParseCountdownConditionId(conditionId) != 0; } + /** + * Returns whether this condition is a countdown to an alarm. + */ + public static boolean isValidCountdownToAlarmConditionId(Uri conditionId) { + if (tryParseCountdownConditionId(conditionId) != 0) { + if (conditionId.getPathSegments().size() < 4 + || !IS_ALARM_PATH.equals(conditionId.getPathSegments().get(2))) { + return false; + } + try { + return Boolean.parseBoolean(conditionId.getPathSegments().get(3)); + } catch (RuntimeException e) { + Slog.w(TAG, "Error parsing countdown alarm condition: " + conditionId, e); + return false; + } + } + return false; + } + // ==== Built-in system condition: schedule ==== public static final String SCHEDULE_PATH = "schedule"; diff --git a/core/java/android/text/style/TextAppearanceSpan.java b/core/java/android/text/style/TextAppearanceSpan.java index abbd793dcb2a..c17cfd500827 100644 --- a/core/java/android/text/style/TextAppearanceSpan.java +++ b/core/java/android/text/style/TextAppearanceSpan.java @@ -19,6 +19,7 @@ package android.text.style; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.TypedArray; +import android.graphics.LeakyTypefaceStorage; import android.graphics.Typeface; import android.os.Parcel; import android.text.ParcelableSpan; @@ -30,11 +31,12 @@ import android.text.TextUtils; * resource. */ public class TextAppearanceSpan extends MetricAffectingSpan implements ParcelableSpan { - private final String mTypeface; + private final String mFamilyName; private final int mStyle; private final int mTextSize; private final ColorStateList mTextColor; private final ColorStateList mTextColorLink; + private final Typeface mTypeface; /** * Uses the specified TextAppearance resource to determine the @@ -55,7 +57,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl */ public TextAppearanceSpan(Context context, int appearance, int colorList) { ColorStateList textColor; - + TypedArray a = context.obtainStyledAttributes(appearance, com.android.internal.R.styleable.TextAppearance); @@ -68,28 +70,37 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl TextAppearance_textSize, -1); mStyle = a.getInt(com.android.internal.R.styleable.TextAppearance_textStyle, 0); - String family = a.getString(com.android.internal.R.styleable.TextAppearance_fontFamily); - if (family != null) { - mTypeface = family; + if (!context.isRestricted() && context.canLoadUnsafeResources()) { + mTypeface = a.getFont(com.android.internal.R.styleable.TextAppearance_fontFamily); + } else { + mTypeface = null; + } + if (mTypeface != null) { + mFamilyName = null; } else { - int tf = a.getInt(com.android.internal.R.styleable.TextAppearance_typeface, 0); + String family = a.getString(com.android.internal.R.styleable.TextAppearance_fontFamily); + if (family != null) { + mFamilyName = family; + } else { + int tf = a.getInt(com.android.internal.R.styleable.TextAppearance_typeface, 0); - switch (tf) { - case 1: - mTypeface = "sans"; - break; + switch (tf) { + case 1: + mFamilyName = "sans"; + break; - case 2: - mTypeface = "serif"; - break; + case 2: + mFamilyName = "serif"; + break; - case 3: - mTypeface = "monospace"; - break; + case 3: + mFamilyName = "monospace"; + break; - default: - mTypeface = null; - break; + default: + mFamilyName = null; + break; + } } } @@ -102,7 +113,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl textColor = a.getColorStateList(colorList); a.recycle(); } - + mTextColor = textColor; } @@ -112,15 +123,16 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl */ public TextAppearanceSpan(String family, int style, int size, ColorStateList color, ColorStateList linkColor) { - mTypeface = family; + mFamilyName = family; mStyle = style; mTextSize = size; mTextColor = color; mTextColorLink = linkColor; + mTypeface = null; } public TextAppearanceSpan(Parcel src) { - mTypeface = src.readString(); + mFamilyName = src.readString(); mStyle = src.readInt(); mTextSize = src.readInt(); if (src.readInt() != 0) { @@ -133,8 +145,9 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl } else { mTextColorLink = null; } + mTypeface = LeakyTypefaceStorage.readTypefaceFromParcel(src); } - + public int getSpanTypeId() { return getSpanTypeIdInternal(); } @@ -143,7 +156,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl public int getSpanTypeIdInternal() { return TextUtils.TEXT_APPEARANCE_SPAN; } - + public int describeContents() { return 0; } @@ -154,7 +167,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl /** @hide */ public void writeToParcelInternal(Parcel dest, int flags) { - dest.writeString(mTypeface); + dest.writeString(mFamilyName); dest.writeInt(mStyle); dest.writeInt(mTextSize); if (mTextColor != null) { @@ -169,6 +182,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl } else { dest.writeInt(0); } + LeakyTypefaceStorage.writeTypefaceToParcel(mTypeface, dest); } /** @@ -176,7 +190,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl * if it does not specify one. */ public String getFamily() { - return mTypeface; + return mFamilyName; } /** @@ -226,9 +240,14 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl @Override public void updateMeasureState(TextPaint ds) { - if (mTypeface != null || mStyle != 0) { + final Typeface styledTypeface; + int style = 0; + + if (mTypeface != null) { + style = mStyle; + styledTypeface = Typeface.create(mTypeface, style); + } else if (mFamilyName != null || mStyle != 0) { Typeface tf = ds.getTypeface(); - int style = 0; if (tf != null) { style = tf.getStyle(); @@ -236,15 +255,19 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl style |= mStyle; - if (mTypeface != null) { - tf = Typeface.create(mTypeface, style); + if (mFamilyName != null) { + styledTypeface = Typeface.create(mFamilyName, style); } else if (tf == null) { - tf = Typeface.defaultFromStyle(style); + styledTypeface = Typeface.defaultFromStyle(style); } else { - tf = Typeface.create(tf, style); + styledTypeface = Typeface.create(tf, style); } + } else { + styledTypeface = null; + } - int fake = style & ~tf.getStyle(); + if (styledTypeface != null) { + int fake = style & ~styledTypeface.getStyle(); if ((fake & Typeface.BOLD) != 0) { ds.setFakeBoldText(true); @@ -254,7 +277,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl ds.setTextSkewX(-0.25f); } - ds.setTypeface(tf); + ds.setTypeface(styledTypeface); } if (mTextSize > 0) { diff --git a/core/java/android/util/AtomicFile.java b/core/java/android/util/AtomicFile.java index 0122e49eb462..6342c8bcb85e 100644 --- a/core/java/android/util/AtomicFile.java +++ b/core/java/android/util/AtomicFile.java @@ -214,10 +214,10 @@ public class AtomicFile { * Gets the last modified time of the atomic file. * {@hide} * - * @return last modified time in milliseconds since epoch. - * @throws IOException + * @return last modified time in milliseconds since epoch. Returns zero if + * the file does not exist or an I/O error is encountered. */ - public long getLastModifiedTime() throws IOException { + public long getLastModifiedTime() { if (mBackupName.exists()) { return mBackupName.lastModified(); } diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index 263d3ff423c5..97788931ea93 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -726,17 +726,6 @@ public final class Display { } /** - * Returns the rotation associated with this display as used during layout. This is currently - * derived from the {@link Configuration}. - * - * @hide - */ - @Surface.Rotation - public int getLayoutRotation() { - return mResources.getConfiguration().getRotation(); - } - - /** * @deprecated use {@link #getRotation} * @return orientation of this display. */ diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index ecfc0b6cb00b..78cdf5d922b4 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -135,17 +135,11 @@ public class Surface implements Parcelable { public static final int SCALING_MODE_NO_SCALE_CROP = 3; /** @hide */ - @IntDef({ROTATION_UNDEFINED, ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270}) + @IntDef({ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270}) @Retention(RetentionPolicy.SOURCE) public @interface Rotation {} /** - * Rotation constant: undefined - * @hide - */ - public static final int ROTATION_UNDEFINED = -1; - - /** * Rotation constant: 0 degree rotation (natural orientation) */ public static final int ROTATION_0 = 0; diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index cac27afa72cb..1d206abbceea 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -16,7 +16,6 @@ package android.view; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; import static android.view.WindowManagerPolicy.APPLICATION_MEDIA_OVERLAY_SUBLAYER; import static android.view.WindowManagerPolicy.APPLICATION_MEDIA_SUBLAYER; import static android.view.WindowManagerPolicy.APPLICATION_PANEL_SUBLAYER; @@ -872,31 +871,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb return callbacks; } - /** - * This method still exists only for compatibility reasons because some applications have relied - * on this method via reflection. See Issue 36345857 for details. - * - * @deprecated No platform code is using this method anymore. - * @hide - */ - @Deprecated - public void setWindowType(int type) { - if (getContext().getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O) { - throw new UnsupportedOperationException( - "SurfaceView#setWindowType() has never been a public API."); - } - - if (type == TYPE_APPLICATION_PANEL) { - Log.e(TAG, "If you are calling SurfaceView#setWindowType(TYPE_APPLICATION_PANEL) " - + "just to make the SurfaceView to be placed on top of its window, you must " - + "call setZOrderOnTop(true) instead.", new Throwable()); - setZOrderOnTop(true); - return; - } - Log.e(TAG, "SurfaceView#setWindowType(int) is deprecated and now does nothing. " - + "type=" + type, new Throwable()); - } - private void runOnUiThread(Runnable runnable) { Handler handler = getHandler(); if (handler != null && handler.getLooper() != Looper.myLooper()) { diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index 4f9f7e1b7bbf..e2ad1e06057b 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -694,8 +694,13 @@ public final class AutofillManager { /** * Called to indicate the current autofill context should be commited. * - * <p>For example, when a virtual view is rendering an {@code HTML} page with a form, it should - * call this method after the form is submitted and another page is rendered. + * <p>This method is typically called by {@link View Views} that manage virtual views; for + * example, when the view is rendering an {@code HTML} page with a form and virtual views + * that represent the HTML elements, it should call this method after the form is submitted and + * another page is rendered. + * + * <p><b>Note:</b> This method does not need to be called on regular application lifecycle + * methods such as {@link android.app.Activity#finish()}. */ public void commit() { if (!hasAutofillFeature()) { @@ -713,8 +718,13 @@ public final class AutofillManager { /** * Called to indicate the current autofill context should be cancelled. * - * <p>For example, when a virtual view is rendering an {@code HTML} page with a form, it should - * call this method if the user does not post the form but moves to another form in this page. + * <p>This method is typically called by {@link View Views} that manage virtual views; for + * example, when the view is rendering an {@code HTML} page with a form and virtual views + * that represent the HTML elements, it should call this method if the user does not post the + * form but moves to another form in this page. + * + * <p><b>Note:</b> This method does not need to be called on regular application lifecycle + * methods such as {@link android.app.Activity#finish()}. */ public void cancel() { if (!hasAutofillFeature()) { diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 333c44c5910d..da7764010cfe 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -1642,12 +1642,23 @@ public class WebView extends AbsoluteLayout /** * Sets the list of domains that are exempt from SafeBrowsing checks. The list is * global for all the WebViews. - * TODO: Add documentation for the format of the urls. + * <p> + * Each rule should take one of these: + * <table> + * <tr><th> Rule </th> <th> Example </th> <th> Matches Subdomain</th> </tr> + * <tr><th> HOSTNAME </th> <th> example.com </th> <th> Yes </th> </tr> + * <tr><th>.HOSTNAME</th> <th> .example.com </th> <th> No </th> </tr> + * <tr><th> IPV4_LITERAL </th> <th> 192.168.1.1 </th> <th> No </th></tr> + * <tr><th> IPV6_LITERAL_WITH_BRACKETS</th><th>[10:20:30:40:50:60:70:80]</th><th>No</th></tr> + * </table> + * <p> + * All other rules, including wildcards, are invalid. + * <p> * * @param urls the list of URLs - * @param callback will be called with true if URLs are successfully added to the whitelist. It - * will be called with false if any URLs are malformed. The callback will be run on the UI - * thread. + * @param callback will be called with true if URLs are successfully added to the whitelist. + * It will be called with false if any URLs are malformed. The callback will be run on + * the UI thread */ public static void setSafeBrowsingWhitelist(@NonNull List<String> urls, @Nullable ValueCallback<Boolean> callback) { @@ -2289,7 +2300,6 @@ public class WebView extends AbsoluteLayout /** * Sets the {@link TextClassifier} for this WebView. - * @hide */ public void setTextClassifier(@Nullable TextClassifier textClassifier) { mProvider.setTextClassifier(textClassifier); @@ -2298,7 +2308,6 @@ public class WebView extends AbsoluteLayout /** * Returns the {@link TextClassifier} used by this WebView. * If no TextClassifier has been set, this WebView uses the default set by the system. - * @hide */ @NonNull public TextClassifier getTextClassifier() { diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java index 98d8a13d68b5..f9f5901a6651 100644 --- a/core/java/android/widget/EdgeEffect.java +++ b/core/java/android/widget/EdgeEffect.java @@ -59,7 +59,8 @@ public class EdgeEffect { // Time it will take in ms for a pulled glow to decay to partial strength before release private static final int PULL_DECAY_TIME = 2000; - private static final float MAX_ALPHA = 0.5f; + private static final float MAX_ALPHA = 0.15f; + private static final float GLOW_ALPHA_START = .09f; private static final float MAX_GLOW_SCALE = 2.f; @@ -75,6 +76,7 @@ public class EdgeEffect { private static final double ANGLE = Math.PI / 6; private static final float SIN = (float) Math.sin(ANGLE); private static final float COS = (float) Math.cos(ANGLE); + private static final float RADIUS_FACTOR = 0.6f; private float mGlowAlpha; private float mGlowScaleY; @@ -134,10 +136,10 @@ public class EdgeEffect { * @param height Effect height in pixels */ public void setSize(int width, int height) { - final float r = width * 0.75f / SIN; + final float r = width * RADIUS_FACTOR / SIN; final float y = COS * r; final float h = r - y; - final float or = height * 0.75f / SIN; + final float or = height * RADIUS_FACTOR / SIN; final float oy = COS * or; final float oh = or - oy; @@ -272,7 +274,7 @@ public class EdgeEffect { // The glow depends more on the velocity, and therefore starts out // nearly invisible. - mGlowAlphaStart = 0.3f; + mGlowAlphaStart = GLOW_ALPHA_START; mGlowScaleYStart = Math.max(mGlowScaleY, 0.f); diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 69edbbba1386..243e21500206 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -10320,7 +10320,16 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return; } - setText(value.getTextValue(), mBufferType, true, 0); + final CharSequence autofilledValue = value.getTextValue(); + + // First autofill it... + setText(autofilledValue, mBufferType, true, 0); + + // ...then move cursor to the end. + final CharSequence text = getText(); + if ((text instanceof Spannable)) { + Selection.setSelection((Spannable) text, text.length()); + } } @Override diff --git a/core/java/com/android/internal/colorextraction/ColorExtractor.java b/core/java/com/android/internal/colorextraction/ColorExtractor.java index 68cf5cd74431..727412b03e28 100644 --- a/core/java/com/android/internal/colorextraction/ColorExtractor.java +++ b/core/java/com/android/internal/colorextraction/ColorExtractor.java @@ -29,7 +29,9 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.colorextraction.types.ExtractionType; import com.android.internal.colorextraction.types.Tonal; +import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Iterator; /** * Class to process wallpaper colors and generate a tonal palette based on them. @@ -43,12 +45,12 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener private static final String TAG = "ColorExtractor"; - private final SparseArray<GradientColors[]> mGradientColors; - private final ArrayList<OnColorsChangedListener> mOnColorsChangedListeners; + protected final SparseArray<GradientColors[]> mGradientColors; + private final ArrayList<WeakReference<OnColorsChangedListener>> mOnColorsChangedListeners; private final Context mContext; private final ExtractionType mExtractionType; - private WallpaperColors mSystemColors; - private WallpaperColors mLockColors; + protected WallpaperColors mSystemColors; + protected WallpaperColors mLockColors; public ColorExtractor(Context context) { this(context, new Tonal(context)); @@ -167,8 +169,17 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener } protected void triggerColorsChanged(int which) { - for (OnColorsChangedListener listener: mOnColorsChangedListeners) { - listener.onColorsChanged(this, which); + ArrayList<WeakReference<OnColorsChangedListener>> references = + new ArrayList<>(mOnColorsChangedListeners); + final int size = references.size(); + for (int i = 0; i < size; i++) { + final WeakReference<OnColorsChangedListener> weakReference = references.get(i); + final OnColorsChangedListener listener = weakReference.get(); + if (listener == null) { + mOnColorsChangedListeners.remove(weakReference); + } else { + listener.onColorsChanged(this, which); + } } } @@ -187,11 +198,20 @@ public class ColorExtractor implements WallpaperManager.OnColorsChangedListener } public void addOnColorsChangedListener(@NonNull OnColorsChangedListener listener) { - mOnColorsChangedListeners.add(listener); + mOnColorsChangedListeners.add(new WeakReference<>(listener)); } public void removeOnColorsChangedListener(@NonNull OnColorsChangedListener listener) { - mOnColorsChangedListeners.remove(listener); + ArrayList<WeakReference<OnColorsChangedListener>> references = + new ArrayList<>(mOnColorsChangedListeners); + final int size = references.size(); + for (int i = 0; i < size; i++) { + final WeakReference<OnColorsChangedListener> weakReference = references.get(i); + if (weakReference.get() == listener) { + mOnColorsChangedListeners.remove(weakReference); + break; + } + } } public static class GradientColors { diff --git a/core/java/com/android/internal/graphics/ColorUtils.java b/core/java/com/android/internal/graphics/ColorUtils.java index 6c1efa43ac86..8b2a2dc38e95 100644 --- a/core/java/com/android/internal/graphics/ColorUtils.java +++ b/core/java/com/android/internal/graphics/ColorUtils.java @@ -106,6 +106,31 @@ public final class ColorUtils { } /** + * Calculates the minimum alpha value which can be applied to {@code background} so that would + * have a contrast value of at least {@code minContrastRatio} when alpha blended to + * {@code foreground}. + * + * @param foreground the foreground color + * @param background the background color, opacity will be ignored + * @param minContrastRatio the minimum contrast ratio + * @return the alpha value in the range 0-255, or -1 if no value could be calculated + */ + public static int calculateMinimumBackgroundAlpha(@ColorInt int foreground, + @ColorInt int background, float minContrastRatio) { + // Ignore initial alpha that the background might have since this is + // what we're trying to calculate. + background = setAlphaComponent(background, 255); + final int leastContrastyColor = setAlphaComponent(foreground, 255); + return binaryAlphaSearch(foreground, background, minContrastRatio, (fg, bg, alpha) -> { + int testBackground = blendARGB(leastContrastyColor, bg, alpha/255f); + // Float rounding might set this alpha to something other that 255, + // raising an exception in calculateContrast. + testBackground = setAlphaComponent(testBackground, 255); + return calculateContrast(fg, testBackground); + }); + } + + /** * Calculates the minimum alpha value which can be applied to {@code foreground} so that would * have a contrast value of at least {@code minContrastRatio} when compared to * {@code background}. @@ -122,14 +147,33 @@ public final class ColorUtils { + Integer.toHexString(background)); } + ContrastCalculator contrastCalculator = (fg, bg, alpha) -> { + int testForeground = setAlphaComponent(fg, alpha); + return calculateContrast(testForeground, bg); + }; + // First lets check that a fully opaque foreground has sufficient contrast - int testForeground = setAlphaComponent(foreground, 255); - double testRatio = calculateContrast(testForeground, background); + double testRatio = contrastCalculator.calculateContrast(foreground, background, 255); if (testRatio < minContrastRatio) { // Fully opaque foreground does not have sufficient contrast, return error return -1; } + foreground = setAlphaComponent(foreground, 255); + return binaryAlphaSearch(foreground, background, minContrastRatio, contrastCalculator); + } + /** + * Calculates the alpha value using binary search based on a given contrast evaluation function + * and target contrast that needs to be satisfied. + * + * @param foreground the foreground color + * @param background the opaque background color + * @param minContrastRatio the minimum contrast ratio + * @param calculator function that calculates contrast + * @return the alpha value in the range 0-255, or -1 if no value could be calculated + */ + private static int binaryAlphaSearch(@ColorInt int foreground, @ColorInt int background, + float minContrastRatio, ContrastCalculator calculator) { // Binary search to find a value with the minimum value which provides sufficient contrast int numIterations = 0; int minAlpha = 0; @@ -139,9 +183,8 @@ public final class ColorUtils { (maxAlpha - minAlpha) > MIN_ALPHA_SEARCH_PRECISION) { final int testAlpha = (minAlpha + maxAlpha) / 2; - testForeground = setAlphaComponent(foreground, testAlpha); - testRatio = calculateContrast(testForeground, background); - + final double testRatio = calculator.calculateContrast(foreground, background, + testAlpha); if (testRatio < minContrastRatio) { minAlpha = testAlpha; } else { @@ -615,4 +658,8 @@ public final class ColorUtils { return result; } + private interface ContrastCalculator { + double calculateContrast(int foreground, int background, int alpha); + } + }
\ No newline at end of file diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index 1e82054d755b..9fa3239b60cf 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -22,6 +22,9 @@ import static android.system.OsConstants.POLLIN; import static android.system.OsConstants.STDERR_FILENO; import static android.system.OsConstants.STDIN_FILENO; import static android.system.OsConstants.STDOUT_FILENO; +import static com.android.internal.os.ZygoteConnectionConstants.CONNECTION_TIMEOUT_MILLIS; +import static com.android.internal.os.ZygoteConnectionConstants.MAX_ZYGOTE_ARGC; +import static com.android.internal.os.ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS; import android.net.Credentials; import android.net.LocalSocket; @@ -56,18 +59,6 @@ class ZygoteConnection { private static final int[][] intArray2d = new int[0][0]; /** - * {@link android.net.LocalSocket#setSoTimeout} value for connections. - * Effectively, the amount of time a requestor has between the start of - * the request and the completed request. The select-loop mode Zygote - * doesn't have the logic to return to the select loop in the middle of - * a request, so we need to time out here to avoid being denial-of-serviced. - */ - private static final int CONNECTION_TIMEOUT_MILLIS = 1000; - - /** max number of arguments that a connection can specify */ - private static final int MAX_ZYGOTE_ARGC = 1024; - - /** * The command socket. * * mSocket is retained in the child process in "peer wait" mode, so @@ -835,10 +826,6 @@ class ZygoteConnection { try { // Do a busy loop here. We can't guarantee that a failure (and thus an exception // bail) happens in a timely manner. - // - // We'll wait up to five seconds. This should give enough time for the fork to go - // through, but not to trigger the watchdog in the system server. - final int SLEEP_IN_MS = 5000; final int BYTES_REQUIRED = 4; // Bytes in an int. StructPollfd fds[] = new StructPollfd[] { @@ -847,7 +834,7 @@ class ZygoteConnection { byte data[] = new byte[BYTES_REQUIRED]; - int remainingSleepTime = SLEEP_IN_MS; + int remainingSleepTime = WRAPPED_PID_TIMEOUT_MILLIS; int dataIndex = 0; long startTime = System.nanoTime(); @@ -859,7 +846,8 @@ class ZygoteConnection { int res = android.system.Os.poll(fds, remainingSleepTime); long endTime = System.nanoTime(); - remainingSleepTime = SLEEP_IN_MS - (int)((endTime - startTime) / 1000000l); + int elapsedTimeMs = (int)((endTime - startTime) / 1000000l); + remainingSleepTime = WRAPPED_PID_TIMEOUT_MILLIS - elapsedTimeMs; if (res > 0) { if ((fds[0].revents & POLLIN) != 0) { diff --git a/core/java/com/android/internal/os/ZygoteConnectionConstants.java b/core/java/com/android/internal/os/ZygoteConnectionConstants.java new file mode 100644 index 000000000000..506e39f30617 --- /dev/null +++ b/core/java/com/android/internal/os/ZygoteConnectionConstants.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.os; + +/** + * Sharable zygote constants. + * + * @hide + */ +public class ZygoteConnectionConstants { + /** + * {@link android.net.LocalSocket#setSoTimeout} value for connections. + * Effectively, the amount of time a requestor has between the start of + * the request and the completed request. The select-loop mode Zygote + * doesn't have the logic to return to the select loop in the middle of + * a request, so we need to time out here to avoid being denial-of-serviced. + */ + public static final int CONNECTION_TIMEOUT_MILLIS = 1000; + + /** max number of arguments that a connection can specify */ + public static final int MAX_ZYGOTE_ARGC = 1024; + + /** + * Wait time for a wrapped app to report back its pid. + * + * We'll wait up to thirty seconds. This should give enough time for the fork + * to go through, but not to trigger the watchdog in the system server (by default + * sixty seconds). + * + * WARNING: This may trigger the watchdog in debug mode. However, to support + * wrapping on lower-end devices we do not have much choice. + */ + public static final int WRAPPED_PID_TIMEOUT_MILLIS = 30000; +} diff --git a/core/java/com/android/internal/util/AsyncChannel.java b/core/java/com/android/internal/util/AsyncChannel.java index 6fbfff8f381d..e760f2526701 100644 --- a/core/java/com/android/internal/util/AsyncChannel.java +++ b/core/java/com/android/internal/util/AsyncChannel.java @@ -402,7 +402,6 @@ public class AsyncChannel { // Initialize destination fields mDstMessenger = dstMessenger; - linkToDeathMonitor(); if (DBG) log("connected srcHandler to the dstMessenger X"); } diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 53a965452df3..9462a06a1a05 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -909,44 +909,38 @@ public class LockPatternUtils { */ public void setSeparateProfileChallengeEnabled(int userHandle, boolean enabled, String managedUserPassword) { - UserInfo info = getUserManager().getUserInfo(userHandle); - if (info.isManagedProfile()) { - try { - getLockSettings().setSeparateProfileChallengeEnabled(userHandle, enabled, - managedUserPassword); - onAfterChangingPassword(userHandle); - } catch (RemoteException e) { - Log.e(TAG, "Couldn't update work profile challenge enabled"); - } + if (!isManagedProfile(userHandle)) { + return; + } + try { + getLockSettings().setSeparateProfileChallengeEnabled(userHandle, enabled, + managedUserPassword); + onAfterChangingPassword(userHandle); + } catch (RemoteException e) { + Log.e(TAG, "Couldn't update work profile challenge enabled"); } } /** - * Retrieves whether the Separate Profile Challenge is enabled for this {@param userHandle}. + * Returns true if {@param userHandle} is a managed profile with separate challenge. */ public boolean isSeparateProfileChallengeEnabled(int userHandle) { - UserInfo info = getUserManager().getUserInfo(userHandle); - if (info == null || !info.isManagedProfile()) { - return false; - } - try { - return getLockSettings().getSeparateProfileChallengeEnabled(userHandle); - } catch (RemoteException e) { - Log.e(TAG, "Couldn't get separate profile challenge enabled"); - // Default value is false - return false; - } + return isManagedProfile(userHandle) && hasSeparateChallenge(userHandle); + } + + /** + * Returns true if {@param userHandle} is a managed profile with unified challenge. + */ + public boolean isManagedProfileWithUnifiedChallenge(int userHandle) { + return isManagedProfile(userHandle) && !hasSeparateChallenge(userHandle); } /** * Retrieves whether the current DPM allows use of the Profile Challenge. */ public boolean isSeparateProfileChallengeAllowed(int userHandle) { - UserInfo info = getUserManager().getUserInfo(userHandle); - if (info == null || !info.isManagedProfile()) { - return false; - } - return getDevicePolicyManager().isSeparateProfileChallengeAllowed(userHandle); + return isManagedProfile(userHandle) + && getDevicePolicyManager().isSeparateProfileChallengeAllowed(userHandle); } /** @@ -956,6 +950,21 @@ public class LockPatternUtils { return getDevicePolicyManager().isProfileActivePasswordSufficientForParent(userHandle); } + private boolean hasSeparateChallenge(int userHandle) { + try { + return getLockSettings().getSeparateProfileChallengeEnabled(userHandle); + } catch (RemoteException e) { + Log.e(TAG, "Couldn't get separate profile challenge enabled"); + // Default value is false + return false; + } + } + + private boolean isManagedProfile(int userHandle) { + final UserInfo info = getUserManager().getUserInfo(userHandle); + return info != null && info.isManagedProfile(); + } + /** * Deserialize a pattern. * @param string The pattern serialized with {@link #patternToString} diff --git a/core/java/com/android/internal/widget/MediaNotificationView.java b/core/java/com/android/internal/widget/MediaNotificationView.java index bbebcc21f80e..7609b67e492b 100644 --- a/core/java/com/android/internal/widget/MediaNotificationView.java +++ b/core/java/com/android/internal/widget/MediaNotificationView.java @@ -33,13 +33,13 @@ import android.widget.RemoteViews; @RemoteViews.RemoteView public class MediaNotificationView extends FrameLayout { - private final int mSmallImageSize; private final int mNotificationContentMarginEnd; private final int mNotificationContentImageMarginEnd; private ImageView mRightIcon; private View mActions; private View mHeader; private View mMainColumn; + private int mImagePushIn; public MediaNotificationView(Context context) { this(context, null); @@ -62,6 +62,7 @@ public class MediaNotificationView extends FrameLayout { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int mode = MeasureSpec.getMode(widthMeasureSpec); boolean reMeasure = false; + mImagePushIn = 0; if (hasIcon && mode != MeasureSpec.UNSPECIFIED) { int size = MeasureSpec.getSize(widthMeasureSpec); size = size - mActions.getMeasuredWidth(); @@ -70,14 +71,15 @@ public class MediaNotificationView extends FrameLayout { int imageEndMargin = layoutParams.getMarginEnd(); size -= imageEndMargin; int fullHeight = getMeasuredHeight(); - if (size < fullHeight) { - size = mSmallImageSize; - } else { + if (size > fullHeight) { size = fullHeight; + } else if (size < fullHeight) { + size = Math.max(0, size); + mImagePushIn = fullHeight - size; } - if (layoutParams.width != size || layoutParams.height != size) { - layoutParams.width = size; - layoutParams.height = size; + if (layoutParams.width != fullHeight || layoutParams.height != fullHeight) { + layoutParams.width = fullHeight; + layoutParams.height = fullHeight; mRightIcon.setLayoutParams(layoutParams); reMeasure = true; } @@ -111,6 +113,15 @@ public class MediaNotificationView extends FrameLayout { } } + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (mImagePushIn > 0) { + mRightIcon.layout(mRightIcon.getLeft() + mImagePushIn, mRightIcon.getTop(), + mRightIcon.getRight() + mImagePushIn, mRightIcon.getBottom()); + } + } + private void resetHeaderIndention() { if (mHeader.getPaddingEnd() != mNotificationContentMarginEnd) { mHeader.setPaddingRelative(mHeader.getPaddingStart(), @@ -130,8 +141,6 @@ public class MediaNotificationView extends FrameLayout { public MediaNotificationView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); - mSmallImageSize = context.getResources().getDimensionPixelSize( - com.android.internal.R.dimen.media_notification_expanded_image_small_size); mNotificationContentMarginEnd = context.getResources().getDimensionPixelSize( com.android.internal.R.dimen.notification_content_margin_end); mNotificationContentImageMarginEnd = context.getResources().getDimensionPixelSize( diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index d1754224bdc6..f7e9b6df076c 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -545,6 +545,7 @@ <protected-broadcast android:name="android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED" /> <protected-broadcast android:name="android.media.tv.action.WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED" /> <protected-broadcast android:name="android.media.tv.action.CHANNEL_BROWSABLE_REQUESTED" /> + <protected-broadcast android:name="com.android.server.InputMethodManagerService.SHOW_INPUT_METHOD_PICKER" /> <!-- ====================================================================== --> <!-- RUNTIME PERMISSIONS --> @@ -3169,6 +3170,10 @@ <permission android:name="android.permission.MODIFY_NETWORK_ACCOUNTING" android:protectionLevel="signature|privileged" /> + <!-- @SystemApi @hide Allows an application to manage carrier subscription plans. --> + <permission android:name="android.permission.MANAGE_SUBSCRIPTION_PLANS" + android:protectionLevel="signature|privileged" /> + <!-- C2DM permission. @hide Used internally. --> diff --git a/core/res/res/drawable-hdpi/toast_frame.9.png b/core/res/res/drawable-hdpi/toast_frame.9.png Binary files differdeleted file mode 100644 index a804a8a94564..000000000000 --- a/core/res/res/drawable-hdpi/toast_frame.9.png +++ /dev/null diff --git a/core/res/res/drawable-ldpi/toast_frame.9.png b/core/res/res/drawable-ldpi/toast_frame.9.png Binary files differdeleted file mode 100644 index e64dc7575051..000000000000 --- a/core/res/res/drawable-ldpi/toast_frame.9.png +++ /dev/null diff --git a/core/res/res/drawable-mdpi/toast_frame.9.png b/core/res/res/drawable-mdpi/toast_frame.9.png Binary files differdeleted file mode 100644 index 778e4e67653d..000000000000 --- a/core/res/res/drawable-mdpi/toast_frame.9.png +++ /dev/null diff --git a/core/res/res/drawable-xhdpi/toast_frame.9.png b/core/res/res/drawable-xhdpi/toast_frame.9.png Binary files differdeleted file mode 100644 index 77e69c72ab9a..000000000000 --- a/core/res/res/drawable-xhdpi/toast_frame.9.png +++ /dev/null diff --git a/core/res/res/drawable-xxhdpi/toast_frame.9.png b/core/res/res/drawable-xxhdpi/toast_frame.9.png Binary files differdeleted file mode 100644 index edecb6320de5..000000000000 --- a/core/res/res/drawable-xxhdpi/toast_frame.9.png +++ /dev/null diff --git a/core/res/res/drawable/toast_frame.xml b/core/res/res/drawable/toast_frame.xml new file mode 100644 index 000000000000..053b4f4fed5f --- /dev/null +++ b/core/res/res/drawable/toast_frame.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* Copyright 2017, 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. +*/ +--> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <!-- background is material_grey_300 with .9 alpha --> + <solid android:color="#E6E0E0E0" /> + <corners android:radius="22dp" /> +</shape> + diff --git a/core/res/res/layout/autofill_save.xml b/core/res/res/layout/autofill_save.xml index 7b8d92285c5a..77fa62a5ecc9 100644 --- a/core/res/res/layout/autofill_save.xml +++ b/core/res/res/layout/autofill_save.xml @@ -16,109 +16,92 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/autofill_save" android:layout_width="fill_parent" android:layout_height="wrap_content" + android:layout_marginTop="32dp" + android:paddingTop="16dp" + android:elevation="32dp" + android:background="?android:attr/colorBackground" android:orientation="vertical"> <LinearLayout - android:id="@+id/autofill_save" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginTop="32dp" - android:paddingTop="16dp" - android:elevation="32dp" - android:background="?android:attr/colorBackground" + android:paddingLeft="16dp" + android:paddingRight="16dp" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" - android:paddingLeft="16dp" - android:paddingRight="16dp" - android:orientation="vertical"> - - <LinearLayout - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - - <TextView - android:id="@+id/autofill_save_title" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:text="@string/autofill_save_title" - android:textSize="16sp" - android:textColor="?android:attr/textColorPrimary" - android:layout_weight="1"> - </TextView> - - <ImageView - android:id="@+id/autofill_save_close" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginLeft="16dp" - android:src="@android:drawable/ic_close" - android:alpha="0.54" - android:background="?android:attr/selectableItemBackgroundBorderless" - android:contentDescription="@android:string/close_button_text"> - </ImageView> - - </LinearLayout> - - <!-- TODO(b/62534917) wrap content to fit exactly what was provided in the remote views ?--> - <LinearLayout - android:id="@+id/autofill_save_custom_subtitle" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:layout_marginTop="4dp" - android:visibility="gone"/> + android:orientation="horizontal"> <TextView - android:id="@+id/autofill_save_subtitle" - android:layout_width="fill_parent" + android:id="@+id/autofill_save_title" + android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="4dp" - android:visibility="gone"> + android:text="@string/autofill_save_title" + android:textSize="16sp" + android:textColor="?android:attr/textColorPrimary" + android:layout_weight="1"> </TextView> + <ImageView + android:id="@+id/autofill_save_close" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="16dp" + android:src="@android:drawable/ic_close" + android:alpha="0.54" + android:background="?android:attr/selectableItemBackgroundBorderless" + android:contentDescription="@android:string/close_button_text"> + </ImageView> + </LinearLayout> - <com.android.internal.widget.ButtonBarLayout - android:layout_width="wrap_content" + <com.android.server.autofill.ui.CustomScrollView + android:id="@+id/autofill_save_custom_subtitle" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="end" - android:padding="16dp" - android:clipToPadding="false" - android:layout_weight="1" - android:orientation="horizontal"> + android:layout_marginTop="4dp" + android:visibility="gone"/> - <Space - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_weight="1" - android:visibility="invisible"> - </Space> + </LinearLayout> - <Button - android:id="@+id/autofill_save_no" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - style="?android:attr/buttonBarButtonStyle" - android:text="@string/autofill_save_no"> - </Button> + <com.android.internal.widget.ButtonBarLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end" + android:padding="16dp" + android:clipToPadding="false" + android:layout_weight="1" + android:orientation="horizontal"> + + <Space + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_weight="1" + android:visibility="invisible"> + </Space> - <Button - android:id="@+id/autofill_save_yes" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - style="@style/Widget.Material.Button.Colored" - android:text="@string/autofill_save_yes"> - <requestFocus /> - </Button> + <Button + android:id="@+id/autofill_save_no" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + style="?android:attr/buttonBarButtonStyle" + android:text="@string/autofill_save_no"> + </Button> - </com.android.internal.widget.ButtonBarLayout> + <Button + android:id="@+id/autofill_save_yes" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + style="@style/Widget.Material.Button.Colored" + android:text="@string/autofill_save_yes"> + <requestFocus /> + </Button> - </LinearLayout> + </com.android.internal.widget.ButtonBarLayout> </LinearLayout> diff --git a/core/res/res/layout/transient_notification.xml b/core/res/res/layout/transient_notification.xml index daa9faf70bb2..2c08bf70491e 100644 --- a/core/res/res/layout/transient_notification.xml +++ b/core/res/res/layout/transient_notification.xml @@ -29,9 +29,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" + android:layout_marginHorizontal="24dp" + android:layout_marginVertical="15dp" android:layout_gravity="center_horizontal" android:textAppearance="@style/TextAppearance.Toast" - android:textColor="@color/bright_foreground_dark" + android:textColor="@color/primary_text_default_material_light" android:shadowColor="#BB000000" android:shadowRadius="2.75" /> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 5f894afbd61a..9da6a9232786 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Stembystand"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Sluit nou"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Inhoud versteek"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Inhoud word versteek volgens beleid"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nuwe kennisgewing"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuele sleutelbord"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fisieke sleutelbord"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sekuriteit"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Ontspeld"</string> <string name="app_info" msgid="6856026610594615344">"Programinligting"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Stel toestel terug?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Tik om toestel terug te stel"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Begin tans demonstrasie …"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Stel toestel tans terug …"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Stel toestel terug?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Jy sal enige veranderinge verloor en die demonstrasie sal oor <xliff:g id="TIMEOUT">%1$s</xliff:g> sekondes weer begin …"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Kanselleer"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Stel nou terug"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Het <xliff:g id="LABEL">%1$s</xliff:g> gedeaktiveer"</string> <string name="conference_call" msgid="3751093130790472426">"Konferensie-oproep"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Nutswenk"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index de6ad70b4102..8c11d6adf7c7 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"የድምጽ እርዳታ"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"አሁን ቆልፍ"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"ይዘቶች ተደብቀዋል"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"ይዘቶች በመመሪያ ተደብቀዋል"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"አዲስ ማሳወቂያ"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"ምናባዊ የቁልፍ ሰሌዳ"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"አካላዊ ቁልፍ ሰሌዳ"</string> <string name="notification_channel_security" msgid="7345516133431326347">"ደህንነት"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"ንቀል"</string> <string name="app_info" msgid="6856026610594615344">"የመተግበሪያ መረጃ"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"መሣሪያ ዳግም ይጀመር?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"መሣሪያን ዳግም ለማስጀመር መታ ያድርጉ"</string> <string name="demo_starting_message" msgid="5268556852031489931">"ማሳያን በማስጀመር ላይ…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"መሣሪያን ዳግም በማስጀመር ላይ…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"መሣሪያ ዳግም ይጀመር?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"ማንኛቸውም ለውጦች ይጠፋሉ፣ እና ማሳያው በ<xliff:g id="TIMEOUT">%1$s</xliff:g> ሰከንዶች ውስጥ እንደገና ይጀምራል…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"ይቅር"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"አሁን ዳግም አስጀምር"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> ተሰናክሏል"</string> <string name="conference_call" msgid="3751093130790472426">"የስብሰባ ጥሪ"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"የመሣሪያ ጥቆማ"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index cad9ceb3fef4..d1c8de8c7e20 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -242,8 +242,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"المساعد الصوتي"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"قفل الآن"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"المحتويات مخفية"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"تم إخفاء المحتويات بواسطة السياسة"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"إشعار جديد"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"لوحة المفاتيح الافتراضية"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"لوحة المفاتيح الفعلية"</string> <string name="notification_channel_security" msgid="7345516133431326347">"الأمان"</string> @@ -1846,14 +1845,8 @@ <string name="unpin_target" msgid="3556545602439143442">"إزالة تثبيت"</string> <string name="app_info" msgid="6856026610594615344">"معلومات عن التطبيق"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"هل تريد إعادة تعيين الجهاز؟"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"انقر لإعادة تعيين الجهاز"</string> <string name="demo_starting_message" msgid="5268556852031489931">"جارٍ بدء العرض التوضيحي…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"جارٍ إعادة تعيين الجهاز…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"هل تريد إعادة تعيين الجهاز؟"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"ستفقد أي تغييرات وسيبدأ العرض التوضيحي مرة أخرى خلال <xliff:g id="TIMEOUT">%1$s</xliff:g> من الثواني…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"إلغاء"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"إعادة التعيين الآن"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"تم تعطيل <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"مكالمة جماعية"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"تلميح"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index ae042bfba99a..9593f8ef05cd 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Səs Yardımçısı"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"İndi kilidləyin"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Məzmun gizlidir"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Məzmun siyasət tərəfindən gizlədilib"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Yeni bildiriş"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtual klaviatura"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fiziki klaviatura"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Təhlükəsizlik"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Çıxarın"</string> <string name="app_info" msgid="6856026610594615344">"Tətbiq məlumatı"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Cihaz sıfırlansın?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Cihazı sıfırlamaq üçün tıklayın"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Demo başlayır…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Cihaz sıfırlanır…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Cihaz sıfırlansın?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Hər hansı dəyişikliyi itirəcəksiniz və demo <xliff:g id="TIMEOUT">%1$s</xliff:g> saniyəyə yenidən başlayacaq…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Ləğv edin"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"İndi sıfırlayın"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> deaktiv edildi"</string> <string name="conference_call" msgid="3751093130790472426">"Konfrans Zəngi"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Tooltip"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 69038190aa68..98c8f792af34 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -233,8 +233,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Glasovna pomoć"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Zaključaj odmah"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Sadržaj je sakriven"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Sadržaj je sakriven smernicama"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Novo obaveštenje"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuelna tastatura"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fizička tastatura"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Bezbednost"</string> @@ -1747,14 +1746,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Otkači"</string> <string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Želite li da resetujete uređaj?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Dodirnite da biste resetovali uređaj"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Pokrećemo demonstraciju..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Resetujemo uređaj..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Želite li da resetujete uređaj?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Izgubićete sve promene i demonstracija će ponovo početi za <xliff:g id="TIMEOUT">%1$s</xliff:g> sek…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Otkaži"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Resetuj"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Vidžet <xliff:g id="LABEL">%1$s</xliff:g> je onemogućen"</string> <string name="conference_call" msgid="3751093130790472426">"Konferencijski poziv"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Objašnjenje"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 5be57f6ce594..3c13f4a6bcab 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -236,8 +236,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Галас. дапамога"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Заблакір. зараз"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Змесціва схавана"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Змесціва, схаванае ў адпаведнасці з палітыкай"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Новае апавяшчэнне"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Віртуальная клавіятура"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Фізічная клавіятура"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Бяспека"</string> @@ -1780,14 +1779,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Адмацаваць"</string> <string name="app_info" msgid="6856026610594615344">"Інфармацыя пра праграму"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Скінуць налады прылады?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Дакраніцеся, каб скінуць налады прылады"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Ідзе запуск дэманстрацыі…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Ідзе скід налад прылады…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Скінуць налады прылады?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Усе змены будуць страчаны, і дэманстрацыя пачнецца зноў праз <xliff:g id="TIMEOUT">%1$s</xliff:g> с…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Скасаваць"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Выканаць скід"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Адключаны <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Канферэнц-выклік"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Падказка"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 6303961bf40e..3e89353958ff 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Гласова помощ"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Заключване сега"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Скрито съдържание"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Съдържанието е скрито чрез правило"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Ново известие"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Виртуална клавиатура"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Физическа клавиатура"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Сигурност"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Освобождаване"</string> <string name="app_info" msgid="6856026610594615344">"Информация за приложението"</string> <string name="negative_duration" msgid="5688706061127375131">"-<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Да се нулира ли устройството?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Докоснете, за да нулирате устройството"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Демонстрацията се стартира…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Устройството се нулира…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Да се нулира ли устройството?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Ще загубите всички промени и демонстрацията ще започне отново след <xliff:g id="TIMEOUT">%1$s</xliff:g> секунди…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Отказ"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Нулиране сега"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g>: Деактивирано"</string> <string name="conference_call" msgid="3751093130790472426">"Конферентно обаждане"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Подсказка"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 4a4d938b1217..5e46d00d5df5 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"ভয়েস সহায়তা"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"এখনই লক করুন"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"৯৯৯+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"লুকানো বিষয়বস্তু"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"নীতির কারণে সামগ্রী লুকানো আছে"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"নতুন বিজ্ঞপ্তি"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"ভার্চুয়াল কীবোর্ড"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"ফিজিক্যাল কীবোর্ড"</string> <string name="notification_channel_security" msgid="7345516133431326347">"নিরাপত্তা"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"আরও তথ্যের জন্য ট্যাপ করুন"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ডিবাগিং সংযুক্ত হয়েছে"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB ডিবাগিং অক্ষম করতে আলতো চাপুন৷"</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ডিবাগিং অক্ষম করতে বেছে নিন।"</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"ত্রুটির প্রতিবেদন নেওয়া হচ্ছে..."</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ত্রুটির প্রতিবেদন শেয়ার করবেন?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ত্রুটির প্রতিবেদন শেয়ার করা হচ্ছে..."</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"আনপিন করুন"</string> <string name="app_info" msgid="6856026610594615344">"অ্যাপ্লিকেশানের তথ্য"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"ডিভাইস আবার সেট করবেন?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"ডিভাইসটিকে আবার সেট করতে আলতো চাপুন"</string> <string name="demo_starting_message" msgid="5268556852031489931">"ডেমো শুরু করা হচ্ছে…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"ডিভাইস আবার সেট করা হচ্ছে…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"ডিভাইস আবার সেট করবেন?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"আপনার করা যে কোনো পরিবর্তন মুছে যাবে এবং <xliff:g id="TIMEOUT">%1$s</xliff:g> সেকেন্ডের মধ্যে ডেমো আবার শুরু হবে…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"বাতিল করুন"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"এখনই আবার সেট করুন"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"অক্ষম করা <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"কনফারেন্স কল"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"টুলটিপ"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 83e07dd4f389..6bf8dd6ff2e8 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -233,8 +233,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Glasovna pomoć"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Zaključaj odmah"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Sadržaj je sakriven"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Sadržaj skriven u skladu sa pravilima"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Novo obavještenje"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuelna tastatura"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fizička tastatura"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sigurnost"</string> @@ -1206,8 +1205,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"Dodirnite za više informacija"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Otklanjanje grešaka putem uređaja spojenog na USB je uspostavljeno"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"Dodirnite da onemogućite otklanjanje grešaka putem uređaja spojenog na USB."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"Odaberite da onemogućite ispravljanje grešaka koristeći USB"</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Prijem izvještaja o grešci..."</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Podijeliti izvještaj o grešci?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Dijeljenje izvještaja o grešci..."</string> @@ -1424,7 +1422,7 @@ <string name="fingerprints" msgid="4516019619850763049">"Otisci prstiju:"</string> <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 otisak prsta:"</string> <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 otisak prsta:"</string> - <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Vidi sve"</string> + <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Prikaži sve"</string> <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Odaberite aktivnost"</string> <string name="share_action_provider_share_with" msgid="5247684435979149216">"Podijeliti sa"</string> <string name="sending" msgid="3245653681008218030">"Slanje..."</string> @@ -1753,14 +1751,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Otkači"</string> <string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Želite li vratiti na početne postavke?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Dodirnite da vratite uređaj na početne postavke"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Pokretanje demonstracije…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Vraćanje uređaja na početne postavke…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Želite li vratiti na početne postavke?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Nestat će sve izmjene, a demonstracija će početi ponovo za <xliff:g id="TIMEOUT">%1$s</xliff:g> sek…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Otkaži"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Vrati sada na početne postavke"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Onemogućen <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Konferencijski poziv"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Savjet za alat"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 5ca03baef05a..98308193f985 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Assist. per veu"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Bloqueja ara"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"+999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contingut amagat"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Contingut amagat de conformitat amb la política"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Notificació nova"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Teclat virtual"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Teclat físic"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Seguretat"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"No fixis"</string> <string name="app_info" msgid="6856026610594615344">"Informació de l\'aplicació"</string> <string name="negative_duration" msgid="5688706061127375131">"-<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Vols restablir el dispositiu?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Toca per restablir el dispositiu"</string> <string name="demo_starting_message" msgid="5268556852031489931">"S\'està iniciant la demostració…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"S\'està restablint el dispositiu…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Vols restablir el dispositiu?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Perdràs els canvis, i la demostració tornarà a començar d\'aquí a <xliff:g id="TIMEOUT">%1$s</xliff:g> segons…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancel·la"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Restableix ara"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> s\'ha desactivat"</string> <string name="conference_call" msgid="3751093130790472426">"Conferència"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Descripció emergent"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index adf37f2466ee..07254ff983b8 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -236,8 +236,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Hlas. asistence"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Zamknout"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Skrytý obsah"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Obsah skrytý zásadami"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nové oznámení"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuální klávesnice"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fyzická klávesnice"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Zabezpečení"</string> @@ -835,7 +834,7 @@ <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"změna oprávnění prohlížeče poskytovat informace o zeměpisné poloze"</string> <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Umožňuje aplikaci upravit oprávnění funkce geolokace v prohlížeči. Škodlivé aplikace toho mohou využít k odeslání údajů o poloze na libovolné webové stránky."</string> <string name="save_password_message" msgid="767344687139195790">"Chcete, aby si prohlížeč zapamatoval toto heslo?"</string> - <string name="save_password_notnow" msgid="6389675316706699758">"Nyní ne"</string> + <string name="save_password_notnow" msgid="6389675316706699758">"Teď ne"</string> <string name="save_password_remember" msgid="6491879678996749466">"Zapamatovat"</string> <string name="save_password_never" msgid="8274330296785855105">"Nikdy"</string> <string name="open_permission_deny" msgid="7374036708316629800">"Nemáte povolení otevřít tuto stránku."</string> @@ -1780,14 +1779,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Odepnout"</string> <string name="app_info" msgid="6856026610594615344">"Informace o aplikaci"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Resetovat zařízení?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Zařízení resetujete klepnutím"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Spouštění ukázky…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Resetování zařízení…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Resetovat zařízení?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Ztratíte všechny provedené změny a ukázka se za <xliff:g id="TIMEOUT">%1$s</xliff:g> s spustí znovu…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Zrušit"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Resetovat"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> – zakázáno"</string> <string name="conference_call" msgid="3751093130790472426">"Konferenční hovor"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Popisek"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index c2ddb43f52d8..62d3e449a9d7 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Taleassistent"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Lås nu"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Indholdet er skjult"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Indholdet er skjult af politikken"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Ny underretning"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuelt tastatur"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fysisk tastatur"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sikkerhed"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Frigør"</string> <string name="app_info" msgid="6856026610594615344">"Oplysninger om appen"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Vil du nulstille enheden?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Tryk for at nulstille enheden"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Starter demoen…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Nulstiller enheden…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Vil du nulstille enheden?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Du mister alle ændringer, og demoen starter igen om <xliff:g id="TIMEOUT">%1$s</xliff:g> sekunder…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Annuller"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Nulstil nu"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> – deaktiveret"</string> <string name="conference_call" msgid="3751093130790472426">"Telefonmøde"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Værktøjstip"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 23df4b305308..2fc4540884a6 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Sprachassistent"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Jetzt sperren"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Inhalte ausgeblendet"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Inhalte aufgrund der Richtlinien ausgeblendet"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Neue Benachrichtigung"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Bildschirmtastatur"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Physische Tastatur"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sicherheit"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Markierung entfernen"</string> <string name="app_info" msgid="6856026610594615344">"App-Informationen"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Gerät zurücksetzen?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Zum Zurücksetzen des Geräts tippen"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Demo wird gestartet…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Gerät wird zurückgesetzt…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Gerät zurücksetzen?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Alle Änderungen gehen verloren und Demo wird in <xliff:g id="TIMEOUT">%1$s</xliff:g> Sekunden neu gestartet…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Abbrechen"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Jetzt zurücksetzen"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> deaktiviert"</string> <string name="conference_call" msgid="3751093130790472426">"Telefonkonferenz"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Kurzinfo"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 15091c5378d4..b64a26f8f33b 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Φων.υποβοηθ."</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Κλείδωμα τώρα"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Κρυφό περιεχόμενο"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Το περιεχόμενο είναι κρυφό βάσει πολιτικής"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Νέα ειδοποίηση"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Εικονικό πληκτρολόγιο"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Φυσικό πληκτρολόγιο"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Ασφάλεια"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Ξεκαρφίτσωμα"</string> <string name="app_info" msgid="6856026610594615344">"Πληροφορίες εφαρμογής"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Να γίνει επαναφορά της συσκευής;"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Πατήστε για επαναφορά της συσκευής"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Έναρξη επίδειξης…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Επαναφορά συσκευής…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Να γίνει επαναφορά της συσκευής;"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Τυχόν αλλαγές που πραγματοποιήσατε θα χαθούν και η επίδειξη θα ξεκινήσει ξανά σε <xliff:g id="TIMEOUT">%1$s</xliff:g> δευτερόλεπτα…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Ακύρωση"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Επαναφορά τώρα"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Απενεργοποιημένο <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Κλήση συνδιάσκεψης"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Επεξήγηση εργαλείου"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index f3e01e2d3206..47ca78cc9878 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Lock now"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contents hidden"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Contents hidden by policy"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"New notification"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtual keyboard"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Physical keyboard"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Security"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Unpin"</string> <string name="app_info" msgid="6856026610594615344">"App info"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Reset device?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Tap to reset device"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Starting demo…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Resetting device…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Reset device?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"You\'ll lose any changes and the demo will start again in <xliff:g id="TIMEOUT">%1$s</xliff:g> seconds…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancel"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Reset now"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Disabled <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Conference Call"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Tooltip"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index f3e01e2d3206..47ca78cc9878 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Lock now"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contents hidden"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Contents hidden by policy"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"New notification"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtual keyboard"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Physical keyboard"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Security"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Unpin"</string> <string name="app_info" msgid="6856026610594615344">"App info"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Reset device?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Tap to reset device"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Starting demo…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Resetting device…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Reset device?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"You\'ll lose any changes and the demo will start again in <xliff:g id="TIMEOUT">%1$s</xliff:g> seconds…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancel"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Reset now"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Disabled <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Conference Call"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Tooltip"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index f3e01e2d3206..47ca78cc9878 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Lock now"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contents hidden"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Contents hidden by policy"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"New notification"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtual keyboard"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Physical keyboard"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Security"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Unpin"</string> <string name="app_info" msgid="6856026610594615344">"App info"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Reset device?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Tap to reset device"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Starting demo…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Resetting device…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Reset device?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"You\'ll lose any changes and the demo will start again in <xliff:g id="TIMEOUT">%1$s</xliff:g> seconds…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancel"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Reset now"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Disabled <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Conference Call"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Tooltip"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 49b1837c5e1a..7463842de950 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Asistente voz"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear ahora"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contenidos ocultos"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Contenido oculto debido a la política"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Notificación nueva"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Teclado virtual"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Teclado físico"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Seguridad"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"No fijar"</string> <string name="app_info" msgid="6856026610594615344">"Información de apps"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"¿Deseas restablecer el dispositivo?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Presiona para restablecer el dispositivo"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Iniciando demostración…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Restableciendo dispositivo…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"¿Deseas restablecer el dispositivo?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Se perderán los cambios y la demostración volverá a iniciarse en <xliff:g id="TIMEOUT">%1$s</xliff:g> segundos…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancelar"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Restablecer ahora"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Se inhabilitó <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Conferencia"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Información sobre la herramienta"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 28aaff0b0cf5..ef92fdcb72cd 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Asistente voz"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear ahora"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"> 999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contenidos ocultos"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Contenidos ocultos por política"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Notificación nueva"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Teclado virtual"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Teclado físico"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Seguridad"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"No fijar"</string> <string name="app_info" msgid="6856026610594615344">"Información de la aplicación"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"¿Restablecer el dispositivo?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Toca para restablecer el dispositivo"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Iniciando demostración…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Restableciendo dispositivo…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"¿Restablecer el dispositivo?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Se perderán todos los cambios y la demostración volverá a empezar en <xliff:g id="TIMEOUT">%1$s</xliff:g> segundos…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancelar"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Restablecer ahora"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> inhabilitado"</string> <string name="conference_call" msgid="3751093130790472426">"Conferencia"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Descripción emergente"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 5f7802fc9cae..3d44d89f6609 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Häälabi"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Lukusta kohe"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Sisu on peidetud"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Sisu on eeskirjadega peidetud"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Uus märguanne"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuaalne klaviatuur"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Füüsiline klaviatuur"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Turvalisus"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Vabasta"</string> <string name="app_info" msgid="6856026610594615344">"Rakenduse teave"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Kas soovite seadme lähtestada?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Puudutage seadme lähtestamiseks"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Demo käivitamine …"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Seadme lähtestamine …"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Kas soovite seadme lähtestada?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Kõik muudatused lähevad kaotsi ja demo käivitub uuesti <xliff:g id="TIMEOUT">%1$s</xliff:g> sekundi möödudes …"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Tühista"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Lähtesta kohe"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Keelatud <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Konverentskõne"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Tööriistavihje"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index e72b12b09b85..a9839d8b2f6b 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Ahots-laguntza"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Blokeatu"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Edukiak ezkutatuta daude"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Gidalerro batzuk ezkutatu dira, gidalerroei jarraiki"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Jakinarazpen berria"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Teklatu birtuala"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Teklatu fisikoa"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Segurtasuna"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"Informazio gehiago lortzeko, sakatu hau"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB arazketa konektatuta"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"Sakatu USB arazketa desgaitzeko."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"Hautatu USB arazketa desgaitzeko."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Akatsen txostena sortzen…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Akatsen txostena partekatu nahi duzu?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Akatsen txostena partekatzen…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Kendu aingura"</string> <string name="app_info" msgid="6856026610594615344">"Aplikazioari buruzko informazioa"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Gailua berrezarri nahi duzu?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Gailua berrezartzeko, sakatu hau"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Demoa abiarazten…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Gailua berrezartzen…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Gailua berrezarri nahi duzu?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Aldaketak galduko dituzu eta <xliff:g id="TIMEOUT">%1$s</xliff:g> segundo barru hasiko da berriro demoa…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Utzi"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Berrezarri"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> desgaituta dago"</string> <string name="conference_call" msgid="3751093130790472426">"Konferentzia-deia"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Aholkua"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 57e4317b5883..a2e8b83df00b 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"دستیار صوتی"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"اکنون قفل شود"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"۹۹۹+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"محتواها پنهان هستند"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"محتوا بر اساس خطمشی پنهان شده است"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"اعلان جدید"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"صفحهکلید مجازی"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"صفحهکلید فیزیکی"</string> <string name="notification_channel_security" msgid="7345516133431326347">"امنیت"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"برداشتن پین"</string> <string name="app_info" msgid="6856026610594615344">"اطلاعات برنامه"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"دستگاه بازنشانی شود؟"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"برای بازنشانی دستگاه، ضربه بزنید"</string> <string name="demo_starting_message" msgid="5268556852031489931">"در حال شروع نسخه نمایشی…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"در حال بازنشانی دستگاه…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"دستگاه بازنشانی شود؟"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"همه تغییرات را از دست خواهید داد و نسخه نمایشی دوباره تا <xliff:g id="TIMEOUT">%1$s</xliff:g> ثانیه دیگر شروع میشود…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"لغو"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"بازنشانی در این لحظه"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> غیرفعال شد"</string> <string name="conference_call" msgid="3751093130790472426">"تماس کنفرانسی"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"نکتهابزار"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 4d1a8ef3b87c..ac7da3d8753e 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Ääniapuri"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Lukitse nyt"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Sisältö piilotettu"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Sisältö on piilotettu käytännön perusteella."</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Uusi ilmoitus"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuaalinen näppäimistö"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fyysinen näppäimistö"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Tietosuoja"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Irrota"</string> <string name="app_info" msgid="6856026610594615344">"Sovelluksen tiedot"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Palautetaanko laitteen tehdasasetukset?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Palauta laite napauttamalla"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Aloitetaan esittelyä…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Palautetaan asetuksia…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Palautetaanko laitteen tehdasasetukset?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Muutokset poistetaan ja esittely aloitetaan uudelleen <xliff:g id="TIMEOUT">%1$s</xliff:g> sekunnin kuluttua…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Peruuta"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Palauta nyt"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> ei ole käytössä."</string> <string name="conference_call" msgid="3751093130790472426">"Puhelinneuvottelu"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Työkaluvinkki"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index c31240d6143c..dfb37fb80f39 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Assist. vocale"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Verrouiller"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contenus masqués"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Contenu masqué conformément aux politiques"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nouvelle notification"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Clavier virtuel"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Clavier physique"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sécurité"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Annuler l\'épinglage"</string> <string name="app_info" msgid="6856026610594615344">"Détails de l\'application"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Réinitialiser l\'appareil?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Touchez pour réinitialiser l\'appareil"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Démarrage de la démonstration en cours…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Réinitialisation de l\'appareil en cours…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Réinitialiser l\'appareil?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Vous perdrez vos modifications, et la démo recommencera dans <xliff:g id="TIMEOUT">%1$s</xliff:g> secondes…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Annuler"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Réinitialiser maintenant"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Désactivé : <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Conférence téléphonique"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Infobulle"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 67962751125c..31d4627f5ddf 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Assistance vocale"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Verrouiller"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contenus masqués"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Contenu masqué conformément aux règles"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nouvelle notification"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Clavier virtuel"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Clavier physique"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sécurité"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Retirer"</string> <string name="app_info" msgid="6856026610594615344">"Infos sur l\'appli"</string> <string name="negative_duration" msgid="5688706061127375131">"− <xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Réinitialiser l\'appareil ?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Appuyer pour réinitialiser l\'appareil"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Lancement de la démo…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Réinitialisation…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Réinitialiser l\'appareil ?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Vous perdrez vos modifications, et la démo recommencera dans <xliff:g id="TIMEOUT">%1$s</xliff:g> secondes…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Annuler"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Réinitialiser maintenant"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Élément \"<xliff:g id="LABEL">%1$s</xliff:g>\" désactivé"</string> <string name="conference_call" msgid="3751093130790472426">"Conférence téléphonique"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Info-bulle"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index fe39fc604286..a8b4df902e35 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Asistente voz"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear agora"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contido oculto"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Ocultouse contido por causa da política"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Notificación nova"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Teclado virtual"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Teclado físico"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Seguranza"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"Toca para obter máis información"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración USB conectada"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"Toca para desactivar a depuración de erros de USB."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"Selecciona a opción para desactivar a depuración de USB."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Creando informe de erros…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Queres compartir o informe de erros?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Compartindo informe de erros..."</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Soltar"</string> <string name="app_info" msgid="6856026610594615344">"Información de aplicacións"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Queres restablecer o dispositivo?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Toca aquí para restablecer o dispositivo"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Iniciando demostración…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Restablecendo dispositivo…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Queres restablecer o dispositivo?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Perderás os cambios que fixeses e a demostración volverá comezar en <xliff:g id="TIMEOUT">%1$s</xliff:g> segundos…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancelar"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Restablecer agora"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Desactivouse <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Conferencia telefónica"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Cadro de información"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index abc8da093346..6ee7c65ac73c 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"વૉઇસ સહાય"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"હવે લૉક કરો"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"સામગ્રીઓ છુપાવેલ છે"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"નીતિ દ્વારા સામગ્રી છુપાવાઈ"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"નવું નોટિફિકેશન"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"વર્ચ્યુઅલ કીબોર્ડ"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"ભૌતિક કીબોર્ડ"</string> <string name="notification_channel_security" msgid="7345516133431326347">"સુરક્ષા"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"વધુ માહિતી માટે ટૅપ કરો"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ડીબગિંગ કનેક્ટ થયું."</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB ડીબગિંગ અક્ષમ કરવા માટે ટૅપ કરો."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ડિબગીંગને અક્ષમ કરવા માટે પસંદ કરો."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"બગ રિપોર્ટ લઈ રહ્યાં છે…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"બગ રિપોર્ટ શેર કરીએ?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"બગ રિપોર્ટ શેર કરી રહ્યાં છે…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"અનપિન કરો"</string> <string name="app_info" msgid="6856026610594615344">"ઍપ્લિકેશન માહિતી"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"ઉપકરણ ફરીથી સેટ કરીએ?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"ઉપકરણને ફરીથી સેટ કરવા માટે ટૅપ કરો"</string> <string name="demo_starting_message" msgid="5268556852031489931">"ડેમો પ્રારંભ કરી રહ્યાં છે…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"ઉપકરણ ફરીથી સેટ કરી રહ્યાં છે…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"ઉપકરણ ફરીથી સેટ કરીએ?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"તમે કોઈપણ ફેરફારો ગુમાવશો અને ડેમો <xliff:g id="TIMEOUT">%1$s</xliff:g> સેકન્ડમાં ફરી શરૂ થશે…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"રદ કરો"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"હમણાં ફરીથી સેટ કરો"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> અક્ષમ કર્યું"</string> <string name="conference_call" msgid="3751093130790472426">"કોન્ફરન્સ કૉલ"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"ટૂલટિપ"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index cc86ecbc82a4..a8999aedf381 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"वॉइस सहायक"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"अभी लॉक करें"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"छिपी हुई सामग्री"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"सामग्री पॉलिसी के द्वारा छिपी हुई है"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"नया नोटिफ़िकेशन"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"वर्चुअल कीबोर्ड"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"भौतिक कीबोर्ड"</string> <string name="notification_channel_security" msgid="7345516133431326347">"सुरक्षा"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"अनपिन करें"</string> <string name="app_info" msgid="6856026610594615344">"ऐप की जानकारी"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"डिवाइस रीसेट करें?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"डिवाइस को रीसेट करने के लिए टैप करें"</string> <string name="demo_starting_message" msgid="5268556852031489931">"डेमो प्रारंभ हो रहा है…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"डिवाइस पुन: रीसेट कर रहा है…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"डिवाइस रीसेट करें?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"आपके सभी बदलाव खो जाएंगे और डेमो <xliff:g id="TIMEOUT">%1$s</xliff:g> सेकंड में फिर से शुरू हो जाएगा…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"अभी नहीं"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"अभी रीसेट करें"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"अक्षम <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"कॉन्फ़्रेंस कॉल"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"टूलटिप"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 89c5d03afc16..0b689fd00bd4 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -233,8 +233,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Glasovna pomoć"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Zaključaj sada"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Sadržaj je skriven"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Sadržaj je skriven prema pravilima"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nova obavijest"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtualna tipkovnica"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fizička tipkovnica"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sigurnost"</string> @@ -1747,14 +1746,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Otkvači"</string> <string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Želite li vratiti uređaj na zadano?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Dodirnite za vraćanje uređaja na zadano"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Pokretanje demo-načina..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Vraćanje uređaja na zadano…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Želite li vratiti uređaj na zadano?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Sve će se promjene izbrisati, a demonstracija će se ponovo pokrenuti za <xliff:g id="TIMEOUT">%1$s</xliff:g> s…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Odustani"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Vrati na zadano sada"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> – onemogućeno"</string> <string name="conference_call" msgid="3751093130790472426">"Konferencijski poziv"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Opis"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index c7a498c232be..32235870e96d 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Hangsegéd"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Zárolás most"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Tartalom elrejtve"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"A tartalom irányelv miatt elrejtve"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Új értesítés"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuális billentyűzet"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fizikai billentyűzet"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Biztonság"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Feloldás"</string> <string name="app_info" msgid="6856026610594615344">"Alkalmazásinformáció"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Visszaállítja eszközét?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Koppintson az eszköz visszaállítása érdekében"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Bemutató indítása…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Eszköz visszaállítása…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Visszaállítja eszközét?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"A módosítások elvesznek, és a bemutató újra elindul <xliff:g id="TIMEOUT">%1$s</xliff:g> másodperc múlva…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Mégse"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Visszaállítás most"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"A(z) <xliff:g id="LABEL">%1$s</xliff:g> letiltva"</string> <string name="conference_call" msgid="3751093130790472426">"Konferenciahívás"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Elemleírás"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index b47cded04fe9..71e48e4f9b3d 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Ձայնային օգնութ"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Կողպել հիմա"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Բովանդակությունը թաքցված է"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Բովանդակությունը թաքցվել է ըստ քաղաքականության"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Նոր ծանուցում"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Վիրտուալ ստեղնաշար"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Ֆիզիկական ստեղնաշար"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Անվտանգություն"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Ապամրացնել"</string> <string name="app_info" msgid="6856026610594615344">"Հավելվածի տվյալներ"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Վերակայե՞լ սարքը:"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Հպեք՝ սարքը վերակայելու համար"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Ցուցադրական օգտատերը գործարկվում է…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Սարաքը վերակայվում է…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Վերակայե՞լ սարքը:"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Կատարված փոփոխությունները չեն պահվի, իսկ ցուցադրական նյութը կրկին կգործարկվի <xliff:g id="TIMEOUT">%1$s</xliff:g> վայրկյանից…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Չեղարկել"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Վերակայել հիմա"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Անջատած <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Կոնֆերանս զանգ"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Հուշակ"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index ed04809d2629..3f34b7bca948 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Bantuan Suara"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Kunci sekarang"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Konten tersembunyi"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Konten disembunyikan menurut kebijakan"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Notifikasi baru"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Keyboard virtual"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Keyboard fisik"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Keamanan"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Lepas pin"</string> <string name="app_info" msgid="6856026610594615344">"Info aplikasi"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Setel ulang perangkat?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Ketuk untuk menyetel ulang perangkat"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Memulai demo..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Menyetel ulang perangkat..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Setel ulang perangkat?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Perubahan yang dibuat akan hilang dan demo akan dimulai lagi dalam <xliff:g id="TIMEOUT">%1$s</xliff:g> detik…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Batal"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Setel ulang sekarang"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> dinonaktifkan"</string> <string name="conference_call" msgid="3751093130790472426">"Konferensi Telepon"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Keterangan alat"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 5ba15a31bdc0..15cd73d3fa72 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Raddaðstoð"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Læsa núna"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Innihald falið"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Efni falið með reglu"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Ný tilkynning"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Sýndarlyklaborð"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Vélbúnaðarlyklaborð"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Öryggi"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"Ýttu til að fá frekari upplýsingar"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-villuleit tengd"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"Ýttu til að slökkva á USB-villuleit."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"Veldu til að gera USB-villuleit óvirka."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Tekur við villutilkynningu…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Deila villutilkynningu?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Deilir villutilkynningu..."</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Losa"</string> <string name="app_info" msgid="6856026610594615344">"Forritsupplýsingar"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Endurstilla tækið?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Ýttu til að endurstilla tækið"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Byrjar kynningu…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Endurstillir tækið…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Endurstilla tækið?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Þú glatar öllum breytingum og kynningin byrjar aftur eftir <xliff:g id="TIMEOUT">%1$s</xliff:g> sekúndur…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Hætta við"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Endurstilla núna"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Slökkt <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Símafundur"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Ábending"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 8272d11ea009..0313df848a83 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Blocca ora"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Contenuti nascosti"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Contenuti nascosti in base alle norme"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nuova notifica"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Tastiera virtuale"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Tastiera fisica"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sicurezza"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Sblocca"</string> <string name="app_info" msgid="6856026610594615344">"Informazioni app"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Ripristinare il dispositivo?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Tocca per ripristinare il dispositivo"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Avvio della demo…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Ripristino del dispositivo…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Ripristinare il dispositivo?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Perderai tutte le modifiche e la demo verrà riavviata tra <xliff:g id="TIMEOUT">%1$s</xliff:g> secondi…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Annulla"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Ripristina ora"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Widget <xliff:g id="LABEL">%1$s</xliff:g> disattivato"</string> <string name="conference_call" msgid="3751093130790472426">"Audioconferenza"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Descrizione comando"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 06ee4ac753f0..1cf1bde58809 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -236,8 +236,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"נעל עכשיו"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"התוכן מוסתר"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"התוכן מוסתר על ידי המדיניות"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"הודעה חדשה"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"מקלדת וירטואלית"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"מקלדת פיזית"</string> <string name="notification_channel_security" msgid="7345516133431326347">"אבטחה"</string> @@ -1780,14 +1779,8 @@ <string name="unpin_target" msgid="3556545602439143442">"בטל הצמדה"</string> <string name="app_info" msgid="6856026610594615344">"פרטי אפליקציה"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"האם לאפס את המכשיר?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"הקש כדי לאפס את המכשיר"</string> <string name="demo_starting_message" msgid="5268556852031489931">"מתחיל בהדגמה…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"מאפס את המכשיר…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"האם לאפס את המכשיר?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"תאבד את כל השינויים וההדגמה תתחיל שוב בעוד <xliff:g id="TIMEOUT">%1$s</xliff:g> שניות…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"ביטול"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"אפס עכשיו"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> הושבת"</string> <string name="conference_call" msgid="3751093130790472426">"שיחת ועידה"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"הסבר קצר"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 1206432ab158..e483c1fdc594 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"音声アシスト"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"今すぐロック"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"コンテンツが非表示"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"ポリシーによって非表示になっているコンテンツ"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"新しい通知"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"仮想キーボード"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"物理キーボード"</string> <string name="notification_channel_security" msgid="7345516133431326347">"セキュリティ"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"固定を解除"</string> <string name="app_info" msgid="6856026610594615344">"アプリ情報"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"端末をリセットしますか?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"端末をリセットするにはタップしてください"</string> <string name="demo_starting_message" msgid="5268556852031489931">"デモを開始しています…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"端末をリセットしています…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"端末をリセットしますか?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"変更が失われ、<xliff:g id="TIMEOUT">%1$s</xliff:g> 秒後にデモがもう一度開始されます…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"キャンセル"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"今すぐリセット"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"停止済みの「<xliff:g id="LABEL">%1$s</xliff:g>」"</string> <string name="conference_call" msgid="3751093130790472426">"グループ通話"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"ツールチップ"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index e4e8d30f10cf..26a3811d9c75 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"ხმოვანი ასისტ."</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ახლა ჩაკეტვა"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"შიგთავსი დამალულია"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"შიგთავსი დამალულია წესების შესაბამისად"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"ახალი შეტყობინება"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"ვირტუალური კლავიატურა"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"ფიზიკური კლავიატურა"</string> <string name="notification_channel_security" msgid="7345516133431326347">"უსაფრთხოება"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"ჩამაგრების მოხსნა"</string> <string name="app_info" msgid="6856026610594615344">"აპის შესახებ"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"გსურთ მოწყობილობის გადაყენება?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"შეეხეთ მოწყობილობის გადასაყენებლად"</string> <string name="demo_starting_message" msgid="5268556852031489931">"მიმდინარეობს დემონსტრაციის დაწყება…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"მიმდინარეობს მოწყობილობის გადაყენება…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"გსურთ მოწყობილობის გადაყენება?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"შეტანილი ცვლილებები დაიკარგება, ხოლო დემონსტრაცია ხელახლა <xliff:g id="TIMEOUT">%1$s</xliff:g> წამში დაიწყება…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"გაუქმება"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"ახლავე გადაყენება"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"გათიშული <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"საკონფერენციო ზარი"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"მინიშნება"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index a56f246a671e..5c9322a69b74 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Дауыс көмекшісі"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Қазір бекіту"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Мазмұн жасырылған"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Мазмұн саясатқа сай жасырылған"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Жаңа хабарландыру"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Виртуалды пернетақта"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Қатты пернетақта"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Қауіпсіздік"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"Қосымша ақпарат алу үшін түртіңіз"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB жөндеу қосылған"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB түзетуін өшіру үшін түртіңіз."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB түзетуін өшіру үшін таңдаңыз."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Қате туралы есеп алынуда…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Қате туралы есепті бөлісу керек пе?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Қате туралы есеп бөлісілуде…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Босату"</string> <string name="app_info" msgid="6856026610594615344">"Қолданба ақпараты"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Құрылғыны бастапқы күйге қайтару керек пе?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Құрылғыны бастапқы күйге келтіру үшін түртіңіз"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Демо нұсқасы іске қосылуда..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Құрылғы бастапқы күйге қайтарылуда..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Құрылғыны басқапқы күйге қайтару керек пе?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Барлық өзгеріс жоғалады және демо нұсқасы <xliff:g id="TIMEOUT">%1$s</xliff:g> секундтан кейін қайта қосылады…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Бас тарту"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Қазір бастапқы күйге қайтару"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> өшірулі"</string> <string name="conference_call" msgid="3751093130790472426">"Конференциялық қоңырау"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Қалқыма сөзкөмек"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index ef88958abf22..c0e1f50d4ec3 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"ជំនួយសម្លេង"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ចាក់សោឥឡូវនេះ"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"បានលាក់មាតិកា"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"មាតិកាត្រូវបានលាក់ដោយផ្អែកលើគោលការណ៍"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"ការជូនដំណឹងថ្មី"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"ក្ដារចុចនិម្មិត"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"ក្ដារចុចរូបវន្ត"</string> <string name="notification_channel_security" msgid="7345516133431326347">"សុវត្ថិភាព"</string> @@ -1716,14 +1715,8 @@ <string name="unpin_target" msgid="3556545602439143442">"មិនខ្ទាស់"</string> <string name="app_info" msgid="6856026610594615344">"ព័ត៌មានកម្មវិធី"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"កំណត់ឧបករណ៍ឡើងវិញឬ?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"ប៉ះដើម្បីកំណត់ឧបករណ៍ឡើងវិញ"</string> <string name="demo_starting_message" msgid="5268556852031489931">"កំពុងចាប់ផ្តើមការបង្ហាញសាកល្បង…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"កំពុងកំណត់ឧបករណ៍ឡើងវិញ…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"កំណត់ឧបករណ៍ឡើងវិញឬ?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"អ្នកនឹងបាត់បង់ការផ្លាស់ប្តូរណាមួយ ហើយការបង្ហាញសាកល្បងនឹងចាប់ផ្តើមម្តងទៀតក្នុងរយៈពេល <xliff:g id="TIMEOUT">%1$s</xliff:g> វិនាទីទៀត…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"បោះបង់"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"កំណត់ឡើងវិញឥឡូវនេះ"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> ដែលបានបិទដំណើរការ"</string> <string name="conference_call" msgid="3751093130790472426">"ការហៅជាក្រុម"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"ផ្ទាំងលោត"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index 76af3638d156..8bde8d96741a 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"ಧ್ವನಿ ಸಹಾಯಕ"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ಈಗ ಲಾಕ್ ಮಾಡಿ"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"ವಿಷಯಗಳನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"ನೀತಿಯಿಂದ ಮರೆಮಾಡಲಾಗಿರುವ ವಿಷಯಗಳು"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"ಹೊಸ ಅಧಿಸೂಚನೆ"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"ವರ್ಚುಯಲ್ ಕೀಬೋರ್ಡ್"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್"</string> <string name="notification_channel_security" msgid="7345516133431326347">"ಭದ್ರತೆ"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ಡೀಬಗಿಂಗ್ ಸಂಪರ್ಕ"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಆಯ್ಕೆ ಮಾಡಿ."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"ದೋಷದ ವರದಿಯನ್ನು ತೆಗೆದುಕೊಳ್ಳಲಾಗುತ್ತಿದೆ…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ಬಗ್ ವರದಿಯನ್ನು ಹಂಚುವುದೇ?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ಬಗ್ ವರದಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತಿದೆ…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"ಅನ್ಪಿನ್"</string> <string name="app_info" msgid="6856026610594615344">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"ಸಾಧನವನ್ನು ಮರುಹೊಂದಿಸುವುದೇ?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"ಸಾಧನ ಮರುಹೊಂದಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="demo_starting_message" msgid="5268556852031489931">"ಡೆಮೋ ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"ಸಾಧನ ಮರುಹೊಂದಿಸಲಾಗುತ್ತಿದೆ..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"ಸಾಧನವನ್ನು ಮರುಹೊಂದಿಸುವುದೇ?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"ನೀವು ಯಾವುದೇ ಬದಲಾವಣೆಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳುತ್ತೀರಿ ಮತ್ತು <xliff:g id="TIMEOUT">%1$s</xliff:g> ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಡೆಮೋ ಮತ್ತೆ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ..."</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"ರದ್ದುಮಾಡಿ"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"ಈಗಲೇ ಮರುಹೊಂದಿಸು"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string> <string name="conference_call" msgid="3751093130790472426">"ಕಾನ್ಫರೆನ್ಸ್ ಕರೆ"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"ಟೂಲ್ಟಿಪ್"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index f1b7a01ce2d8..99aa4d9a9100 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"음성 지원"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"지금 잠그기"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"숨겨진 콘텐츠"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"콘텐츠가 정책에 의해 숨겨졌습니다."</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"새 알림"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"가상 키보드"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"물리적 키보드"</string> <string name="notification_channel_security" msgid="7345516133431326347">"보안"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"고정 해제"</string> <string name="app_info" msgid="6856026610594615344">"앱 정보"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"기기를 초기화하시겠습니까?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"기기를 초기화하려면 탭하세요."</string> <string name="demo_starting_message" msgid="5268556852031489931">"데모 시작 중..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"기기 초기화 중..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"기기를 초기화하시겠습니까?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"변경사항이 사라지며 데모가 <xliff:g id="TIMEOUT">%1$s</xliff:g>초 후에 시작됩니다."</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"취소"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"지금 초기화"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> 사용 중지됨"</string> <string name="conference_call" msgid="3751093130790472426">"다자간 통화"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"도움말"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index 9daaf88ddfa9..62a82cd88db0 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Үн жардамчысы"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Азыр кулпулоо"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Мазмундар жашырылган"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Тийиштүү саясат боюнча жашырылган мазмундар"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Жаңы эскертме"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Виртуалдык баскычтоп"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Аппараттык баскычтоп"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Коопсуздук"</string> @@ -1715,14 +1714,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Кадоодон алып коюу"</string> <string name="app_info" msgid="6856026610594615344">"Колдонмо тууралуу"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Түзмөк баштапкы абалга келтирилсинби?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Түзмөктү баштапкы абалга келтирүү үчүн таптап коюңуз"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Демо режим башталууда…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Түзмөк баштапкы абалга келтирилүүдө…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Түзмөк баштапкы абалга келтирилсинби?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Бардык өзгөртүүлөр жоголуп, демо режим <xliff:g id="TIMEOUT">%1$s</xliff:g> секунддан кийин кайра башталат…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Жокко чыгаруу"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Баштапкы абалга келтирүү"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> өчүрүлдү"</string> <string name="conference_call" msgid="3751093130790472426">"Конференц чалуу"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Калкып чыгуучу кеңеш"</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index a65b319be20c..86e55e4d63d5 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"ຊ່ວຍເຫຼືອທາງສຽງ"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ລັອກດຽວນີ້"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"ເນື້ອຫາຖືກເຊື່ອງໄວ້"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"ເນື້ອຫາຖືກເຊື່ອງຕາມນະໂຍບາຍ"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"ການແຈ້ງເຕືອນໃໝ່"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"ແປ້ນພິມສະເໝືອນ"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"ແປ້ນພິມພາຍນອກ"</string> <string name="notification_channel_security" msgid="7345516133431326347">"ຄວາມປອດໄພ"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"ຖອນປັກໝຸດ"</string> <string name="app_info" msgid="6856026610594615344">"ຂໍ້ມູນແອັບ"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"ຣີເຊັດອຸປະກອນບໍ?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"ແຕະເພື່ອຣີເຊັດອຸປະກອນ"</string> <string name="demo_starting_message" msgid="5268556852031489931">"ກຳລັງເລີ່ມເດໂມ…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"ກຳລັງຣີເຊັດອຸປະກອນ…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"ຣີເຊັດອຸປະກອນບໍ?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"ທ່ານຈະສູນເສຍການປ່ຽນແປງ ແລະ ເດໂມຈະເລີ່ມອີກຄັ້ງໃນອີກ <xliff:g id="TIMEOUT">%1$s</xliff:g> ວິນາທີ…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"ຍົກເລີກ"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"ຣີເຊັດດຽວນີ້"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"ປິດການນຳໃຊ້ <xliff:g id="LABEL">%1$s</xliff:g> ແລ້ວ"</string> <string name="conference_call" msgid="3751093130790472426">"ການປະຊຸມສາຍ"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"ຄຳອະທິບາຍເຄື່ອງມື"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index befddc4f6817..fc13820df5c7 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -236,8 +236,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Užrakinti dabar"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Turinys paslėptas"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Turinys paslėptas vadovaujantis politika"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Naujas pranešimas"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtualioji klaviatūra"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fizinė klaviatūra"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sauga"</string> @@ -1780,14 +1779,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Atsegti"</string> <string name="app_info" msgid="6856026610594615344">"Programos informacija"</string> <string name="negative_duration" msgid="5688706061127375131">"–<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Iš naujo nustatyti įrenginį?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Palieskite, kad iš naujo nustatytumėte įrenginį"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Paleidžiama demonstracinė versija…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Įrenginys nustatomas iš naujo…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Iš naujo nustatyti įrenginį?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Prarasite visus pakeitimus, o demonstracinė versija bus paleista iš naujo po <xliff:g id="TIMEOUT">%1$s</xliff:g> sek…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Atšaukti"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Nustatyti iš naujo dabar"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Išj. valdiklis „<xliff:g id="LABEL">%1$s</xliff:g>“"</string> <string name="conference_call" msgid="3751093130790472426">"Konferencinis skambutis"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Patarimas"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 8970f5a84e4e..2edce3baf03e 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -233,8 +233,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Balss palīgs"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Bloķēt tūlīt"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"Pārsniedz"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Saturs paslēpts"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Saskaņā ar politiku saturs ir paslēpts."</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Jauns paziņojums"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuālā tastatūra"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fiziskā tastatūra"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Drošība"</string> @@ -1747,14 +1746,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Atspraust"</string> <string name="app_info" msgid="6856026610594615344">"Lietotnes informācija"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Vai atiestatīt ierīci?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Pieskarieties, lai atiestatītu ierīci"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Notiek demonstrācijas palaišana..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Notiek ierīces atiestatīšana..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Vai atiestatīt ierīci?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Pēc <xliff:g id="TIMEOUT">%1$s</xliff:g> sekundēm zaudēsiet visas izmaiņas un tiks atkārtoti palaista demonstrācija..."</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Atcelt"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Atiestatīt tūlīt"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> atspējots"</string> <string name="conference_call" msgid="3751093130790472426">"Konferences zvans"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Rīka padoms"</string> diff --git a/core/res/res/values-mcc310-mnc260-af/strings.xml b/core/res/res/values-mcc310-mnc260-af/strings.xml deleted file mode 100644 index ee051c5d21ec..000000000000 --- a/core/res/res/values-mcc310-mnc260-af/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Om oproepe te maak en boodskappe oor Wi-Fi te stuur, vra jou diensverskaffer eers om hierdie diens op te stel. Skakel Wi-Fi-oproepe dan weer in Instellings aan."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registreer by jou diensverskaffer"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi-oproep"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-am/strings.xml b/core/res/res/values-mcc310-mnc260-am/strings.xml deleted file mode 100644 index 74f711a26b6a..000000000000 --- a/core/res/res/values-mcc310-mnc260-am/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"በWi-Fi ላይ ጥሪዎችን ለማድረግ እና መልዕክቶችን ለመላክ መጀመሪያ የአገልግሎት አቅራቢዎ ይህን አገልግሎት እንዲያዘጋጅልዎ መጠየቅ አለብዎት። ከዚያ ከቅንብሮች ሆነው እንደገና የWi-Fi ጥሪን ያብሩ።"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"የአገልግሎት አቅራቢዎ ጋር ይመዝገቡ"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"የ%s Wi-Fi ጥሪ"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ar/strings.xml b/core/res/res/values-mcc310-mnc260-ar/strings.xml deleted file mode 100644 index 5a8429584c51..000000000000 --- a/core/res/res/values-mcc310-mnc260-ar/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"لإجراء مكالمات وإرسال رسائل عبر Wi-Fi، اطلب من مشغّل شبكة الجوّال أولاً إعداد هذا الجهاز، ثم شغّل الاتصال عبر Wi-Fi مرة أخرى من خلال الإعدادات."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"التسجيل لدى مشغّل شبكة الجوّال"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s جارٍ الاتصال عبر Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-az/strings.xml b/core/res/res/values-mcc310-mnc260-az/strings.xml deleted file mode 100644 index 32d21c56fca5..000000000000 --- a/core/res/res/values-mcc310-mnc260-az/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi üzərindən zəng etmək və mesaj göndərmək üçün ilk öncə operatordan bu xidməti ayarlamağı tələb edin. Sonra Ayarlardan Wi-Fi çağrısını aktivləşdirin."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Operatorla qeydiyyatdan keçin"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi Zəngi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-b+sr+Latn/strings.xml b/core/res/res/values-mcc310-mnc260-b+sr+Latn/strings.xml deleted file mode 100644 index 67509405d09e..000000000000 --- a/core/res/res/values-mcc310-mnc260-b+sr+Latn/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Da biste upućivali pozive i slali poruke preko Wi-Fi-ja, prvo zatražite od mobilnog operatera da vam omogući ovu uslugu. Zatim u Podešavanjima ponovo uključite Pozivanje preko Wi-Fi-ja."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registrujte se kod mobilnog operatera"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Wi-Fi pozivanje preko operatera %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-be/strings.xml b/core/res/res/values-mcc310-mnc260-be/strings.xml deleted file mode 100644 index 497366b9db58..000000000000 --- a/core/res/res/values-mcc310-mnc260-be/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Каб рабіць выклікі і адпраўляць паведамленні па Wi-Fi, спачатку папрасіце свайго аператара наладзіць гэту паслугу. Затым зноў уключыце Wi-Fi-тэлефанію ў меню Налады."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Зарэгіструйцеся ў свайго аператара"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Wi-Fi-тэлефанія %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-bg/strings.xml b/core/res/res/values-mcc310-mnc260-bg/strings.xml deleted file mode 100644 index a671120871e1..000000000000 --- a/core/res/res/values-mcc310-mnc260-bg/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"За да извършвате обаждания и да изпращате съобщения през Wi-Fi, първо помолете оператора си да настрои тази услуга. След това включете отново функцията за обаждания през Wi-Fi от настройките."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Регистриране с оператора ви"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s – обаждания през Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-bn/strings.xml b/core/res/res/values-mcc310-mnc260-bn/strings.xml deleted file mode 100644 index 67955d59839c..000000000000 --- a/core/res/res/values-mcc310-mnc260-bn/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi এর মাধ্যমে কল করতে ও বার্তা পাঠাতে, প্রথমে আপনার পরিষেবা প্রদানকারীকে এই পরিষেবার সেট আপ করার বিষয়ে জিজ্ঞাসা করুন। তারপরে আবার সেটিংস থেকে Wi-Fi কলিং চালু করুন।"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"আপনার পরিষেবা প্রদানকারীকে নথিভুক্ত করুন"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi কলিং"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-bs/strings.xml b/core/res/res/values-mcc310-mnc260-bs/strings.xml deleted file mode 100644 index 64e486289f94..000000000000 --- a/core/res/res/values-mcc310-mnc260-bs/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Da biste pozivali i slali poruke preko Wi-Fi-ja, prvo zatražite od operatera da postavi tu uslugu. Potom u Postavkama ponovo uključite Wi-Fi pozivanje."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registrirajte se kod svog operatera"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Wi-Fi pozivanje preko operatera %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ca/strings.xml b/core/res/res/values-mcc310-mnc260-ca/strings.xml deleted file mode 100644 index 8ce8dc8bb6a4..000000000000 --- a/core/res/res/values-mcc310-mnc260-ca/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Per fer trucades i enviar missatges per Wi-Fi, primer has de demanar a l\'operador de telefonia mòbil que configuri aquest servei. Després, torna a activar les trucades per Wi-Fi des de Configuració."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registra\'t amb el teu operador de telefonia mòbil"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Trucada de Wi-Fi de: %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-cs/strings.xml b/core/res/res/values-mcc310-mnc260-cs/strings.xml deleted file mode 100644 index 61ba268899bb..000000000000 --- a/core/res/res/values-mcc310-mnc260-cs/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Chcete-li volat a odesílat textové zprávy přes síť Wi-Fi, nejprve požádejte operátora, aby vám tuto službu nastavil. Poté volání přes Wi-Fi opět zapněte v Nastavení."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registrace u operátora"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Volání přes Wi-Fi: %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-da/strings.xml b/core/res/res/values-mcc310-mnc260-da/strings.xml deleted file mode 100644 index 0c612e5d3f0c..000000000000 --- a/core/res/res/values-mcc310-mnc260-da/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Hvis du vil foretage opkald og sende beskeder via Wi-Fi, skal du først anmode dit mobilselskab om at konfigurere denne tjeneste. Derefter skal du slå Wi-Fi-opkald til igen fra Indstillinger."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registrer dig hos dit mobilselskab"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi-opkald"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-de/strings.xml b/core/res/res/values-mcc310-mnc260-de/strings.xml deleted file mode 100644 index b9cbb489af02..000000000000 --- a/core/res/res/values-mcc310-mnc260-de/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Um über WLAN telefonieren und Nachrichten senden zu können, bitte zuerst deinen Mobilfunkanbieter, diesen Dienst einzurichten. Aktiviere die Option \"Anrufe über WLAN\" dann erneut über die Einstellungen."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registriere dich bei deinem Mobilfunkanbieter."</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Anrufe über WLAN"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-el/strings.xml b/core/res/res/values-mcc310-mnc260-el/strings.xml deleted file mode 100644 index b4cd123bfae4..000000000000 --- a/core/res/res/values-mcc310-mnc260-el/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Για να κάνετε κλήσεις και να στέλνετε μηνύματα μέσω Wi-Fi, ζητήστε πρώτα από την εταιρεία κινητής τηλεφωνίας να ρυθμίσει την υπηρεσία. Στη συνέχεια, ενεργοποιήστε ξανά τη λειτουργία κλήσεων μέσω Wi-Fi από τις Ρυθμίσεις."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Εγγραφείτε μέσω της εταιρείας κινητής τηλεφωνίας"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Κλήση Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-en-rAU/strings.xml b/core/res/res/values-mcc310-mnc260-en-rAU/strings.xml deleted file mode 100644 index 1d300eab69d9..000000000000 --- a/core/res/res/values-mcc310-mnc260-en-rAU/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"To make calls and send messages over Wi-Fi, first ask your carrier to set up this service. Then turn on Wi-Fi calling again from Settings."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Register with your operator"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi Calling"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-en-rGB/strings.xml b/core/res/res/values-mcc310-mnc260-en-rGB/strings.xml deleted file mode 100644 index 1d300eab69d9..000000000000 --- a/core/res/res/values-mcc310-mnc260-en-rGB/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"To make calls and send messages over Wi-Fi, first ask your carrier to set up this service. Then turn on Wi-Fi calling again from Settings."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Register with your operator"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi Calling"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-en-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-en-rIN/strings.xml deleted file mode 100644 index 1d300eab69d9..000000000000 --- a/core/res/res/values-mcc310-mnc260-en-rIN/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"To make calls and send messages over Wi-Fi, first ask your carrier to set up this service. Then turn on Wi-Fi calling again from Settings."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Register with your operator"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi Calling"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-es-rUS/strings.xml b/core/res/res/values-mcc310-mnc260-es-rUS/strings.xml deleted file mode 100644 index 6398c02af1b7..000000000000 --- a/core/res/res/values-mcc310-mnc260-es-rUS/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Para realizar llamadas o enviar mensajes por Wi-Fi, primero solicítale al proveedor que instale el servicio. Luego, vuelve a activar las llamadas por Wi-Fi desde Configuración."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Regístrate con tu proveedor."</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Llamada por Wi-Fi de %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-es/strings.xml b/core/res/res/values-mcc310-mnc260-es/strings.xml deleted file mode 100644 index e95911629b96..000000000000 --- a/core/res/res/values-mcc310-mnc260-es/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Para hacer llamadas y enviar mensajes por Wi-Fi, debes pedir antes a tu operador que configure este servicio. Una vez hecho esto, vuelva a activar las llamadas Wi-Fi en Ajustes."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Regístrate con tu operador"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Llamada Wi-Fi de %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-et/strings.xml b/core/res/res/values-mcc310-mnc260-et/strings.xml deleted file mode 100644 index 231013006bb9..000000000000 --- a/core/res/res/values-mcc310-mnc260-et/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Üle WiFi-võrgu helistamiseks ja sõnumite saatmiseks paluge operaatoril esmalt see teenus seadistada. Seejärel lülitage WiFi-kõned menüüs Seaded uuesti sisse."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registreeruge operaatori juures"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s WiFi kaudu helistamine"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-eu/strings.xml b/core/res/res/values-mcc310-mnc260-eu/strings.xml deleted file mode 100644 index 8fb03d4422d3..000000000000 --- a/core/res/res/values-mcc310-mnc260-eu/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi bidez deiak egiteko eta mezuak bidaltzeko, eskatu operadoreari zerbitzu hori gaitzeko. Ondoren, aktibatu Wi-Fi bidezko deiak Ezarpenak atalean."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Erregistratu operadorearekin"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi bidezko deiak"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-fa/strings.xml b/core/res/res/values-mcc310-mnc260-fa/strings.xml deleted file mode 100644 index 659a0dd89998..000000000000 --- a/core/res/res/values-mcc310-mnc260-fa/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"برای برقراری تماس و ارسال پیام از طریق Wi-Fi، ابتدا از شرکت مخابراتیتان درخواست کنید این سرویس را راهاندازی کند. سپس دوباره از تنظیمات، تماس Wi-Fi را روشن کنید."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"ثبت نام با شرکت مخابراتی شما"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"تماس %s Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-fi/strings.xml b/core/res/res/values-mcc310-mnc260-fi/strings.xml deleted file mode 100644 index 1eecb61f8826..000000000000 --- a/core/res/res/values-mcc310-mnc260-fi/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Jos haluat soittaa puheluita ja lähettää viestejä Wi-Fin kautta, pyydä ensin operaattoriasi ottamaan tämä palvelu käyttöön. Ota sitten Wi-Fi-puhelut käyttöön asetuksissa."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Rekisteröidy operaattorisi asiakkaaksi."</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Wi-Fi-puhelut: %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-fr-rCA/strings.xml b/core/res/res/values-mcc310-mnc260-fr-rCA/strings.xml deleted file mode 100644 index c767039b2a46..000000000000 --- a/core/res/res/values-mcc310-mnc260-fr-rCA/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Pour effectuer des appels et envoyer des messages par Wi-Fi, demandez tout d\'abord à votre fournisseur de services de configurer ce service. Réactivez ensuite les appels Wi-Fi dans les paramètres."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Inscrivez-vous auprès de votre fournisseur de services"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Appels Wi-Fi %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-fr/strings.xml b/core/res/res/values-mcc310-mnc260-fr/strings.xml deleted file mode 100644 index 1de93cab9c18..000000000000 --- a/core/res/res/values-mcc310-mnc260-fr/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Pour effectuer des appels et envoyer des messages via le Wi-Fi, demandez tout d\'abord à votre opérateur de configurer ce service. Réactivez ensuite les appels Wi-Fi dans les paramètres."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Inscrivez-vous auprès de votre opérateur."</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Appels Wi-Fi %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-gl/strings.xml b/core/res/res/values-mcc310-mnc260-gl/strings.xml deleted file mode 100644 index 2747ab3b90b3..000000000000 --- a/core/res/res/values-mcc310-mnc260-gl/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Para facer chamadas e enviar mensaxes a través da wifi, primeiro pídelle ao teu operador que configure este servizo. A continuación, activa de novo as chamadas wifi en Configuración."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Rexístrate co teu operador"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Chamadas wifi de %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-gu/strings.xml b/core/res/res/values-mcc310-mnc260-gu/strings.xml deleted file mode 100644 index d02d5add685b..000000000000 --- a/core/res/res/values-mcc310-mnc260-gu/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi પર કૉલ્સ કરવા અને સંદેશા મોકલવા માટે, પહેલા તમારા કેરીઅરને આ સેવા સેટ કરવા માટે કહો. પછી સેટિંગ્સમાંથી Wi-Fi કૉલિંગ ચાલુ કરો."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"તમારા કેરીઅર સાથે નોંધણી કરો"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi કૉલિંગ"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-hi/strings.xml b/core/res/res/values-mcc310-mnc260-hi/strings.xml deleted file mode 100644 index a19f51ad35e8..000000000000 --- a/core/res/res/values-mcc310-mnc260-hi/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"वाई-फ़ाई से कॉल करने और संदेश भेजने के लिए, सबसे पहले अपने वाहक से इस सेवा को सेट करने के लिए कहें. उसके बाद सेटिंग से पुन: वाई-फ़ाई कॉलिंग चालू करें."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"अपने वाहक के साथ पंजीकृत करें"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s वाई-फ़ाई कॉलिंग"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-hr/strings.xml b/core/res/res/values-mcc310-mnc260-hr/strings.xml deleted file mode 100644 index dc48a1e21201..000000000000 --- a/core/res/res/values-mcc310-mnc260-hr/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Da biste telefonirali i slali pozive putem Wi-Fi-ja, morate tražiti od mobilnog operatera da vam postavi tu uslugu. Zatim ponovo uključite Wi-Fi pozive u Postavkama."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registrirajte se kod mobilnog operatera"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi pozivanje"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-hu/strings.xml b/core/res/res/values-mcc310-mnc260-hu/strings.xml deleted file mode 100644 index ef6a2fc033ef..000000000000 --- a/core/res/res/values-mcc310-mnc260-hu/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Ha Wi-Fi-n szeretne telefonálni és üzenetet küldeni, kérje meg szolgáltatóját, hogy állítsa be ezt a szolgáltatást. Ezután a Beállítások menüben kapcsolhatja be újra a Wi-Fi-hívást."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Regisztráljon a szolgáltatójánál"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi-hívás"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-hy/strings.xml b/core/res/res/values-mcc310-mnc260-hy/strings.xml deleted file mode 100644 index 0a37df22811e..000000000000 --- a/core/res/res/values-mcc310-mnc260-hy/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi-ի միջոցով զանգեր կատարելու և հաղորդագրություններ ուղարկելու համար նախ դիմեք ձեր օպերատորին՝ ծառայությունը կարգավորելու համար: Ապա նորից միացրեք Wi-Fi զանգերը Կարգավորումներում:"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Գրանցվեք օպերատորի մոտ"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi զանգեր"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-in/strings.xml b/core/res/res/values-mcc310-mnc260-in/strings.xml deleted file mode 100644 index 4da068ea32d0..000000000000 --- a/core/res/res/values-mcc310-mnc260-in/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Untuk melakukan panggilan telepon dan mengirim pesan melalui Wi-Fi, terlebih dahulu minta operator untuk menyiapkan layanan ini. Lalu, aktifkan lagi panggilan telepon Wi-Fi dari Setelan."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Harap daftarkan ke operator"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Panggilan Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-is/strings.xml b/core/res/res/values-mcc310-mnc260-is/strings.xml deleted file mode 100644 index 1fd14d4b7e78..000000000000 --- a/core/res/res/values-mcc310-mnc260-is/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Til að hringja og senda skilaboð yfir Wi-Fi þarftu fyrst að biðja símafyrirtækið þitt um að setja þá þjónustu upp. Kveiktu síðan á Wi-Fi símtölum í stillingunum."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Skráðu þig hjá símafyrirtækinu"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi símtöl"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-it/strings.xml b/core/res/res/values-mcc310-mnc260-it/strings.xml deleted file mode 100644 index 6a7dec50e774..000000000000 --- a/core/res/res/values-mcc310-mnc260-it/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Per effettuare chiamate e inviare messaggi tramite Wi-Fi, è necessario prima chiedere all\'operatore telefonico di attivare il servizio. Successivamente, riattiva le chiamate Wi-Fi dalle Impostazioni."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registrati con il tuo operatore"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Chiamata Wi-Fi %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-iw/strings.xml b/core/res/res/values-mcc310-mnc260-iw/strings.xml deleted file mode 100644 index 1bcce94dde1c..000000000000 --- a/core/res/res/values-mcc310-mnc260-iw/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"כדי להתקשר ולשלוח הודעות ברשת Wi-Fi, תחילה יש לבקש מהספק להגדיר את השירות. לאחר מכן, יש להפעיל שוב התקשרות Wi-Fi מ\'הגדרות\'."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"הירשם אצל הספק"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"שיחות Wi-Fi של %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ja/strings.xml b/core/res/res/values-mcc310-mnc260-ja/strings.xml deleted file mode 100644 index 05a333b597ae..000000000000 --- a/core/res/res/values-mcc310-mnc260-ja/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi経由で音声通話の発信やメッセージの送信を行うには、携帯通信会社にWi-Fiサービスを申し込んだ上で、設定画面でWi-Fi発信を再度ONにしてください。"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"携帯通信会社に登録してください"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Wi-Fi通話(%s)"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ka/strings.xml b/core/res/res/values-mcc310-mnc260-ka/strings.xml deleted file mode 100644 index dbb28228b1d9..000000000000 --- a/core/res/res/values-mcc310-mnc260-ka/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi-ს მეშვეობით ზარების განხორციელების ან შეტყობინების გაგზავნისათვის, პირველ რიგში დაეკითხეთ თქვენს ოპერატორს აღნიშნულ მომსახურებაზე. შემდეგ ხელახლა ჩართეთ Wi-Fi ზარები პარამეტრებიდან."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"დაარეგისტრირეთ თქვენი ოპერატორი"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s დარეკვა Wi-Fi-ს მეშვეობით"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-kk/strings.xml b/core/res/res/values-mcc310-mnc260-kk/strings.xml deleted file mode 100644 index 80eebfcc3d60..000000000000 --- a/core/res/res/values-mcc310-mnc260-kk/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi арқылы қоңырау шалу және хабарларды жіберу үшін алдымен жабдықтаушыңыздан осы қызметті орнатуды сұраңыз. Содан кейін Параметрлерден Wi-Fi қоңырау шалуын іске қосыңыз."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Жабдықтаушыңыз арқылы тіркелу"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi арқылы қоңырау шалу"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-km/strings.xml b/core/res/res/values-mcc310-mnc260-km/strings.xml deleted file mode 100644 index e3cd1b232039..000000000000 --- a/core/res/res/values-mcc310-mnc260-km/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"ដើម្បីធ្វើការហៅ និងផ្ញើសារតាម Wi-Fi ដំបូងឡើយអ្នកត្រូវស្នើឲ្យក្រុមហ៊ុនរបស់អ្នកដំឡើងសេវាកម្មនេះសិន។ បន្ទាប់មកបើកការហៅតាម Wi-Fi ម្តងទៀតចេញពីការកំណត់។"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"ចុះឈ្មោះជាមួយក្រុមហ៊ុនរបស់អ្នក"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"ការហៅតាមរយៈ Wi-Fi %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-kn/strings.xml b/core/res/res/values-mcc310-mnc260-kn/strings.xml deleted file mode 100644 index 0a9d58dfc26e..000000000000 --- a/core/res/res/values-mcc310-mnc260-kn/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi ಬಳಸಿಕೊಂಡು ಕರೆ ಮಾಡಲು ಮತ್ತು ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು, ಮೊದಲು ಈ ಸಾಧನವನ್ನು ಹೊಂದಿಸಲು ನಿಮ್ಮ ವಾಹಕವನ್ನು ಕೇಳಿ. ತದನಂತರ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಮತ್ತೆ Wi-Fi ಆನ್ ಮಾಡಿ."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"ನಿಮ್ಮ ವಾಹಕದಲ್ಲಿ ನೋಂದಾಯಿಸಿಕೊಳ್ಳಿ"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi ಕರೆ ಮಾಡುವಿಕೆ"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ko/strings.xml b/core/res/res/values-mcc310-mnc260-ko/strings.xml deleted file mode 100644 index 5581235609e0..000000000000 --- a/core/res/res/values-mcc310-mnc260-ko/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi를 사용하여 전화를 걸고 메시지를 보내려면 먼저 이동통신사에 문의하여 이 기능을 설정해야 합니다. 그런 다음 설정에서 Wi-Fi 통화를 사용 설정하시기 바랍니다."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"이동통신사에 등록"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi 통화"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ky/strings.xml b/core/res/res/values-mcc310-mnc260-ky/strings.xml deleted file mode 100644 index 775542d32488..000000000000 --- a/core/res/res/values-mcc310-mnc260-ky/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi аркылуу чалууларды аткарып жана билдирүүлөрдү жөнөтүү үчүн адегенде операторуңуздан бул кызматты орнотушун сураныңыз. Андан соң, Жөндөөлөрдөн Wi-Fi чалууну кайра күйгүзүңүз."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Операторуңузга катталыңыз"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi Чалуу"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-lo/strings.xml b/core/res/res/values-mcc310-mnc260-lo/strings.xml deleted file mode 100644 index 49f79016cc72..000000000000 --- a/core/res/res/values-mcc310-mnc260-lo/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"ເພື່ອໂທ ແລະສົ່ງຂໍ້ຄວາມຢູ່ເທິງ Wi-Fi, ກ່ອນອື່ນໝົດໃຫ້ຖ້າມຜູ້ໃຫ້ບໍລິການເຄືອຂ່າຍຂອງທ່ານ ເພື່ອຕັ້ງການບໍລິການນີ້. ຈາກນັ້ນເປີດການໂທ Wi-Fi ອີກຈາກການຕັ້ງຄ່າ."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"ລົງທະບຽນກັບຜູ້ໃຫ້ບໍລິການເຄືອຂ່າຍຂອງທ່ານ"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"ການໂທ %s Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-lt/strings.xml b/core/res/res/values-mcc310-mnc260-lt/strings.xml deleted file mode 100644 index 4c3ebb7bc6e1..000000000000 --- a/core/res/res/values-mcc310-mnc260-lt/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Jei norite skambinti ir siųsti pranešimus „Wi-Fi“ ryšiu, pirmiausia paprašykite operatoriaus nustatyti šią paslaugą. Tada vėl įjunkite skambinimą „Wi-Fi“ ryšiu „Nustatymų“ skiltyje."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Užregistruokite pas operatorių"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"„%s“ „Wi-Fi“ skambinimas"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-lv/strings.xml b/core/res/res/values-mcc310-mnc260-lv/strings.xml deleted file mode 100644 index 23d8ca0764e3..000000000000 --- a/core/res/res/values-mcc310-mnc260-lv/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Lai veiktu zvanus un sūtītu īsziņas Wi-Fi tīklā, vispirms lūdziet mobilo sakaru operatoru iestatīt šo pakalpojumu. Pēc tam iestatījumos vēlreiz ieslēdziet Wi-Fi zvanus."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Reģistrēt to pie sava mobilo sakaru operatora"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi zvani"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-mk/strings.xml b/core/res/res/values-mcc310-mnc260-mk/strings.xml deleted file mode 100644 index 878b7afc71a3..000000000000 --- a/core/res/res/values-mcc310-mnc260-mk/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"За повикување и испраќање пораки преку Wi-Fi, прво побарајте од операторот да ви ја постави оваа услуга. Потоа повторно вклучете повикување преку Wi-Fi во Поставки."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Регистрирајте се со операторот"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Повикување преку Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ml/strings.xml b/core/res/res/values-mcc310-mnc260-ml/strings.xml deleted file mode 100644 index a94680d128b4..000000000000 --- a/core/res/res/values-mcc310-mnc260-ml/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"വൈഫൈ വഴി കോളുകൾ വിളിക്കാനും സന്ദേശങ്ങൾ അയയ്ക്കാനും ആദ്യം നിങ്ങളുടെ കാരിയറോട് ഈ സേവനം സജ്ജമാക്കാൻ ആവശ്യപ്പെടുക. ക്രമീകരണത്തിൽ നിന്ന് വീണ്ടും വൈഫൈ കോളിംഗ് ഓണാക്കുക."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"നിങ്ങളുടെ കാരിയറിൽ രജിസ്റ്റർ ചെയ്യുക"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s വൈഫൈ കോളിംഗ്"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-mn/strings.xml b/core/res/res/values-mcc310-mnc260-mn/strings.xml deleted file mode 100644 index 4c97e2ebb697..000000000000 --- a/core/res/res/values-mcc310-mnc260-mn/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi-аар дуудлага хийх болон мессеж илгээхээр бол эхлээд оператороосоо энэ төхөөрөмжийг тохируулж өгөхийг хүсээрэй. Дараа нь Тохиргооноос Wi-Fi дуудлага хийх үйлдлийг асаагаарай."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Операторт бүртгүүлэх"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi Дуудлага"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-mr/strings.xml b/core/res/res/values-mcc310-mnc260-mr/strings.xml deleted file mode 100644 index 06eceffc0269..000000000000 --- a/core/res/res/values-mcc310-mnc260-mr/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"वाय-फायवरून कॉल करण्यासाठी आणि संदेश पाठविण्यासाठी, प्रथम आपल्या वाहकास ही सेवा सेट करण्यास सांगा. नंतर सेटिंग्जमधून पुन्हा वाय-फाय कॉलिंग चालू करा."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"आपल्या वाहकासह नोंदणी करा"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s वाय-फाय कॉलिंग"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ms/strings.xml b/core/res/res/values-mcc310-mnc260-ms/strings.xml deleted file mode 100644 index dafb3bdd09b3..000000000000 --- a/core/res/res/values-mcc310-mnc260-ms/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Untuk membuat panggilan dan menghantar mesej melalui Wi-Fi, mula-mula minta pembawa anda untuk menyediakan perkhidmatan ini. Kemudian hidupkan panggilan Wi-Fi semula daripada Tetapan."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Daftar dengan pembawa anda"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Panggilan Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-my/strings.xml b/core/res/res/values-mcc310-mnc260-my/strings.xml deleted file mode 100644 index 25ea19158f78..000000000000 --- a/core/res/res/values-mcc310-mnc260-my/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"ဝိုင်ဖိုင်သုံး၍ ဖုန်းခေါ်ဆိုရန်နှင့် မက်စေ့ဂျ်များပို့ရန်၊ ဤဝန်ဆောင်မှုအား စတင်သုံးနိုင်ရန်အတွက် သင့် မိုဘိုင်းဝန်ဆောင်မှုအား ဦးစွာမေးမြန်းပါ။ ထို့နောက် ဆက်တင်မှတဆင့် ဝိုင်ဖိုင် ခေါ်ဆိုမှုအား ထပ်ဖွင့်ပါ။"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"သင့် မိုဘိုင်းဝန်ဆောင်မှုဖြင့် မှတ်ပုံတင်ရန်"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s ဝိုင်ဖိုင် ခေါ်ဆိုမှု"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-nb/strings.xml b/core/res/res/values-mcc310-mnc260-nb/strings.xml deleted file mode 100644 index 9918996d8efd..000000000000 --- a/core/res/res/values-mcc310-mnc260-nb/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"For å ringe og sende meldinger over Wi-Fi må du først be operatøren om å konfigurere denne tjenesten. Deretter slår du på Wi-Fi-anrop igjen fra Innstillinger."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registrer deg hos operatøren din"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi-anrop"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ne/strings.xml b/core/res/res/values-mcc310-mnc260-ne/strings.xml deleted file mode 100644 index 6fb7b505853f..000000000000 --- a/core/res/res/values-mcc310-mnc260-ne/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi बाट कल गर्न र सन्देशहरू पठाउन, सबभन्दा पहिला यो सेवा सेटअप गर्न तपाईँको वाहकलाई भन्नुहोस्। त्यसपछि फेरि सेटिङहरूबाट Wi-Fi कलिङ सक्रिय पार्नुहोस्।"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"तपाईँको वाहकसँग दर्ता गर्नुहोस्"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi कलिङ"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-nl/strings.xml b/core/res/res/values-mcc310-mnc260-nl/strings.xml deleted file mode 100644 index ac4961cf96b0..000000000000 --- a/core/res/res/values-mcc310-mnc260-nl/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Als je wilt bellen en berichten wilt verzenden via wifi, moet je eerst je provider vragen deze service in te stellen. Schakel bellen via wifi vervolgens opnieuw in via \'Instellingen\'."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registreren bij je provider"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Bellen via wifi van %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-pa/strings.xml b/core/res/res/values-mcc310-mnc260-pa/strings.xml deleted file mode 100644 index 00266810dd64..000000000000 --- a/core/res/res/values-mcc310-mnc260-pa/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi ਤੇ ਕਾਲਾਂ ਕਰਨ ਅਤੇ ਸੁਨੇਹੇ ਭੇਜਣ ਲਈ, ਪਹਿਲਾਂ ਆਪਣੇ ਕੈਰੀਅਰ ਨੂੰ ਇਹ ਸੇਵਾ ਸੈਟ ਅਪ ਕਰਨ ਲਈ ਕਹੋ। ਫਿਰ ਸੈਟਿੰਗਾਂ ਵਿੱਚੋਂ Wi-Fi ਕਾਲਿੰਗ ਦੁਬਾਰਾ ਚਾਲੂ ਕਰੋ।"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"ਆਪਣੇ ਕੈਰੀਅਰ ਨਾਲ ਰਜਿਸਟਰ ਕਰੋ"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi ਕਾਲਿੰਗ"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-pl/strings.xml b/core/res/res/values-mcc310-mnc260-pl/strings.xml deleted file mode 100644 index b7f512d1932e..000000000000 --- a/core/res/res/values-mcc310-mnc260-pl/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Aby dzwonić i wysyłać wiadomości przez Wi-Fi, poproś swojego operatora o skonfigurowanie tej usługi. Potem ponownie włącz połączenia przez Wi-Fi w Ustawieniach."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Zarejestruj u operatora"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Połączenia przez Wi-Fi (%s)"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-pt-rBR/strings.xml b/core/res/res/values-mcc310-mnc260-pt-rBR/strings.xml deleted file mode 100644 index bad49c3771f2..000000000000 --- a/core/res/res/values-mcc310-mnc260-pt-rBR/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Para fazer chamadas e enviar mensagens por Wi-Fi, primeiro peça à sua operadora para configurar esse serviço. Depois ative novamente as chamadas por Wi-Fi nas configurações."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Faça registro na sua operadora"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s chamada Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-pt-rPT/strings.xml b/core/res/res/values-mcc310-mnc260-pt-rPT/strings.xml deleted file mode 100644 index 18e3801874d1..000000000000 --- a/core/res/res/values-mcc310-mnc260-pt-rPT/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Para fazer chamadas e enviar mensagens por Wi-Fi, comece por pedir ao seu operador para configurar este serviço. Em seguida, nas Definições, ative novamente as chamadas por Wi-Fi."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registar-se junto do seu operador"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Chamadas por Wi-Fi da %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-pt/strings.xml b/core/res/res/values-mcc310-mnc260-pt/strings.xml deleted file mode 100644 index bad49c3771f2..000000000000 --- a/core/res/res/values-mcc310-mnc260-pt/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Para fazer chamadas e enviar mensagens por Wi-Fi, primeiro peça à sua operadora para configurar esse serviço. Depois ative novamente as chamadas por Wi-Fi nas configurações."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Faça registro na sua operadora"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s chamada Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ro/strings.xml b/core/res/res/values-mcc310-mnc260-ro/strings.xml deleted file mode 100644 index 6b865a299684..000000000000 --- a/core/res/res/values-mcc310-mnc260-ro/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Pentru a apela și a trimite mesaje prin Wi-Fi, mai întâi solicitați configurarea acestui serviciu la operator. Apoi, activați din nou apelarea prin Wi-Fi din Setări."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Înregistrați-vă la operatorul dvs."</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Apelare prin Wi-Fi %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ru/strings.xml b/core/res/res/values-mcc310-mnc260-ru/strings.xml deleted file mode 100644 index 829c477aa101..000000000000 --- a/core/res/res/values-mcc310-mnc260-ru/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Чтобы совершать звонки и отправлять сообщения по Wi-Fi, необходимо сначала обратиться к оператору связи и подключить эту услугу. После этого вы сможете снова выбрать этот параметр в настройках."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Укажите оператора и зарегистрируйтесь"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Звонки по Wi-Fi (%s)"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-si/strings.xml b/core/res/res/values-mcc310-mnc260-si/strings.xml deleted file mode 100644 index de009011030d..000000000000 --- a/core/res/res/values-mcc310-mnc260-si/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi හරහා ඇමතුම් සිදු කිරීමට සහ පණිවිඩ යැවීමට, පළමුව මෙම සේවාව පිහිටුවන ලෙස ඔබේ වාහකයෙන් ඉල්ලන්න. අනතුරුව සැකසීම් වෙතින් Wi-Fi ඇමතුම නැවත ක්රියාත්මක කරන්න."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"ඔබගේ වාහකය සමඟ ලියාපදිංචි වන්න"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi අමතමින්"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-sk/strings.xml b/core/res/res/values-mcc310-mnc260-sk/strings.xml deleted file mode 100644 index eb8b5f8f21fc..000000000000 --- a/core/res/res/values-mcc310-mnc260-sk/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Ak chcete volať a odosielať správy prostredníctvom siete Wi-Fi, kontaktujte najskôr svojho operátora v súvislosti s nastavením tejto služby. Potom opäť zapnite v Nastaveniach volanie cez Wi-Fi."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registrujte sa so svojím operátorom"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Volanie siete Wi-Fi %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-sl/strings.xml b/core/res/res/values-mcc310-mnc260-sl/strings.xml deleted file mode 100644 index ae30c5a568d4..000000000000 --- a/core/res/res/values-mcc310-mnc260-sl/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Če želite klicati ali pošiljati sporočila prek omrežja Wi-Fi, se najprej obrnite na operaterja, da nastavi to storitev. Nato v nastavitvah znova vklopite klicanje prek omrežja Wi-Fi."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registracija pri operaterju"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Klicanje prek Wi-Fi-ja (%s)"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-sq/strings.xml b/core/res/res/values-mcc310-mnc260-sq/strings.xml deleted file mode 100644 index 84ac15368cdc..000000000000 --- a/core/res/res/values-mcc310-mnc260-sq/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Për të bërë telefonata dhe për të dërguar mesazhe me Wi-Fi, në fillim kërkoji operatorit celular ta konfigurojë këtë shërbim. Më pas aktivizo përsëri telefonatat me Wi-Fi, nga Cilësimet."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Regjistrohu me operatorin tënd celular"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Telefonatat me Wi-Fi nga %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-sr/strings.xml b/core/res/res/values-mcc310-mnc260-sr/strings.xml deleted file mode 100644 index 92c6f35cc60f..000000000000 --- a/core/res/res/values-mcc310-mnc260-sr/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Да бисте упућивали позиве и слали поруке преко Wi-Fi-ја, прво затражите од мобилног оператера да вам омогући ову услугу. Затим у Подешавањима поново укључите Позивање преко Wi-Fi-ја."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Региструјте се код мобилног оператера"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Wi-Fi позивање преко оператера %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-sv/strings.xml b/core/res/res/values-mcc310-mnc260-sv/strings.xml deleted file mode 100644 index 632a2ce859ab..000000000000 --- a/core/res/res/values-mcc310-mnc260-sv/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Om du vill ringa samtal och skicka meddelanden via Wi-Fi ber du först operatören att konfigurera tjänsten. Därefter kan du aktivera Wi-Fi-samtal på nytt från Inställningar."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Registrera dig hos operatören"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi-samtal"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-sw/strings.xml b/core/res/res/values-mcc310-mnc260-sw/strings.xml deleted file mode 100644 index eecf6d26a751..000000000000 --- a/core/res/res/values-mcc310-mnc260-sw/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Ili upige simu na kutuma ujumbe kupitia Wi-Fi, mwambie mtoa huduma wako asanidi huduma hii kwanza. Kisha uwashe tena upigaji simu kwa Wi-Fi kutoka kwenye Mipangilio."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Jisajili na mtoa huduma wako"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Upigaji Simu kwa Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ta/strings.xml b/core/res/res/values-mcc310-mnc260-ta/strings.xml deleted file mode 100644 index 144bc95ad766..000000000000 --- a/core/res/res/values-mcc310-mnc260-ta/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"வைஃபை மூலம் அழைக்க மற்றும் செய்திகள் அனுப்ப, முதலில் மொபைல் நிறுவனத்திடம் இந்தச் சேவையை அமைக்குமாறு கேட்கவும். பிறகு அமைப்புகளில் மீண்டும் வைஃபை அழைப்பை இயக்கவும்."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"உங்கள் மொபைல் நிறுவனத்தில் பதிவுசெய்யவும்"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s வைஃபை அழைப்பு"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-te/strings.xml b/core/res/res/values-mcc310-mnc260-te/strings.xml deleted file mode 100644 index ef94c4c047e5..000000000000 --- a/core/res/res/values-mcc310-mnc260-te/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fiలో కాల్లు చేయడం మరియు సందేశాలు పంపడం కోసం ముందుగా ఈ సేవను సెటప్ చేయడానికి మీ క్యారియర్ను అడగండి. ఆపై సెట్టింగ్ల నుండి మళ్లీ Wi-Fi కాలింగ్ను ఆన్ చేయండి."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"మీ క్యారియర్తో నమోదు చేయండి"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi కాలింగ్"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-th/strings.xml b/core/res/res/values-mcc310-mnc260-th/strings.xml deleted file mode 100644 index dd026ccd1e30..000000000000 --- a/core/res/res/values-mcc310-mnc260-th/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"หากต้องการโทรออกและส่งข้อความผ่าน Wi-Fi โปรดสอบถามผู้ให้บริการของคุณก่อนเพื่อตั้งค่าบริการนี้ แล้วเปิดการโทรผ่าน Wi-Fi อีกครั้งจากการตั้งค่า"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"ลงทะเบียนกับผู้ให้บริการ"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"กำลังเรียก Wi-Fi ของ %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-tl/strings.xml b/core/res/res/values-mcc310-mnc260-tl/strings.xml deleted file mode 100644 index 555783597984..000000000000 --- a/core/res/res/values-mcc310-mnc260-tl/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Upang tumawag at magpadala ng mga mensahe sa pamamagitan ng Wi-Fi, hilingin muna sa iyong carrier na i-set up ang serbisyong ito. Pagkatapos ay muling i-on ang pagtawag sa Wi-Fi mula sa Mga Setting."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Magparehistro sa iyong carrier"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Pagtawag sa Pamamagitan ng Wi-Fi ng %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-tr/strings.xml b/core/res/res/values-mcc310-mnc260-tr/strings.xml deleted file mode 100644 index 7cfd9c145bfd..000000000000 --- a/core/res/res/values-mcc310-mnc260-tr/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Kablosuz ağ üzerinden telefon etmek ve ileti göndermek için ilk önce operatörünüzden bu hizmeti ayarlamasını isteyin. Sonra tekrar Ayarlar\'dan Kablosuz çağrı özelliğini açın."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Operatörünüze kaydolun"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Kablosuz Çağrı"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-uk/strings.xml b/core/res/res/values-mcc310-mnc260-uk/strings.xml deleted file mode 100644 index 0c21309d4f38..000000000000 --- a/core/res/res/values-mcc310-mnc260-uk/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Щоб телефонувати або надсилати повідомлення через Wi-Fi, спочатку попросіть свого оператора налаштувати цю послугу. Після цього ввімкніть дзвінки через Wi-Fi у налаштуваннях."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Зареєструйтеся в оператора"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Дзвінок через Wi-Fi від оператора %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-ur/strings.xml b/core/res/res/values-mcc310-mnc260-ur/strings.xml deleted file mode 100644 index 5e93fa793998..000000000000 --- a/core/res/res/values-mcc310-mnc260-ur/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi سے کالز کرنے اور پیغامات بھیجنے کیلئے، پہلے اپنے کیریئر سے اس سروس کو ترتیب دینے کیلئے کہیں۔ پھر ترتیبات سے دوبارہ Wi-Fi کالنگ آن کریں۔"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"اپنے کیریئر کے ساتھ رجسٹر کریں"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi کالنگ"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-uz/strings.xml b/core/res/res/values-mcc310-mnc260-uz/strings.xml deleted file mode 100644 index 19c8f2e3f6e0..000000000000 --- a/core/res/res/values-mcc310-mnc260-uz/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi orqali qo‘ng‘iroqlarni amalga oshirish va xabarlar bilan almashinish uchun uyali aloqa operatoringizdan ushbu xizmatni yoqib qo‘yishni so‘rashingiz lozim. Keyin sozlamalarda Wi-Fi qo‘ng‘irog‘i imkoniyatini yoqib olishingiz mumkin."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Mobil operatoringiz yordamida ro‘yxatdan o‘ting"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi qo‘ng‘iroqlar"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-vi/strings.xml b/core/res/res/values-mcc310-mnc260-vi/strings.xml deleted file mode 100644 index 7b249c8da102..000000000000 --- a/core/res/res/values-mcc310-mnc260-vi/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Để gọi điện và gửi tin nhắn qua Wi-Fi, trước tiên hãy yêu cầu nhà cung cấp dịch vụ của bạn thiết lập dịch vụ này. Sau đó, bật lại gọi qua Wi-Fi từ Cài đặt."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Đăng ký với nhà cung cấp dịch vụ của bạn"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"Gọi điện qua Wi-Fi %s"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-zh-rCN/strings.xml b/core/res/res/values-mcc310-mnc260-zh-rCN/strings.xml deleted file mode 100644 index 7624e91ca194..000000000000 --- a/core/res/res/values-mcc310-mnc260-zh-rCN/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"要通过 WLAN 打电话和发信息,请先让您的运营商开通此服务,然后再到“设置”中重新开启 WLAN 通话功能。"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"向您的运营商注册"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s WLAN 通话功能"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-zh-rHK/strings.xml b/core/res/res/values-mcc310-mnc260-zh-rHK/strings.xml deleted file mode 100644 index 1aea15a13e00..000000000000 --- a/core/res/res/values-mcc310-mnc260-zh-rHK/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"如要透過 Wi-Fi 撥打電話及傳送訊息,請先向您的流動網絡供應商要求設定此服務。然後再次在「設定」中開啟 Wi-Fi 通話。"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"向您的流動網絡供應商註冊"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi 通話"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-zh-rTW/strings.xml b/core/res/res/values-mcc310-mnc260-zh-rTW/strings.xml deleted file mode 100644 index b0c7834fa592..000000000000 --- a/core/res/res/values-mcc310-mnc260-zh-rTW/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"如要透過 Wi-FI 撥打電話及傳送訊息,請先要求您的行動通訊業者開通這項服務,然後再到「設定」啟用 Wi-Fi 通話功能。"</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"向您的行動通訊業者註冊"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi 通話"</string> -</resources> diff --git a/core/res/res/values-mcc310-mnc260-zu/strings.xml b/core/res/res/values-mcc310-mnc260-zu/strings.xml deleted file mode 100644 index cc32b1eca64a..000000000000 --- a/core/res/res/values-mcc310-mnc260-zu/strings.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* -** Copyright 2015, 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 my 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. -*/ - --> - -<!-- These resources are around just to allow their values to be customized - for different hardware and product builds. --> - -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Ukuze wenze amakholi uphinde uthumele imilayezo nge-Wi-FI, qala ucele inkampani yakho yenethiwekhi ukuthi isethe le divayisi. Bese uvula ukushaya kwe-Wi-FI futhi kusukela kuzilungiselelo."</item> - </string-array> - <string-array name="wfcOperatorErrorNotificationMessages"> - <item msgid="483847327467331298">"Bhalisa ngenkampani yakho yenethiwekhi"</item> - </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s ukushaya kwe-Wi-Fi"</string> -</resources> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index 43235219f09c..a8a103c99dd4 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Гласовна помош"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Заклучи сега"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Содржините се скриени"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Содржините се скриени поради политиката"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Ново известување"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Виртуелна тастатура"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Физичка тастатура"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Безбедност"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"Допрете за повеќе информации"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Поврзано е отстранување грешки преку USB"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"Допрете за да се оневозможи отстранувањето грешки преку USB."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"Изберете за да се оневозможи отстранување грешки на USB."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Се зема извештајот за грешки…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Да се сподели извештајот за грешки?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Се споделува извештај за грешки…"</string> @@ -1717,14 +1715,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Откачете"</string> <string name="app_info" msgid="6856026610594615344">"Информации за апликација"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Да се ресетира уредот?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Допрете за да го ресетирате уредот"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Се вклучува демонстрацијата…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Се ресетира уредот…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Да се ресетира уредот?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Ќе ги изгубите измените и демонстрацијата ќе започне повторно по <xliff:g id="TIMEOUT">%1$s</xliff:g> секунди…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Откажи"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Ресетирај сега"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Оневозможен <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Конференциски повик"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Совет за алатка"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index 3ba18fead433..535fa1ef94ad 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"വോയ്സ് സഹായം"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ഇപ്പോൾ ലോക്കുചെയ്യുക"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"കോൺടാക്റ്റുകൾ മറച്ചു"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"നയം അനുസരിച്ച് ഉള്ളടക്കം മറച്ചിരിക്കുന്നു"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"പുതിയ അറിയിപ്പ്"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"വെർച്വൽ കീബോർഡ്"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"കീബോർഡ്"</string> <string name="notification_channel_security" msgid="7345516133431326347">"സുരക്ഷ"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"കൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പുചെയ്യുക"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ഡീബഗ്ഗിംഗ് കണക്റ്റുചെയ്തു"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB ഡീബഗ്ഗിംഗ് പ്രവർത്തനരഹിതമാക്കാൻ ടാപ്പുചെയ്യുക."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ഡീബഗ്ഗുചെയ്യൽ പ്രവർത്തനരഹിതമാക്കാൻ തിരഞ്ഞെടുക്കുക."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"ബഗ് റിപ്പോർട്ട് എടുക്കുന്നു…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ബഗ് റിപ്പോർട്ട് പങ്കിടണോ?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ബഗ് റിപ്പോർട്ട് പങ്കിടുന്നു…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"അൺപിൻ ചെയ്യുക"</string> <string name="app_info" msgid="6856026610594615344">"ആപ്പ് വിവരം"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"ഉപകരണം പുനക്രമീകരിക്കണോ?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"ഉപകരണം പുനക്രമീകരിക്കാൻ ടാപ്പുചെയ്യുക"</string> <string name="demo_starting_message" msgid="5268556852031489931">"ഡെമോ ആരംഭിക്കുന്നു…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"ഉപകരണം പുനക്രമീകരിക്കുന്നു…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"ഉപകരണം പുനക്രമീകരിക്കണോ?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"മാറ്റങ്ങളെല്ലാം നിങ്ങൾക്ക് നഷ്ടപ്പെടും, <xliff:g id="TIMEOUT">%1$s</xliff:g> സെക്കൻഡിൽ ഡെമോ വീണ്ടും തുടങ്ങും…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"റദ്ദാക്കുക"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"ഇപ്പോൾ പുനക്രമീകരിക്കുക"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> പ്രവർത്തനരഹിതമാക്കി"</string> <string name="conference_call" msgid="3751093130790472426">"കോൺഫറൻസ് കോൾ"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"ടൂൾ ടിപ്പ്"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index 409e2247f9d9..c5ff0121da8a 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Дуут туслах"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Одоо түгжих"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Контентыг нуусан"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Удирдамжийн дагуу нуусан агуулга"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Шинэ мэдэгдэл"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Виртуал гар"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Бодит гар"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Аюулгүй байдал"</string> @@ -1712,14 +1711,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Unpin"</string> <string name="app_info" msgid="6856026610594615344">"Апп-н мэдээлэл"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Төхөөрөмжийг шинэчлэх үү?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Төхөөрөмжийг шинэчлэхийн тулд товшино уу"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Жишээг эхлүүлж байна…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Төхөөрөмжийг шинэчилж байна…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Төхөөрөмжийг шинэчлэх үү?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Таны хийсэн өөрчлөлтийг хадгалахгүй бөгөөд жишээ <xliff:g id="TIMEOUT">%1$s</xliff:g> секундын дотор дахин эхлэх болно..."</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Цуцлах"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Одоо шинэчлэх"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g>-г цуцалсан"</string> <string name="conference_call" msgid="3751093130790472426">"Хурлын дуудлага"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Зөвлөмж"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index afd547703096..5c6622fd9cdd 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"व्हॉइस सहाय्य"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"आता लॉक करा"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"लपविलेली सामग्री"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"धोरणाद्वारे सामग्री लपविली"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"नवीन सूचना"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"व्हर्च्युअल कीबोर्ड"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"वास्तविक कीबोर्ड"</string> <string name="notification_channel_security" msgid="7345516133431326347">"सुरक्षितता"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"आणखी माहितीसाठी येथे टॅप करा"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डीबग करणे कनेक्ट केले"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB डीबग करणे अक्षम करण्यासाठी टॅप करा."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB डीबगिंग बंद करण्यासाठी निवडा."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"दोष अहवाल घेत आहे..."</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"बग अहवाल सामायिक करायचा?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"दोष अहवाल सामायिक करीत आहे..."</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"अनपिन करा"</string> <string name="app_info" msgid="6856026610594615344">"अॅप माहिती"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"डिव्हाइस रीसेट करायचे?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"डिव्हाइस रीसेट करण्यासाठी टॅप करा"</string> <string name="demo_starting_message" msgid="5268556852031489931">"डेमो प्रारंभ करत आहे..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"डिव्हाइस रीसेट करत आहे..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"डिव्हाइस रीसेट करायचे?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"आपण कोणतेही बदल गमवाल आणि डेमो पुन्हा <xliff:g id="TIMEOUT">%1$s</xliff:g> सेकंदांमध्ये प्रारंभ होईल..."</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"रद्द करा"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"आता रीसेट करा"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> अक्षम केले"</string> <string name="conference_call" msgid="3751093130790472426">"परिषद कॉल"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"टूलटिप"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index c2804566a4ca..3954b8014b49 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Bantuan Suara"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Kunci sekarang"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Kandungan tersembunyi"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Kandungan disembunyikan oleh dasar"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Pemberitahuan baharu"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Papan kekunci maya"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Papan kekunci fizikal"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Keselamatan"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Nyahsemat"</string> <string name="app_info" msgid="6856026610594615344">"Maklumat apl"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Tetapkan semula peranti?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Ketik untuk menetapkan semula peranti"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Memulakan tunjuk cara…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Menetapkan semula peranti…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Tetapkan semula peranti?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Anda akan kehilangan sebarang perubahan yang dibuat dan tunjuk cara akan dimulakan sekali lagi dalam masa <xliff:g id="TIMEOUT">%1$s</xliff:g> saat…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Batal"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Tetapkan semula sekarang"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> dilumpuhkan"</string> <string name="conference_call" msgid="3751093130790472426">"Panggilan Sidang"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Keterangan item"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 2f3a0d5a3238..2f649fc3f907 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"အသံ အကူအညီ"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ယခု သော့ပိတ်ရန်"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"၉၉၉+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"အကြောင်းအရာများ ဝှက်ထား"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"မူဝါဒမှ အကြောင်းအရာများကို ဝှက်ထားသည်"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"အကြောင်းကြားချက်အသစ်"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"ပကတိအသွင်ကီးဘုတ်"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"ကီးဘုတ် ခလုတ်ခုံ"</string> <string name="notification_channel_security" msgid="7345516133431326347">"လုံခြုံရေး"</string> @@ -1157,7 +1156,7 @@ <string name="sim_restart_button" msgid="4722407842815232347">"အစက ပြန်စရန်"</string> <string name="carrier_app_dialog_message" msgid="7066156088266319533">"သင့် SIM အသစ်ပုံမှန် အလုပ်လုပ်ရန်၊ သင်အသုံးပြုသည့် မိုဘိုင်းဝန်ဆောင်မှုမှ အက်ပ်တစ်ခုထည့်သွင်း၍ ဖွင့်ရန်လိုအပ်ပါသည်။"</string> <string name="carrier_app_dialog_button" msgid="7900235513678617329">"အက်ပ်ကို ရယူပါ"</string> - <string name="carrier_app_dialog_not_now" msgid="6361378684292268027">"ယခုမဟုတ်သေးပါ"</string> + <string name="carrier_app_dialog_not_now" msgid="6361378684292268027">"ယခုမလုပ်ပါ"</string> <string name="carrier_app_notification_title" msgid="8921767385872554621">"SIM အသစ်ထည့်သွင်းလိုက်ပါသည်"</string> <string name="carrier_app_notification_text" msgid="1132487343346050225">"၎င်းကိုတပ်ဆင်ရန် တို့ပါ"</string> <string name="time_picker_dialog_title" msgid="8349362623068819295">"အချိန်သတ်မှတ်ရန်"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"နောက်ထပ် အချက်အလက်များအတွက် တို့ပါ"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB အမှားစစ်ခြင်းအား ချိတ်ဆက်ထားသည်"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB ဆက်သွယ်ရေးစနစ်ကို ပိတ်ရန် တို့ပါ။"</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ဖြင့် အမှားရှာပြင်ခြင်းကို ပိတ်ရန် ရွေးပါ။"</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"ချွတ်ယွင်းချက် အစီရင်ခံစာပြုစုနေသည်..."</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ချွတ်ယွင်းချက် အစီရင်ခံစာကို မျှဝေမလား။"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ချွတ်ယွင်းမှုအစီရင်ခံစာ မျှဝေနေသည်…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"ဖြုတ်ပါ"</string> <string name="app_info" msgid="6856026610594615344">"အက်ပ်အချက်အလက်"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"စက်ပစ္စည်းကို ပြန်လည်သတ်မှတ်မလား။"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"စက်ပစ္စည်းကို ပြန်လည်သတ်မှတ်ရန် တို့ပါ"</string> <string name="demo_starting_message" msgid="5268556852031489931">"သရုပ်ပြချက်ကို စတင်နေသည်…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"စက်ပစ္စည်းကို ပြန်လည်သတ်မှတ်နေသည်…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"စက်ပစ္စည်းကို ပြန်လည်သတ်မှတ်မလား။"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"ပြောင်းလဲမှုများကို ဆုံးရှုံးသွားမည်ဖြစ်ပြီး သရုပ်ပြချက်သည် <xliff:g id="TIMEOUT">%1$s</xliff:g> စက္ကန့်အတွင်း ပြန်လည်စတင်ပါမည်…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"မလုပ်တော့"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"ယခုပြန်လည်သတ်မှတ်ပါ"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"ပိတ်ထားသည့် <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"လူအမြောက်အမြားတပြိုင်နက် ခေါ်ဆိုမှု"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"အကြံပြုချက်ပြ ပေါ့အပ် ဝင်းဒိုး"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 4eca1657e892..bdf812cbae13 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Talehjelp"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Lås nå"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Innholdet er skjult"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Innholdet er skjult i henhold til retningslinjene"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nytt varsel"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuelt tastatur"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fysisk tastatur"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Sikkerhet"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Løsne"</string> <string name="app_info" msgid="6856026610594615344">"Info om appen"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Tilbakestille enheten?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Trykk for å tilbakestille enheten"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Starter demo …"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Tilbakestiller enheten …"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Tilbakestille enheten?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Du mister eventuelle endringer, og demoen starter på nytt om <xliff:g id="TIMEOUT">%1$s</xliff:g> sekunder."</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Avbryt"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Tilbakestill nå"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> er slått av"</string> <string name="conference_call" msgid="3751093130790472426">"Konferansesamtale"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Verktøytips"</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 4d8dfc661562..a0acb8e5fd52 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"आवाज सहायता"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"अब बन्द गर्नुहोस्"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"९९९+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"लुकेका सामाग्रीहरू"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"नीतिद्वारा लुकाइएका सामग्री"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"नयाँ सूचना"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"भर्चुअल किबोर्ड"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"वास्तविक किबोर्ड"</string> <string name="notification_channel_security" msgid="7345516133431326347">"सुरक्षा"</string> @@ -1186,7 +1185,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"थप जानकारीका लागि ट्याप गर्नुहोस्"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डिबग गर्ने जडित छ"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB डिबगिङलाई असक्षम गर्न ट्याप गर्नुहोस्।"</string> - <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB डिबगिङ असक्षम पार्न चयन गर्नुहोस्।"</string> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB डिबगिङलाई असक्षम पार्न ट्याप गर्नुहोस्।"</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"बग रिपोर्ट लिँदै..."</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"बग रिपोर्टलाई साझेदारी गर्ने हो?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"बग रिपोर्टलाई साझेदारी गर्दै ..."</string> @@ -1720,14 +1719,8 @@ <string name="unpin_target" msgid="3556545602439143442">"अनपिन गर्नुहोस्"</string> <string name="app_info" msgid="6856026610594615344">"अनुप्रयोगका बारे जानकारी"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"यन्त्रलाई रिसेट गर्ने हो?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"यन्त्रलाई रिसेट गर्न ट्याप गर्नुहोस्"</string> <string name="demo_starting_message" msgid="5268556852031489931">"डेमो सुरु गर्दै…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"यन्त्रलाई रिसेट गर्दै…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"यन्त्रलाई रिसेट गर्ने हो?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"तपाईं सबै परिवर्तनहरू गुमाउनु हुनेछ र <xliff:g id="TIMEOUT">%1$s</xliff:g> सेकेन्डमा डेमो फेरि सुरु हुनेछ…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"रद्द गर्नुहोस्"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"अहिले रिसेट गर्नुहोस्"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> लाई असक्षम गरियो"</string> <string name="conference_call" msgid="3751093130790472426">"सम्मेलन कल"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"उपकरणको वर्णन"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 3e78d71d5b83..24b54f6332b2 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Spraakassistent"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Nu vergrendelen"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999 +"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Content verborgen"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Content verborgen op basis van beleid"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nieuwe melding"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtueel toetsenbord"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fysiek toetsenbord"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Beveiliging"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Losmaken"</string> <string name="app_info" msgid="6856026610594615344">"App-info"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Apparaat resetten?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Tik om apparaat te resetten"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Demo starten…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Apparaat resetten…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Apparaat resetten?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Je wijzigingen gaan verloren. De demo wordt opnieuw gestart over <xliff:g id="TIMEOUT">%1$s</xliff:g> seconden…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Annuleren"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Nu resetten"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> uitgeschakeld"</string> <string name="conference_call" msgid="3751093130790472426">"Telefonische vergadering"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Knopinfo"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 3f55342f8cff..be145422509d 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"ਵੌਇਸ ਅਸਿਸਟ"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ਹੁਣ ਲੌਕ ਕਰੋ"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"ਸਮੱਗਰੀਆਂ ਲੁਕਾਈਆਂ ਗਈਆਂ"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"ਨੀਤੀ ਦੁਆਰਾ ਸਮੱਗਰੀ ਲੁਕਾਈ ਗਈ"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"ਨਵੀਂ ਸੂਚਨਾ"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"ਆਭਾਸੀ ਕੀ-ਬੋਰਡ"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡ"</string> <string name="notification_channel_security" msgid="7345516133431326347">"ਸੁਰੱਖਿਆ"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ਡੀਬਗਿੰਗ ਕਨੈਕਟ ਕੀਤੀ"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB ਡੀਬੱਗਿੰਗ ਨੂੰ ਅਯੋਗ ਬਣਾਉਣ ਲਈ ਟੈਪ ਕਰੋ।"</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ਡੀਬੱਗਿੰਗ ਅਯੋਗ ਬਣਾਉਣ ਲਈ ਚੁਣੋ।"</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"ਬੱਗ ਰਿਪਰੋਟ ਪ੍ਰਾਪਤ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..."</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ਕੀ ਬੱਗ ਰਿਪੋਰਟ ਸਾਂਝੀ ਕਰਨੀ ਹੈ?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ਬੱਗ ਰਿਪੋਰਟ ਸਾਂਝੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"ਅਨਪਿੰਨ ਕਰੋ"</string> <string name="app_info" msgid="6856026610594615344">"ਐਪ ਜਾਣਕਾਰੀ"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"ਕੀ ਡੀਵਾਈਸ ਮੁੜ-ਸੈੱਟ ਕਰਨੀ ਹੈ?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"ਡੀਵਾਈਸ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string> <string name="demo_starting_message" msgid="5268556852031489931">"ਡੈਮੋ ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"ਡੀਵਾਈਸ ਮੁੜ-ਸੈੱਟ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"ਕੀ ਡੀਵਾਈਸ ਮੁੜ-ਸੈੱਟ ਕਰਨੀ ਹੈ?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"ਤੁਸੀਂ ਕਿਸੇ ਵੀ ਤਬਦੀਲੀਆਂ ਨੂੰ ਗੁਆ ਬੈਠੋਂਗੇ ਅਤੇ ਡੈਮੋ <xliff:g id="TIMEOUT">%1$s</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਚਾਲੂ ਕੀਤਾ ਜਾਵੇਗਾ…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"ਰੱਦ ਕਰੋ"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"ਹੁਣੇ ਮੁੜ-ਸੈੱਟ ਕਰੋ"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"ਕਾਨਫਰੰਸ ਕਾਲ"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"ਟੂਲਟਿਪ"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index cf786e5dbf13..e66847f428f8 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -236,8 +236,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Asystent głosowy"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Zablokuj teraz"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Treści ukryte"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Treść ukryta z powodu zasad"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nowe powiadomienie"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Klawiatura wirtualna"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Klawiatura fizyczna"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Bezpieczeństwo"</string> @@ -1780,14 +1779,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Odepnij"</string> <string name="app_info" msgid="6856026610594615344">"O aplikacji"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Zresetować urządzenie?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Kliknij, by zresetować urządzenie"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Uruchamiam tryb demo…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Resetuję urządzenie…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Zresetować urządzenie?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Stracisz wszystkie wprowadzone zmiany, a tryb demo uruchomi się ponownie za <xliff:g id="TIMEOUT">%1$s</xliff:g> s…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Anuluj"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Resetuj teraz"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Wyłączono: <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Połączenie konferencyjne"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Etykietka"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 22f8a3e5629c..ad38a41c543b 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Ajuda de voz"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear agora"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Conteúdo oculto"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Conteúdo ocultado pela política"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nova notificação"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Teclado virtual"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Teclado físico"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Segurança"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Liberar guia"</string> <string name="app_info" msgid="6856026610594615344">"Informações do app"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Redefinir dispositivo?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Toque para redefinir o dispositivo"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Iniciando demonstração…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Redefinindo dispositivo…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Redefinir dispositivo?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Você perderá todas as alterações. A demonstração será iniciada novamente em <xliff:g id="TIMEOUT">%1$s</xliff:g> segundos…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancelar"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Reiniciar agora"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Widget <xliff:g id="LABEL">%1$s</xliff:g> desativado"</string> <string name="conference_call" msgid="3751093130790472426">"Teleconferência"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Dica"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 068723bc3af2..8e69af9f753c 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -47,7 +47,7 @@ <string name="needPuk2" msgid="4526033371987193070">"Introduza o PUK2 para desbloquear o cartão SIM."</string> <string name="enablePin" msgid="209412020907207950">"Ação sem êxito. Ative o bloqueio do SIM/RUIM."</string> <plurals name="pinpuk_attempts" formatted="false" msgid="1251012001539225582"> - <item quantity="one">Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativa antes de o cartão SIM ficar bloqueado.</item> + <item quantity="one">Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de o cartão SIM ficar bloqueado.</item> <item quantity="other">Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas antes de o cartão SIM ficar bloqueado.</item> </plurals> <string name="imei" msgid="2625429890869005782">"IMEI"</string> @@ -216,7 +216,7 @@ <string name="bugreport_option_full_title" msgid="6354382025840076439">"Relatório completo"</string> <string name="bugreport_option_full_summary" msgid="7210859858969115745">"Utilize esta opção para uma interferência mínima do sistema quando o dispositivo não responder ou estiver demasiado lento, ou quando precisar de todas as secções de relatório. Não permite introduzir mais detalhes ou tirar capturas de ecrã adicionais."</string> <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368"> - <item quantity="one">A tirar uma captura de ecrã do relatório de erro dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundo…</item> + <item quantity="one">A tirar uma captura de ecrã do relatório de erro dentro de <xliff:g id="NUMBER_0">%d</xliff:g> segundo…</item> <item quantity="other">A tirar uma captura de ecrã do relatório de erro dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos.</item> </plurals> <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencioso"</string> @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Assist. de voz"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear agora"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Conteúdo oculto"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Conteúdo ocultado pela política"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nova notificação"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Teclado virtual"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Teclado físico"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Segurança"</string> @@ -852,7 +851,7 @@ <string name="oneMonthDurationPast" msgid="7396384508953779925">"Há 1 mês"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Há mais de 1 mês"</string> <plurals name="last_num_days" formatted="false" msgid="5104533550723932025"> - <item quantity="one">Últimos <xliff:g id="COUNT_1">%d</xliff:g> dia</item> + <item quantity="one">Último <xliff:g id="COUNT_0">%d</xliff:g> dia</item> <item quantity="other">Últimos <xliff:g id="COUNT_1">%d</xliff:g> dias</item> </plurals> <string name="last_month" msgid="3959346739979055432">"Último mês"</string> @@ -874,67 +873,67 @@ <string name="years" msgid="6881577717993213522">"anos"</string> <string name="now_string_shortest" msgid="8912796667087856402">"agora"</string> <plurals name="duration_minutes_shortest" formatted="false" msgid="3957499975064245495"> - <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> m</item> + <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> m</item> <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> m</item> </plurals> <plurals name="duration_hours_shortest" formatted="false" msgid="3552182110578602356"> - <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> h</item> + <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> h</item> <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> h</item> </plurals> <plurals name="duration_days_shortest" formatted="false" msgid="5213655532597081640"> - <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> d</item> + <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> d</item> <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> d</item> </plurals> <plurals name="duration_years_shortest" formatted="false" msgid="7848711145196397042"> - <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> a</item> + <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> a</item> <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> a</item> </plurals> <plurals name="duration_minutes_shortest_future" formatted="false" msgid="3277614521231489951"> - <item quantity="one">dentro de <xliff:g id="COUNT_1">%d</xliff:g> min</item> + <item quantity="one">dentro de <xliff:g id="COUNT_0">%d</xliff:g> min</item> <item quantity="other">dentro de <xliff:g id="COUNT_1">%d</xliff:g> min</item> </plurals> <plurals name="duration_hours_shortest_future" formatted="false" msgid="2152452368397489370"> - <item quantity="one">dentro de <xliff:g id="COUNT_1">%d</xliff:g> h</item> + <item quantity="one">dentro de <xliff:g id="COUNT_0">%d</xliff:g> h</item> <item quantity="other">dentro de <xliff:g id="COUNT_1">%d</xliff:g> h</item> </plurals> <plurals name="duration_days_shortest_future" formatted="false" msgid="8088331502820295701"> - <item quantity="one">dentro de <xliff:g id="COUNT_1">%d</xliff:g> d</item> + <item quantity="one">dentro de <xliff:g id="COUNT_0">%d</xliff:g> d</item> <item quantity="other">dentro de <xliff:g id="COUNT_1">%d</xliff:g> d</item> </plurals> <plurals name="duration_years_shortest_future" formatted="false" msgid="2317006667145250301"> - <item quantity="one">dentro de <xliff:g id="COUNT_1">%d</xliff:g> a</item> + <item quantity="one">dentro de <xliff:g id="COUNT_0">%d</xliff:g> a</item> <item quantity="other">dentro de <xliff:g id="COUNT_1">%d</xliff:g> a</item> </plurals> <plurals name="duration_minutes_relative" formatted="false" msgid="3178131706192980192"> - <item quantity="one">há <xliff:g id="COUNT_1">%d</xliff:g> minuto</item> + <item quantity="one">há <xliff:g id="COUNT_0">%d</xliff:g> minuto</item> <item quantity="other">há <xliff:g id="COUNT_1">%d</xliff:g> minutos</item> </plurals> <plurals name="duration_hours_relative" formatted="false" msgid="676894109982008411"> - <item quantity="one">há <xliff:g id="COUNT_1">%d</xliff:g> hora</item> + <item quantity="one">há <xliff:g id="COUNT_0">%d</xliff:g> hora</item> <item quantity="other">há <xliff:g id="COUNT_1">%d</xliff:g> horas</item> </plurals> <plurals name="duration_days_relative" formatted="false" msgid="2203515825765397130"> - <item quantity="one">há <xliff:g id="COUNT_1">%d</xliff:g> dia</item> + <item quantity="one">há <xliff:g id="COUNT_0">%d</xliff:g> dia</item> <item quantity="other">há <xliff:g id="COUNT_1">%d</xliff:g> dias</item> </plurals> <plurals name="duration_years_relative" formatted="false" msgid="4820062134188885734"> - <item quantity="one">há <xliff:g id="COUNT_1">%d</xliff:g> ano</item> + <item quantity="one">há <xliff:g id="COUNT_0">%d</xliff:g> ano</item> <item quantity="other">há <xliff:g id="COUNT_1">%d</xliff:g> anos</item> </plurals> <plurals name="duration_minutes_relative_future" formatted="false" msgid="4655043589817680966"> - <item quantity="one">dentro de <xliff:g id="COUNT_1">%d</xliff:g> minuto</item> + <item quantity="one">dentro de <xliff:g id="COUNT_0">%d</xliff:g> minuto</item> <item quantity="other">dentro de <xliff:g id="COUNT_1">%d</xliff:g> minutos</item> </plurals> <plurals name="duration_hours_relative_future" formatted="false" msgid="8084579714205223891"> - <item quantity="one">dentro de <xliff:g id="COUNT_1">%d</xliff:g> hora</item> + <item quantity="one">dentro de <xliff:g id="COUNT_0">%d</xliff:g> hora</item> <item quantity="other">dentro de <xliff:g id="COUNT_1">%d</xliff:g> horas</item> </plurals> <plurals name="duration_days_relative_future" formatted="false" msgid="333215369363433992"> - <item quantity="one">dentro de <xliff:g id="COUNT_1">%d</xliff:g> dia</item> + <item quantity="one">dentro de <xliff:g id="COUNT_0">%d</xliff:g> dia</item> <item quantity="other">dentro de <xliff:g id="COUNT_1">%d</xliff:g> dias</item> </plurals> <plurals name="duration_years_relative_future" formatted="false" msgid="8644862986413104011"> - <item quantity="one">dentro de <xliff:g id="COUNT_1">%d</xliff:g> ano</item> + <item quantity="one">dentro de <xliff:g id="COUNT_0">%d</xliff:g> ano</item> <item quantity="other">dentro de <xliff:g id="COUNT_1">%d</xliff:g> anos</item> </plurals> <string name="VideoView_error_title" msgid="3534509135438353077">"Problema com o vídeo"</string> @@ -1300,7 +1299,7 @@ <string name="no_matches" msgid="8129421908915840737">"Sem correspondências"</string> <string name="find_on_page" msgid="1946799233822820384">"Localizar na página"</string> <plurals name="matches_found" formatted="false" msgid="1210884353962081884"> - <item quantity="one"><xliff:g id="INDEX">%d</xliff:g> de <xliff:g id="TOTAL">%d</xliff:g></item> + <item quantity="one">1 correspondência</item> <item quantity="other"><xliff:g id="INDEX">%d</xliff:g> de <xliff:g id="TOTAL">%d</xliff:g></item> </plurals> <string name="action_mode_done" msgid="7217581640461922289">"Concluído"</string> @@ -1586,7 +1585,7 @@ <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Os PINs não correspondem. Tente novamente."</string> <string name="restr_pin_error_too_short" msgid="8173982756265777792">"O PIN é demasiado pequeno. Deve ter, no mínimo, 4 dígitos."</string> <plurals name="restr_pin_countdown" formatted="false" msgid="9061246974881224688"> - <item quantity="one">Tente novamente dentro de <xliff:g id="COUNT">%d</xliff:g> segundo</item> + <item quantity="one">Tente novamente dentro de 1 segundo</item> <item quantity="other">Tente novamente dentro de <xliff:g id="COUNT">%d</xliff:g> segundos</item> </plurals> <string name="restr_pin_try_later" msgid="973144472490532377">"Tente novamente mais tarde"</string> @@ -1619,35 +1618,35 @@ <string name="data_saver_enable_title" msgid="4674073932722787417">"Ativar a Poupança de dados?"</string> <string name="data_saver_enable_button" msgid="7147735965247211818">"Ativar"</string> <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848"> - <item quantity="one">Durante %1$d minuto (até à(s) <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> + <item quantity="one">Durante um minuto (até à(s) <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item> <item quantity="other">Durante %1$d minutos (até à(s) <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> </plurals> <plurals name="zen_mode_duration_minutes_summary_short" formatted="false" msgid="6830154222366042597"> - <item quantity="one">Durante %1$d min (até à(s) <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> + <item quantity="one">Durante 1 min (até à(s) <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item> <item quantity="other">Durante %1$d min (até à(s) <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> </plurals> <plurals name="zen_mode_duration_hours_summary" formatted="false" msgid="8152974162096743862"> - <item quantity="one">Durante %1$d hora (até à(s) <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> + <item quantity="one">Durante uma hora (até à(s) <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item> <item quantity="other">Durante %1$d horas (até à(s) <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> </plurals> <plurals name="zen_mode_duration_hours_summary_short" formatted="false" msgid="4787552595253082371"> - <item quantity="one">Durante %1$d h (até à(s) <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> + <item quantity="one">Durante 1 h (até à(s) <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item> <item quantity="other">Durante %1$d h (até à(s) <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item> </plurals> <plurals name="zen_mode_duration_minutes" formatted="false" msgid="5127407202506485571"> - <item quantity="one">Durante %d minuto</item> + <item quantity="one">Durante um minuto</item> <item quantity="other">Durante %d minutos</item> </plurals> <plurals name="zen_mode_duration_minutes_short" formatted="false" msgid="2199350154433426128"> - <item quantity="one">Durante %d min</item> + <item quantity="one">Durante 1 min</item> <item quantity="other">Durante %d min</item> </plurals> <plurals name="zen_mode_duration_hours" formatted="false" msgid="3938821308277433854"> - <item quantity="one">Durante %d hora</item> + <item quantity="one">Durante uma hora</item> <item quantity="other">Durante %d horas</item> </plurals> <plurals name="zen_mode_duration_hours_short" formatted="false" msgid="6748277774662434217"> - <item quantity="one">Durante %d h</item> + <item quantity="one">Durante 1 h</item> <item quantity="other">Durante %d h</item> </plurals> <string name="zen_mode_until" msgid="7336308492289875088">"Até às <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string> @@ -1683,7 +1682,7 @@ <string name="close_button_text" msgid="3937902162644062866">"Fechar"</string> <string name="notification_messaging_title_template" msgid="3452480118762691020">"<xliff:g id="CONVERSATION_TITLE">%1$s</xliff:g>: <xliff:g id="SENDER_NAME">%2$s</xliff:g>"</string> <plurals name="selected_count" formatted="false" msgid="7187339492915744615"> - <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionado</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selecionado</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionados</item> </plurals> <string name="default_notification_channel_label" msgid="5929663562028088222">"Sem categoria"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Soltar"</string> <string name="app_info" msgid="6856026610594615344">"Informações da aplicação"</string> <string name="negative_duration" msgid="5688706061127375131">"-<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Pretende repor o dispositivo?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Toque para repor o dispositivo"</string> <string name="demo_starting_message" msgid="5268556852031489931">"A iniciar a demonstração…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"A repor o dispositivo…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Pretende repor o dispositivo?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Perderá todas as alterações e a demonstração começará novamente dentro de <xliff:g id="TIMEOUT">%1$s</xliff:g> segundos…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancelar"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Repor agora"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> desativado"</string> <string name="conference_call" msgid="3751093130790472426">"Conferência"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Sugestão"</string> @@ -1747,7 +1740,7 @@ <string name="autofill_error_cannot_autofill" msgid="7402758580060110371">"Não é possível preencher automaticamente o conteúdo"</string> <string name="autofill_picker_no_suggestions" msgid="3908514303773350735">"Sem sugestões do preenchimento automático"</string> <plurals name="autofill_picker_some_suggestions" formatted="false" msgid="5506565809835815274"> - <item quantity="one"><xliff:g id="COUNT">%1$s</xliff:g> sugestão do preenchimento automático</item> + <item quantity="one">Uma sugestão do preenchimento automático</item> <item quantity="other"><xliff:g id="COUNT">%1$s</xliff:g> sugestões do preenchimento automático</item> </plurals> <string name="autofill_save_title" msgid="3345527308992082601">"Pretende guardar no <b><xliff:g id="LABEL">%1$s</xliff:g></b>?"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 22f8a3e5629c..ad38a41c543b 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Ajuda de voz"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear agora"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Conteúdo oculto"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Conteúdo ocultado pela política"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nova notificação"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Teclado virtual"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Teclado físico"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Segurança"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Liberar guia"</string> <string name="app_info" msgid="6856026610594615344">"Informações do app"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Redefinir dispositivo?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Toque para redefinir o dispositivo"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Iniciando demonstração…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Redefinindo dispositivo…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Redefinir dispositivo?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Você perderá todas as alterações. A demonstração será iniciada novamente em <xliff:g id="TIMEOUT">%1$s</xliff:g> segundos…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Cancelar"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Reiniciar agora"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Widget <xliff:g id="LABEL">%1$s</xliff:g> desativado"</string> <string name="conference_call" msgid="3751093130790472426">"Teleconferência"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Dica"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 84e1c968f8f6..1ccda3340569 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -233,8 +233,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Asistent vocal"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Blocați acum"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"˃999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Conținutul este ascuns"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Conținutul este ascuns conform politicii"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Notificare nouă"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Tastatură virtuală"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Tastatură fizică"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Securitate"</string> @@ -1747,14 +1746,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Anulați fixarea"</string> <string name="app_info" msgid="6856026610594615344">"Informații despre aplicație"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Resetați dispozitivul?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Atingeți pentru a reseta dispozitivul"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Se pornește demonstrația…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Se resetează dispozitivul…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Resetați dispozitivul?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Veți pierde toate modificările, iar demonstrația va începe din nou peste <xliff:g id="TIMEOUT">%1$s</xliff:g> secunde…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Anulați"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Resetați acum"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> a fost dezactivat"</string> <string name="conference_call" msgid="3751093130790472426">"Conferință telefonică"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Balon explicativ"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index b441503994b2..8fd38b598629 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -236,8 +236,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Аудиоподсказки"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Заблокировать"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Содержимое скрыто"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Содержимое скрыто в соответствии с заданными правилами"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Новое уведомление"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Виртуальная клавиатура"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Физическая клавиатура"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Безопасность"</string> @@ -1780,14 +1779,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Открепить"</string> <string name="app_info" msgid="6856026610594615344">"О приложении"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Сбросить настройки устройства?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Нажмите здесь, чтобы сбросить настройки"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Запуск деморежима…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Сброс данных…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Сбросить настройки устройства?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Все изменения будут утеряны. Деморежим будет перезапущен через <xliff:g id="TIMEOUT">%1$s</xliff:g> сек."</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Отмена"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Сбросить"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Виджет <xliff:g id="LABEL">%1$s</xliff:g> отключен"</string> <string name="conference_call" msgid="3751093130790472426">"Конференц-связь"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Подсказка"</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index bc1e43333c79..8984cc9615f4 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"හඬ සහායක"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"දැන් අගුළු දමන්න"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"සැඟවුණු සම්බන්ධතා"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"ප්රතිපත්තිය විසින් අන්තර්ගතය සඟවන ලදී"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"නව දැනුම්දීම"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"අතථ්ය යතුරු පුවරුව"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"භෞතික යතුරු පුවරුව"</string> <string name="notification_channel_security" msgid="7345516133431326347">"ආරක්ෂාව"</string> @@ -1716,14 +1715,8 @@ <string name="unpin_target" msgid="3556545602439143442">"ගලවන්න"</string> <string name="app_info" msgid="6856026610594615344">"යෙදුම් තොරතුරු"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"උපාංගය යළි සකසන්නද?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"උපාංගය යළි සැකසීමට තට්ටු කරන්න"</string> <string name="demo_starting_message" msgid="5268556852031489931">"ආදර්ශනය ආරම්භ කරමින්..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"උපාංගය යළි සකසමින්..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"උපාංගය යළි සකසන්නද?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"ඔබට යම් වෙනස් කිරීම් අහිමි වනු ඇති අතර ආදර්ශනය තත්පර <xliff:g id="TIMEOUT">%1$s</xliff:g>කින් නැවත ආරම්භ වනු ඇත…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"අවලංගු කරන්න"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"දැන් යළි සකසන්න"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"අබල කළ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"සම්මන්ත්රණ ඇමතුම"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"මෙවලම් ඉඟිය"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index f93a9bf4f5ad..f43ab8a58720 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -236,8 +236,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Hlasový asistent"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Uzamknúť"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Skrytý obsah"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Obsah je na základe pravidiel skrytý"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Nové upozornenie"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuálna klávesnica"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fyzická klávesnica"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Zabezpečenie"</string> @@ -1780,14 +1779,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Uvoľniť"</string> <string name="app_info" msgid="6856026610594615344">"Info o aplikácii"</string> <string name="negative_duration" msgid="5688706061127375131">"-<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Resetovať zariadenie?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Klepnutím resetujete zariadenie"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Spúšťa sa ukážka…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Resetuje sa zariadenie…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Resetovať zariadenie?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Prídete o všetky zmeny a ukážka sa znova spustí o <xliff:g id="TIMEOUT">%1$s</xliff:g> s…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Zrušiť"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Resetovať"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Deaktivovaná miniaplikácia <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Konferenčný hovor"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Popis"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 4d3c3b2acf63..d748ba7de2b6 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -236,8 +236,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Glas. pomočnik"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Zakleni zdaj"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999 +"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Vsebina je skrita"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Pravilnik je skril vsebino"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Novo obvestilo"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Navidezna tipkovnica"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fizična tipkovnica"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Varnost"</string> @@ -1780,14 +1779,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Odpenjanje"</string> <string name="app_info" msgid="6856026610594615344">"Podatki o aplikaciji"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Želite ponastaviti napravo?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Dotaknite se, če želite ponastaviti napravo"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Začenjanje predstavitve …"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Ponastavljanje naprave …"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Želite ponastaviti napravo?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Morebitne spremembe bodo izgubljene in predstavitev se bo začela znova čez <xliff:g id="TIMEOUT">%1$s</xliff:g> s …"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Prekliči"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Ponastavi"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> – onemogočeno"</string> <string name="conference_call" msgid="3751093130790472426">"Konferenčni klic"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Opis orodja"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index a677d71e8844..9a25c7d98897 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Ndihma zanore"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Kyç tani"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Përmbajtjet janë të fshehura"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Përmbajtja është e fshehur për shkak të politikës"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Njoftim i ri"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Tastiera virtuale"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Tastiera fizike"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Siguria"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"Trokit për më shumë informacion"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Korrigjuesi i USB-së i lidhur"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"Trokit për të çaktivizuar korrigjimin e gabimeve të USB-së."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"Përzgjidhe për të çaktivizuar korrigjimin e gabimeve të USB-së"</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Po merret raporti i defekteve në kod…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Të ndahet raporti i defektit në kod?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Po ndan raportin e defekteve në kod..."</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Zhgozhdo"</string> <string name="app_info" msgid="6856026610594615344">"Informacioni mbi aplikacionin"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Do ta rivendosësh pajisjen?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Trokit për ta rivendosur pajisjen"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Po nis demonstrimin..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Po rivendos pajisjen…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Do ta rivendosësh pajisjen?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Do të humbasësh çdo ndryshim dhe demonstrimi do të niset përsëri për <xliff:g id="TIMEOUT">%1$s</xliff:g> sekonda…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Anulo"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Rivendos tani"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> u çaktivizua"</string> <string name="conference_call" msgid="3751093130790472426">"Telefonatë konferencë"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Këshilla për veglën"</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 319f0001eb7f..8c3bbcc09b35 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -233,8 +233,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Гласовна помоћ"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Закључај одмах"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Садржај је сакривен"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Садржај је сакривен смерницама"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Ново обавештење"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Виртуелна тастатура"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Физичка тастатура"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Безбедност"</string> @@ -1747,14 +1746,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Откачи"</string> <string name="app_info" msgid="6856026610594615344">"Информације о апликацији"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Желите ли да ресетујете уређај?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Додирните да бисте ресетовали уређај"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Покрећемо демонстрацију..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Ресетујемо уређај..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Желите ли да ресетујете уређај?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Изгубићете све промене и демонстрација ће поново почети за <xliff:g id="TIMEOUT">%1$s</xliff:g> сек…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Откажи"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Ресетуј"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Виџет <xliff:g id="LABEL">%1$s</xliff:g> је онемогућен"</string> <string name="conference_call" msgid="3751093130790472426">"Конференцијски позив"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Објашњење"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 808681c3e90e..5458b2b5d407 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Lås nu"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Innehåll har dolts"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Innehåll har dolts p.g.a. en policy"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Ny avisering"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtuellt tangentbord"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fysiskt tangentbord"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Säkerhet"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Lossa"</string> <string name="app_info" msgid="6856026610594615344">"Info om appen"</string> <string name="negative_duration" msgid="5688706061127375131">"-<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Vill du återställa enheten?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Tryck om du vill återställa enheten"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Demo startas …"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Enheten återställs …"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Vill du återställa enheten?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Ändringar som du har gjort sparas inte och demon börjar om om <xliff:g id="TIMEOUT">%1$s</xliff:g> sekunder …"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Avbryt"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Återställ nu"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> har inaktiverats"</string> <string name="conference_call" msgid="3751093130790472426">"Konferenssamtal"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Beskrivning"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index afac1d3bcd0c..4c9a3bf6d621 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -228,8 +228,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Usaidizi wa Sauti"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Funga sasa"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Maudhui yamefichwa"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Maudhui yamefichwa kulingana na sera"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Arifa mpya"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Kibodi pepe"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Kibodi halisi"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Usalama"</string> @@ -1374,7 +1373,7 @@ <string name="data_usage_limit_body" msgid="291731708279614081">"Data imesitishwa kwa mzunguko uliosalia"</string> <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Kikomo cha data ya 2G-3G kimezidishwa"</string> <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Kikomo cha data cha 4G kimezidishwa"</string> - <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Kikomo cha data ya ya kifaa cha mkononi kimezidishwa"</string> + <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Umepitisha kiwango cha data ulichoweka"</string> <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Taarifa za Wi-fi zimevuka kiwanga"</string> <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> juu ya kikomo kilichobainishwa."</string> <string name="data_usage_restricted_title" msgid="5965157361036321914">"Data ya mandhari nyuma imezuiwa"</string> @@ -1712,14 +1711,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Bandua"</string> <string name="app_info" msgid="6856026610594615344">"Maelezo ya programu"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Ungependa kuweka upya mipangilio ya kifaa?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Gonga ili uweke upya kifaa"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Inaanzisha onyesho..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Inaweka upya kifaa..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Ungependa kuweka upya mipangilio ya kifaa?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Mabadiliko yoyote hayatahifadhiwa. Onyesho litaanza tena baada ya sekunde <xliff:g id="TIMEOUT">%1$s</xliff:g>..."</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Ghairi"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Weka upya sasa"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> imezimwa"</string> <string name="conference_call" msgid="3751093130790472426">"Simu ya Kongamano"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Kidirisha cha vidokezo"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 06406c62635f..b737af07057f 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"குரல் உதவி"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"இப்போது பூட்டு"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"மறைந்துள்ள உள்ளடக்கம்"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"கொள்கையின்படி உள்ளடக்கம் மறைக்கப்பட்டது"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"புதிய அறிவிப்பு"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"விர்ச்சுவல் விசைப்பலகை"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"கைமுறை விசைப்பலகை"</string> <string name="notification_channel_security" msgid="7345516133431326347">"பாதுகாப்பு"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"மேலும் தகவலுக்கு, தட்டவும்"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB பிழைதிருத்தம் இணைக்கப்பட்டது"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB பிழை திருத்தத்தை முடக்க, தட்டவும்."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB பிழைத்திருத்தத்தை முடக்க, தேர்ந்தெடுக்கவும்."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"பிழை அறிக்கையை எடுக்கிறது…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"பிழை அறிக்கையைப் பகிரவா?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"பிழை அறிக்கையைப் பகிர்கிறது…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"பின்னை அகற்று"</string> <string name="app_info" msgid="6856026610594615344">"பயன்பாட்டுத் தகவல்"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"சாதனத்தை மீட்டமைக்கவா?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"சாதனத்தை மீட்டமைக்க, தட்டவும்"</string> <string name="demo_starting_message" msgid="5268556852031489931">"டெமோவைத் தொடங்குகிறது…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"சாதனத்தை மீட்டமைக்கிறது…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"சாதனத்தை மீட்டமைக்கவா?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"மாற்றங்கள் சேமிக்கப்படாது, <xliff:g id="TIMEOUT">%1$s</xliff:g> வினாடிகளில் டெமோ மீண்டும் தொடங்கும்…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"ரத்துசெய்"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"இப்போதே மீட்டமை"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"முடக்கப்பட்டது: <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"குழு அழைப்பு"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"உதவிக்குறிப்பு"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 2a6c5b72050d..b440b9169198 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"వాయిస్ సహాయకం"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ఇప్పుడు లాక్ చేయండి"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"కంటెంట్లు దాచబడ్డాయి"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"విధానం ద్వారా కంటెంట్లు దాచబడ్డాయి"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"కొత్త నోటిఫికేషన్"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"వర్చువల్ కీబోర్డ్"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"భౌతిక కీబోర్డ్"</string> <string name="notification_channel_security" msgid="7345516133431326347">"భద్రత"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"మరింత సమాచారం కోసం నొక్కండి"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB డీబగ్గింగ్ కనెక్ట్ చేయబడింది"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB డీబగ్గింగ్ను నిలిపివేయడానికి నొక్కండి."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"డీబగ్గింగ్ని నిలిపివేయడానికి ఎంచుకోండి."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"బగ్ నివేదికను తీస్తోంది…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"బగ్ నివేదికను భాగస్వామ్యం చేయాలా?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"బగ్ నివేదికను భాగస్వామ్యం చేస్తోంది..."</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"అన్పిన్ చేయి"</string> <string name="app_info" msgid="6856026610594615344">"అనువర్తన సమాచారం"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"పరికరాన్ని రీసెట్ చేయాలా?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"పరికరాన్ని రీసెట్ చేయడానికి నొక్కండి"</string> <string name="demo_starting_message" msgid="5268556852031489931">"డెమోను ప్రారంభిస్తోంది..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"పరికరాన్ని రీసెట్ చేస్తోంది..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"పరికరాన్ని రీసెట్ చేయాలా?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"మీరు చేసిన ఏవైనా మార్పులను కోల్పోతారు మరియు డెమో <xliff:g id="TIMEOUT">%1$s</xliff:g> సెకన్లలో మళ్లీ ప్రారంభమవుతుంది…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"రద్దు చేయి"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"ఇప్పుడే రీసెట్ చేయి"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> నిలిపివేయబడింది"</string> <string name="conference_call" msgid="3751093130790472426">"కాన్ఫరెన్స్ కాల్"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"సాధనం చిట్కా"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 87a00b2b34ab..ee9b50df72fe 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"ตัวช่วยเสียง"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ล็อกเลย"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"เนื้อหาถูกซ่อนไว้"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"มีการซ่อนเนื้อหาโดยนโยบาย"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"การแจ้งเตือนใหม่"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"แป้นพิมพ์เสมือน"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"แป้นพิมพ์บนเครื่อง"</string> <string name="notification_channel_security" msgid="7345516133431326347">"ความปลอดภัย"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"เลิกปักหมุด"</string> <string name="app_info" msgid="6856026610594615344">"ข้อมูลแอป"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"รีเซ็ตอุปกรณ์ไหม"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"แตะเพื่อรีเซ็ตอุปกรณ์"</string> <string name="demo_starting_message" msgid="5268556852031489931">"กำลังเริ่มการสาธิต…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"กำลังรีเซ็ตอุปกรณ์…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"รีเซ็ตอุปกรณ์ไหม"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"การเปลี่ยนแปลงของคุณจะหายไปและการสาธิตจะเริ่มต้นอีกครั้งใน <xliff:g id="TIMEOUT">%1$s</xliff:g> วินาที…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"ยกเลิก"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"รีเซ็ตทันที"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"ปิดใช้ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"การประชุมสาย"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"เคล็ดลับเครื่องมือ"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 866292f22d49..ebf689e41087 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"I-lock ngayon"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Nakatago ang mga content"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Itinago ang mga content alinsunod sa patakaran"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Bagong notification"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtual na keyboard"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Pisikal na keyboard"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Seguridad"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"I-unpin"</string> <string name="app_info" msgid="6856026610594615344">"Impormasyon ng app"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Gusto mo bang i-reset ang device?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Mag-tap upang i-reset ang device"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Sinisimulan ang demo…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Nire-reset ang device…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Gusto mo bang i-reset ang device?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Mawawala mo ang anumang mga pagbabago at magsisimulang muli ang demo pagkalipas ng <xliff:g id="TIMEOUT">%1$s</xliff:g> (na) segundo…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Kanselahin"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"I-reset ngayon"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Na-disable ang <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Conference Call"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Tooltip"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 58a69e55160c..ab6365d77ef9 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Sesli Yardım"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Şimdi kilitle"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"İçerik gizlendi"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"İçerikler politika nedeniyle gizlendi"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Yeni bildirim"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Sanal klavye"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Fiziksel klavye"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Güvenlik"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Sabitlemeyi kaldır"</string> <string name="app_info" msgid="6856026610594615344">"Uygulama bilgileri"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Cihaz sıfırlansın mı?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Cihazı sıfırlamak için dokunun"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Demo başlatılıyor…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Cihaz sıfırlanıyor…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Cihaz sıfırlansın mı?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Değişiklikleri kaybedeceksiniz ve demo <xliff:g id="TIMEOUT">%1$s</xliff:g> saniye içinde tekrar başlayacak…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"İptal"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Şimdi sıfırla"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> devre dışı"</string> <string name="conference_call" msgid="3751093130790472426">"Konferans Çağrısı"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"İpucu"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 9399176cf25a..4eafbe21e3cf 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -236,8 +236,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Голос. підказки"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Блокувати зараз"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Вміст сховано"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Вміст сховано згідно з правилом"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Нове сповіщення"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Віртуальна клавіатура"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Фізична клавіатура"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Безпека"</string> @@ -1780,14 +1779,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Відкріпити"</string> <string name="app_info" msgid="6856026610594615344">"Про додаток"</string> <string name="negative_duration" msgid="5688706061127375131">"-<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Скинути налаштування пристрою?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Торкніться, щоб скинути налаштування пристрою"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Запуск демонстрації…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Скидання налаштувань пристрою…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Скинути налаштування пристрою?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Ви втратите всі зміни, а демонстрація знову почнеться через <xliff:g id="TIMEOUT">%1$s</xliff:g> с…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Скасувати"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Скинути"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> вимкнено"</string> <string name="conference_call" msgid="3751093130790472426">"Конференц-виклик"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Спливаюча підказка"</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index 33f74daa443c..a51cf95f0eb3 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"ابھی مقفل کریں"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"مواد مخفی ہیں"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"مواد پالیسی کے تحت مخفی ہے"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"نئی اطلاع"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"ورچوئل کی بورڈ"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"فزیکل کی بورڈ"</string> <string name="notification_channel_security" msgid="7345516133431326347">"سیکیورٹی"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"مزید معلومات کے لیے تھپتھپائيں"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ڈیبگ کرنا مربوط ہو گیا"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"USB ڈیبگنگ کو غیر فعال کرنے کیلئے تھپتھپائیں۔"</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB ڈیبگ کرنے کو غیر فعال کرنے کیلئے منتخب کریں۔"</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"بگ رپورٹ لی جا رہی ہے…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"بگ رپورٹ کا اشتراک کریں؟"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"بگ رپورٹ کا اشتراک ہو رہا ہے…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"پن ہٹائیں"</string> <string name="app_info" msgid="6856026610594615344">"ایپ کی معلومات"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"آلہ ری سیٹ کریں؟"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"آلہ ری سیٹ کرنے کیلئے تھپتھپائیں"</string> <string name="demo_starting_message" msgid="5268556852031489931">"ڈیمو شروع ہو رہا ہے…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"آلہ ری سیٹ ہو رہا ہے…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"آلہ ری سیٹ کریں؟"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"آپ کی تمام تبدیلیاں ضائع ہو جائیں گی اور ڈیمو <xliff:g id="TIMEOUT">%1$s</xliff:g> سیکنڈز میں دوبارہ شروع ہوگا…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"منسوخ کریں"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"ابھی ری سیٹ کریں"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"غیر فعال کردہ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"کانفرنس کال"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"ٹول ٹپ"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 07f41fc94137..a448a18770ea 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Ovozli yordam"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Qulflash"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Kontent yashirildi"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Qoidaga muvofiq kontent yashirilgan"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Yangi bildirishnoma"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Virtual klaviatura"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Tashqi klaviatura"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Xavfsizlik"</string> @@ -1180,8 +1179,7 @@ <string name="usb_unsupported_audio_accessory_message" msgid="7811865061127547035">"Tafsilotlar uchun bosing"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB orqali nosozliklarni tuzatish"</string> <string name="adb_active_notification_message" msgid="4948470599328424059">"Faolsizlantirish uchun bu yerga bosing."</string> - <!-- no translation found for adb_active_notification_message (8470296818270110396) --> - <skip /> + <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB orqali nosozliklarni tuzatishni o‘chirib qo‘yish uchun bosing."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"Xatoliklar hisoboti olinmoqda…"</string> <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Xatoliklar hisoboti yuborilsinmi?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Xatoliklar hisoboti yuborilmoqda…"</string> @@ -1715,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Olib tashlash"</string> <string name="app_info" msgid="6856026610594615344">"Ilova haqida"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Qurilma asl holatga qaytarilsinmi?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Qurilmani asl holatga qaytarish uchun bosing"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Demo boshlanmoqda…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"Qurilma asl holatga qaytarilmoqda…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Qurilma asl holatga qaytarilsinmi?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Har qanday o‘zgarishlar o‘chib ketadi va demo <xliff:g id="TIMEOUT">%1$s</xliff:g> soniyadan so‘ng yana qayta ishga tushadi…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Bekor qilish"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Asl holatga qaytarish"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"<xliff:g id="LABEL">%1$s</xliff:g> vidjeti o‘chirilgan"</string> <string name="conference_call" msgid="3751093130790472426">"Konferens-aloqa"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Maslahat oynasi"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 661ff16040d2..9395b4ffd511 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Trợ lý thoại"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Khóa ngay"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Nội dung bị ẩn"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Nội dung bị ẩn theo chính sách"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Thông báo mới"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Bàn phím ảo"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Bàn phím thực"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Bảo mật"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Bỏ ghim"</string> <string name="app_info" msgid="6856026610594615344">"Thông tin ứng dụng"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Đặt lại thiết bị?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Nhấn để đặt lại thiết bị"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Đang bắt đầu bản trình diễn..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Đang đặt lại thiết bị..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Đặt lại thiết bị?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Bạn sẽ bị mất mọi thay đổi và bản trình diễn sẽ bắt đầu lại sau <xliff:g id="TIMEOUT">%1$s</xliff:g> giây…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Hủy"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Đặt lại ngay bây giờ"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"Đã tắt <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"Cuộc gọi nhiều bên"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Chú giải công cụ"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 40ab9e449e9b..8d0b18d8d08c 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"语音助理"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"立即锁定"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"内容已隐藏"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"内容已隐藏(根据政策规定)"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"新通知"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"虚拟键盘"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"实体键盘"</string> <string name="notification_channel_security" msgid="7345516133431326347">"安全性"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"取消固定"</string> <string name="app_info" msgid="6856026610594615344">"应用信息"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"要重置设备吗?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"点按即可重置设备"</string> <string name="demo_starting_message" msgid="5268556852031489931">"正在启动演示模式…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"正在重置设备…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"要重置设备吗?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"您将丢失所有更改,而且演示模式将在 <xliff:g id="TIMEOUT">%1$s</xliff:g> 秒后重新启动…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"取消"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"立即重置"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"已停用的<xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"电话会议"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"提示"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 8644877153f4..69fb98bc440c 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"語音助手"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"立即鎖定"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"內容已隱藏"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"已根據政策隱藏內容"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"新通知"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"虛擬鍵盤"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"實體鍵盤"</string> <string name="notification_channel_security" msgid="7345516133431326347">"安全性"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"取消固定"</string> <string name="app_info" msgid="6856026610594615344">"應用程式資料"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"要重設裝置嗎?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"輕按即可重設裝置"</string> <string name="demo_starting_message" msgid="5268556852031489931">"正在開始示範…"</string> <string name="demo_restarting_message" msgid="952118052531642451">"正在重設裝置…"</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"要重設裝置嗎?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"系統將不會儲存變更,示範將於 <xliff:g id="TIMEOUT">%1$s</xliff:g> 秒後重新開始…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"取消"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"立即重設"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"「<xliff:g id="LABEL">%1$s</xliff:g>」已停用"</string> <string name="conference_call" msgid="3751093130790472426">"會議通話"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"提示"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 9b1d9523464e..39dd04ab7acd 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"語音小幫手"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"立即鎖定"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"超過 999"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"內容已隱藏"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"內容已依據政策隱藏"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"新通知"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"虛擬鍵盤"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"實體鍵盤"</string> <string name="notification_channel_security" msgid="7345516133431326347">"安全性"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"取消固定"</string> <string name="app_info" msgid="6856026610594615344">"應用程式資訊"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"要重設裝置嗎?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"輕觸即可重設裝置"</string> <string name="demo_starting_message" msgid="5268556852031489931">"正在啟動示範模式..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"正在重設裝置..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"要重設裝置嗎?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"系統不會儲存你所做的變更,示範模式將於 <xliff:g id="TIMEOUT">%1$s</xliff:g> 秒後重新開始…"</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"取消"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"立即重設"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"已停用的<xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"電話會議"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"工具提示"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index d144ad7e7d20..6f2b441bf52c 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -230,8 +230,7 @@ <string name="global_action_voice_assist" msgid="7751191495200504480">"Isisekeli sezwi"</string> <string name="global_action_lockdown" msgid="8751542514724332873">"Khiya manje"</string> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Okuqukethwe kufihliwe"</string> - <string name="notification_hidden_by_policy_text" msgid="9004631276932584600">"Okuqukethwe kufihlwe inqubomgomo"</string> + <string name="notification_hidden_text" msgid="6351207030447943784">"Isaziso esisha"</string> <string name="notification_channel_virtual_keyboard" msgid="6969925135507955575">"Ikhibhodi ebonakalayo"</string> <string name="notification_channel_physical_keyboard" msgid="7297661826966861459">"Ikhibhodi ephathekayo"</string> <string name="notification_channel_security" msgid="7345516133431326347">"Ukuphepha"</string> @@ -1714,14 +1713,8 @@ <string name="unpin_target" msgid="3556545602439143442">"Susa ukuphina"</string> <string name="app_info" msgid="6856026610594615344">"Ulwazi lohlelo lokusebenza"</string> <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="reset_retail_demo_mode_title" msgid="2370249087943803584">"Setha kabusha idivayisi?"</string> - <string name="reset_retail_demo_mode_text" msgid="5481925817590883246">"Thepha ukuze usethe kabusha idivayisi"</string> <string name="demo_starting_message" msgid="5268556852031489931">"Iqalisa i-demo..."</string> <string name="demo_restarting_message" msgid="952118052531642451">"Isetha kabusha idivayisi..."</string> - <string name="demo_user_inactivity_timeout_title" msgid="6596109959002331334">"Setha kabusha idivayisi?"</string> - <string name="demo_user_inactivity_timeout_countdown" msgid="5675588824402569506">"Uzolahlekelwa inoma iluphi ushintsho futhi idemo izoqala futhi kumasekhondi angu-<xliff:g id="TIMEOUT">%1$s</xliff:g>..."</string> - <string name="demo_user_inactivity_timeout_left_button" msgid="5314271347014802475">"Khansela"</string> - <string name="demo_user_inactivity_timeout_right_button" msgid="5019306703066964808">"Setha kabusha manje"</string> <string name="suspended_widget_accessibility" msgid="6712143096475264190">"I-<xliff:g id="LABEL">%1$s</xliff:g> ekhutshaziwe"</string> <string name="conference_call" msgid="3751093130790472426">"Ikholi yengqungquthela"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"Ithulithiphu"</string> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index dd840b0e5b10..8151ceb26407 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -69,6 +69,9 @@ <!-- Max height of the autofill data set picker as a fraction of the screen height --> <attr name="autofillDatasetPickerMaxHeight" format="reference" /> + <!-- Max height of the the autofill save custom subtitle as a fraction of the screen width/height --> + <attr name="autofillSaveCustomSubtitleMaxHeight" format="reference" /> + <!-- Default disabled alpha for widgets that set enabled/disabled alpha programmatically. --> <attr name="disabledAlpha" format="float" /> <!-- The alpha applied to the foreground color to create the primary text color. --> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index bc02ea021632..40380100121a 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -603,10 +603,6 @@ during voice calls --> <bool translatable="false" name="config_wifi_framework_enable_voice_call_sar_tx_power_limit">false</bool> - <!-- Integer indicating the value that framework needs to set the tx power to for meeting SAR requirements - during voice calls --> - <integer translatable="false" name="config_wifi_framework_voice_call_sar_tx_power_limit_in_dbm">0</integer> - <!-- Wifi driver supports batched scan --> <bool translatable="false" name="config_wifi_batched_scan_supported">false</bool> @@ -1677,6 +1673,10 @@ The size of the WAL file is also constrained by 'db_journal_size_limit'. --> <integer name="db_wal_autocheckpoint">100</integer> + <!-- The number of milliseconds that SQLite connection is allowed to be idle before it + is closed and removed from the pool --> + <integer name="db_default_idle_connection_timeout">30000</integer> + <!-- Max space (in MB) allocated to DownloadManager to store the downloaded files if they are to be stored in DownloadManager's data dir, which typically is /data/data/com.android.providers.downloads/files --> @@ -1889,10 +1889,12 @@ states. --> <bool name="config_dozeAlwaysOnDisplayAvailable">false</bool> - <!-- Whether the display hardware requires we go to the off state before transitioning - out of any doze states. --> - <bool name="config_displayTransitionOffAfterDoze">false</bool> + <!-- Whether the display blanks itself when transitioning from a doze to a non-doze state --> + <bool name="config_displayBlanksAfterDoze">false</bool> + <!-- True if the display hardware only has brightness buckets rather than a full range of + backlight values --> + <bool name="config_displayBrightnessBucketsInDoze">false</bool> <!-- Power Management: Specifies whether to decouple the auto-suspend state of the device from the display on/off state. @@ -3008,6 +3010,8 @@ <string name="config_headlineFontFamily" translatable="false"></string> <!-- Name of a font family to use for headlines. Defaults to sans-serif-light --> <string name="config_headlineFontFamilyLight" translatable="false">sans-serif-light</string> + <!-- Allows setting custom fontFeatureSettings on specific text. --> + <string name="config_headlineFontFeatureSettings" translatable="false"></string> <!-- An array of packages that need to be treated as type system in battery settings --> <string-array translatable="false" name="config_batteryPackageTypeSystem"> diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index 743f4ad9efeb..12feba941103 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -30,7 +30,7 @@ will be displayed in the app launcher and elsewhere. --> <dimen name="app_icon_size">48dip</dimen> - <dimen name="toast_y_offset">64dip</dimen> + <dimen name="toast_y_offset">24dp</dimen> <!-- Height of the status bar --> <dimen name="status_bar_height">24dp</dimen> <!-- Height of the bottom navigation / system bar. --> @@ -237,9 +237,6 @@ <!-- The minimum height of the content if there are at least two lines or a picture--> <dimen name="notification_min_content_height">41dp</dimen> - <!-- The small size of the image if the height drawing doesn't work anymore --> - <dimen name="media_notification_expanded_image_small_size">72dp</dimen> - <!-- The size of the media actions in the media notification. --> <dimen name="media_notification_action_button_size">48dp</dimen> @@ -598,4 +595,7 @@ <!-- Max width/height of the autofill data set picker as a fraction of the screen width/height --> <dimen name="autofill_dataset_picker_max_size">90%</dimen> + <!-- Max height of the the autofill save custom subtitle as a fraction of the screen width/height --> + <dimen name="autofill_save_custom_subtitle_max_height">20%</dimen> + </resources> diff --git a/core/res/res/values/locale_config.xml b/core/res/res/values/locale_config.xml index 0ba8b578a1c1..04ea0771f8e9 100644 --- a/core/res/res/values/locale_config.xml +++ b/core/res/res/values/locale_config.xml @@ -380,7 +380,6 @@ <item>nl-NL</item> <!-- Dutch (Netherlands) --> <item>nl-SR</item> <!-- Dutch (Suriname) --> <item>nl-SX</item> <!-- Dutch (Sint Maarten) --> - <item>nmg-CM</item> <!-- Kwasio (Cameroon) --> <item>nn-NO</item> <!-- Norwegian Nynorsk (Norway) --> <item>nnh-CM</item> <!-- Ngiemboon (Cameroon) --> <item>nus-SS</item> <!-- Nuer (South Sudan) --> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 4b3440242817..074c0327d992 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -218,7 +218,7 @@ </string-array> <!-- WFC Operator Error Messages showed as notifications --> <string-array name="wfcOperatorErrorNotificationMessages"> - <item>Register with your carrier</item> + <item>Register with your carrier (Error code: <xliff:g id="code" example="REG09 - No 911 Address">%1$s</xliff:g>)</item> </string-array> <!-- Template for showing mobile network operator name while WFC is active --> <string-array name="wfcSpnFormats"> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 5c6e3df3ac33..e14aa149b1c7 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -956,7 +956,8 @@ please see styles_device_defaults.xml. </style> <style name="TextAppearance.Toast"> - <item name="fontFamily">sans-serif-condensed</item> + <item name="fontFamily">sans-serif</item> + <item name="textSize">14sp</item> </style> <style name="TextAppearance.Tooltip"> @@ -1492,6 +1493,12 @@ please see styles_device_defaults.xml. <item name="background">@drawable/autofill_dataset_picker_background</item> </style> + <!-- @hide --> + <style name="AutofillSaveAnimation"> + <item name="android:windowEnterAnimation">@anim/slide_in_up</item> + <item name="android:windowExitAnimation">@anim/slide_out_down</item> + </style> + <!-- The style for the container of media actions in a notification. --> <!-- @hide --> <style name="NotificationMediaActionContainer"> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 939ec531f384..f392ea0e3833 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -241,6 +241,7 @@ <java-symbol type="attr" name="autofilledHighlight"/> <java-symbol type="attr" name="autofillDatasetPickerMaxWidth"/> <java-symbol type="attr" name="autofillDatasetPickerMaxHeight"/> + <java-symbol type="attr" name="autofillSaveCustomSubtitleMaxHeight"/> <java-symbol type="bool" name="action_bar_embed_tabs" /> <java-symbol type="bool" name="action_bar_expanded_action_views_exclusive" /> <java-symbol type="bool" name="config_avoidGfxAccel" /> @@ -314,7 +315,6 @@ <java-symbol type="bool" name="config_wifi_framework_enable_associated_network_selection" /> <java-symbol type="bool" name="config_wifi_only_link_same_credential_configurations" /> <java-symbol type="bool" name="config_wifi_framework_enable_voice_call_sar_tx_power_limit" /> - <java-symbol type="integer" name="config_wifi_framework_voice_call_sar_tx_power_limit_in_dbm" /> <java-symbol type="bool" name="config_wifi_enable_disconnection_debounce" /> <java-symbol type="bool" name="config_wifi_revert_country_code_on_cellular_loss" /> <java-symbol type="bool" name="config_wifi_enable_wifi_firmware_debugging" /> @@ -428,6 +428,7 @@ <java-symbol type="integer" name="db_connection_pool_size" /> <java-symbol type="integer" name="db_journal_size_limit" /> <java-symbol type="integer" name="db_wal_autocheckpoint" /> + <java-symbol type="integer" name="db_default_idle_connection_timeout" /> <java-symbol type="integer" name="config_soundEffectVolumeDb" /> <java-symbol type="integer" name="config_lockSoundVolumeDb" /> <java-symbol type="integer" name="config_multiuserMaximumUsers" /> @@ -2626,7 +2627,6 @@ <java-symbol type="string" name="new_sms_notification_title" /> <java-symbol type="string" name="new_sms_notification_content" /> - <java-symbol type="dimen" name="media_notification_expanded_image_small_size" /> <java-symbol type="dimen" name="media_notification_expanded_image_margin_bottom" /> <java-symbol type="dimen" name="notification_content_image_margin_end" /> @@ -2897,7 +2897,6 @@ <java-symbol type="id" name="autofill" /> <java-symbol type="id" name="autofill_save_custom_subtitle" /> <java-symbol type="id" name="autofill_save_title" /> - <java-symbol type="id" name="autofill_save_subtitle" /> <java-symbol type="id" name="autofill_save_no" /> <java-symbol type="id" name="autofill_save_yes" /> <java-symbol type="id" name="autofill_save_close" /> @@ -2920,7 +2919,9 @@ <java-symbol type="string" name="autofill_save_type_email_address" /> <java-symbol type="drawable" name="autofill_dataset_picker_background" /> <java-symbol type="style" name="AutofillDatasetPicker" /> + <java-symbol type="style" name="AutofillSaveAnimation" /> <java-symbol type="dimen" name="autofill_dataset_picker_max_size"/> + <java-symbol type="dimen" name="autofill_save_custom_subtitle_max_height"/> <java-symbol type="dimen" name="notification_big_picture_max_height"/> <java-symbol type="dimen" name="notification_big_picture_max_width"/> @@ -3039,7 +3040,8 @@ <java-symbol type="bool" name="config_handleVolumeKeysInWindowManager" /> <java-symbol type="integer" name="config_inCallNotificationVolumeRelative" /> <java-symbol type="bool" name="config_dozeAlwaysOnDisplayAvailable" /> - <java-symbol type="bool" name="config_displayTransitionOffAfterDoze" /> + <java-symbol type="bool" name="config_displayBlanksAfterDoze" /> + <java-symbol type="bool" name="config_displayBrightnessBucketsInDoze" /> <java-symbol type="integer" name="config_storageManagerDaystoRetainDefault" /> <java-symbol type="string" name="config_headlineFontFamily" /> <java-symbol type="string" name="config_headlineFontFamilyLight" /> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 383ae5d577ce..9c3d8ebfa505 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -453,6 +453,9 @@ please see themes_device_defaults.xml. <!-- Autofill: max width/height of the dataset picker as a fraction of screen size --> <item name="autofillDatasetPickerMaxWidth">@dimen/autofill_dataset_picker_max_size</item> <item name="autofillDatasetPickerMaxHeight">@dimen/autofill_dataset_picker_max_size</item> + + <!-- Autofill: max height of custom save subtitle as a fraction of screen size --> + <item name="autofillSaveCustomSubtitleMaxHeight">@dimen/autofill_save_custom_subtitle_max_height</item> </style> <!-- Variant of {@link #Theme} with no title bar --> diff --git a/core/tests/coretests/src/android/database/DatabaseGeneralTest.java b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java index 7800f4ab0598..f97d51d3a38a 100644 --- a/core/tests/coretests/src/android/database/DatabaseGeneralTest.java +++ b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java @@ -25,6 +25,8 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDebug; import android.database.sqlite.SQLiteException; import android.os.Parcel; +import android.support.test.InstrumentationRegistry; +import android.support.test.uiautomator.UiDevice; import android.test.AndroidTestCase; import android.test.PerformanceTestCase; import android.test.suitebuilder.annotation.LargeTest; @@ -1185,4 +1187,38 @@ public class DatabaseGeneralTest extends AndroidTestCase implements PerformanceT fail("unexpected"); } } + + @MediumTest + public void testCloseIdleConnection() throws Exception { + mDatabase.close(); + SQLiteDatabase.OpenParams params = new SQLiteDatabase.OpenParams.Builder() + .setIdleConnectionTimeout(1000).build(); + mDatabase = SQLiteDatabase.openDatabase(mDatabaseFile.getPath(), params); + // Wait a bit and check that connection is still open + Thread.sleep(100); + String output = executeShellCommand("dumpsys dbinfo " + getContext().getPackageName()); + assertTrue("Connection #0 should be open. Output: " + output, + output.contains("Connection #0:")); + + // Now cause idle timeout and check that connection is closed + Thread.sleep(1000); + output = executeShellCommand("dumpsys dbinfo " + getContext().getPackageName()); + assertFalse("Connection #0 should be closed. Output: " + output, + output.contains("Connection #0:")); + } + + @SmallTest + public void testSetIdleConnectionTimeoutValidation() throws Exception { + try { + new SQLiteDatabase.OpenParams.Builder().setIdleConnectionTimeout(-1).build(); + fail("Negative timeout should be rejected"); + } catch (IllegalArgumentException expected) { + } + } + + private String executeShellCommand(String cmd) throws Exception { + return UiDevice.getInstance( + InstrumentationRegistry.getInstrumentation()).executeShellCommand(cmd); + } + } diff --git a/graphics/java/android/graphics/LeakyTypefaceStorage.java b/graphics/java/android/graphics/LeakyTypefaceStorage.java new file mode 100644 index 000000000000..618e60d442d7 --- /dev/null +++ b/graphics/java/android/graphics/LeakyTypefaceStorage.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2017 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.graphics; + +import com.android.internal.annotations.GuardedBy; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.os.Parcel; +import android.os.Process; +import android.util.ArrayMap; + +import java.util.ArrayList; + +/** + * This class is used for Parceling Typeface object. + * Note: Typeface object can not be passed over the process boundary. + * + * @hide + */ +public class LeakyTypefaceStorage { + private static final Object sLock = new Object(); + + @GuardedBy("sLock") + private static final ArrayList<Typeface> sStorage = new ArrayList<>(); + @GuardedBy("sLock") + private static final ArrayMap<Typeface, Integer> sTypefaceMap = new ArrayMap<>(); + + /** + * Write typeface to parcel. + * + * You can't transfer Typeface to a different process. {@link readTypefaceFromParcel} will + * return {@code null} if the {@link readTypefaceFromParcel} is called in a different process. + * + * @param typeface A {@link Typeface} to be written. + * @param parcel A {@link Parcel} object. + */ + public static void writeTypefaceToParcel(@Nullable Typeface typeface, @NonNull Parcel parcel) { + parcel.writeInt(Process.myPid()); + synchronized (sLock) { + final int id; + final Integer i = sTypefaceMap.get(typeface); + if (i != null) { + id = i.intValue(); + } else { + id = sStorage.size(); + sStorage.add(typeface); + sTypefaceMap.put(typeface, id); + } + parcel.writeInt(id); + } + } + + /** + * Read typeface from parcel. + * + * If the {@link Typeface} was created in another process, this method returns null. + * + * @param parcel A {@link Parcel} object + * @return A {@link Typeface} object. + */ + public static @Nullable Typeface readTypefaceFromParcel(@NonNull Parcel parcel) { + final int pid = parcel.readInt(); + final int typefaceId = parcel.readInt(); + if (pid != Process.myPid()) { + return null; // The Typeface was created and written in another process. + } + synchronized (sLock) { + return sStorage.get(typefaceId); + } + } +} diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java index 30c1fff5e6ee..7e23ee152ed9 100644 --- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java +++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java @@ -55,8 +55,6 @@ public class DeviceChooserActivity extends Activity { Log.e(LOG_TAG, "About to show UI, but no devices to show"); } - mPairButton = findViewById(R.id.button_pair); - if (getService().mRequest.isSingleDevice()) { setContentView(R.layout.device_confirmation); final DeviceFilterPair selectedDevice = getService().mDevicesFound.get(0); @@ -64,11 +62,13 @@ public class DeviceChooserActivity extends Activity { R.string.confirmation_title, getCallingAppName(), selectedDevice.getDisplayName()), 0)); + mPairButton = findViewById(R.id.button_pair); mPairButton.setOnClickListener(v -> onDeviceConfirmed(getService().mSelectedDevice)); getService().mSelectedDevice = selectedDevice; onSelectionUpdate(); } else { setContentView(R.layout.device_chooser); + mPairButton = findViewById(R.id.button_pair); mPairButton.setVisibility(View.GONE); setTitle(Html.fromHtml(getString(R.string.chooser_title, getCallingAppName()), 0)); mDeviceListView = findViewById(R.id.device_list); diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml index 174789f43229..eac6d36164da 100644 --- a/packages/PrintSpooler/res/values-pt-rPT/strings.xml +++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml @@ -56,7 +56,7 @@ <string name="print_select_printer" msgid="7388760939873368698">"Selecionar impressora"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Esquecer impressora"</string> <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> - <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> printers found</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> impressora encontrada</item> <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item> </plurals> <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> – <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string> @@ -76,7 +76,7 @@ <string name="disabled_services_title" msgid="7313253167968363211">"Serviços desativados"</string> <string name="all_services_title" msgid="5578662754874906455">"Todos os serviços"</string> <plurals name="print_services_recommendation_subtitle" formatted="false" msgid="5678487708807185138"> - <item quantity="one">Install to discover <xliff:g id="COUNT_1">%1$s</xliff:g> printers</item> + <item quantity="one">Instale para detetar <xliff:g id="COUNT_0">%1$s</xliff:g> impressora</item> <item quantity="other">Instale para detetar <xliff:g id="COUNT_1">%1$s</xliff:g> impressoras</item> </plurals> <string name="printing_notification_title_template" msgid="295903957762447362">"A imprimir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index 2cb292e1a814..c174d5cc1d41 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Gekoppel via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Beskikbaar via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Gekoppel, geen internet nie"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Toegangspunt is tydelik vol"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Baie stadig"</string> <string name="speed_label_slow" msgid="813109590815810235">"Stadig"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi twee stawe."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi drie stawe."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi-sein vol."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Oop netwerk"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Veilige netwerk"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android-bedryfstelsel"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Verwyderde programme"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Verwyderde programme en gebruikers"</string> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index 8d220e2ea95e..e1f61079c3c7 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"በ%1$s በኩል መገናኘት"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"በ%1$s በኩል የሚገኝ"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ተገናኝቷል፣ ምንም በይነመረብ የለም"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"የመዳረሻ ነጥብ ለጊዜው ሞልቷል"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"በጣም ቀርፋፋ"</string> <string name="speed_label_slow" msgid="813109590815810235">"አዘግይ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"እሺ"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"ሁለት የWiFi አሞሌዎች።"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"ሦስት የWiFi አሞሌዎች።"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"የWiFi ምልክት ሙሉ ነው።"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"አውታረ መረብ ክፈት"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ደህንነቱ የተጠበቀ አውታረ መረብ"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android ስርዓተ ክወና"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"የተወገዱ መተግበሪያዎች"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"የተወገዱ መተግበሪያዎች እና ተጠቃሚዎች"</string> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index f076d5680e88..c7d825047cb5 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"تم الاتصال عبر %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"متوفرة عبر %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"متصلة، ولا يتوفر إنترنت"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"نقطة الدخول ممتلئة مؤقتًا"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"بطيئة جدًا"</string> <string name="speed_label_slow" msgid="813109590815810235">"بطيئة"</string> <string name="speed_label_okay" msgid="2331665440671174858">"موافق"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"إشارة Wi-Fi تتكون من شريطين."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"إشارة Wi-Fi تتكون من ثلاثة أشرطة."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"إشارة Wi-Fi كاملة."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"شبكة مفتوحة"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"شبكة محمية بكلمة مرور"</string> <string name="process_kernel_label" msgid="3916858646836739323">"نظام التشغيل Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"التطبيقات المزالة"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"التطبيقات والمستخدمون الذين تمت إزالتهم"</string> diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index 8c5206b1c075..34736c649ba8 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s vasitəsilə qoşuludur"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s vasitəsilə əlçatandır"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Qoşuludur, internet yoxdur"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Giriş nöqtəsi müvəqqəti olaraq doludur"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Çox Yavaş"</string> <string name="speed_label_slow" msgid="813109590815810235">"Yavaş"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi iki xətdir."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi üç xətdir."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi siqnalı tamdır."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Açıq şəbəkə"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Təhlükəsiz şəbəkə"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Silinmiş tətbiqlər"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Tətbiqləri və istifadəçiləri silin"</string> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index b2cf7810ef1d..bbffe8f94e17 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Veza je uspostavljena preko pristupne tačke %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupna je preko pristupne tačke %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Veza je uspostavljena, nema interneta"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna tačka je privremeno zauzeta"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Veoma spora"</string> <string name="speed_label_slow" msgid="813109590815810235">"Spora"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Potvrdi"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi signal ima dve crte."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi signal ima tri crte."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal je najjači."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Otvorena mreža"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Bezbedna mreža"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Uklonjene aplikacije"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Uklonjene aplikacije i korisnici"</string> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index e7030b3238c7..aaf7e9a2f0ca 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Падлучана праз %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Даступна праз %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Падлучана, няма інтэрнэту"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Пункт доступу часова заняты"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Вельмі павольная"</string> <string name="speed_label_slow" msgid="813109590815810235">"Павольная"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Два слупкi Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Тры слупкi Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Поўны сігнал Wi-Fi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Адкрытая сетка"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Бяспечная сетка"</string> <string name="process_kernel_label" msgid="3916858646836739323">"АС Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Выдаленыя прыкладанні"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Выдаленыя прыкладанні і карыстальнiкi"</string> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index 33f801783b62..628234cea488 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Установена е връзка през „%1$s“"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Мрежата е достъпна през „%1$s“"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Установена е връзка – няма достъп до интернет"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Точката за достъп временно е пълна"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Много бавна"</string> <string name="speed_label_slow" msgid="813109590815810235">"Бавна"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ОK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi е с две чертички."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi е с три чертички."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Сигналът за Wi-Fi е пълен."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Отворена мрежа"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Защитена мрежа"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android (ОС)"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Премахнати приложения"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Премахнати приложения и потребители"</string> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index 1fcb669348fa..6c8ff8ceb9dd 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s মাধ্যমে সংযুক্ত হয়েছে"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s এর মাধ্যমে উপলব্ধ"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"সংযুক্ত, ইন্টারনেট নেই"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"এই মুহূর্তে অ্যাক্সেস পয়েন্টের কোনও কানেকশন ফাঁকা নেই"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"খুব ধীরে"</string> <string name="speed_label_slow" msgid="813109590815810235">"ধীরে"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ঠিক আছে"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"ওয়াই ফাই এ দুইটি দণ্ড৷"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"ওয়াই ফাই এ তিনটি দণ্ড৷"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"ওয়াই ফাই এ সম্পূর্ণ সিগন্যাল৷"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"খোলা নেটওয়ার্ক"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"সুরক্ষিত নেটওয়ার্ক"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"সরানো অ্যাপ্লিকেশানগুলি"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"সরানো অ্যাপ্লিকেশানগুলি এবং ব্যবহারকারীগণ"</string> diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index d52f144f0694..e6d62d3d41e8 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Povezani preko %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupan preko %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Povezano. Nema interneta"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna tačka je privremeno puna"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Veoma sporo"</string> <string name="speed_label_slow" msgid="813109590815810235">"Sporo"</string> <string name="speed_label_okay" msgid="2331665440671174858">"UREDU"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi dvije crtice."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi tri crtice."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi puni signal."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Otvorena mreža"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sigurna mreža"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Uklonjene aplikacije"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Uklonjene aplikacije i korisnici"</string> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 8691bd877a6a..75f464d78bf9 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Connectada mitjançant %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible mitjançant %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connectada, sense Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"El punt d\'accés està temporalment ple"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Molt lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Correcta"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Senyal Wi-Fi: dues barres."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Senyal Wi-Fi: tres barres."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Senyal Wi-Fi: complet."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Xarxa oberta"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Xarxa segura"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicacions eliminades"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicacions i usuaris eliminats"</string> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index f4c40c746d7b..7af97e18ca0d 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Připojeno prostřednictvím %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupné prostřednictvím %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Připojeno, není k dispozici internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Přístupový bod je dočasně zaplněn"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Velmi pomalá"</string> <string name="speed_label_slow" msgid="813109590815810235">"Pomalá"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi – dvě čárky."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi – tři čárky."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi – plný signál."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Nezabezpečená síť"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Zabezpečená síť"</string> <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Odebrané aplikace"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Odebrané aplikace a odebraní uživatelé"</string> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index f5a41919dc64..948096c11505 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilsluttet via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tilgængelig via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tilsluttet – intet internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Adgangspunktet er midlertidigt fuldt"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Meget langsom"</string> <string name="speed_label_slow" msgid="813109590815810235">"Langsom"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi har to bjælker."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi har tre bjælker."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi har fuldt signal."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Åbent netværk"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sikkert netværk"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Fjernede apps"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Fjernede apps og brugere"</string> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 4e0157421e6a..40c5e7abd90f 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Über %1$s verbunden"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Verfügbar über %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Verbunden, kein Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Zugangspunkt vorübergehend voll belegt"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Sehr langsam"</string> <string name="speed_label_slow" msgid="813109590815810235">"Langsam"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"WLAN: zwei Balken"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WLAN: drei Balken"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"WLAN: volle Signalstärke"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Offenes Netzwerk"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sicheres Netzwerk"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Entfernte Apps"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Entfernte Apps und Nutzer"</string> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index 22d25582908e..13072def68ba 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Συνδέθηκε μέσω %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Διαθέσιμο μέσω %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Συνδέθηκε, χωρίς διαδίκτυο"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Το σημείο πρόσβασης είναι προσωρινά πλήρες"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Πολύ αργή"</string> <string name="speed_label_slow" msgid="813109590815810235">"Αργή"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ΟΚ"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Δύο γραμμές Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Τρεις γραμμές Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Άριστο σήμα Wi-Fi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Ανοικτό δίκτυο"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Ασφαλές δίκτυο"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Λειτουργικό σύστημα Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Εφαρμογές που καταργήθηκαν"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Εφαρμογές και χρήστες που έχουν καταργηθεί"</string> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index 11ef6809589f..768dc8dfb1a9 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string> <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi two bars."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi three bars."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal full."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open network"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Secure network"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Removed apps"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Removed apps and users"</string> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index 11ef6809589f..768dc8dfb1a9 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string> <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi two bars."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi three bars."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal full."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open network"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Secure network"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Removed apps"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Removed apps and users"</string> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index 11ef6809589f..768dc8dfb1a9 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string> <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi two bars."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi three bars."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal full."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open network"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Secure network"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Removed apps"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Removed apps and users"</string> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 830d5ab9d5f9..6f990ae544f2 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Conexión a través de %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectado a Wi-Fi, sin conexión a Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"El punto de acceso está completo temporalmente"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muy lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dos barras de Wi-Fi"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tres barras de Wi-Fi"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Señal de Wi-Fi excelente"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Red abierta"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Red segura"</string> <string name="process_kernel_label" msgid="3916858646836739323">"SO Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicaciones eliminadas"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicaciones y usuarios eliminados"</string> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index 102ea0536d72..6d60362c740e 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conexión sin Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punto de acceso temporalmente lleno"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muy lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dos barras de Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tres barras de Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Señal de Wi-Fi al máximo."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Red abierta"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Red segura"</string> <string name="process_kernel_label" msgid="3916858646836739323">"SO Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicaciones eliminadas"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Usuarios y aplicaciones eliminados"</string> diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index 4c889f4e4f40..cee443bff8a5 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Ühendatud üksuse %1$s kaudu"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Saadaval üksuse %1$s kaudu"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ühendatud, Interneti-ühendus puudub"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pääsupunkt on ajutiselt täis"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Väga aeglane"</string> <string name="speed_label_slow" msgid="813109590815810235">"Aeglane"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Hea"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"WiFi: kaks pulka."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WiFi: kolm pulka."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"WiFi-signaal on tugev."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Avatud võrk"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Turvaline võrk"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Eemaldatud rakendused"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Eemaldatud rakendused ja kasutajad"</string> diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index e81acf876ba2..d0aa89f08b5b 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s bidez konektatuta"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s bidez erabilgarri"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Konektatuta, ez dago Interneteko konexiorik"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Sarbide-puntua beteta dago aldi baterako"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Oso motela"</string> <string name="speed_label_slow" msgid="813109590815810235">"Motela"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Ados"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi sarearen bi barra."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi sarearen hiru barra."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi sarearen seinalea osoa."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Sare irekia"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sare segurua"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android sistema eragilea"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Kendutako aplikazioak"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Kendutako aplikazioak eta erabiltzaileak"</string> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 9d790b8cf0c6..266b8ce56113 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"متصل از طریق %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"در دسترس از طریق %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"متصل، بدون اینترنت"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ظرفیت نقطه دسترسی موقتاً تکمیل شده است"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"بسیار آهسته"</string> <string name="speed_label_slow" msgid="813109590815810235">"آهسته"</string> <string name="speed_label_okay" msgid="2331665440671174858">"تأیید"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"دو نوار برای Wi‑Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"سه نوار برای Wi‑Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"قدرت سیگنال Wi‑Fi کامل است."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"شبکه باز"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"شبکه ایمن"</string> <string name="process_kernel_label" msgid="3916858646836739323">"سیستم عامل Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"برنامههای حذف شده"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"برنامهها و کاربران حذف شده"</string> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index 2d0ecc69484b..185f56ada1fa 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Yhdistetty seuraavan kautta: %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Käytettävissä seuraavan kautta: %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Yhdistetty, ei internetyhteyttä."</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Yhteyspiste tilapäisesti täynnä"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Hyvin hidas"</string> <string name="speed_label_slow" msgid="813109590815810235">"Hidas"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi-signaali – kaksi palkkia"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi-signaali – kolme palkkia"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Vahva Wi-Fi-signaali"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Avoin verkko"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Suojattu verkko"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android-käyttöjärjestelmä"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Poistetut sovellukset"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Poistetut sovellukset ja käyttäjät"</string> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index 431426e3853b..8dc8ead6ba36 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté par %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Accessible par %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connecté, aucun accès à Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Le point d\'accès est temporairement plein"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Très lente"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lente"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi : deux barres."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi : trois barres."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi : signal complet."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Réseau ouvert"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Réseau sécurisé"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Système d\'exploitation Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Applications supprimées"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Applications et utilisateurs supprimés"</string> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index caa143f8aef0..7fdc7165f9f3 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connecté, aucun accès à Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Point d\'accès temporairement plein"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Très lente"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lente"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Correct"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Signal Wi-Fi moyen"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Signal Wi-Fi bon"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Signal Wi-Fi excellent"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Réseau ouvert"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Réseau sécurisé"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Plate-forme Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Applications supprimées"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Applications et utilisateurs supprimés"</string> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 994a327dcc92..3ae0d6f8c0ac 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dispoñible a través de %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectado, pero sen Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"O punto de acceso está temporalmente cheo"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Moi lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dúas barras de wifi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tres barras de wifi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinal completo de wifi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rede aberta"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rede segura"</string> <string name="process_kernel_label" msgid="3916858646836739323">"SO Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicacións eliminadas"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicacións e usuarios eliminados"</string> diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index c11f98c041f5..9d6c1e827ad9 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s દ્વારા કનેક્ટ થયેલ"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s દ્વારા ઉપલબ્ધ"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"કનેક્ટ કર્યું, કોઈ ઇન્ટરનેટ નથી"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ઍક્સેસ પૉઇન્ટ અસ્થાયીરૂપે ભરાયેલ છે"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ખૂબ જ ધીમી"</string> <string name="speed_label_slow" msgid="813109590815810235">"ધીમી"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ઓકે"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi બે બાર."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi ત્રણ બાર."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"પૂર્ણ Wifi સિગ્નલ."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"નેટવર્ક ખોલો"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"સુરક્ષિત નેટવર્ક"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"દૂર કરેલી ઍપ્લિકેશનો"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"દૂર કરેલી ઍપ્લિકેશનો અને વપરાશકર્તાઓ"</string> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index 465482b9e077..704a312c1714 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s के द्वारा उपलब्ध"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s के द्वारा उपलब्ध"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"कनेक्ट किया गया, इंटरनेट नहीं"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"एक्सेस पॉइंट फ़िलहाल भरा हुआ है"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"अत्यधिक धीमी"</string> <string name="speed_label_slow" msgid="813109590815810235">"धीमी"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ठीक"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"वाई-फ़ाई की दो पट्टी मिल रही हैं."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"वाई-फ़ाई की एक पट्टी मिल रही है."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"पूरे वाई-फ़ाई सिग्नल मिल रहे हैं."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"खुला नेटवर्क"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"सुरक्षित नेटवर्क"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"निकाले गए ऐप्स"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ऐप्स और उपयोगकर्ताओं को निकालें"</string> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index 1ff5b410a957..123d9969e1f3 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Povezano putem %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupno putem %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Povezano, bez interneta"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna je točka privremeno puna"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Vrlo sporo"</string> <string name="speed_label_slow" msgid="813109590815810235">"Sporo"</string> <string name="speed_label_okay" msgid="2331665440671174858">"U redu"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi signal ima dva stupca."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi signal ima tri stupca."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi signal je pun."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Otvorena mreža"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sigurna mreža"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Uklonjene aplikacije"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Uklonjene aplikacije i korisnici"</string> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index 8434090f61fa..ff700d9bf737 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Csatlakozva a következőn keresztül: %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Elérhető a következőn keresztül: %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Csatlakozva, nincs internetelérés"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"A hozzáférési pont átmenetileg megtelt"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Nagyon lassú"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lassú"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Rendben"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi-jel: két sáv."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi-jel: három sáv."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi-jel: teljes."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Nyílt hálózat"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Biztonságos hálózat"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Eltávolított alkalmazások"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Eltávolított alkalmazások és felhasználók"</string> diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index 1d124050601c..63fe5abebaa7 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Կապակցված է %1$s-ի միջոցով"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Հասանելի է %1$s-ի միջոցով"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Կապակցված է առանց համացանցի"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Հասանելիության կետը ժամանակավորապես լիքն է"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Շատ դանդաղ"</string> <string name="speed_label_slow" msgid="813109590815810235">"Դանդաղ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Հաստատել"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi-ի ուժգնությունը՝ երկու գիծ:"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi-ի ուժգնությունը՝ երեք գիծ:"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi-ի ազդանշանը ուժեղ է:"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Բաց ցանց"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Անվտանգ ցանց"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Հեռացված ծրագրեր"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Հեռացված հավելվածներն ու օգտատերերը"</string> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index 6fbc0a061366..267bbf9ba046 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Terhubung melalui %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tersambung, tidak ada internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Titik akses penuh untuk sementara"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Sangat Lambat"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lambat"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Oke"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi dua baris"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi tiga baris."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinyal Wi-Fi penuh."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Jaringan terbuka"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Jaringan aman"</string> <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplikasi dihapus"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplikasi dan pengguna yang dihapus"</string> diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index 72f71f574152..ae5f72718b29 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Tengt í gegnum %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Í boði í gegnum %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tengt, enginn internetaðgangur"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Aðgangsstaður tímabundið fullur"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Mjög hægt"</string> <string name="speed_label_slow" msgid="813109590815810235">"Hægt"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Í lagi"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: Tvö strik."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: Þrjú strik."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Fullur Wi-Fi sendistyrkur."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Opið net"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Öruggt net"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android stýrikerfið"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Fjarlægð forrit"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Fjarlægð forrit og notendur"</string> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index 3003597bac72..4a2d3cb69e2a 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Collegato tramite %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponibile tramite %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connesso senza Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punto di accesso momentaneamente al completo"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Molto lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: due barre."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: tre barre."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Segnale Wi-Fi completo."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rete aperta"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rete protetta"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Sistema operativo Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Applicazioni rimosse"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"App e utenti rimossi"</string> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index 0368a048af53..7f6f8f50c5a3 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"מחובר דרך %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"זמינה דרך %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"מחובר. אין אינטרנט"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"נקודת הגישה מלאה באופן זמני"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"איטית מאוד"</string> <string name="speed_label_slow" msgid="813109590815810235">"איטית"</string> <string name="speed_label_okay" msgid="2331665440671174858">"אישור"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"שני פסים של Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"שלושה פסים של Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"אות Wi-Fi מלא."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"רשת פתוחה"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"רשת מאובטחת"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"אפליקציות שהוסרו"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"אפליקציות ומשתמשים שהוסרו"</string> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 952c4fb77fd6..feb80e9595a6 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s経由で接続"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s経由で使用可能"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"接続済み、インターネットは利用できません"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"アクセス ポイントが一時的にいっぱいです"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"とても遅い"</string> <string name="speed_label_slow" msgid="813109590815810235">"遅い"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fiはレベル2です。"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fiはレベル3です。"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fiの電波はフルです。"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"オープンネットワーク"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"保護されたネットワーク"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"削除したアプリケーション"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"削除されたアプリとユーザー"</string> diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index fbdd1b6709a5..4d12fa7989a9 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-ით დაკავშირებული"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"ხელმისაწვდომია %1$s-ით"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"დაკავშირებულია, ინტერნეტის გარეშე"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"წვდომის წერტილი დროებით გადატვირთულია"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ძალიან ნელი"</string> <string name="speed_label_slow" msgid="813109590815810235">"ნელი"</string> <string name="speed_label_okay" msgid="2331665440671174858">"კარგი"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"WiFi სიგნალი ორ ზოლზეა."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WiFi სიგნალი სამ ზოლზეა."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"WiFi სიგნალი სრულია."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ღია ქსელი"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"დაცული ქსელი"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"აპების წაშლა"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"წაშლილი აპები და მომხმარებლები"</string> diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index a071c232dcf8..0c7b4ac1fad5 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s арқылы қосылған"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s арқылы қолжетімді"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Қосылған, интернет жоқ"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Кіру нүктесі уақытша бос емес"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Өте баяу"</string> <string name="speed_label_slow" msgid="813109590815810235">"Баяу"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Жарайды"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi сигналы — екі жолақ."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi сигналы — үш жолақ."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi сигналы толық."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Ашық желі"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Қауіпсіз желі"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android операциялық жүйесі"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Алынған қолданбалар"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Алынған қолданбалар және пайдаланушылар"</string> diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index e3b84821baa6..755859cfafec 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"បានភ្ជាប់តាមរយៈ %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"មានតាមរយៈ %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"បានភ្ជាប់ ប៉ុន្តែគ្មានអ៊ីនធឺណិតទេ"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ចំណុចចូលប្រើពេញជាបណ្តោះអាសន្ន"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"យឺតណាស់"</string> <string name="speed_label_slow" msgid="813109590815810235">"យឺត"</string> <string name="speed_label_okay" msgid="2331665440671174858">"យល់ព្រម"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi ពីរកាំ"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi បីកាំ"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"សេវា Wifi ពេញ"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"បើកបណ្ដាញ"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"បណ្តាញដែលមានសុវត្ថិភាព"</string> <string name="process_kernel_label" msgid="3916858646836739323">"ប្រព័ន្ធប្រតិបត្តិការ Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"កម្មវិធីដែលបានលុប"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"បានលុបកម្មវិធី និងអ្នកប្រើ"</string> diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index 6442140a4c7d..939e2a98761a 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ, ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ಪ್ರವೇಶ ಕೇಂದ್ರ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ತುಂಬಾ ನಿಧಾನವಾಗಿದೆ"</string> <string name="speed_label_slow" msgid="813109590815810235">"ನಿಧಾನ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ಸರಿ"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"ವೈಫೈ ಎರಡು ಪಟ್ಟಿಗಳು."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"ವೈಫೈ ಮೂರು ಪಟ್ಟಿಗಳು."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"ವೈಫೈ ಸಿಗ್ನಲ್ ಪೂರ್ತಿ ಇದೆ."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ನೆಟ್ವರ್ಕ್ ತೆರೆಯಿರಿ"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ಸುರಕ್ಷಿತ ನೆಟ್ವರ್ಕ್"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ತೆಗೆದುಹಾಕಲಾದ ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index 42fbdcc94ce8..972fef191a3b 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s을(를) 통해 연결됨"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s을(를) 통해 사용 가능"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"인터넷을 사용하지 않고 연결됨"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"액세스 포인트가 일시적으로 가득 참"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"매우 느림"</string> <string name="speed_label_slow" msgid="813109590815810235">"느림"</string> <string name="speed_label_okay" msgid="2331665440671174858">"확인"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi 신호 막대가 두 개입니다."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi 신호 막대가 세 개입니다."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi 신호가 강합니다."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"개방형 네트워크"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"보안 네트워크"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"삭제된 앱"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"삭제된 앱 및 사용자"</string> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index cce8ad4ed304..cff25ddd1952 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s аркылуу жеткиликтүү"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s аркылуу жеткиликтүү"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Туташып турат, Интернет жок"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Туташуу түйүнү убактылуу толуп калды"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Өтө жай"</string> <string name="speed_label_slow" msgid="813109590815810235">"Жай"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Жарайт"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi: эки таякча."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi: үч таякча."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi: күчтүү сигнал."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Ачык тармак"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Коопсуз тармак"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Алынып салынган колдонмолор"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Өчүрүлгөн колдонмолор жана колдонуучулар"</string> diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index 6c4598035905..2460154b5b62 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"ເຊື່ອມຕໍ່ຜ່ານ %1$s ແລ້ວ"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"ມີໃຫ້ຜ່ານ %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ເຊື່ອມຕໍ່ແລ້ວ, ບໍ່ມີອິນເຕີເນັດ"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ຈຸດການເຂົ້າເຖິງເຕັມຊົ່ວຄາວ"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ຊ້າຫຼາຍ"</string> <string name="speed_label_slow" msgid="813109590815810235">"ຊ້າ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ຕົກລົງ"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"ສັນຍານ Wi-Fi ສອງຂີດ."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi ສາມຂີດ."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"ສັນຍານ Wi-Fi ເຕັມ"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ເຄືອຂ່າຍເປີດ"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ເຄືອຂ່າຍເຂົ້າລະຫັດ"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ແອັບຯທີ່ຖືກລຶບອອກແລ້ວ"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ລຶບແອັບຯ ແລະຜູ່ໃຊ້ແລ້ວ"</string> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index 3c16a5953a83..c5a035f60653 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Prisijungta naudojant „%1$s“"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Pasiekiama naudojant „%1$s“"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Prisijungta, nėra interneto"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Prieigos taškas laikinai visiškai užimtas"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Labai lėtas"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lėtas"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Gerai"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dvi „Wi-Fi“ signalo juostos."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Trys „Wi-Fi“ signalo juostos."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Stiprus „Wi-Fi“ signalas."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Atviras tinklas"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Saugus tinklas"</string> <string name="process_kernel_label" msgid="3916858646836739323">"„Android“ OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Pašalintos programos"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Pašalintos programos ir naudotojai"</string> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index e02b1b460675..89cc9580ceed 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Savienots, izmantojot %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Pieejams, izmantojot %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Savienots, nav piekļuves internetam"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Piekļuves punkts īslaicīgi ir pilns"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Ļoti lēns"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lēns"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Labi"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: divas joslas"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: trīs joslas"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Pilna piekļuve Wi-Fi signālam"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Atvērts tīkls"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Drošs tīkls"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Noņemtās lietotnes"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Noņemtās lietotnes un lietotāji"</string> diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index 920c38f2ccc2..6bd9c5f9fc25 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Поврзано преку %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Достапно преку %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Поврзана, нема интернет"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Пристапната точка привремено е преоптоварена"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Многу бавна"</string> <string name="speed_label_slow" msgid="813109590815810235">"Бавна"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Во ред"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Две црти на Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Три црти на Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Полн сигнал на Wi-Fi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Отворена мрежа"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Заклучена мрежа"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Оперативен систем Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Отстранети апликации"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Отстранети апликации и корисници"</string> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index b2f7fc0da8f7..5e0c25c221c8 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s വഴി ലഭ്യം"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"കണക്റ്റുചെയ്തിരിക്കുന്നു, ഇന്റർനെറ്റില്ല"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ആക്സസ് പോയിന്റ് താൽക്കാലികമായി നിറഞ്ഞിരിക്കുന്നു"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"വളരെ കുറഞ്ഞ വേഗത്തിൽ"</string> <string name="speed_label_slow" msgid="813109590815810235">"കുറഞ്ഞ വേഗത്തിൽ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ശരി"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"വൈഫൈ സിഗ്നൽ രണ്ട് ബാറുകൾ."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"വൈഫൈ സിഗ്നൽ മൂന്ന് ബാറുകൾ."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"വൈഫൈ മികച്ച സിഗ്നൽ."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ഓപ്പൺ നെറ്റ്വര്ക്ക്"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"സുരക്ഷിത നെറ്റ്വര്ക്ക്"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"നീക്കംചെയ്ത അപ്ലിക്കേഷനുകൾ"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"നീക്കംചെയ്ത അപ്ലിക്കേഷനുകളും ഉപയോക്താക്കളും"</string> diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index cd4d44ff95a7..f0020fe8cbae 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-р холбогдсон"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s-р боломжтой"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Холбогдсон, интернэт байхгүй байна"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Хандах цэг түр хугацаанд дүүрсэн байна"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Маш удаан"</string> <string name="speed_label_slow" msgid="813109590815810235">"Удаан"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ЗА"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi сүлжээний дохио хоёр баганатай байна."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi сүлжээний дохио гурван баганатай байна."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi-н дохио дүүрэн байна."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Нээлттэй сүлжээ"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Аюулгүй сүлжээ"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Андройд OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Арилгасан апп-ууд"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Арилгасан апп-ууд болон хэрэглэгчид"</string> diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index 16dd560f9f45..c056d8ea324f 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s द्वारे कनेक्ट केले"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s द्वारे उपलब्ध"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"कनेक्ट केले, इंटरनेट नाही"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"अॅक्सेस पॉइंट तात्पुरते भरलेले"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"खूप हळू"</string> <string name="speed_label_slow" msgid="813109590815810235">"हळू"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ठीक आहे"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"वाय फाय दोन बार."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"वाय फाय तीन बार."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"वाय फाय सिग्नल संपूर्ण आहे."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"नेटवर्क उघडा"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"सुरक्षित नेटवर्क"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"काढलेले अॅप्स"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"काढलेले अॅप्स आणि वापरकर्ते"</string> diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index 840ca8e99be7..a8424ff0e04d 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Disambungkan melalui %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Disambungkan, tiada Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Titik akses penuh buat sementara waktu"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Sangat Perlahan"</string> <string name="speed_label_slow" msgid="813109590815810235">"Perlahan"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi dua bar."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi tiga bar."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Isyarat Wi-Fi penuh."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rangkaian terbuka"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rangkaian selamat"</string> <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Apl dialih keluar"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Apl dan pengguna yang dialih keluar"</string> diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index a32797eb798e..40cd3e921eb2 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s မှတစ်ဆင့်ရနိုင်သည်"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ချိတ်ဆက်ထားသည်၊ အင်တာနက်မရှိ"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ကွန်ရက်ချိတ်ဆက်မှု ယာယီပြည့်နေသည်"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"အလွန်နှေး"</string> <string name="speed_label_slow" msgid="813109590815810235">"နှေး"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi ၂ ဘား"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi ၃ ဘား"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi အပြည့်ရှိ"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"အများသုံး ကွန်ရက်"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"လုံခြုံသည့် ကွန်ရက်"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android စနစ်"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ဖယ်ရှားထားသော အက်ပ်များ"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ဖယ်ရှားထားသော အပလီကေးရှင်းနှင့် သုံးစွဲသူများ"</string> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index 7995259966eb..b125a9ca658c 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilkoblet via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tilgjengelig via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tilkoblet – ingen Internett-forbindelse"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Tilgangspunktet er midlertidig fullt"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Veldig treg"</string> <string name="speed_label_slow" msgid="813109590815810235">"Treg"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi-signal med to stolper."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi-signal med tre stolper."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi-signalet er ved full styrke."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Åpent nettverk"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sikkert nettverk"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android-operativsystem"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Fjernede apper"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Fjernede apper og brukere"</string> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index 6ea0e5076eec..2870d2e4c306 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s मार्फत जडित"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s मार्फत उपलब्ध"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"जडित, इन्टरनेट चलेको छैन"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"पहुँचसम्बन्धी स्थान अस्थायी रूपमा भरिएको छ"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"धेरै ढिलो"</string> <string name="speed_label_slow" msgid="813109590815810235">"बिस्तारै"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ठीक छ"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi दुई पट्टि।"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi तीन बारहरू।"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"पूर्ण Wi-Fi सिंग्नल।"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"खुला नेटवर्क"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"सुरक्षित नेटवर्क"</string> <string name="process_kernel_label" msgid="3916858646836739323">"एन्ड्रोइड OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"हटाइएका अनुप्रयोगहरू"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"अनुप्रयोगहरू र प्रयोगकर्ताहरू हटाइयो।"</string> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index f1a76483d7bd..b021680d15e8 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Verbonden via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Beschikbaar via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Verbonden, geen internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Toegangspunt tijdelijk vol"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Zeer langzaam"</string> <string name="speed_label_slow" msgid="813109590815810235">"Langzaam"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Redelijk"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi: twee streepjes."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi: drie streepjes."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifii-signaal is op volledige sterkte."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open netwerk"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Beveiligd netwerk"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android-besturingssysteem"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Verwijderde apps"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Verwijderde apps en gebruikers"</string> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 8efe422482c3..e1c1a4a45e8c 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ਕਨੈਕਟ ਕੀਤਾ, ਕੋਈ ਇੰਟਰਨੈਟ ਨਹੀਂ"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ਪਹੁੰਚ ਪੁਆਇੰਟ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਸੰਪੂਰਨ ਰੁਝੇਂਵੇਂ ਵਿੱਚ ਹੈ"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ਬਹੁਤ ਹੌਲੀ"</string> <string name="speed_label_slow" msgid="813109590815810235">"ਹੌਲੀ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ਠੀਕ ਹੈ"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi ਦੋ ਬਾਰ।"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi ਤਿੰਨ ਬਾਰ।"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi ਸਿਗਨਲ ਪੂਰਾ।"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ਖੁੱਲ੍ਹਾ ਨੈੱਟਵਰਕ"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ਹਟਾਏ ਗਏ ਐਪਸ"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ਹਟਾਏ ਗਏ ਐਪਸ ਅਤੇ ਉਪਭੋਗਤਾ"</string> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 9b05d6b41932..e4c74503ecea 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Połączono przez %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostępne przez %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Połączono, brak internetu"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punkt dostępu jest tymczasowo zajęty"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Bardzo wolna"</string> <string name="speed_label_slow" msgid="813109590815810235">"Wolna"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: dwa paski."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: trzy paski."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi: pełna moc sygnału."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Sieć otwarta"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Sieć zabezpieczona"</string> <string name="process_kernel_label" msgid="3916858646836739323">"System operacyjny Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Usunięte aplikacje"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Usunięte aplikacje i użytkownicy"</string> diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml index a444b59be6b1..e3f287bb3829 100644 --- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml +++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml @@ -190,9 +190,9 @@ </string-array> <string-array name="animator_duration_scale_entries"> <item msgid="6039901060648228241">"Animação desativada"</item> - <item msgid="1138649021950863198">"Escala de animação 5x"</item> + <item msgid="1138649021950863198">"Escala de animação 0,5x"</item> <item msgid="4394388961370833040">"Escala de animação 1x"</item> - <item msgid="8125427921655194973">"Escala de animação 1.5 x"</item> + <item msgid="8125427921655194973">"Escala de animação 1,5x"</item> <item msgid="3334024790739189573">"Escala de animação 2x"</item> <item msgid="3170120558236848008">"Escala de animação 5x"</item> <item msgid="1069584980746680398">"Escala de animação 10x"</item> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index 0d06ef6f9084..7e6e2dc48990 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectada, sem Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Duas barras de Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Três barras de Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinal Wi-Fi cheio."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rede aberta"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rede segura"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Sistema operacional Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Apps removidos"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Apps e usuários removidos"</string> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index b078433d637d..514dfd1e94fc 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Ligado através de %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível através de %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ligado, sem Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Duas barras de Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Três barras de Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinal de Wi-Fi completo."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rede aberta"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rede segura"</string> <string name="process_kernel_label" msgid="3916858646836739323">"SO Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicações removidas"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicações e utilizadores removidos"</string> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index 0d06ef6f9084..7e6e2dc48990 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectada, sem Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Duas barras de Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Três barras de Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Sinal Wi-Fi cheio."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rede aberta"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rede segura"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Sistema operacional Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Apps removidos"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Apps e usuários removidos"</string> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index f72280638742..c81673dbd964 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectată prin %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponibilă prin %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectată, fără internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punctul de acces este temporar plin"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Foarte lentă"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lentă"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Bine"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Semnal Wi-Fi: două bare."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Semnal Wi-Fi: trei bare."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Semnal Wi-Fi: complet."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rețea nesecurizată"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Securizați rețeaua"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Sistem de operare Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplicații eliminate"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplicații și utilizatori eliminați"</string> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index a1ad9c33db89..9a28e7980a8d 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Подключено к %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Доступно через %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Подключено, без Интернета"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"К точке доступа подключено слишком много устройств"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Очень медленная"</string> <string name="speed_label_slow" msgid="813109590815810235">"Медленная"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: два деления"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: три деления"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi: надежный сигнал"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Открытая сеть"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Защищенная сеть"</string> <string name="process_kernel_label" msgid="3916858646836739323">"ОС Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Удаленные приложения"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Удаленные приложения и пользователи"</string> diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 257e27e579e6..afe84f6ae482 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s හරහා සම්බන්ධ විය"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s හරහා ලබා ගැනීමට හැකිය"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"සම්බන්ධයි, අන්තර්ජාලය නැත"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ප්රවේශ ලක්ෂ්ය තාවකාලිකව පිරී ඇත"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ඉතා මන්දගාමී"</string> <string name="speed_label_slow" msgid="813109590815810235">"මන්දගාමී"</string> <string name="speed_label_okay" msgid="2331665440671174858">"හරි"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi තීරු දෙකයි."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WiFi තීරු තුනයි."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi සංඥාව පිරී ඇත."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"විවෘත ජාලය"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"ආරක්ෂිත ජාලය"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ඉවත් කළ යෙදුම්"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"යෙදුම් සහ පරිශීලකයින් ඉවත් කරන ලදි"</string> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index dd2b79367dc7..1599d80f32f8 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Pripojené prostredníctvom %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"K dispozícii prostredníctvom %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Pripojené, žiadny internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Prístupový bod je dočasne plný"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Veľmi nízka"</string> <string name="speed_label_slow" msgid="813109590815810235">"Nízka"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dve čiarky signálu Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tri čiarky signálu Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Plný signál Wi-Fi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Otvorená sieť"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Zabezpečená sieť"</string> <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Odstránené aplikácie"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Odstránené aplikácie a používatelia"</string> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index 70b84e32e248..dbeec8a0e4fb 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Vzpostavljena povezava prek: %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Na voljo prek: %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Vzpostavljena povezava, brez interneta"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Dostopna točka je trenutno zasedena"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Zelo počasna"</string> <string name="speed_label_slow" msgid="813109590815810235">"Počasna"</string> <string name="speed_label_okay" msgid="2331665440671174858">"V redu"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Dve črtici signala Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tri črtice signala Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Poln signal Wi-Fi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Odprto omrežje"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Varno omrežje"</string> <string name="process_kernel_label" msgid="3916858646836739323">"OS Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Odstranjene aplikacije"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Odstranjene aplikacije in uporabniki"</string> diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index e1c36ed94999..85393d736ba5 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"E lidhur përmes %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"E mundshme përmes %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"U lidh, nuk ka internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pika e qasjes është përkohësisht plot"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Shumë e ulët"</string> <string name="speed_label_slow" msgid="813109590815810235">"E ngadaltë"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Në rregull"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi ka dy vija."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: tre vija."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi ka sinjal të plotë."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Rrjet i hapur"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Rrjet i sigurt"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Sistemi operativ Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Aplikacionet e hequra"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Aplikacionet dhe përdoruesit e hequr"</string> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 6a6a9b9d3c0a..9cbb997c9c87 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Веза је успостављена преко приступне тачке %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Доступна је преко приступне тачке %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Веза је успостављена, нема интернета"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Приступна тачка је привремено заузета"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Веома спора"</string> <string name="speed_label_slow" msgid="813109590815810235">"Спора"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Потврди"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi сигнал има две црте."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi сигнал има три црте."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi сигнал је најјачи."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Отворена мрежа"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Безбедна мрежа"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android ОС"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Уклоњене апликације"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Уклоњене апликације и корисници"</string> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index 29c87ccdabdb..157e5819e9e9 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Anslutet via %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tillgängligt via %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ansluten, inget internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Åtkomstpunkten har inga platser över för tillfället"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Mycket långsam"</string> <string name="speed_label_slow" msgid="813109590815810235">"Långsam"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Okej"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: två staplar."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: tre staplar."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Full signalstyrka för Wi-Fi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Öppet nätverk"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Säkert nätverk"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Operativsystemet Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Borttagna appar"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Borttagna appar och användare"</string> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index 05dfd1793174..cd6a3329df43 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Imeunganishwa kupitia %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Inapatikana kupitia %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Imeunganishwa, hakuna Intaneti"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Lango la mtandao lina shughuli nyingi kwa sasa"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Polepole Sana"</string> <string name="speed_label_slow" msgid="813109590815810235">"Polepole"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Sawa"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Vipima mtandao viwili vya Wifi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Vipima mtandao vitatu vya Wifi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Nguvu kamili ya mtandao wa Wifi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Mtandao unaotumiwa na mtu yeyote"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Mtandao salama"</string> <string name="process_kernel_label" msgid="3916858646836739323">"OS ya Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Programu zilizoondolewa"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Watumiaji na programu ziilizoondolewa"</string> diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index f85cca396ad3..50146000950a 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s வழியாக இணைக்கப்பட்டது"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s வழியாகக் கிடைக்கிறது"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"இணைக்கப்பட்டது, இணையம் இல்லை"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"தற்காலிகமாக அணுகல் புள்ளி நிரம்பியுள்ளது"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"மிகவும் வேகம் குறைவானது"</string> <string name="speed_label_slow" msgid="813109590815810235">"வேகம் குறைவு"</string> <string name="speed_label_okay" msgid="2331665440671174858">"சரி"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"வைஃபை சிக்னல்: இரண்டு கோடுகள்."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"வைஃபை சிக்னல்: மூன்று கோடுகள்."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"வைஃபை சிக்னல் முழுமையாக உள்ளது."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"கடவுச்சொல் தேவைப்படாத திறந்த நெட்வொர்க்"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"கடவுச்சொல் தேவைப்படும் பாதுகாப்பான நெட்வொர்க்"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"அகற்றப்பட்ட பயன்பாடுகள்"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"அகற்றப்பட்ட பயன்பாடுகள் மற்றும் பயனர்கள்"</string> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index aa331a56539b..f678a896941c 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ద్వారా అందుబాటులో ఉంది"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"కనెక్ట్ చేయబడింది, ఇంటర్నెట్ లేదు"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ప్రాప్యత పాయింట్ తాత్కాలికంగా పూర్తయింది"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"చాలా నెమ్మది"</string> <string name="speed_label_slow" msgid="813109590815810235">"నెమ్మది"</string> <string name="speed_label_okay" msgid="2331665440671174858">"సరే"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi సిగ్నల్ రెండు బార్లు ఉంది."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi సిగ్నల్ మూడు బార్లు ఉంది."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi సిగ్నల్ పూర్తిగా ఉంది."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"ఓపెన్ నెట్వర్క్"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"సురక్షిత నెట్వర్క్"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"తీసివేయబడిన అనువర్తనాలు"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"తీసివేయబడిన అనువర్తనాలు మరియు వినియోగదారులు"</string> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index 1582da5f73eb..fa5bdfe15bd5 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"เชื่อมต่อผ่าน %1$s แล้ว"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"พร้อมใช้งานผ่านทาง %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"เชื่อมต่อแล้ว ไม่พบอินเทอร์เน็ต"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"จุดเข้าใช้งานเต็มชั่วคราว"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ช้ามาก"</string> <string name="speed_label_slow" msgid="813109590815810235">"ช้า"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ตกลง"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"สัญญาณ Wi-Fi 2 ขีด"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"สัญญาณ Wi-Fi 3 ขีด"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"สัญญาณ Wi-Fi เต็ม"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"เครือข่ายแบบเปิด"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"เครือข่ายที่ปลอดภัย"</string> <string name="process_kernel_label" msgid="3916858646836739323">"ระบบปฏิบัติการของ Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"แอปพลิเคชันที่นำออก"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"แอปพลิเคชันและผู้ใช้ที่นำออก"</string> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index 6b0fad9baa89..c0acdc05e102 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Nakakonekta sa pamamagitan ng %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Available sa pamamagitan ng %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Nakakonekta, walang Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pansamantalang puno ang access point"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Napakabagal"</string> <string name="speed_label_slow" msgid="813109590815810235">"Mabagal"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"May dalawang bar ang Wifi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"May tatlong bar ang Wifi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Puno ang signal ng Wifi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Bukas na network"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Ligtas na network"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Mga inalis na app"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Mga inalis na apps at user"</string> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index b883c5fcd701..d288712dacd6 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s üzerinden bağlı"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s üzerinden kullanılabilir"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Bağlı, İnternet yok"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Erişim noktası geçici olarak dolu"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Çok Yavaş"</string> <string name="speed_label_slow" msgid="813109590815810235">"Yavaş"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Tamam"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Kablosuz sinyal gücü iki çubuk."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Kablosuz sinyal gücü üç çubuk."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Kablosuz sinyal gücü tam."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Açık ağ"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Güvenli ağ"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Kaldırılan uygulamalar"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Kaldırılmış kullanıcılar ve uygulamalar"</string> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index de35869878a6..3be34342be63 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Під’єднано через %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Доступ через %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Під’єднано, але немає доступу до Інтернету"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Точка доступу тимчасово переповнена"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Дуже повільна"</string> <string name="speed_label_slow" msgid="813109590815810235">"Повільна"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string> @@ -104,18 +103,16 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Дві смужки сигналу Wi-Fi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Три смужки сигналу Wi-Fi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Максимальний сигнал Wi-Fi."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Відкрита мережа"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Захищена мережа"</string> <string name="process_kernel_label" msgid="3916858646836739323">"ОС Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Видалені програми"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Видалені програми та користувачі"</string> - <string name="tether_settings_title_usb" msgid="6688416425801386511">"Прив\'язка USB"</string> + <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB-модем"</string> <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Порт. точка дост."</string> - <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Прив\'язка Bluetooth"</string> + <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth-модем"</string> <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Прив\'язка"</string> - <string name="tether_settings_title_all" msgid="8356136101061143841">"Режим модема"</string> + <string name="tether_settings_title_all" msgid="8356136101061143841">"Точка доступу й модем"</string> <string name="managed_user_title" msgid="8109605045406748842">"Усі робочі додатки"</string> <string name="user_guest" msgid="8475274842845401871">"Гість"</string> <string name="unknown" msgid="1592123443519355854">"Невідомо"</string> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index 186ae026cdce..0282d09228c9 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"منسلک بذریعہ %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"دستیاب بذریعہ %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"منسلک، انٹرنیٹ نہیں ہے"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"رسائی پوائنٹ عارضی طور پر فُل ہے"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"بہت سست"</string> <string name="speed_label_slow" msgid="813109590815810235">"سست"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ٹھیک ہے"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi دو بارز۔"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi تین بارز۔"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi سگنل پورا ہے۔"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"اوپن نیٹ ورک"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"محفوظ نیٹ ورک"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"ہٹائی گئی ایپس"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"ہٹائی گئی ایپس اور صارفین"</string> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 3bcda0c640b3..8684b49459af 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s orqali ulangan"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s orqali ishlaydi"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ulangan, lekin internet aloqasi yo‘q"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Internet kirish nuqtasi vaqtinchalik to‘lgan"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Juda sekin"</string> <string name="speed_label_slow" msgid="813109590815810235">"Sekin"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: ikkita ustun"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: uchta ustun"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi: signal to‘liq"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Ochiq tarmoq"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Xavfsiz tarmoq"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"O‘chirilgan ilovalar"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"O‘chirib tashlangan ilova va foydalanuvchilar"</string> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index b22f7febab95..836dd3dd76e9 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Được kết nối qua %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Có sẵn qua %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Đã kết nối, không có Internet"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Điểm truy cập tạm thời đã đạt đến giới hạn số lượng thiết bị truy cập."</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Rất chậm"</string> <string name="speed_label_slow" msgid="813109590815810235">"Chậm"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Khá tốt"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Tín hiệu Wi-Fi hai vạch."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Tín hiệu Wi-Fi ba vạch."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Tín hiệu Wi-Fi đủ."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Mạng mở"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Mạng bảo mật"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Hệ điều hành Android"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Ứng dụng đã xóa"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Ứng dụng và người dùng bị xóa"</string> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index 21c4a9472c29..c7a3d7797420 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"已通过%1$s连接"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"可通过%1$s连接"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"已连接,但无法访问互联网"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"接入点暂时满载"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"很慢"</string> <string name="speed_label_slow" msgid="813109590815810235">"慢"</string> <string name="speed_label_okay" msgid="2331665440671174858">"良好"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"WLAN 信号强度为两格。"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"WLAN 信号强度为三格。"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"WLAN 信号满格。"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"开放网络"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"安全网络"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android 操作系统"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"已删除的应用"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"已删除的应用和用户"</string> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index 21d41703e324..bc3348c30913 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 連線"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"已連線,沒有互聯網"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"存取點暫時已滿"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"非常慢"</string> <string name="speed_label_slow" msgid="813109590815810235">"慢"</string> <string name="speed_label_okay" msgid="2331665440671174858">"良好"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi 訊號兩格。"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi 訊號三格。"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi 訊號滿格。"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"開放式網絡"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"安全網絡"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android 作業系統"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"已移除的應用程式"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"已移除的應用程式和使用者"</string> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index 746efd182762..10f2e76f6182 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 使用"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"已連線,沒有網際網路"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"存取點暫時滿載"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"非常慢"</string> <string name="speed_label_slow" msgid="813109590815810235">"慢"</string> <string name="speed_label_okay" msgid="2331665440671174858">"確定"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi 訊號強度兩格。"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi 訊號強度三格。"</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wi-Fi 訊號強度滿格。"</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"開放式網路"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"安全網路"</string> <string name="process_kernel_label" msgid="3916858646836739323">"Android 作業系統"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"移除的應用程式"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"已移除的應用程式和使用者"</string> diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index 9dcd1e390f0c..65b3478df29a 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -40,8 +40,7 @@ <string name="connected_via_passpoint" msgid="2826205693803088747">"Kuxhumeke nge-%1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Iyatholakala nge-%1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Kuxhumekile, ayikho i-inthanethi"</string> - <!-- no translation found for wifi_ap_unable_to_handle_new_sta (5348824313514404541) --> - <skip /> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Iphoyinti lokufinyelela ligcwele okwesikhashana"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Phansi kakhulu"</string> <string name="speed_label_slow" msgid="813109590815810235">"Phansi"</string> <string name="speed_label_okay" msgid="2331665440671174858">"KULUNGILE"</string> @@ -104,10 +103,8 @@ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Amabha amabili we-Wifi."</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Amabha amathathu we-Wifi."</string> <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Isiginali ye-Wifi igcwele."</string> - <!-- no translation found for accessibility_wifi_security_type_none (1223747559986205423) --> - <skip /> - <!-- no translation found for accessibility_wifi_security_type_secured (862921720418885331) --> - <skip /> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Vula inethiwekhi"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Inethiwekhi evikelekile"</string> <string name="process_kernel_label" msgid="3916858646836739323">"I-Android OS"</string> <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Izinhlelo zokusebenza zisusiwe"</string> <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Izinhelo zokusebenza nabasebenzisi abasusiwe"</string> diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 259446a39602..ebaf10aa0e05 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -100,6 +100,11 @@ <!-- Summary for networks failing to connect due to association rejection status 17, AP full --> <string name="wifi_ap_unable_to_handle_new_sta">Access point temporarily full</string> + <!-- Status message of Wi-Fi when it is connected to a Carrier Network. [CHAR LIMIT=NONE] --> + <string name="connected_via_carrier">Connected via %1$s</string> + <!-- Status message of Wi-Fi when an available network is a carrier network. [CHAR LIMIT=NONE] --> + <string name="available_via_carrier">Available via %1$s</string> + <!-- Speed label for very slow network speed --> <string name="speed_label_very_slow">Very Slow</string> <!-- Speed label for slow network speed --> diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index 0f8d2f9e3ca7..d04ccf2665c1 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -59,7 +59,9 @@ import com.android.settingslib.R; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -120,6 +122,11 @@ public class AccessPoint implements Comparable<AccessPoint> { */ private final ConcurrentHashMap<String, ScanResult> mScanResultCache = new ConcurrentHashMap<String, ScanResult>(32); + + /** Map of BSSIDs to speed values for individual ScanResults. */ + private final Map<String, Integer> mScanResultScores = new HashMap<>(); + + /** Maximum age of scan results to hold onto while actively scanning. **/ private static final long MAX_SCAN_RESULT_AGE_MS = 15000; static final String KEY_NETWORKINFO = "key_networkinfo"; @@ -177,7 +184,6 @@ public class AccessPoint implements Comparable<AccessPoint> { private Object mTag; - private int mRankingScore = Integer.MIN_VALUE; private int mSpeed = Speed.NONE; private boolean mIsScoredNetworkMetered = false; @@ -280,10 +286,11 @@ public class AccessPoint implements Comparable<AccessPoint> { this.mNetworkInfo = that.mNetworkInfo; this.mScanResultCache.clear(); this.mScanResultCache.putAll(that.mScanResultCache); + this.mScanResultScores.clear(); + this.mScanResultScores.putAll(that.mScanResultScores); this.mId = that.mId; this.mSpeed = that.mSpeed; this.mIsScoredNetworkMetered = that.mIsScoredNetworkMetered; - this.mRankingScore = that.mRankingScore; } /** @@ -294,7 +301,7 @@ public class AccessPoint implements Comparable<AccessPoint> { * 1. Active before inactive * 2. Reachable before unreachable * 3. Saved before unsaved - * 4. (Internal only) Network ranking score + * 4. Network speed value * 5. Stronger signal before weaker signal * 6. SSID alphabetically * @@ -315,9 +322,9 @@ public class AccessPoint implements Comparable<AccessPoint> { if (isSaved() && !other.isSaved()) return -1; if (!isSaved() && other.isSaved()) return 1; - // Higher scores go before lower scores - if (getRankingScore() != other.getRankingScore()) { - return (getRankingScore() > other.getRankingScore()) ? -1 : 1; + // Faster speeds go before slower speeds + if (getSpeed() != other.getSpeed()) { + return other.getSpeed() - getSpeed(); } // Sort by signal strength, bucketed by level @@ -376,9 +383,6 @@ public class AccessPoint implements Comparable<AccessPoint> { builder.append(',').append(securityToString(security, pskType)); } builder.append(",level=").append(getLevel()); - if (mRankingScore != Integer.MIN_VALUE) { - builder.append(",rankingScore=").append(mRankingScore); - } if (mSpeed != Speed.NONE) { builder.append(",speed=").append(mSpeed); } @@ -396,6 +400,7 @@ public class AccessPoint implements Comparable<AccessPoint> { */ boolean update(WifiNetworkScoreCache scoreCache, boolean scoringUiEnabled) { boolean scoreChanged = false; + mScanResultScores.clear(); if (scoringUiEnabled) { scoreChanged = updateScores(scoreCache); } @@ -409,33 +414,26 @@ public class AccessPoint implements Comparable<AccessPoint> { */ private boolean updateScores(WifiNetworkScoreCache scoreCache) { int oldSpeed = mSpeed; - int oldRankingScore = mRankingScore; mSpeed = Speed.NONE; - mRankingScore = Integer.MIN_VALUE; + for (ScanResult result : mScanResultCache.values()) { + ScoredNetwork score = scoreCache.getScoredNetwork(result); + if (score == null) { + continue; + } + + int speed = score.calculateBadge(result.level); + mScanResultScores.put(result.BSSID, speed); + mSpeed = Math.max(mSpeed, speed); + } + + // set mSpeed to the connected ScanResult if the AccessPoint is the active network if (isActive() && mInfo != null) { NetworkKey key = new NetworkKey(new WifiKey( AccessPoint.convertToQuotedString(ssid), mInfo.getBSSID())); ScoredNetwork score = scoreCache.getScoredNetwork(key); if (score != null) { mSpeed = score.calculateBadge(mInfo.getRssi()); - if (score.hasRankingScore()) { - mRankingScore = score.calculateRankingScore(mInfo.getRssi()); - } - } - } else { - for (ScanResult result : mScanResultCache.values()) { - ScoredNetwork score = scoreCache.getScoredNetwork(result); - if (score == null) { - continue; - } - - if (score.hasRankingScore()) { - mRankingScore = - Math.max(mRankingScore, score.calculateRankingScore(result.level)); - } - // TODO(sghuman): Rename calculateBadge API - mSpeed = Math.max(mSpeed, score.calculateBadge(result.level)); } } @@ -443,7 +441,7 @@ public class AccessPoint implements Comparable<AccessPoint> { Log.i(TAG, String.format("%s: Set speed to %d", ssid, mSpeed)); } - return (oldSpeed != mSpeed || oldRankingScore != mRankingScore); + return oldSpeed != mSpeed; } /** @@ -474,6 +472,10 @@ public class AccessPoint implements Comparable<AccessPoint> { } private void evictOldScanResults() { + if (WifiTracker.sStaleScanResults) { + // Do not evict old scan results unless we are scanning and have fresh results. + return; + } long nowMs = SystemClock.elapsedRealtime(); for (Iterator<ScanResult> iter = mScanResultCache.values().iterator(); iter.hasNext(); ) { ScanResult result = iter.next(); @@ -764,7 +766,7 @@ public class AccessPoint implements Comparable<AccessPoint> { if (WifiTracker.sVerboseLogging) { // Add RSSI/band information for this config, what was seen up to 6 seconds ago // verbose WiFi Logging is only turned on thru developers settings - if (mInfo != null && mNetworkInfo != null) { // This is the active connection + if (isActive() && mInfo != null) { summary.append(" f=" + Integer.toString(mInfo.getFrequency())); } summary.append(" " + getVisibilityStatus()); @@ -799,12 +801,15 @@ public class AccessPoint implements Comparable<AccessPoint> { } } - // If Speed label is present, use the preference combination to prepend it to the summary. - if (mSpeed != Speed.NONE) { + // If Speed label and summary are both present, use the preference combination to combine + // the two, else return the non-null one. + if (getSpeedLabel() != null && summary.length() != 0) { return mContext.getResources().getString( R.string.preference_summary_default_combination, getSpeedLabel(), summary.toString()); + } else if (getSpeedLabel() != null) { + return getSpeedLabel(); } else { return summary.toString(); } @@ -820,13 +825,13 @@ public class AccessPoint implements Comparable<AccessPoint> { */ private String getVisibilityStatus() { StringBuilder visibility = new StringBuilder(); - StringBuilder scans24GHz = null; - StringBuilder scans5GHz = null; + StringBuilder scans24GHz = new StringBuilder(); + StringBuilder scans5GHz = new StringBuilder(); String bssid = null; long now = System.currentTimeMillis(); - if (mInfo != null) { + if (isActive() && mInfo != null) { bssid = mInfo.getBSSID(); if (bssid != null) { visibility.append(" ").append(bssid); @@ -834,9 +839,6 @@ public class AccessPoint implements Comparable<AccessPoint> { visibility.append(" rssi=").append(mInfo.getRssi()); visibility.append(" "); visibility.append(" score=").append(mInfo.score); - if (mRankingScore != Integer.MIN_VALUE) { - visibility.append(" rankingScore=").append(getRankingScore()); - } if (mSpeed != Speed.NONE) { visibility.append(" speed=").append(getSpeedLabel()); } @@ -846,87 +848,55 @@ public class AccessPoint implements Comparable<AccessPoint> { visibility.append(String.format("rx=%.1f", mInfo.rxSuccessRate)); } - int rssi5 = WifiConfiguration.INVALID_RSSI; - int rssi24 = WifiConfiguration.INVALID_RSSI; - int num5 = 0; - int num24 = 0; + int maxRssi5 = WifiConfiguration.INVALID_RSSI; + int maxRssi24 = WifiConfiguration.INVALID_RSSI; + final int maxDisplayedScans = 4; + int num5 = 0; // number of scanned BSSID on 5GHz band + int num24 = 0; // number of scanned BSSID on 2.4Ghz band int numBlackListed = 0; - int n24 = 0; // Number scan results we included in the string - int n5 = 0; // Number scan results we included in the string evictOldScanResults(); + // TODO: sort list by RSSI or age for (ScanResult result : mScanResultCache.values()) { - if (result.frequency >= LOWER_FREQ_5GHZ && result.frequency <= HIGHER_FREQ_5GHZ) { // Strictly speaking: [4915, 5825] - // number of known BSSID on 5GHz band - num5 = num5 + 1; - } else if (result.frequency >= LOWER_FREQ_24GHZ - && result.frequency <= HIGHER_FREQ_24GHZ) { - // Strictly speaking: [2412, 2482] - // number of known BSSID on 2.4Ghz band - num24 = num24 + 1; - } - + num5++; - if (result.frequency >= LOWER_FREQ_5GHZ - && result.frequency <= HIGHER_FREQ_5GHZ) { - if (result.level > rssi5) { - rssi5 = result.level; + if (result.level > maxRssi5) { + maxRssi5 = result.level; } - if (n5 < 4) { - if (scans5GHz == null) scans5GHz = new StringBuilder(); - scans5GHz.append(" \n{").append(result.BSSID); - if (bssid != null && result.BSSID.equals(bssid)) scans5GHz.append("*"); - scans5GHz.append("=").append(result.frequency); - scans5GHz.append(",").append(result.level); - scans5GHz.append("}"); - n5++; + if (num5 <= maxDisplayedScans) { + scans5GHz.append(verboseScanResultSummary(result, bssid)); } } else if (result.frequency >= LOWER_FREQ_24GHZ && result.frequency <= HIGHER_FREQ_24GHZ) { - if (result.level > rssi24) { - rssi24 = result.level; + // Strictly speaking: [2412, 2482] + num24++; + + if (result.level > maxRssi24) { + maxRssi24 = result.level; } - if (n24 < 4) { - if (scans24GHz == null) scans24GHz = new StringBuilder(); - scans24GHz.append(" \n{").append(result.BSSID); - if (bssid != null && result.BSSID.equals(bssid)) scans24GHz.append("*"); - scans24GHz.append("=").append(result.frequency); - scans24GHz.append(",").append(result.level); - scans24GHz.append("}"); - n24++; + if (num24 <= maxDisplayedScans) { + scans24GHz.append(verboseScanResultSummary(result, bssid)); } } } visibility.append(" ["); if (num24 > 0) { visibility.append("(").append(num24).append(")"); - if (n24 <= 4) { - if (scans24GHz != null) { - visibility.append(scans24GHz.toString()); - } - } else { - visibility.append("max=").append(rssi24); - if (scans24GHz != null) { - visibility.append(",").append(scans24GHz.toString()); - } + if (num24 > maxDisplayedScans) { + visibility.append("max=").append(maxRssi24).append(","); } + visibility.append(scans24GHz.toString()); } visibility.append(";"); if (num5 > 0) { visibility.append("(").append(num5).append(")"); - if (n5 <= 4) { - if (scans5GHz != null) { - visibility.append(scans5GHz.toString()); - } - } else { - visibility.append("max=").append(rssi5); - if (scans5GHz != null) { - visibility.append(",").append(scans5GHz.toString()); - } + if (num5 > maxDisplayedScans) { + visibility.append("max=").append(maxRssi5).append(","); } + visibility.append(scans5GHz.toString()); } if (numBlackListed > 0) visibility.append("!").append(numBlackListed); @@ -935,6 +905,28 @@ public class AccessPoint implements Comparable<AccessPoint> { return visibility.toString(); } + @VisibleForTesting + /* package */ String verboseScanResultSummary(ScanResult result, String bssid) { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(" \n{").append(result.BSSID); + if (result.BSSID.equals(bssid)) { + stringBuilder.append("*"); + } + stringBuilder.append("=").append(result.frequency); + stringBuilder.append(",").append(result.level); + if (hasSpeed(result)) { + stringBuilder.append(",") + .append(getSpeedLabel(mScanResultScores.get(result.BSSID))); + } + stringBuilder.append("}"); + return stringBuilder.toString(); + } + + private boolean hasSpeed(ScanResult result) { + return mScanResultScores.containsKey(result.BSSID) + && mScanResultScores.get(result.BSSID) != Speed.NONE; + } + /** * Return whether this is the active connection. * For ephemeral connections (networkId is invalid), this returns false if the network is @@ -1141,15 +1133,16 @@ public class AccessPoint implements Comparable<AccessPoint> { setRssi(AccessPoint.UNREACHABLE_RSSI); } - int getRankingScore() { - return mRankingScore; - } - int getSpeed() { return mSpeed;} @Nullable String getSpeedLabel() { - switch (mSpeed) { + return getSpeedLabel(mSpeed); + } + + @Nullable + private String getSpeedLabel(int speed) { + switch (speed) { case Speed.VERY_FAST: return mContext.getString(R.string.speed_label_very_fast); case Speed.FAST: diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java b/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java index 46a53a3bb4d4..731a6072218b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/TestAccessPointBuilder.java @@ -23,6 +23,8 @@ import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.os.Bundle; +import android.support.annotation.Keep; +import com.android.settingslib.wifi.AccessPoint.Speed; import java.util.ArrayList; @@ -33,6 +35,7 @@ import java.util.ArrayList; * applications. AccessPoints were designed to only be populated by the mechanisms of scan results * and wifi configurations. */ +@Keep public class TestAccessPointBuilder { // match the private values in WifiManager private static final int MIN_RSSI = -100; @@ -40,6 +43,7 @@ public class TestAccessPointBuilder { // set some sensible defaults private String mBssid = null; + private int mSpeed = Speed.NONE; private int mRssi = AccessPoint.UNREACHABLE_RSSI; private int mNetworkId = WifiConfiguration.INVALID_NETWORK_ID; private String ssid = "TestSsid"; @@ -53,10 +57,12 @@ public class TestAccessPointBuilder { Context mContext; private ArrayList<ScanResult> mScanResultCache; + @Keep public TestAccessPointBuilder(Context context) { mContext = context; } + @Keep public AccessPoint build() { Bundle bundle = new Bundle(); @@ -78,12 +84,14 @@ public class TestAccessPointBuilder { bundle.putParcelableArrayList(AccessPoint.KEY_SCANRESULTCACHE, mScanResultCache); } bundle.putInt(AccessPoint.KEY_SECURITY, mSecurity); + bundle.putInt(AccessPoint.KEY_SPEED, mSpeed); AccessPoint ap = new AccessPoint(mContext, bundle); ap.setRssi(mRssi); return ap; } + @Keep public TestAccessPointBuilder setActive(boolean active) { if (active) { mNetworkInfo = new NetworkInfo( @@ -103,6 +111,7 @@ public class TestAccessPointBuilder { * <p>Side effect: if this AccessPoint was previously unreachable, * setting the level will also make it reachable. */ + @Keep public TestAccessPointBuilder setLevel(int level) { // Reversal of WifiManager.calculateSignalLevels if (level == 0) { @@ -117,21 +126,29 @@ public class TestAccessPointBuilder { return this; } + @Keep public TestAccessPointBuilder setNetworkInfo(NetworkInfo info) { mNetworkInfo = info; return this; } + @Keep public TestAccessPointBuilder setRssi(int rssi) { mRssi = rssi; return this; } + public TestAccessPointBuilder setSpeed(int speed) { + mSpeed = speed; + return this; + } + /** * Set whether the AccessPoint is reachable. * Side effect: if the signal level was not previously set, * making an AccessPoint reachable will set the signal to the minimum level. */ + @Keep public TestAccessPointBuilder setReachable(boolean reachable) { if (reachable) { // only override the mRssi if it hasn't been set yet @@ -144,6 +161,7 @@ public class TestAccessPointBuilder { return this; } + @Keep public TestAccessPointBuilder setSaved(boolean saved){ if (saved) { mNetworkId = 1; @@ -153,26 +171,31 @@ public class TestAccessPointBuilder { return this; } + @Keep public TestAccessPointBuilder setSecurity(int security) { mSecurity = security; return this; } + @Keep public TestAccessPointBuilder setSsid(String newSsid) { ssid = newSsid; return this; } + @Keep public TestAccessPointBuilder setFqdn(String fqdn) { mFqdn = fqdn; return this; } + @Keep public TestAccessPointBuilder setProviderFriendlyName(String friendlyName) { mProviderFriendlyName = friendlyName; return this; } + @Keep public TestAccessPointBuilder setWifiInfo(WifiInfo info) { mWifiInfo = info; return this; @@ -184,6 +207,7 @@ public class TestAccessPointBuilder { * <p>Setting this to a value other than {@link WifiConfiguration#INVALID_NETWORK_ID} makes this * AccessPoint a saved network. */ + @Keep public TestAccessPointBuilder setNetworkId(int networkId) { mNetworkId = networkId; return this; diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index b94570062037..45032ce42882 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -145,7 +145,9 @@ public class WifiTracker { @VisibleForTesting Scanner mScanner; - private boolean mStaleScanResults = true; + + @GuardedBy("mLock") + static boolean sStaleScanResults = true; public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved, boolean includeScans) { @@ -239,9 +241,7 @@ public class WifiTracker { }; } - /** - * Synchronously update the list of access points with the latest information. - */ + /** Synchronously update the list of access points with the latest information. */ @MainThread public void forceUpdate() { synchronized (mLock) { @@ -255,6 +255,7 @@ public class WifiTracker { } List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks(); + mInternalAccessPoints.clear(); updateAccessPointsLocked(newScanResults, configs); // Synchronously copy access points @@ -355,7 +356,7 @@ public class WifiTracker { * <p>This should always be called when done with a WifiTracker (if startTracking was called) to * ensure proper cleanup and prevent any further callbacks from occurring. * - * <p>Calling this method will set the {@link #mStaleScanResults} bit, which prevents + * <p>Calling this method will set the {@link #sStaleScanResults} bit, which prevents * {@link WifiListener#onAccessPointsChanged()} callbacks from being invoked (until the bit * is unset on the next SCAN_RESULTS_AVAILABLE_ACTION). */ @@ -373,8 +374,8 @@ public class WifiTracker { mWorkHandler.removePendingMessages(); mMainHandler.removePendingMessages(); + sStaleScanResults = true; } - mStaleScanResults = true; } private void unregisterScoreCache() { @@ -479,7 +480,7 @@ public class WifiTracker { /** * Safely modify {@link #mInternalAccessPoints} by acquiring {@link #mLock} first. * - * <p>Will not perform the update if {@link #mStaleScanResults} is true + * <p>Will not perform the update if {@link #sStaleScanResults} is true */ private void updateAccessPoints() { List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks(); @@ -489,7 +490,7 @@ public class WifiTracker { } synchronized (mLock) { - if(!mStaleScanResults) { + if(!sStaleScanResults) { updateAccessPointsLocked(newScanResults, configs); } } @@ -499,7 +500,7 @@ public class WifiTracker { * Update the internal list of access points. * * <p>Do not called directly (except for forceUpdate), use {@link #updateAccessPoints()} which - * respects {@link #mStaleScanResults}. + * respects {@link #sStaleScanResults}. */ @GuardedBy("mLock") private void updateAccessPointsLocked(final List<ScanResult> newScanResults, @@ -789,9 +790,11 @@ public class WifiTracker { mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS); } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); - mConnected.set(info.isConnected()); - mMainHandler.sendEmptyMessage(MainHandler.MSG_CONNECTED_CHANGED); + if(mConnected.get() != info.isConnected()) { + mConnected.set(info.isConnected()); + mMainHandler.sendEmptyMessage(MainHandler.MSG_CONNECTED_CHANGED); + } mWorkHandler.obtainMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO, info) .sendToTarget(); @@ -844,7 +847,7 @@ public class WifiTracker { // Only notify listeners of changes if we have fresh scan results, otherwise the // UI will be updated with stale results. We want to copy the APs regardless, // for instances where forceUpdate was invoked by the caller. - if (mStaleScanResults) { + if (sStaleScanResults) { copyAndNotifyListeners(false /*notifyListeners*/); } else { copyAndNotifyListeners(true /*notifyListeners*/); @@ -899,7 +902,7 @@ public class WifiTracker { switch (msg.what) { case MSG_UPDATE_ACCESS_POINTS: if (msg.arg1 == CLEAR_STALE_SCAN_RESULTS) { - mStaleScanResults = false; + sStaleScanResults = false; } updateAccessPoints(); break; diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java index c081b350e823..9645c9407600 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java @@ -50,6 +50,7 @@ import android.text.style.TtsSpan; import com.android.settingslib.R; +import com.android.settingslib.wifi.AccessPoint.Speed; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -72,6 +73,7 @@ public class AccessPointTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = InstrumentationRegistry.getTargetContext(); + WifiTracker.sVerboseLogging = false; } @Test @@ -145,7 +147,13 @@ public class AccessPointTest { assertSortingWorks(savedAp, notSavedAp); } - //TODO: add tests for mRankingScore sort order if ranking is exposed + @Test + public void testCompareTo_GivesHighSpeedBeforeLowSpeed() { + AccessPoint fastAp = new TestAccessPointBuilder(mContext).setSpeed(Speed.FAST).build(); + AccessPoint slowAp = new TestAccessPointBuilder(mContext).setSpeed(Speed.SLOW).build(); + + assertSortingWorks(fastAp, slowAp); + } @Test public void testCompareTo_GivesHighLevelBeforeLowLevel() { @@ -419,7 +427,6 @@ public class AccessPointTest { ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */); verify(mockWifiNetworkScoreCache, times(2)).getScoredNetwork(key); - verify(mockWifiNetworkScoreCache, never()).getScoredNetwork(any(ScanResult.class)); assertThat(ap.getSpeed()).isEqualTo(AccessPoint.Speed.FAST); } @@ -437,6 +444,25 @@ public class AccessPointTest { } @Test + public void testVerboseSummaryString_showsScanResultSpeedLabel() { + WifiTracker.sVerboseLogging = true; + + Bundle bundle = new Bundle(); + ArrayList<ScanResult> scanResults = buildScanResultCache(); + bundle.putParcelableArrayList(AccessPoint.KEY_SCANRESULTCACHE, scanResults); + AccessPoint ap = new AccessPoint(mContext, bundle); + + when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class))) + .thenReturn(buildScoredNetworkWithMockBadgeCurve()); + when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.VERY_FAST); + + ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */); + String summary = ap.verboseScanResultSummary(scanResults.get(0), null); + + assertThat(summary.contains(mContext.getString(R.string.speed_label_very_fast))).isTrue(); + } + + @Test public void testSummaryString_concatenatesSpeedLabel() { AccessPoint ap = createAccessPointWithScanResultCache(); ap.update(new WifiConfiguration()); @@ -505,7 +531,7 @@ public class AccessPointTest { } /** - * Assert that the first AccessPoint appears after the second AccessPoint + * Assert that the first AccessPoint appears before the second AccessPoint * once sorting has been completed. */ private void assertSortingWorks(AccessPoint first, AccessPoint second) { diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java index c87d01a7da8e..6ede55d2941e 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java @@ -135,7 +135,9 @@ public class WifiTrackerTest { private HandlerThread mWorkerThread; private Looper mWorkerLooper; private Looper mMainLooper; + private int mOriginalScoringUiSettingValue; + private boolean mOriginalStaleScanResultsValue; @Before public void setUp() { @@ -210,6 +212,8 @@ public class WifiTrackerTest { InstrumentationRegistry.getTargetContext().getContentResolver(), Settings.Global.NETWORK_SCORING_UI_ENABLED, 1 /* enabled */); + + mOriginalStaleScanResultsValue = WifiTracker.sStaleScanResults; } @After @@ -218,6 +222,8 @@ public class WifiTrackerTest { InstrumentationRegistry.getTargetContext().getContentResolver(), Settings.Global.NETWORK_SCORING_UI_ENABLED, mOriginalScoringUiSettingValue); + + WifiTracker.sStaleScanResults = mOriginalStaleScanResultsValue; } private static ScanResult buildScanResult1() { @@ -840,4 +846,37 @@ public class WifiTrackerTest { assertThat(tracker.getAccessPoints()).isEmpty(); } + + @Test + public void onConnectedChangedCallback_shouldNotBeInvokedWhenNoStateChange() throws Exception { + WifiTracker tracker = createTrackerWithScanResultsAndAccessPoint1Connected(); + verify(mockWifiListener, times(1)).onConnectedChanged(); + + NetworkInfo networkInfo = new NetworkInfo( + ConnectivityManager.TYPE_WIFI, 0, "Type Wifi", "subtype"); + networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "connected", "test"); + + Intent intent = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION); + intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); + tracker.mReceiver.onReceive(mContext, intent); + + verify(mockWifiListener, times(1)).onConnectedChanged(); + } + + @Test + public void onConnectedChangedCallback_shouldNBeInvokedWhenStateChanges() throws Exception { + WifiTracker tracker = createTrackerWithScanResultsAndAccessPoint1Connected(); + verify(mockWifiListener, times(1)).onConnectedChanged(); + + NetworkInfo networkInfo = new NetworkInfo( + ConnectivityManager.TYPE_WIFI, 0, "Type Wifi", "subtype"); + networkInfo.setDetailedState( + NetworkInfo.DetailedState.DISCONNECTED, "dicconnected", "test"); + + Intent intent = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION); + intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); + tracker.mReceiver.onReceive(mContext, intent); + + verify(mockWifiListener, times(2)).onConnectedChanged(); + } } diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index edd0d0df11b6..24f6c138e081 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -208,7 +208,7 @@ android:icon="@drawable/icon" android:process="com.android.systemui" android:supportsRtl="true" - android:theme="@style/systemui_theme" + android:theme="@style/Theme.SystemUI" android:defaultToDeviceProtectedStorage="true" android:directBootAware="true"> <!-- Keep theme in sync with SystemUIApplication.onCreate(). diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml index b821e7e76c60..9fdb00eebe10 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml @@ -43,7 +43,7 @@ android:layout_height="wrap_content" android:layout_width="280dp" android:layout_gravity="center_horizontal" - android:theme="@style/PasswordTheme" + android:theme="?attr/passwordStyle" > <EditText android:id="@+id/passwordEntry" diff --git a/packages/SystemUI/res-keyguard/values-ja/strings.xml b/packages/SystemUI/res-keyguard/values-ja/strings.xml index c108d1ef8252..ecd27de498cb 100644 --- a/packages/SystemUI/res-keyguard/values-ja/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ja/strings.xml @@ -110,9 +110,9 @@ <string name="kg_prompt_reason_restart_pattern" msgid="7246972020562621506">"端末の再起動後はパターンの入力が必要となります"</string> <string name="kg_prompt_reason_restart_pin" msgid="6303592361322290145">"端末の再起動後は PIN の入力が必要となります"</string> <string name="kg_prompt_reason_restart_password" msgid="6984641181515902406">"端末の再起動後はパスワードの入力が必要となります"</string> - <string name="kg_prompt_reason_timeout_pattern" msgid="5304487696073914063">"セキュリティを強化するにはパターンが必要です"</string> - <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"セキュリティを強化するには PIN が必要です"</string> - <string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"セキュリティを強化するにはパスワードが必要です"</string> + <string name="kg_prompt_reason_timeout_pattern" msgid="5304487696073914063">"追加の確認のためパターンが必要です"</string> + <string name="kg_prompt_reason_timeout_pin" msgid="8851462864335757813">"追加の確認のため PIN が必要です"</string> + <string name="kg_prompt_reason_timeout_password" msgid="6563904839641583441">"追加の確認のためパスワードが必要です"</string> <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3398054847288438444">"プロファイルを切り替えるにはパターンが必要です"</string> <string name="kg_prompt_reason_switch_profiles_pin" msgid="7426368139226961699">"プロファイルを切り替えるには PIN が必要です"</string> <string name="kg_prompt_reason_switch_profiles_password" msgid="8383831046318421845">"プロファイルを切り替えるにはパスワードが必要です"</string> diff --git a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml index f3fa491f50af..6bdf2d928238 100644 --- a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml @@ -93,12 +93,12 @@ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="8364140853305528449">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, ser-lhe-á pedido para desbloquear o telemóvel através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="3389829202093674267">"Código PIN do cartão SIM incorreto. Tem de contactar o seu operador para desbloquear o dispositivo."</string> <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="4314341367727055967"> - <item quantity="one">Incorrect SIM PIN code, you have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> + <item quantity="one">Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de precisar de contactar o seu operador para desbloquear o dispositivo.</item> <item quantity="other">Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas.</item> </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="3329017604125179374">"Cartão SIM inutilizável. Contacte o seu operador."</string> <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="2287504898931957513"> - <item quantity="one">Incorrect SIM PUK code, you have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item> + <item quantity="one">Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de o cartão SIM ficar permanentemente inutilizável.</item> <item quantity="other">Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas antes de o cartão SIM ficar permanentemente inutilizável.</item> </plurals> <string name="kg_password_pin_failed" msgid="8769990811451236223">"Falha ao introduzir o PIN do cartão SIM!"</string> @@ -119,15 +119,15 @@ <string name="kg_prompt_reason_device_admin" msgid="3452168247888906179">"Dispositivo bloqueado pelo administrador"</string> <string name="kg_prompt_reason_user_request" msgid="8236951765212462286">"O dispositivo foi bloqueado manualmente"</string> <plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="71299470072448533"> - <item quantity="one">Device hasn\'t been unlocked for <xliff:g id="NUMBER_1">%d</xliff:g> hours. Confirm pattern.</item> + <item quantity="one">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_0">%d</xliff:g> hora. Confirme o padrão.</item> <item quantity="other">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_1">%d</xliff:g> horas. Confirme o padrão.</item> </plurals> <plurals name="kg_prompt_reason_time_pin" formatted="false" msgid="34586942088144385"> - <item quantity="one">Device hasn\'t been unlocked for <xliff:g id="NUMBER_1">%d</xliff:g> hours. Confirm PIN.</item> + <item quantity="one">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_0">%d</xliff:g> hora. Confirme o PIN.</item> <item quantity="other">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_1">%d</xliff:g> horas. Confirme o PIN.</item> </plurals> <plurals name="kg_prompt_reason_time_password" formatted="false" msgid="257297696215346527"> - <item quantity="one">Device hasn\'t been unlocked for <xliff:g id="NUMBER_1">%d</xliff:g> hours. Confirm password.</item> + <item quantity="one">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_0">%d</xliff:g> hora. Confirme a palavra-passe.</item> <item quantity="other">O dispositivo não é desbloqueado há <xliff:g id="NUMBER_1">%d</xliff:g> horas. Confirme a palavra-passe.</item> </plurals> <string name="fingerprint_not_recognized" msgid="348813995267914625">"Não reconhecido"</string> diff --git a/packages/SystemUI/res-keyguard/values/attrs.xml b/packages/SystemUI/res-keyguard/values/attrs.xml index 802bd308d407..e2ce210efdcb 100644 --- a/packages/SystemUI/res-keyguard/values/attrs.xml +++ b/packages/SystemUI/res-keyguard/values/attrs.xml @@ -41,4 +41,6 @@ <declare-styleable name="CarrierText"> <attr name="allCaps" format="boolean" /> </declare-styleable> + + <attr name="passwordStyle" format="reference" /> </resources> diff --git a/packages/SystemUI/res-keyguard/values/styles.xml b/packages/SystemUI/res-keyguard/values/styles.xml index ea867eed08b4..826e3ea1f7e5 100644 --- a/packages/SystemUI/res-keyguard/values/styles.xml +++ b/packages/SystemUI/res-keyguard/values/styles.xml @@ -54,19 +54,28 @@ <style name="widget_big_thin"> <item name="android:textSize">@dimen/widget_big_font_size</item> <item name="android:fontFamily">@*android:string/config_headlineFontFamilyLight</item> + <item name="android:fontFeatureSettings">@*android:string/config_headlineFontFeatureSettings</item> </style> <style name="BouncerSecurityContainer"> <item name="android:layout_gravity">center_horizontal|bottom</item> </style> - <style name="PasswordTheme" parent="systemui_theme"> + <style name="PasswordTheme" parent="Theme.SystemUI"> + <item name="android:textColor">?attr/wallpaperTextColor</item> + <item name="android:colorControlNormal">?attr/wallpaperTextColor</item> + <item name="android:colorControlActivated">?attr/wallpaperTextColor</item> + </style> + + <style name="PasswordTheme.Light" parent="Theme.SystemUI.Light"> <item name="android:textColor">?attr/wallpaperTextColor</item> <item name="android:colorControlNormal">?attr/wallpaperTextColor</item> <item name="android:colorControlActivated">?attr/wallpaperTextColor</item> </style> <style name="keyguard_presentation_theme" parent="@android:style/Theme.Material.NoActionBar.Fullscreen"> + <item name="wallpaperTextColor">@*android:color/primary_text_material_dark</item> + <item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_dark</item> </style> </resources> diff --git a/packages/SystemUI/res/anim/error_to_trustedstate_path_1_animation.xml b/packages/SystemUI/res/anim/error_to_trustedstate_path_1_animation.xml index acc8531217d4..6821e623f5df 100644 --- a/packages/SystemUI/res/anim/error_to_trustedstate_path_1_animation.xml +++ b/packages/SystemUI/res/anim/error_to_trustedstate_path_1_animation.xml @@ -45,7 +45,7 @@ android:duration="16" android:propertyName="fillAlpha" android:valueFrom="0.0" - android:valueTo="1.0" + android:valueTo="0.5" android:valueType="floatType" android:interpolator="@android:interpolator/linear" /> </set> diff --git a/packages/SystemUI/res/anim/error_to_trustedstate_path_2_animation.xml b/packages/SystemUI/res/anim/error_to_trustedstate_path_2_animation.xml index fac1ece2dadd..a8251dc1f6a0 100644 --- a/packages/SystemUI/res/anim/error_to_trustedstate_path_2_animation.xml +++ b/packages/SystemUI/res/anim/error_to_trustedstate_path_2_animation.xml @@ -45,7 +45,7 @@ android:duration="16" android:propertyName="fillAlpha" android:valueFrom="0.0" - android:valueTo="1.0" + android:valueTo="0.5" android:valueType="floatType" android:interpolator="@android:interpolator/linear" /> </set> diff --git a/packages/SystemUI/res/anim/trusted_state_to_error_path_1_animation.xml b/packages/SystemUI/res/anim/trusted_state_to_error_path_1_animation.xml index 138c06a73911..547f42e5f5b9 100644 --- a/packages/SystemUI/res/anim/trusted_state_to_error_path_1_animation.xml +++ b/packages/SystemUI/res/anim/trusted_state_to_error_path_1_animation.xml @@ -37,14 +37,14 @@ <objectAnimator android:duration="183" android:propertyName="fillAlpha" - android:valueFrom="1.0" - android:valueTo="1.0" + android:valueFrom="0.5" + android:valueTo="0.5" android:valueType="floatType" android:interpolator="@android:interpolator/linear" /> <objectAnimator android:duration="16" android:propertyName="fillAlpha" - android:valueFrom="1.0" + android:valueFrom="0.5" android:valueTo="0.0" android:valueType="floatType" android:interpolator="@android:interpolator/linear" /> diff --git a/packages/SystemUI/res/anim/trusted_state_to_error_path_2_animation.xml b/packages/SystemUI/res/anim/trusted_state_to_error_path_2_animation.xml index c4d38e00dc9e..e5fe4d1409f6 100644 --- a/packages/SystemUI/res/anim/trusted_state_to_error_path_2_animation.xml +++ b/packages/SystemUI/res/anim/trusted_state_to_error_path_2_animation.xml @@ -37,14 +37,14 @@ <objectAnimator android:duration="183" android:propertyName="fillAlpha" - android:valueFrom="1.0" - android:valueTo="1.0" + android:valueFrom="0.5" + android:valueTo="0.5" android:valueType="floatType" android:interpolator="@android:interpolator/linear" /> <objectAnimator android:duration="16" android:propertyName="fillAlpha" - android:valueFrom="1.0" + android:valueFrom="0.5" android:valueTo="0.0" android:valueType="floatType" android:interpolator="@android:interpolator/linear" /> diff --git a/packages/SystemUI/res/drawable/error_to_trustedstate.xml b/packages/SystemUI/res/drawable/error_to_trustedstate.xml index 8bfe5f4a5bd1..bc196c9565eb 100755 --- a/packages/SystemUI/res/drawable/error_to_trustedstate.xml +++ b/packages/SystemUI/res/drawable/error_to_trustedstate.xml @@ -17,9 +17,9 @@ Copyright (C) 2017 The Android Open Source Project <vector xmlns:android="http://schemas.android.com/apk/res/android" android:name="error_to_trustedstate" - android:width="32dp" + android:width="24dp" android:viewportWidth="24" - android:height="32dp" + android:height="24dp" android:viewportHeight="24" > <group android:name="lock" @@ -30,7 +30,8 @@ Copyright (C) 2017 The Android Open Source Project android:translateY="2.9375" > <path android:name="ellipse_path_1" - android:fillColor="#FFFFFFFF" + android:fillColor="?attr/wallpaperTextColor" + android:fillAlpha="0.5" android:pathData="M 0.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" /> </group> <group @@ -38,16 +39,16 @@ Copyright (C) 2017 The Android Open Source Project <path android:name="path_1" android:pathData="M 1.63623046875,-4.953125 c 0.0,0.0 -1.61499023438,0.0 -1.61499023438,0.0 c 0.0,0.0 0.0,2.0 0.0,2.0 c 0.0,0.0 0.00375366210938,-0.015625 0.00375366210938,-0.015625 c 0.0,0.0 0.0118713378906,7.9296875 0.0118713378906,7.9296875 c 0.0,0.0 -0.0040283203125,0.015625 -0.0040283203125,0.015625 c 0.0,0.0 -0.0052490234375,2.0 -0.0052490234375,2.0 c 0.0,0.0 1.61987304688,0.0 1.61987304688,0.0 c 1.10000610352,0.0 2.0,-0.900024414062 2.0,-2.0 c 0.0,0.0 -0.01123046875,-7.9296875 -0.01123046875,-7.9296875 c 0.0,-1.09997558594 -0.899993896484,-2.0 -2.0,-2.0 Z" - android:fillColor="#FFFFFFFF" - android:fillAlpha="0" /> + android:fillColor="?attr/wallpaperTextColor" + android:fillAlpha="0.5" /> </group> <group android:name="lock_left_side" > <path android:name="path_2" android:pathData="M 0.0252990722656,-2.96975708008 c 0.0,0.0 -0.00390625,0.0166320800781 -0.00390625,0.0166320800781 c 0.0,0.0 -0.00015258789062,-2.0 -0.00015258789062,-2.0 c 0.0,0.0 -1.63500976562,0.0 -1.63500976562,0.0 c -1.10000610352,0.0 -2.0,0.900024414062 -2.0,2.0 c 0.0,0.0 0.01123046875,7.9296875 0.01123046875,7.9296875 c 0.0,1.09997558594 0.899993896484,2.0 2.0,2.0 c 0.0,0.0 1.63500976562,0.0 1.63500976562,0.0 c 0.0,0.0 -0.000244140625,-2.0009765625 -0.000244140625,-2.0009765625 c 0.0,0.0 0.00390625,-0.015869140625 0.00390625,-0.015869140625 c 0.0,0.0 -0.0108337402344,-7.92947387695 -0.0108337402344,-7.92947387695 Z" - android:fillColor="#FFFFFFFF" - android:fillAlpha="0" /> + android:fillColor="?attr/wallpaperTextColor" + android:fillAlpha="0.5" /> </group> <group android:name="lock_top" @@ -56,7 +57,8 @@ Copyright (C) 2017 The Android Open Source Project <path android:name="path_3" android:pathData="M 5.01239013672,3.390625 c 0.0,-2.76000976562 -2.23999023438,-5.0 -5.0,-5.0 c -2.76000976562,0.0 -5.0,2.23999023438 -5.0,5.0 c 0.0,0.0 1.89999389648,0.0 1.89999389648,0.0 c 0.0,-1.71002197266 1.38999938965,-3.09997558594 3.10000610352,-3.09997558594 c 1.71000671387,0.0 3.10000610352,1.38995361328 3.10000610352,3.09997558594 c 0.0,0.0 0.0,2.0 0.0,2.0 c 0.0,0.0 1.89999389648,0.0 1.89999389648,0.0 c 0.0,0.0 0.0,-2.0 0.0,-2.0 Z" - android:fillColor="#FFFFFFFF" /> + android:fillColor="?attr/wallpaperTextColor" + android:fillAlpha="0.5" /> </group> </group> <group @@ -68,7 +70,7 @@ Copyright (C) 2017 The Android Open Source Project android:translateY="4" > <path android:name="bottompath" - android:fillColor="#FFFFFFFF" + android:fillColor="?android:attr/colorError" android:pathData="M 0.0,-1.1 l 0.0,0.0 c 0.60751322478,0.0 1.1,0.49248677522 1.1,1.1 l 0.0,0.0 c 0.0,0.60751322478 -0.49248677522,1.1 -1.1,1.1 l 0.0,0.0 c -0.60751322478,0.0 -1.1,-0.49248677522 -1.1,-1.1 l 0.0,0.0 c 0.0,-0.60751322478 0.49248677522,-1.1 1.1,-1.1 Z" /> </group> </group> @@ -81,7 +83,7 @@ Copyright (C) 2017 The Android Open Source Project android:translateY="-2" > <path android:name="toppath" - android:fillColor="#FFFFFFFF" + android:fillColor="?android:attr/colorError" android:pathData="M 0.0,-3.0 l 0.0,0.0 c 0.5522847498,0.0 1.0,0.4477152502 1.0,1.0 l 0.0,4.0 c 0.0,0.5522847498 -0.4477152502,1.0 -1.0,1.0 l 0.0,0.0 c -0.5522847498,0.0 -1.0,-0.4477152502 -1.0,-1.0 l 0.0,-4.0 c 0.0,-0.5522847498 0.4477152502,-1.0 1.0,-1.0 Z" /> </group> </group> @@ -94,7 +96,7 @@ Copyright (C) 2017 The Android Open Source Project android:name="circle" > <path android:name="circlepath" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?android:attr/colorError" android:strokeWidth="2" android:strokeLineCap="round" android:pathData="M 0.0,-9.0 c 4.9705627482,0.0 9.0,4.0294372518 9.0,9.0 c 0.0,4.9705627482 -4.0294372518,9.0 -9.0,9.0 c -4.9705627482,0.0 -9.0,-4.0294372518 -9.0,-9.0 c 0.0,-4.9705627482 4.0294372518,-9.0 9.0,-9.0 Z" /> diff --git a/packages/SystemUI/res/drawable/ic_fingerprint.xml b/packages/SystemUI/res/drawable/ic_fingerprint.xml index ee2cf03d22ce..7bbd39d5db0b 100644 --- a/packages/SystemUI/res/drawable/ic_fingerprint.xml +++ b/packages/SystemUI/res/drawable/ic_fingerprint.xml @@ -1,5 +1,5 @@ <!-- - ~ Copyright (C) 2015 The Android Open Source Project + ~ Copyright (C) 2017 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. @@ -13,24 +13,55 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="32.0dp" - android:height="32.0dp" - android:viewportWidth="32.0" - android:viewportHeight="32.0"> - <path - android:fillColor="#80ffffff" - android:pathData="M23.7,5.9c-0.1,0.0 -0.2,0.0 -0.3,-0.1C21.0,4.5 18.6,3.9 16.0,3.9c-2.5,0.0 -4.6,0.6 -6.9,1.9C8.8,6.0 8.3,5.9 8.1,5.5C7.9,5.2 8.0,4.7 8.4,4.5c2.5,-1.4 4.9,-2.1 7.7,-2.1c2.8,0.0 5.4,0.7 8.0,2.1c0.4,0.2 0.5,0.6 0.3,1.0C24.2,5.7 24.0,5.9 23.7,5.9z"/> - <path - android:fillColor="#80ffffff" - android:pathData="M5.3,13.2c-0.1,0.0 -0.3,0.0 -0.4,-0.1c-0.3,-0.2 -0.4,-0.7 -0.2,-1.0c1.3,-1.9 2.9,-3.4 4.9,-4.5c4.1,-2.2 9.3,-2.2 13.4,0.0c1.9,1.1 3.6,2.5 4.9,4.4c0.2,0.3 0.1,0.8 -0.2,1.0c-0.3,0.2 -0.8,0.1 -1.0,-0.2c-1.2,-1.7 -2.6,-3.0 -4.3,-4.0c-3.7,-2.0 -8.3,-2.0 -12.0,0.0c-1.7,0.9 -3.2,2.3 -4.3,4.0C5.7,13.1 5.5,13.2 5.3,13.2z"/> - <path - android:fillColor="#80ffffff" - android:pathData="M13.3,29.6c-0.2,0.0 -0.4,-0.1 -0.5,-0.2c-1.1,-1.2 -1.7,-2.0 -2.6,-3.6c-0.9,-1.7 -1.4,-3.7 -1.4,-5.9c0.0,-4.1 3.3,-7.4 7.4,-7.4c4.1,0.0 7.4,3.3 7.4,7.4c0.0,0.4 -0.3,0.7 -0.7,0.7s-0.7,-0.3 -0.7,-0.7c0.0,-3.3 -2.7,-5.9 -5.9,-5.9c-3.3,0.0 -5.9,2.7 -5.9,5.9c0.0,2.0 0.4,3.8 1.2,5.2c0.8,1.6 1.4,2.2 2.4,3.3c0.3,0.3 0.3,0.8 0.0,1.0C13.7,29.5 13.5,29.6 13.3,29.6z"/> - <path - android:fillColor="#80ffffff" - android:pathData="M22.6,27.1c-1.6,0.0 -2.9,-0.4 -4.1,-1.2c-1.9,-1.4 -3.1,-3.6 -3.1,-6.0c0.0,-0.4 0.3,-0.7 0.7,-0.7s0.7,0.3 0.7,0.7c0.0,1.9 0.9,3.7 2.5,4.8c0.9,0.6 1.9,1.0 3.2,1.0c0.3,0.0 0.8,0.0 1.3,-0.1c0.4,-0.1 0.8,0.2 0.8,0.6c0.1,0.4 -0.2,0.8 -0.6,0.8C23.4,27.1 22.8,27.1 22.6,27.1z"/> - <path - android:fillColor="#80ffffff" - android:pathData="M20.0,29.9c-0.1,0.0 -0.1,0.0 -0.2,0.0c-2.1,-0.6 -3.4,-1.4 -4.8,-2.9c-1.8,-1.9 -2.8,-4.4 -2.8,-7.1c0.0,-2.2 1.8,-4.1 4.1,-4.1c2.2,0.0 4.1,1.8 4.1,4.1c0.0,1.4 1.2,2.6 2.6,2.6c1.4,0.0 2.6,-1.2 2.6,-2.6c0.0,-5.1 -4.2,-9.3 -9.3,-9.3c-3.6,0.0 -6.9,2.1 -8.4,5.4C7.3,17.1 7.0,18.4 7.0,19.8c0.0,1.1 0.1,2.7 0.9,4.9c0.1,0.4 -0.1,0.8 -0.4,0.9c-0.4,0.1 -0.8,-0.1 -0.9,-0.4c-0.6,-1.8 -0.9,-3.6 -0.9,-5.4c0.0,-1.6 0.3,-3.1 0.9,-4.4c1.7,-3.8 5.6,-6.3 9.8,-6.3c5.9,0.0 10.7,4.8 10.7,10.7c0.0,2.2 -1.8,4.1 -4.1,4.1s-4.0,-1.8 -4.0,-4.1c0.0,-1.4 -1.2,-2.6 -2.6,-2.6c-1.4,0.0 -2.6,1.2 -2.6,2.6c0.0,2.3 0.9,4.5 2.4,6.1c1.2,1.3 2.4,2.0 4.2,2.5c0.4,0.1 0.6,0.5 0.5,0.9C20.6,29.7 20.3,29.9 20.0,29.9z"/> +<vector + xmlns:android="http://schemas.android.com/apk/res/android" + android:width="32dp" + android:viewportWidth="24" + android:height="32dp" + android:viewportHeight="24" > + <group + android:translateX="12" + android:translateY="12.4" + android:scaleX="0.738" + android:scaleY="0.738" > + <group + android:translateX="33" + android:translateY="34" > + <path + android:pathData="M -25.3591003418,-24.4138946533 c -0.569000244141,0.106399536133 -1.12660217285,0.140594482422 -1.45460510254,0.140594482422 c -1.29689025879,0.0 -2.53239440918,-0.343307495117 -3.62019348145,-1.12400817871 c -1.67700195312,-1.20349121094 -2.76950073242,-3.17008972168 -2.76950073242,-5.39189147949" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" + android:strokeWidth="1.45" + android:strokeLineCap="round" /> + <path + android:name="ridge_7_path" + android:pathData="M -36.1409912109,-21.7843475342 c -1.00540161133,-1.19300842285 -1.57499694824,-1.9181060791 -2.36520385742,-3.50170898438 c -0.827560424805,-1.65869140625 -1.31352233887,-3.49159240723 -1.31352233887,-5.48489379883 c 0.0,-3.66279602051 2.96932983398,-6.63220214844 6.63221740723,-6.63220214844 c 3.6628112793,0.0 6.63220214844,2.96940612793 6.63220214844,6.63220214844" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" + android:strokeWidth="1.45" + android:strokeLineCap="round" /> + <path + android:pathData="M -42.1907958984,-25.6756896973 c -0.758117675781,-2.14370727539 -0.896545410156,-3.86891174316 -0.896545410156,-5.12921142578 c 0.0,-1.46069335938 0.249176025391,-2.84799194336 0.814682006836,-4.09748840332 c 1.56153869629,-3.45030212402 5.03434753418,-5.85076904297 9.0679473877,-5.85076904297 c 5.49430847168,0.0 9.94830322266,4.4539642334 9.94830322266,9.94825744629 c 0.0,1.83151245117 -1.48460388184,3.31610107422 -3.31610107422,3.31610107422 c -1.83149719238,0.0 -3.31610107422,-1.48469543457 -3.31610107422,-3.31610107422 c 0.0,-1.83139038086 -1.48458862305,-3.31610107422 -3.31610107422,-3.31610107422 c -1.83149719238,0.0 -3.31610107422,1.48471069336 -3.31610107422,3.31610107422 c 0.0,2.57020568848 0.989517211914,4.88710021973 2.60510253906,6.5865020752 c 1.22210693359,1.28550720215 2.43139648438,2.09950256348 4.47590637207,2.69030761719" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" + android:strokeWidth="1.45" + android:strokeLineCap="round" /> + <path + android:pathData="M -44.0646514893,-38.1672973633 c 1.19026184082,-1.77430725098 2.67503356934,-3.24531555176 4.55902099609,-4.27278137207 c 1.88395690918,-1.0274810791 4.04466247559,-1.61137390137 6.34175109863,-1.61137390137 c 2.28761291504,0.0 4.43991088867,0.579071044922 6.31831359863,1.59861755371 c 1.8784942627,1.01954650879 3.36059570312,2.4796295166 4.55279541016,4.24153137207" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" + android:strokeWidth="1.45" + android:strokeLineCap="round" /> + <group + android:translateX="-97.5" + android:translateY="-142.5" > + <path + android:pathData="M 71.7812347412,97.0507202148 c -2.27149963379,-1.31344604492 -4.71360778809,-2.07006835938 -7.56221008301,-2.07006835938 c -2.84869384766,0.0 -5.23320007324,0.779556274414 -7.34411621094,2.07006835938" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" + android:strokeWidth="1.45" + android:strokeLineCap="round" /> + </group> + </group> + </group> </vector> diff --git a/packages/SystemUI/res/drawable/ic_lock_24dp.xml b/packages/SystemUI/res/drawable/ic_lock_24dp.xml index 204af7e81f4c..bf0dc95a8e56 100644 --- a/packages/SystemUI/res/drawable/ic_lock_24dp.xml +++ b/packages/SystemUI/res/drawable/ic_lock_24dp.xml @@ -1,5 +1,5 @@ <!-- -Copyright (C) 2014 The Android Open Source Project +Copyright (C) 2017 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. @@ -20,6 +20,6 @@ Copyright (C) 2014 The Android Open Source Project android:viewportHeight="24.0"> <path - android:fillColor="@color/keyguard_affordance" + android:fillColor="?attr/wallpaperTextColor" android:pathData="M18.0,8.0l-1.0,0.0L17.0,6.0c0.0,-2.8 -2.2,-5.0 -5.0,-5.0C9.2,1.0 7.0,3.2 7.0,6.0l0.0,2.0L6.0,8.0c-1.1,0.0 -2.0,0.9 -2.0,2.0l0.0,10.0c0.0,1.1 0.9,2.0 2.0,2.0l12.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L20.0,10.0C20.0,8.9 19.1,8.0 18.0,8.0zM12.0,17.0c-1.1,0.0 -2.0,-0.9 -2.0,-2.0s0.9,-2.0 2.0,-2.0c1.1,0.0 2.0,0.9 2.0,2.0S13.1,17.0 12.0,17.0zM15.1,8.0L8.9,8.0L8.9,6.0c0.0,-1.7 1.4,-3.1 3.1,-3.1c1.7,0.0 3.1,1.4 3.1,3.1L15.1,8.0z"/> </vector> diff --git a/packages/SystemUI/res/drawable/ic_lock_open_24dp.xml b/packages/SystemUI/res/drawable/ic_lock_open_24dp.xml index c877f063b7a8..232cf70abdf2 100644 --- a/packages/SystemUI/res/drawable/ic_lock_open_24dp.xml +++ b/packages/SystemUI/res/drawable/ic_lock_open_24dp.xml @@ -1,5 +1,5 @@ <!-- -Copyright (C) 2014 The Android Open Source Project +Copyright (C) 2017 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. @@ -20,6 +20,6 @@ Copyright (C) 2014 The Android Open Source Project android:viewportHeight="24.0"> <path - android:fillColor="@color/keyguard_affordance" + android:fillColor="?attr/wallpaperTextColor" android:pathData="M12.0,17.0c1.1,0.0 2.0,-0.9 2.0,-2.0s-0.9,-2.0 -2.0,-2.0c-1.1,0.0 -2.0,0.9 -2.0,2.0S10.9,17.0 12.0,17.0zM18.0,8.0l-1.0,0.0L17.0,6.0c0.0,-2.8 -2.2,-5.0 -5.0,-5.0C9.2,1.0 7.0,3.2 7.0,6.0l1.9,0.0c0.0,-1.7 1.4,-3.1 3.1,-3.1c1.7,0.0 3.1,1.4 3.1,3.1l0.0,2.0L6.0,8.0c-1.1,0.0 -2.0,0.9 -2.0,2.0l0.0,10.0c0.0,1.1 0.9,2.0 2.0,2.0l12.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L20.0,10.0C20.0,8.9 19.1,8.0 18.0,8.0zM18.0,20.0L6.0,20.0L6.0,10.0l12.0,0.0L18.0,20.0z"/> </vector> diff --git a/packages/SystemUI/res/drawable/lockscreen_fingerprint_draw_off.xml b/packages/SystemUI/res/drawable/lockscreen_fingerprint_draw_off.xml index 81da26d36844..8d382a303dff 100644 --- a/packages/SystemUI/res/drawable/lockscreen_fingerprint_draw_off.xml +++ b/packages/SystemUI/res/drawable/lockscreen_fingerprint_draw_off.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- - ~ Copyright (C) 2015 The Android Open Source Project + ~ Copyright (C) 2017 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. @@ -34,7 +34,7 @@ <path android:name="ridge_5_path" android:pathData="M -25.3591003418,-24.4138946533 c -0.569000244141,0.106399536133 -1.12660217285,0.140594482422 -1.45460510254,0.140594482422 c -1.29689025879,0.0 -2.53239440918,-0.343307495117 -3.62019348145,-1.12400817871 c -1.67700195312,-1.20349121094 -2.76950073242,-3.17008972168 -2.76950073242,-5.39189147949" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> @@ -44,7 +44,7 @@ <path android:name="ridge_7_path" android:pathData="M -36.1409912109,-21.7843475342 c -1.00540161133,-1.19300842285 -1.57499694824,-1.9181060791 -2.36520385742,-3.50170898438 c -0.827560424805,-1.65869140625 -1.31352233887,-3.49159240723 -1.31352233887,-5.48489379883 c 0.0,-3.66279602051 2.96932983398,-6.63220214844 6.63221740723,-6.63220214844 c 3.6628112793,0.0 6.63220214844,2.96940612793 6.63220214844,6.63220214844" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> @@ -54,7 +54,7 @@ <path android:name="ridge_6_path" android:pathData="M -42.1907958984,-25.6756896973 c -0.758117675781,-2.14370727539 -0.896545410156,-3.86891174316 -0.896545410156,-5.12921142578 c 0.0,-1.46069335938 0.249176025391,-2.84799194336 0.814682006836,-4.09748840332 c 1.56153869629,-3.45030212402 5.03434753418,-5.85076904297 9.0679473877,-5.85076904297 c 5.49430847168,0.0 9.94830322266,4.4539642334 9.94830322266,9.94825744629 c 0.0,1.83151245117 -1.48460388184,3.31610107422 -3.31610107422,3.31610107422 c -1.83149719238,0.0 -3.31610107422,-1.48469543457 -3.31610107422,-3.31610107422 c 0.0,-1.83139038086 -1.48458862305,-3.31610107422 -3.31610107422,-3.31610107422 c -1.83149719238,0.0 -3.31610107422,1.48471069336 -3.31610107422,3.31610107422 c 0.0,2.57020568848 0.989517211914,4.88710021973 2.60510253906,6.5865020752 c 1.22210693359,1.28550720215 2.43139648438,2.09950256348 4.47590637207,2.69030761719" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> @@ -64,7 +64,7 @@ <path android:name="ridge_2_path" android:pathData="M -44.0646514893,-38.1672973633 c 1.19026184082,-1.77430725098 2.67503356934,-3.24531555176 4.55902099609,-4.27278137207 c 1.88395690918,-1.0274810791 4.04466247559,-1.61137390137 6.34175109863,-1.61137390137 c 2.28761291504,0.0 4.43991088867,0.579071044922 6.31831359863,1.59861755371 c 1.8784942627,1.01954650879 3.36059570312,2.4796295166 4.55279541016,4.24153137207" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> @@ -76,7 +76,7 @@ <path android:name="ridge_1_path" android:pathData="M 71.7812347412,97.0507202148 c -2.27149963379,-1.31344604492 -4.71360778809,-2.07006835938 -7.56221008301,-2.07006835938 c -2.84869384766,0.0 -5.23320007324,0.779556274414 -7.34411621094,2.07006835938" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> diff --git a/packages/SystemUI/res/drawable/lockscreen_fingerprint_draw_on.xml b/packages/SystemUI/res/drawable/lockscreen_fingerprint_draw_on.xml index 8b517b69c8c4..4fe160d997b5 100644 --- a/packages/SystemUI/res/drawable/lockscreen_fingerprint_draw_on.xml +++ b/packages/SystemUI/res/drawable/lockscreen_fingerprint_draw_on.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- - ~ Copyright (C) 2015 The Android Open Source Project + ~ Copyright (C) 2017 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. @@ -34,7 +34,7 @@ <path android:name="ridge_5_path" android:pathData="M -25.3591003418,-24.4138946533 c -0.569000244141,0.106399536133 -1.12660217285,0.140594482422 -1.45460510254,0.140594482422 c -1.29689025879,0.0 -2.53239440918,-0.343307495117 -3.62019348145,-1.12400817871 c -1.67700195312,-1.20349121094 -2.76950073242,-3.17008972168 -2.76950073242,-5.39189147949" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" @@ -45,7 +45,7 @@ <path android:name="ridge_7_path" android:pathData="M -36.1409912109,-21.7843475342 c -1.00540161133,-1.19300842285 -1.57499694824,-1.9181060791 -2.36520385742,-3.50170898438 c -0.827560424805,-1.65869140625 -1.31352233887,-3.49159240723 -1.31352233887,-5.48489379883 c 0.0,-3.66279602051 2.96932983398,-6.63220214844 6.63221740723,-6.63220214844 c 3.6628112793,0.0 6.63220214844,2.96940612793 6.63220214844,6.63220214844" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" @@ -56,7 +56,7 @@ <path android:name="ridge_6_path" android:pathData="M -42.1907958984,-25.6756896973 c -0.758117675781,-2.14370727539 -0.896545410156,-3.86891174316 -0.896545410156,-5.12921142578 c 0.0,-1.46069335938 0.249176025391,-2.84799194336 0.814682006836,-4.09748840332 c 1.56153869629,-3.45030212402 5.03434753418,-5.85076904297 9.0679473877,-5.85076904297 c 5.49430847168,0.0 9.94830322266,4.4539642334 9.94830322266,9.94825744629 c 0.0,1.83151245117 -1.48460388184,3.31610107422 -3.31610107422,3.31610107422 c -1.83149719238,0.0 -3.31610107422,-1.48469543457 -3.31610107422,-3.31610107422 c 0.0,-1.83139038086 -1.48458862305,-3.31610107422 -3.31610107422,-3.31610107422 c -1.83149719238,0.0 -3.31610107422,1.48471069336 -3.31610107422,3.31610107422 c 0.0,2.57020568848 0.989517211914,4.88710021973 2.60510253906,6.5865020752 c 1.22210693359,1.28550720215 2.43139648438,2.09950256348 4.47590637207,2.69030761719" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" @@ -67,7 +67,7 @@ <path android:name="ridge_2_path" android:pathData="M -44.0646514893,-38.1672973633 c 1.19026184082,-1.77430725098 2.67503356934,-3.24531555176 4.55902099609,-4.27278137207 c 1.88395690918,-1.0274810791 4.04466247559,-1.61137390137 6.34175109863,-1.61137390137 c 2.28761291504,0.0 4.43991088867,0.579071044922 6.31831359863,1.59861755371 c 1.8784942627,1.01954650879 3.36059570312,2.4796295166 4.55279541016,4.24153137207" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" @@ -80,7 +80,7 @@ <path android:name="ridge_1_path" android:pathData="M 71.7812347412,97.0507202148 c -2.27149963379,-1.31344604492 -4.71360778809,-2.07006835938 -7.56221008301,-2.07006835938 c -2.84869384766,0.0 -5.23320007324,0.779556274414 -7.34411621094,2.07006835938" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" diff --git a/packages/SystemUI/res/drawable/lockscreen_fingerprint_error_state_to_fp.xml b/packages/SystemUI/res/drawable/lockscreen_fingerprint_error_state_to_fp.xml index f2eca8ced896..832716afd623 100644 --- a/packages/SystemUI/res/drawable/lockscreen_fingerprint_error_state_to_fp.xml +++ b/packages/SystemUI/res/drawable/lockscreen_fingerprint_error_state_to_fp.xml @@ -37,7 +37,8 @@ <path android:name="ridge_5_path" android:pathData="M -25.3591003418,-24.4138946533 c -0.569000244141,0.106399536133 -1.12660217285,0.140594482422 -1.45460510254,0.140594482422 c -1.29689025879,0.0 -2.53239440918,-0.343307495117 -3.62019348145,-1.12400817871 c -1.67700195312,-1.20349121094 -2.76950073242,-3.17008972168 -2.76950073242,-5.39189147949" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" android:trimPathEnd="0" /> @@ -47,7 +48,8 @@ <path android:name="ridge_7_path" android:pathData="M -36.1409912109,-21.7843475342 c -1.00540161133,-1.19300842285 -1.57499694824,-1.9181060791 -2.36520385742,-3.50170898438 c -0.827560424805,-1.65869140625 -1.31352233887,-3.49159240723 -1.31352233887,-5.48489379883 c 0.0,-3.66279602051 2.96932983398,-6.63220214844 6.63221740723,-6.63220214844 c 3.6628112793,0.0 6.63220214844,2.96940612793 6.63220214844,6.63220214844" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" android:trimPathEnd="0" /> @@ -57,7 +59,8 @@ <path android:name="ridge_6_path" android:pathData="M -42.1907958984,-25.6756896973 c -0.758117675781,-2.14370727539 -0.896545410156,-3.86891174316 -0.896545410156,-5.12921142578 c 0.0,-1.46069335938 0.249176025391,-2.84799194336 0.814682006836,-4.09748840332 c 1.56153869629,-3.45030212402 5.03434753418,-5.85076904297 9.0679473877,-5.85076904297 c 5.49430847168,0.0 9.94830322266,4.4539642334 9.94830322266,9.94825744629 c 0.0,1.83151245117 -1.48460388184,3.31610107422 -3.31610107422,3.31610107422 c -1.83149719238,0.0 -3.31610107422,-1.48469543457 -3.31610107422,-3.31610107422 c 0.0,-1.83139038086 -1.48458862305,-3.31610107422 -3.31610107422,-3.31610107422 c -1.83149719238,0.0 -3.31610107422,1.48471069336 -3.31610107422,3.31610107422 c 0.0,2.57020568848 0.989517211914,4.88710021973 2.60510253906,6.5865020752 c 1.22210693359,1.28550720215 2.43139648438,2.09950256348 4.47590637207,2.69030761719" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" android:trimPathStart="1" /> @@ -67,7 +70,8 @@ <path android:name="ridge_2_path" android:pathData="M -44.0646514893,-38.1672973633 c 1.19026184082,-1.77430725098 2.67503356934,-3.24531555176 4.55902099609,-4.27278137207 c 1.88395690918,-1.0274810791 4.04466247559,-1.61137390137 6.34175109863,-1.61137390137 c 2.28761291504,0.0 4.43991088867,0.579071044922 6.31831359863,1.59861755371 c 1.8784942627,1.01954650879 3.36059570312,2.4796295166 4.55279541016,4.24153137207" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" android:trimPathStart="1" /> @@ -79,7 +83,8 @@ <path android:name="ridge_1_path" android:pathData="M 71.7812347412,97.0507202148 c -2.27149963379,-1.31344604492 -4.71360778809,-2.07006835938 -7.56221008301,-2.07006835938 c -2.84869384766,0.0 -5.23320007324,0.779556274414 -7.34411621094,2.07006835938" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" + android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" android:trimPathEnd="0" /> diff --git a/packages/SystemUI/res/drawable/lockscreen_fingerprint_fp_to_error_state.xml b/packages/SystemUI/res/drawable/lockscreen_fingerprint_fp_to_error_state.xml index 218dd06dc178..7cc2e5cd040f 100644 --- a/packages/SystemUI/res/drawable/lockscreen_fingerprint_fp_to_error_state.xml +++ b/packages/SystemUI/res/drawable/lockscreen_fingerprint_fp_to_error_state.xml @@ -36,7 +36,7 @@ Copyright (C) 2017 The Android Open Source Project <path android:name="ridge_5_path" android:pathData="M -25.3591003418,-24.4138946533 c -0.569000244141,0.106399536133 -1.12660217285,0.140594482422 -1.45460510254,0.140594482422 c -1.29689025879,0.0 -2.53239440918,-0.343307495117 -3.62019348145,-1.12400817871 c -1.67700195312,-1.20349121094 -2.76950073242,-3.17008972168 -2.76950073242,-5.39189147949" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> @@ -46,7 +46,7 @@ Copyright (C) 2017 The Android Open Source Project <path android:name="ridge_7_path" android:pathData="M -36.1409912109,-21.7843475342 c -1.00540161133,-1.19300842285 -1.57499694824,-1.9181060791 -2.36520385742,-3.50170898438 c -0.827560424805,-1.65869140625 -1.31352233887,-3.49159240723 -1.31352233887,-5.48489379883 c 0.0,-3.66279602051 2.96932983398,-6.63220214844 6.63221740723,-6.63220214844 c 3.6628112793,0.0 6.63220214844,2.96940612793 6.63220214844,6.63220214844" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> @@ -56,7 +56,7 @@ Copyright (C) 2017 The Android Open Source Project <path android:name="ridge_6_path" android:pathData="M -42.1907958984,-25.6756896973 c -0.758117675781,-2.14370727539 -0.896545410156,-3.86891174316 -0.896545410156,-5.12921142578 c 0.0,-1.46069335938 0.249176025391,-2.84799194336 0.814682006836,-4.09748840332 c 1.56153869629,-3.45030212402 5.03434753418,-5.85076904297 9.0679473877,-5.85076904297 c 5.49430847168,0.0 9.94830322266,4.4539642334 9.94830322266,9.94825744629 c 0.0,1.83151245117 -1.48460388184,3.31610107422 -3.31610107422,3.31610107422 c -1.83149719238,0.0 -3.31610107422,-1.48469543457 -3.31610107422,-3.31610107422 c 0.0,-1.83139038086 -1.48458862305,-3.31610107422 -3.31610107422,-3.31610107422 c -1.83149719238,0.0 -3.31610107422,1.48471069336 -3.31610107422,3.31610107422 c 0.0,2.57020568848 0.989517211914,4.88710021973 2.60510253906,6.5865020752 c 1.22210693359,1.28550720215 2.43139648438,2.09950256348 4.47590637207,2.69030761719" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> @@ -66,7 +66,7 @@ Copyright (C) 2017 The Android Open Source Project <path android:name="ridge_2_path" android:pathData="M -44.0646514893,-38.1672973633 c 1.19026184082,-1.77430725098 2.67503356934,-3.24531555176 4.55902099609,-4.27278137207 c 1.88395690918,-1.0274810791 4.04466247559,-1.61137390137 6.34175109863,-1.61137390137 c 2.28761291504,0.0 4.43991088867,0.579071044922 6.31831359863,1.59861755371 c 1.8784942627,1.01954650879 3.36059570312,2.4796295166 4.55279541016,4.24153137207" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> @@ -78,7 +78,7 @@ Copyright (C) 2017 The Android Open Source Project <path android:name="ridge_1_path" android:pathData="M 71.7812347412,97.0507202148 c -2.27149963379,-1.31344604492 -4.71360778809,-2.07006835938 -7.56221008301,-2.07006835938 c -2.84869384766,0.0 -5.23320007324,0.779556274414 -7.34411621094,2.07006835938" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?attr/wallpaperTextColor" android:strokeAlpha="0.5" android:strokeWidth="1.45" android:strokeLineCap="round" /> diff --git a/packages/SystemUI/res/drawable/rounded_bg.xml b/packages/SystemUI/res/drawable/rounded_bg.xml index 56aa9fe800d9..c23a87fbfb79 100644 --- a/packages/SystemUI/res/drawable/rounded_bg.xml +++ b/packages/SystemUI/res/drawable/rounded_bg.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> - <solid android:color="#ffffffff" /> + <solid android:color="?android:attr/colorPrimary" /> <corners android:bottomLeftRadius="@dimen/corner_size" android:topLeftRadius="@dimen/corner_size" diff --git a/packages/SystemUI/res/drawable/rounded_bg_bottom.xml b/packages/SystemUI/res/drawable/rounded_bg_bottom.xml index 0201f2835452..b3bea635f953 100644 --- a/packages/SystemUI/res/drawable/rounded_bg_bottom.xml +++ b/packages/SystemUI/res/drawable/rounded_bg_bottom.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> - <solid android:color="#ffeeeeee" /> + <solid android:color="?android:attr/colorPrimaryDark" /> <corners android:bottomLeftRadius="@dimen/corner_size" android:topLeftRadius="0dp" diff --git a/packages/SystemUI/res/drawable/rounded_bg_full.xml b/packages/SystemUI/res/drawable/rounded_bg_full.xml index 65d00dea7357..a6f40fad7e48 100644 --- a/packages/SystemUI/res/drawable/rounded_bg_full.xml +++ b/packages/SystemUI/res/drawable/rounded_bg_full.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> - <solid android:color="#ffffffff" /> + <solid android:color="?android:attr/colorPrimary" /> <corners android:bottomLeftRadius="@dimen/corner_size" android:topLeftRadius="@dimen/corner_size" diff --git a/packages/SystemUI/res/drawable/rounded_full_bg_bottom.xml b/packages/SystemUI/res/drawable/rounded_full_bg_bottom.xml index f6ee558b5064..c3e36f211845 100644 --- a/packages/SystemUI/res/drawable/rounded_full_bg_bottom.xml +++ b/packages/SystemUI/res/drawable/rounded_full_bg_bottom.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> - <solid android:color="#ffeeeeee" /> + <solid android:color="?android:attr/colorPrimaryDark" /> <corners android:bottomLeftRadius="@dimen/corner_size" android:topLeftRadius="0dp" diff --git a/packages/SystemUI/res/drawable/trusted_state_to_error.xml b/packages/SystemUI/res/drawable/trusted_state_to_error.xml index 260940f4fe65..4a8e452c2db6 100755 --- a/packages/SystemUI/res/drawable/trusted_state_to_error.xml +++ b/packages/SystemUI/res/drawable/trusted_state_to_error.xml @@ -17,9 +17,9 @@ Copyright (C) 2017 The Android Open Source Project <vector xmlns:android="http://schemas.android.com/apk/res/android" android:name="trusted_state_to_error" - android:width="32dp" + android:width="24dp" android:viewportWidth="24" - android:height="32dp" + android:height="24dp" android:viewportHeight="24" > <group android:name="lock" @@ -30,7 +30,8 @@ Copyright (C) 2017 The Android Open Source Project android:translateY="2.9375" > <path android:name="ellipse_path_1" - android:fillColor="#FFFFFFFF" + android:fillColor="?attr/wallpaperTextColor" + android:fillAlpha="0.5" android:pathData="M 0.0,-1.988645 c 1.09829830627,0.0 1.988645,0.890346693734 1.988645,1.988645 c 0.0,1.09829830627 -0.890346693734,1.988645 -1.988645,1.988645 c -1.09829830627,0.0 -1.988645,-0.890346693734 -1.988645,-1.988645 c 0.0,-1.09829830627 0.890346693734,-1.988645 1.988645,-1.988645 Z" /> </group> <group @@ -38,21 +39,24 @@ Copyright (C) 2017 The Android Open Source Project <path android:name="path_1" android:pathData="M 6.00561523438,-4.046875 c 0.0,0.0 -5.98999023438,0.0 -5.98999023438,0.0 c 0.0,0.0 0.0,2.0 0.0,2.0 c 0.0,0.0 5.98812866211,0.0 5.98812866211,0.0 c 0.0,0.0 0.00064086914062,10.0 0.00064086914062,10.0 c 0.0,0.0 -5.98840332031,0.0 -5.98840332031,0.0 c 0.0,0.0 -0.0052490234375,2.0 -0.0052490234375,2.0 c 0.0,0.0 5.99487304688,0.0 5.99487304688,0.0 c 1.10000610352,0.0 2.0,-0.900024414062 2.0,-2.0 c 0.0,0.0 0.0,-10.0 0.0,-10.0 c 0.0,-1.09997558594 -0.899993896484,-2.0 -2.0,-2.0 Z" - android:fillColor="#FFFFFFFF" /> + android:fillColor="?attr/wallpaperTextColor" + android:fillAlpha="0.5" /> </group> <group android:name="lock_left_side" > <path android:name="path_2" android:pathData="M -5.9959564209,-2.04727172852 c 0.0,0.0 6.01173400879,0.00039672851562 6.01173400879,0.00039672851562 c 0.0,0.0 -0.00015258789062,-2.0 -0.00015258789062,-2.0 c 0.0,0.0 -6.01000976562,0.0 -6.01000976562,0.0 c -1.10000610352,0.0 -2.0,0.900024414062 -2.0,2.0 c 0.0,0.0 0.0,10.0 0.0,10.0 c 0.0,1.09997558594 0.899993896484,2.0 2.0,2.0 c 0.0,0.0 6.01000976562,0.0 6.01000976562,0.0 c 0.0,0.0 -0.000244140625,-2.0009765625 -0.000244140625,-2.0009765625 c 0.0,0.0 -6.01171875,0.0003662109375 -6.01171875,0.0003662109375 c 0.0,0.0 0.00038146972656,-9.99978637695 0.00038146972656,-9.99978637695 Z" - android:fillColor="#FFFFFFFF" /> + android:fillColor="?attr/wallpaperTextColor" + android:fillAlpha="0.5" /> </group> <group android:name="lock_top" > <path android:name="path_3" android:pathData="M 5.00619506836,-6.046875 c 0.0,-2.76000976562 -2.23999023438,-5.0 -5.0,-5.0 c -2.76000976562,0.0 -5.0,2.23999023438 -5.0,5.0 c 0.0,0.0 1.89999389648,0.0 1.89999389648,0.0 c 0.0,-1.71002197266 1.38999938965,-3.09997558594 3.10000610352,-3.09997558594 c 1.71000671387,0.0 3.10000610352,1.38995361328 3.10000610352,3.09997558594 c 0.0,0.0 0.0,2.0 0.0,2.0 c 0.0,0.0 1.89999389648,0.0 1.89999389648,0.0 c 0.0,0.0 0.0,-2.0 0.0,-2.0 Z" - android:fillColor="#FFFFFFFF" /> + android:fillColor="?attr/wallpaperTextColor" + android:fillAlpha="0.5" /> </group> </group> <group @@ -64,7 +68,7 @@ Copyright (C) 2017 The Android Open Source Project android:translateY="4" > <path android:name="bottompath" - android:fillColor="#FFFFFFFF" + android:fillColor="?android:attr/colorError" android:pathData="M 0.0,0.0 l 0.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z" /> </group> </group> @@ -77,8 +81,7 @@ Copyright (C) 2017 The Android Open Source Project android:translateY="2.5" > <path android:name="toppath" - android:fillColor="#FFFFFFFF" - android:fillAlpha="0" + android:fillColor="?android:attr/colorError" android:pathData="M 0.0,-7.0 l 0.0,0.0 c 1.9329966243,0.0 3.5,1.5670033757 3.5,3.5 l 0.0,7.0 c 0.0,1.9329966243 -1.5670033757,3.5 -3.5,3.5 l 0.0,0.0 c -1.9329966243,0.0 -3.5,-1.5670033757 -3.5,-3.5 l 0.0,-7.0 c 0.0,-1.9329966243 1.5670033757,-3.5 3.5,-3.5 Z" /> </group> </group> @@ -91,7 +94,7 @@ Copyright (C) 2017 The Android Open Source Project android:name="circle" > <path android:name="circlepath" - android:strokeColor="#FFFFFFFF" + android:strokeColor="?android:attr/colorError" android:strokeWidth="2" android:strokeLineCap="round" android:trimPathStart="1" diff --git a/packages/SystemUI/res/drawable/volume_dialog_background.xml b/packages/SystemUI/res/drawable/volume_dialog_background.xml index d6adea992456..996ac5e030da 100644 --- a/packages/SystemUI/res/drawable/volume_dialog_background.xml +++ b/packages/SystemUI/res/drawable/volume_dialog_background.xml @@ -14,5 +14,5 @@ limitations under the License. --> <shape xmlns:android="http://schemas.android.com/apk/res/android" > - <solid android:color="?android:attr/colorPrimary" /> + <solid android:color="?android:attr/colorBackgroundFloating" /> </shape>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/global_actions_wrapped.xml b/packages/SystemUI/res/layout/global_actions_wrapped.xml index 528a53475661..ec357d252a5c 100644 --- a/packages/SystemUI/res/layout/global_actions_wrapped.xml +++ b/packages/SystemUI/res/layout/global_actions_wrapped.xml @@ -6,6 +6,7 @@ android:layout_marginBottom="0dp" android:paddingTop="@dimen/global_actions_top_padding" android:clipToPadding="false" + android:theme="@style/qs_theme" android:clipChildren="false"> <LinearLayout diff --git a/packages/SystemUI/res/layout/keyguard_bottom_area.xml b/packages/SystemUI/res/layout/keyguard_bottom_area.xml index ddd8ef8eb9fc..2fd4df4d1cc7 100644 --- a/packages/SystemUI/res/layout/keyguard_bottom_area.xml +++ b/packages/SystemUI/res/layout/keyguard_bottom_area.xml @@ -88,8 +88,7 @@ android:layout_gravity="bottom|center_horizontal" android:src="@drawable/ic_lock_24dp" android:contentDescription="@string/accessibility_unlock_button" - android:scaleType="center" - android:tint="?attr/wallpaperTextColor" /> + android:scaleType="center" /> <FrameLayout android:id="@+id/overlay_container" diff --git a/packages/SystemUI/res/layout/qs_detail.xml b/packages/SystemUI/res/layout/qs_detail.xml index 63f80ae3d413..1fd239b15b30 100644 --- a/packages/SystemUI/res/layout/qs_detail.xml +++ b/packages/SystemUI/res/layout/qs_detail.xml @@ -40,7 +40,6 @@ android:background="@color/qs_detail_progress_track" android:src="@drawable/indeterminate_anim" android:scaleType="fitXY" - android:translationY="16dp" /> <com.android.systemui.qs.NonInterceptingScrollView diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml index 18ffd0fac417..4487abc318dc 100644 --- a/packages/SystemUI/res/layout/volume_dialog.xml +++ b/packages/SystemUI/res/layout/volume_dialog.xml @@ -21,6 +21,7 @@ android:layout_marginBottom="@dimen/volume_dialog_margin_bottom" android:background="@drawable/volume_dialog_background" android:paddingTop="@dimen/volume_dialog_padding_top" + android:theme="@style/qs_theme" android:translationZ="4dp" > <LinearLayout diff --git a/packages/SystemUI/res/layout/zen_mode_condition.xml b/packages/SystemUI/res/layout/zen_mode_condition.xml index 2b4a0f59195e..ab52465be63c 100644 --- a/packages/SystemUI/res/layout/zen_mode_condition.xml +++ b/packages/SystemUI/res/layout/zen_mode_condition.xml @@ -27,6 +27,8 @@ android:id="@android:id/content" android:layout_width="match_parent" android:layout_height="wrap_content" + android:minHeight="48dp" + android:gravity="center_vertical" android:layout_centerVertical="true" android:orientation="vertical" android:layout_toEndOf="@android:id/checkbox" @@ -79,4 +81,4 @@ android:tint="?android:attr/textColorPrimary" android:src="@drawable/ic_qs_plus" /> -</RelativeLayout>
\ No newline at end of file +</RelativeLayout> diff --git a/packages/SystemUI/res/layout/zen_mode_panel.xml b/packages/SystemUI/res/layout/zen_mode_panel.xml index 426164186aba..55169837ec55 100644 --- a/packages/SystemUI/res/layout/zen_mode_panel.xml +++ b/packages/SystemUI/res/layout/zen_mode_panel.xml @@ -93,7 +93,7 @@ </RelativeLayout> - <LinearLayout + <com.android.systemui.volume.ZenRadioLayout android:id="@+id/zen_conditions" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -111,7 +111,7 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"/> - </LinearLayout> + </com.android.systemui.volume.ZenRadioLayout> <TextView android:id="@+id/zen_alarm_warning" diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 2533b50a590c..30750ab24cbe 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Vervang"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Programme wat op die agtergrond loop"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tik vir besonderhede oor battery- en datagebruik"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Skakel mobiele data af?"</string> </resources> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index f5242018163b..42aa76c239c4 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"ተካ"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"በጀርባ ውስጥ የሚያሄዱ መተግበሪያዎች"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"በባትሪ እና ውሂብ አጠቃቀም ላይ ዝርዝሮችን ለማግኘት መታ ያድርጉ"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"የተንቀሳቃሽ ስልክ ውሂብ ይጥፋ?"</string> </resources> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index adb76b997bff..ba57d537164b 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -797,4 +797,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"استبدال"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"التطبيقات التي تعمل في الخلفية"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"انقر للحصول على تفاصيل حول البطارية واستخدام البيانات"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"هل تريد إيقاف تشغيل بيانات الجوال؟"</string> </resources> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index a7b3b036a269..37167b637387 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Əvəz edin"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Arxa fonda işləyən tətbiqlər"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Batareya və data istifadəsi haqqında ətraflı məlumat üçün klikləyin"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobil data söndürülsün?"</string> </resources> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 6547f0fe6eec..5255aeb80101 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -779,4 +779,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Zameni"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacije pokrenute u pozadini"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Dodirnite za detalje o bateriji i potrošnji podataka"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Želite da onemogućite mobilne podatke?"</string> </resources> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 6d6d1b227125..48a1be2dcbcd 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -787,4 +787,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Замяніць"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Праграмы, якія працуюць у фонавым рэжыме"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Дакраніцеся, каб даведацца пра выкарыстанне трафіка і акумулятара"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Выключыць мабільную перадачу даных?"</string> </resources> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 86e02786a77c..8f0d89350d2d 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Замяна"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Приложения, работещи на заден план"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Докоснете за информация относно използването на батерията и преноса на данни"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Да се изключат ли мобилните данни?"</string> </resources> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 8db54c88a13e..94f0deb8effa 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"বদলে দিন"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"পটভূমিতে অ্যাপ চালু আছে"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"ব্যাটারি এবং ডেটার ব্যবহারের বিশদ বিবরণের জন্য ট্যাপ করুন"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"মোবাইল ডেটা বন্ধ করবেন?"</string> </resources> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 337b68fed758..6584f9c63813 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -781,4 +781,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Zamijeni"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacije koje rade u pozadini"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Dodirnite za detalje o potrošnji baterije i prijenosa podataka"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Želite li isključiti prijenos mobilnih podataka?"</string> </resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 5aa85b8186b8..aa2847483418 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Substitueix"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicacions que s\'estan executant en segon pla"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Toca per obtenir informació sobre l\'ús de dades i de bateria"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vols desactivar les dades mòbils?"</string> </resources> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index ed4bd0f1991e..c882e7ca556a 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -787,4 +787,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Nahradit"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikace běžící na pozadí"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Klepnutím zobrazíte podrobnosti o využití baterie a dat"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vypnout mobilní data?"</string> </resources> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index c7367beb571a..4edc30795d9d 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Erstat"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apps, der kører i baggrunden"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tryk for at se oplysninger om batteri- og dataforbrug"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vil du deaktivere mobildata?"</string> </resources> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index ed5756400fb2..3451ae837d4b 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -777,4 +777,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Ersetzen"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apps, die im Hintergrund ausgeführt werden"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Für Details zur Akku- und Datennutzung tippen"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobile Daten deaktivieren?"</string> </resources> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index c206d8693bec..7a8f56f3c36f 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Αντικατάσταση"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Εφαρμογές που εκτελούνται στο παρασκήνιο"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Πατήστε για λεπτομέρειες σχετικά με τη χρήση μπαταρίας και δεδομένων"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Απενεργοποίηση δεδομένων κινητής τηλεφωνίας;"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index a9cd4ddbcd66..bfac5b7b4a3d 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Replace"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index a9cd4ddbcd66..bfac5b7b4a3d 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Replace"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index a9cd4ddbcd66..bfac5b7b4a3d 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Replace"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apps running in background"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap for details on battery and data usage"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Turn off mobile data?"</string> </resources> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 94f37b9eab35..d5726dffd7ba 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Reemplazar"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apps que se ejecutan en segundo plano"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Presiona para obtener información sobre el uso de datos y de la batería"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"¿Deseas desactivar los datos móviles?"</string> </resources> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index c479cfe15841..a09d3295eb1c 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Reemplazar"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicaciones que se están ejecutando en segundo plano"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Toca para ver información detallada sobre el uso de datos y de la batería"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"¿Desactivar los datos móviles?"</string> </resources> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index a08a97aa7e34..810cc0dac8ee 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Asenda"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Rakendusi käitatakse taustal"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Aku ja andmekasutuse üksikasjade nägemiseks puudutage"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Kas lülitada mobiilne andmeside välja?"</string> </resources> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 820fdb366226..f3ab2fceef21 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Ordeztu"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikazioak exekutatzen ari dira atzeko planoan"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Sakatu bateria eta datuen erabilerari buruzko xehetasunak ikusteko"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Datu-konexioa desaktibatu nahi duzu?"</string> </resources> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 0cf5530271fa..c5d56456e2c8 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"جایگزین کردن"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"برنامههایی که در پسزمینه اجرا میشوند"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"برای جزئیات مربوط به مصرف باتری و داده، ضربه بزنید"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"داده شبکه تلفن همراه خاموش شود؟"</string> </resources> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 638ca2ede935..f65d0604f75d 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Korvaa"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Sovelluksia käynnissä taustalla"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Katso lisätietoja akun ja datan käytöstä napauttamalla"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Poistetaanko mobiilidata käytöstä?"</string> </resources> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 25c448a5f92d..0150d628ea70 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Remplacer"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Applications qui fonctionnent en arrière-plan"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Touchez pour afficher des détails sur l\'utilisation de la pile et des données"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Désactiver les données cellulaires?"</string> </resources> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 44a26a6910d7..bc227741738e 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Remplacer"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Applications en cours d\'exécution en arrière-plan"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Appuyer pour obtenir des informations sur l\'utilisation de la batterie et des données"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Désactiver les données mobiles ?"</string> </resources> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 68d1c938014b..976c07e65274 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Substituír"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicacións que se executan en segundo plano"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Toca para obter información sobre o uso de datos e a batería"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Queres desactivar os datos móbiles?"</string> </resources> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 021ad3ea1b1c..f81a473a8a7a 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"બદલો"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"પૃષ્ઠભૂમિમાં ચાલી રહેલ ઍપ્લિકેશનો"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"બૅટરી અને ડેટા વપરાશ વિશેની વિગતો માટે ટૅપ કરો"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"મોબાઇલ ડેટા બંધ કરીએ?"</string> </resources> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index fa346afc544a..21ff01de5951 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"बदलें"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"बैकग्राउंड में चल रहे ऐप्लिकेशन"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"बैटरी और डेटा उपयोग के विवरण देखने के लिए टैप करें"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"मोबाइल डेटा बंद करना चाहते हैं?"</string> </resources> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index ea7ba5be0431..f872419022e8 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -779,4 +779,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Zamijeni"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Izvođenje aplikacija u pozadini"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Dodirnite da biste vidjeli pojedinosti o potrošnji baterije i podatkovnom prometu"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Isključiti mobilne podatke?"</string> </resources> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index a47daf560fe5..bc4f9e328837 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Csere"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"A háttérben még futnak alkalmazások"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Koppintson az akkumulátor- és adathasználat részleteinek megtekintéséhez"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Kikapcsolja a mobiladatokat?"</string> </resources> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 0dbee583262b..862f8395b86c 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Փոխարինել"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Ֆոնային ռեժիմում աշխատող հավելվածներ"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Հպեք՝ մարտկոցի և թրաֆիկի մանրամասները տեսնելու համար"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Անջատե՞լ բջջային ինտերնետը։"</string> </resources> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 12ff89de7212..ecb101bf9268 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Ganti"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikasi yang sedang berjalan di latar belakang"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tap untuk melihat detail penggunaan baterai dan data"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Nonaktifkan data seluler?"</string> </resources> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 9100ca8bd645..7ce154ff1aaf 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Skipta út"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Forrit sem keyra í bakgrunni"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Ýttu til að fá upplýsingar um rafhlöðu- og gagnanotkun"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Slökkva á farsímagögnum?"</string> </resources> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 134503b5a165..f0bfdc320175 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Sostituisci"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"App in esecuzione in background"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tocca per conoscere i dettagli sull\'utilizzo dei dati e della batteria"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Disattivare i dati mobili?"</string> </resources> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index ba5816beb127..f2e5c403fe97 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -785,4 +785,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"החלף"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"אפליקציות שפועלות ברקע"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"הקש לקבלת פרטים על צריכה של נתונים וסוללה"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"לכבות את חבילת הגלישה?"</string> </resources> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 8b86acce0ee6..f892538ea9ec 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"設定を変更"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"バックグラウンドで実行中のアプリ"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"タップして電池やデータの使用量を確認"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"モバイルデータを OFF にしますか?"</string> </resources> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 72c42157b9c2..489f18ed50fa 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"ჩანაცვლება"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"ფონურ რეჟიმში გაშვებული აპები"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"შეეხეთ ბატარეისა და მონაცემების მოხმარების შესახებ დეტალური ინფორმაციისთვის"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"გსურთ მობილური ინტერნეტის გამორთვა?"</string> </resources> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 5d5f8070df7e..30bff789401e 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Ауыстыру"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Фонда жұмыс істеп тұрған қолданбалар"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Батарея мен деректер трафигі туралы білу үшін түртіңіз"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Мобильдік деректер өшірілсін бе?"</string> </resources> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index e161f59e4bb9..4c470a7785f0 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"ជំនួស"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"កម្មវិធីដែលកំពុងដំណើរការនៅផ្ទៃខាងក្រោយ"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"ចុចដើម្បីមើលព័ត៌មានលម្អិតអំពីការប្រើប្រាស់ទិន្នន័យ និងថ្ម"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"បិទទិន្នន័យចល័ត?"</string> </resources> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 2284c9ba4f76..c9040e7912f0 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"ಬದಲಿಸಿ"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಆಗುತ್ತಿವೆ"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"ಬ್ಯಾಟರಿ,ಡೇಟಾ ಬಳಕೆಯ ವಿವರಗಳಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ಮೊಬೈಲ್ ಡೇಟಾ ಆಫ್ ಮಾಡಬೇಕೆ?"</string> </resources> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 31cc0475455c..6d6a964c4ee7 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"바꾸기"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"백그라운드에서 실행 중인 앱"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"탭하여 배터리 및 데이터 사용량 확인"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"모바일 데이터를 사용 중지하시겠습니까?"</string> </resources> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index f3d5dbdd0d64..5a6228d1f6f2 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Алмаштыруу"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Фондо иштеп жаткан колдонмолор"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Батареянын кубаты жана трафиктин көлөмү жөнүндө билүү үчүн таптап коюңуз"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Мобилдик Интернетти өчүрөсүзбү?"</string> </resources> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index a5f0ca436cb3..851d79721f9a 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"ແທນທີ່"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"ແອັບທີ່ກຳລັງເຮັດວຽກໃນພື້ນຫຼັງ"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"ແຕະເພື່ອເບິ່ງລາຍລະອຽດການນຳໃຊ້ແບັດເຕີຣີ ແລະ ອິນເຕີເນັດ"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ປິດອິນເຕີເນັດມືຖືໄວ້ບໍ?"</string> </resources> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index c1ccc75e39cb..e68b8b47b7bb 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -785,4 +785,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Pakeisti"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Programos, veikiančios fone"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Palieskite ir sužinokite išsamios informacijos apie akumuliatoriaus bei duomenų naudojimą"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Išjungti mobiliojo ryšio duomenis?"</string> </resources> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 4d4aad115543..d2232418b5fe 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -779,4 +779,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Aizstāt"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Lietotnes, kas darbojas fonā"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Pieskarieties, lai skatītu detalizētu informāciju par akumulatora un datu lietojumu"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vai izslēgt mobilos datus?"</string> </resources> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index fb7c7afdd5b1..f3e6bd74079f 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Замени"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Апликациите се извршуваат во заднина"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Допрете за детали за батеријата и потрошениот сообраќај"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Да се исклучи мобилниот интернет?"</string> </resources> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index b42319a2bf5c..d87ffb97e6e5 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"മാറ്റിസ്ഥാപിക്കുക"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"ആപ്പുകൾ പശ്ചാത്തലത്തിൽ റൺ ചെയ്യുന്നു"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"ബാറ്ററി, ഡാറ്റ ഉപയോഗം എന്നിവയുടെ വിശദാംശങ്ങളറിയാൻ ടാപ്പുചെയ്യുക"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"മൊബൈൽ ഡാറ്റ ഓഫാക്കണോ?"</string> </resources> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index cd4f5be60a51..786cd5468d2e 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Солих"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Цаана ажиллаж буй апп"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Батерей, дата ашиглалтын талаар дэлгэрэнгүйг харахын тулд товшино уу"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Мобайл датаг унтраах уу?"</string> </resources> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index b8562f63825b..9fe097541eb1 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"पुनर्स्थित करा"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"अॅप्स बॅकग्राउंडमध्ये चालू आहेत"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"बॅटरी आणि डेटा वापराच्या तपशीलांसाठी टॅप करा"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"मोबाइल डेटा बंद करायचा?"</string> </resources> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index 2c2e0948ff9d..4a70d9e36d0c 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Gantikan"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apl yang berjalan di latar belakang"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Ketik untuk mendapatkan butiran tentang penggunaan kuasa bateri dan data"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Matikan data mudah alih?"</string> </resources> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 5040bfdd80e3..95d95c84dc4c 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"အစားထိုးရန်"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"နောက်ခံတွင် ပွင့်နေသော အက်ပ်များ"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"ဘက်ထရီနှင့် ဒေတာအသုံးပြုမှု အသေးစိတ်ကို ကြည့်ရန် တို့ပါ"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"မိုဘိုင်းဒေတာကို ပိတ်လိုပါသလား။"</string> </resources> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 324c5832caa7..04496279a472 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Erstatt"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apper kjører i bakgrunnen"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Trykk for detaljer om batteri- og databruk"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vil du slå av mobildata?"</string> </resources> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index d2a50200f130..b3ae2d07533e 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"प्रतिस्थापन गर्नुहोस्"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"पृष्ठभूमिमा चल्ने अनुप्रयोगहरू"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"ब्याट्री र डेटाका प्रयोग सम्बन्धी विवरणहरूका लागि ट्याप गर्नुहोस्"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"मोबाइल डेटा निष्क्रिय पार्ने हो?"</string> </resources> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index d6a949d0bca9..1bd30dac7356 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Vervangen"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apps uitgevoerd op achtergrond"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tik voor batterij- en datagebruik"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobiele data uitschakelen?"</string> </resources> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index c32175991c48..daf634527f56 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"ਬਦਲੋ"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲ ਰਹੀਆਂ ਐਪਾਂ"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"ਬੈਟਰੀ ਅਤੇ ਡੈਟਾ ਉਪਯੋਗ ਸਬੰਧੀ ਵੇਰਵਿਆਂ ਲਈ ਟੈਪ ਕਰੋ"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ਮੋਬਾਈਲ ਡੈਟਾ ਬੰਦ ਕਰੀਏ?"</string> </resources> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 279d12176ae2..b1a024a394ef 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -785,4 +785,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Zastąp"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacje działające w tle"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Kliknij, by wyświetlić szczegóły wykorzystania baterii i transmisji danych"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Wyłączyć mobilną transmisję danych?"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 0b7e8b019d6e..746a7fdaa3ea 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Substituir"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apps sendo executados em segundo plano"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tocar para ver detalhes sobre a bateria e o uso de dados"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Desativar os dados móveis?"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index fcf9ef86eaa0..92d2c948e2a7 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -26,7 +26,7 @@ <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Os ecrãs recentes aparecem aqui"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignorar aplicações recentes"</string> <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> - <item quantity="one">%d ecrã na Vista geral</item> + <item quantity="one">1 ecrã na Vista geral</item> <item quantity="other">%d ecrãs na Vista geral</item> </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string> @@ -252,7 +252,7 @@ <string name="accessibility_clear_all" msgid="5235938559247164925">"Limpar todas as notificações."</string> <string name="notification_group_overflow_indicator" msgid="1863231301642314183">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string> <plurals name="notification_group_overflow_description" formatted="false" msgid="4579313201268495404"> - <item quantity="one">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificação no grupo.</item> + <item quantity="one">Mais <xliff:g id="NUMBER_0">%s</xliff:g> notificação no grupo.</item> <item quantity="other">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item> </plurals> <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"Definições de notificação"</string> @@ -556,12 +556,12 @@ <string name="notification_default_channel_desc" msgid="2506053815870808359">"Esta aplicação não tem categorias de notificação"</string> <string name="notification_unblockable_desc" msgid="3561016061737896906">"Não é possível desativar as notificações desta aplicação"</string> <plurals name="notification_num_channels_desc" formatted="false" msgid="5492793452274077663"> - <item quantity="one">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categoria de notificação desta aplicação</item> + <item quantity="one">1 de <xliff:g id="NUMBER_0">%d</xliff:g> categoria de notificação desta aplicação</item> <item quantity="other">1 de <xliff:g id="NUMBER_1">%d</xliff:g> categorias de notificação desta aplicação</item> </plurals> <string name="notification_channels_list_desc_2" msgid="6214732715833946441">"<xliff:g id="CHANNEL_NAME_1">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2">%2$s</xliff:g>"</string> <plurals name="notification_channels_list_desc_2_and_others" formatted="false" msgid="2747813553355336157"> - <item quantity="one"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> e mais <xliff:g id="NUMBER_5">%3$d</xliff:g></item> + <item quantity="one"><xliff:g id="CHANNEL_NAME_1_0">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_1">%2$s</xliff:g> e mais <xliff:g id="NUMBER_2">%3$d</xliff:g></item> <item quantity="other"><xliff:g id="CHANNEL_NAME_1_3">%1$s</xliff:g>, <xliff:g id="CHANNEL_NAME_2_4">%2$s</xliff:g> e mais <xliff:g id="NUMBER_5">%3$d</xliff:g></item> </plurals> <string name="notification_channel_controls_opened_accessibility" msgid="6553950422055908113">"Controlos de notificações da aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> abertos"</string> @@ -577,11 +577,11 @@ <string name="snooze_undo" msgid="6074877317002985129">"ANULAR"</string> <string name="snoozed_for_time" msgid="2390718332980204462">"Suspensa por <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string> <plurals name="snoozeHourOptions" formatted="false" msgid="2124335842674413030"> - <item quantity="one">%d horas</item> + <item quantity="one">%d hora</item> <item quantity="other">%d horas</item> </plurals> <plurals name="snoozeMinuteOptions" formatted="false" msgid="4127251700591510196"> - <item quantity="one">%d minutos</item> + <item quantity="one">%d minuto</item> <item quantity="other">%d minutos</item> </plurals> <string name="battery_panel_title" msgid="7944156115535366613">"Utiliz. da bateria"</string> @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Substituir"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicações em execução em segundo plano"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Toque para obter detalhes acerca da utilização da bateria e dos dados"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Pretende desativar os dados móveis?"</string> </resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 0b7e8b019d6e..746a7fdaa3ea 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Substituir"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Apps sendo executados em segundo plano"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tocar para ver detalhes sobre a bateria e o uso de dados"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Desativar os dados móveis?"</string> </resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 0224ef5412ad..7620c7103b5a 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -781,4 +781,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Înlocuiți"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplicațiile rulează în fundal"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Atingeți pentru mai multe detalii privind bateria și utilizarea datelor"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Dezactivați datele mobile?"</string> </resources> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index f8dc744c76ea..b44d7d64323f 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -787,4 +787,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Заменить"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Приложения, работающие в фоновом режиме"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Нажмите, чтобы проверить энергопотребление и трафик"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Отключить мобильный Интернет?"</string> </resources> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 7e77c4368f09..15b444670568 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"ප්රතිස්ථාපනය"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"පසුබිමින් ධාවනය වන යෙදුම්"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"බැටරි හා දත්ත භාවිතය පිළිබඳව විස්තර සඳහා තට්ටු කරන්න"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ජංගම දත්ත ක්රියාවිරහිත කරන්නද?"</string> </resources> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 2b19d6f4a3d6..58e4b8a013ff 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -787,4 +787,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Nahradiť"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikácie sú spustené na pozadí"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Klepnutím zobrazíte podrobnosti o batérii a spotrebe dát"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vypnúť mobilné dáta?"</string> </resources> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 29dfa3af6f62..8c03d0ed346d 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -787,4 +787,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Zamenjaj"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacije, ki se izvajajo v ozadju"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Dotaknite se za prikaz podrobnosti porabe akumulatorja in prenosa podatkov"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Želite izklopiti prenos podatkov v mobilnih omrežjih?"</string> </resources> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 042320867ae3..607440d448eb 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Zëvendëso"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Aplikacionet që ekzekutohen në sfond"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Trokit për detaje mbi baterinë dhe përdorimin e të dhënave"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Të çaktivizohen të dhënat celulare?"</string> </resources> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index d6adcb571129..8db53af893f2 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -779,4 +779,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Замени"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Апликације покренуте у позадини"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Додирните за детаље о батерији и потрошњи података"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Желите да онемогућите мобилне податке?"</string> </resources> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 642484f879c9..f318be195ed7 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Ersätt"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Appar körs i bakgrunden"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Tryck för information om batteri- och dataanvändning"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vill du inaktivera mobildatan?"</string> </resources> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index e11313e3426c..87a3d77ed765 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -240,7 +240,7 @@ <string name="accessibility_ambient_display_charging" msgid="9084521679384069087">"Inachaji"</string> <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data ya 2G-3G imesitishwa"</string> <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data ya 4G imesitishwa"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Data ya simu imesitishwa"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="6801382439018099779">"Data ya mtandao wa simu imesitishwa"</string> <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data imesitishwa"</string> <string name="data_usage_disabled_dialog" msgid="4919541636934603816">"Umefikia kikomo cha data ulichoweka. Hutumii tena data ya simu.\n\nUkiendelea, huenda ukatozwa ada ya matumizi ya data."</string> <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Endelea"</string> @@ -316,7 +316,7 @@ <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Mtandao-hewa"</string> <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Arifa"</string> <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Tochi"</string> - <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Data ya simu"</string> + <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Data ya mtandao wa simu"</string> <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Matumizi ya data"</string> <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Data iliyosalia"</string> <string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Imezidi kikomo"</string> @@ -761,7 +761,7 @@ <string name="instant_apps_message" msgid="8116608994995104836">"Huhitaji kusakinisha programu zinazofunguka papo hapo."</string> <string name="app_info" msgid="6856026610594615344">"Maelezo ya programu"</string> <string name="go_to_web" msgid="1106022723459948514">"Nenda kwenye wavuti"</string> - <string name="mobile_data" msgid="7094582042819250762">"Data ya simu"</string> + <string name="mobile_data" msgid="7094582042819250762">"Data ya mtandao wa simu"</string> <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi imezimwa"</string> <string name="bt_is_off" msgid="2640685272289706392">"Bluetooth imezimwa"</string> <string name="dnd_is_off" msgid="6167780215212497572">"Kipengele cha Usinisumbue kimezimwa"</string> @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Badilisha"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Programu zinatumika chinichini"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Gonga ili upate maelezo kuhusu betri na matumizi ya data"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Ungependa kuzima data ya mtandao wa simu?"</string> </resources> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index e0a0e9bd5bf0..10f3a3b691bd 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"மாற்று"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"பின்னணியில் இயங்கும் பயன்பாடுகள்"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"பேட்டரி மற்றும் தரவு உபயோக விவரங்களைக் காண, தட்டவும்"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"மொபைல் தரவை முடக்கவா?"</string> </resources> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 1787d07902fe..01cbfedbfef2 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"భర్తీ చేయి"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"నేపథ్యంలో అమలు అవుతున్న ఆప్లు"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"బ్యాటరీ మరియు డేటా వినియోగ వివరాల కోసం నొక్కండి"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"మొబైల్ డేటాని ఆఫ్ చేయాలా?"</string> </resources> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index a0db28708d0f..2a9f4d8b9a13 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"แทนที่"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"แอปที่กำลังทำงานในเบื้องหลัง"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"แตะเพื่อดูรายละเอียดเกี่ยวกับแบตเตอรี่และปริมาณการใช้อินเทอร์เน็ต"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"ปิดอินเทอร์เน็ตมือถือไหม"</string> </resources> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 5b6732ce1803..59d3f621d620 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Palitan"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Tumatakbo ang mga app sa background"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"I-tap para sa mga detalye tungkol sa paggamit ng baterya at data"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"I-off ang mobile data?"</string> </resources> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index ad6c4981d075..78ded20df57e 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Değiştir"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Arka planda çalışan uygulamalar"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Pil ve veri kullanımı ile ilgili ayrıntılar için dokunun"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobil veri kapatılsın mı?"</string> </resources> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index d79200a77484..e126f7c7b182 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -157,7 +157,7 @@ <string name="accessibility_cell_data" msgid="5326139158682385073">"Мобільне передавання даних"</string> <string name="accessibility_cell_data_on" msgid="5927098403452994422">"Мобільне передавання даних увімкнено"</string> <string name="accessibility_cell_data_off" msgid="443267573897409704">"Мобільне передавання даних вимкнено"</string> - <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Прив’язка Bluetooth."</string> + <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-модем"</string> <string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим польоту."</string> <string name="accessibility_vpn_on" msgid="5993385083262856059">"Мережу VPN увімкнено."</string> <string name="accessibility_no_sims" msgid="3957997018324995781">"Немає SIM-карти."</string> @@ -787,4 +787,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Замінити"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Додатки, які працюють у фоновому режимі"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Торкніться, щоб перевірити використання акумулятора й трафік"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Вимкнути мобільний трафік?"</string> </resources> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index c59242f963fa..12c4560c9efe 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"بدلیں"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"ایپس پس منظر میں چل رہی ہیں"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"بیٹری اور ڈیٹا استعمال کے بارے میں تفصیلات کے لیے تھپتھپائیں"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"موبائل ڈیٹا آف کریں؟"</string> </resources> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 4946f698bcdb..c632914f7847 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Almashtirish"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Fonda ishlayotgan ilovalar"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Batareya va trafik sarfi tafsilotlari uchun ustiga bosing"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Mobil internet o‘chirib qo‘yilsinmi?"</string> </resources> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index e716899a42ba..9ae0e775737f 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Thay thế"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Ứng dụng đang chạy trong nền"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Nhấn để biết chi tiết về mức sử dụng dữ liệu và pin"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Tắt dữ liệu di động?"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index b8588d9fd823..89148c878614 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"替换"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"在后台运行的应用"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"点按即可详细了解电量和流量消耗情况"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"要关闭移动数据网络吗?"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index e29ccb60ac8e..91ec22fbac76 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -775,4 +775,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"取代"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"正在背景中執行的應用程式"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"輕按即可查看電池和數據用量詳情"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"要關閉流動數據嗎?"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 26565500ded5..6a9ee7e1e42c 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"取代"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"在背景執行的應用程式"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"輕觸即可查看電池和數據用量詳情"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"要關閉行動數據嗎?"</string> </resources> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index e66ff73e79be..9ea4f218a762 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -773,4 +773,5 @@ <string name="qs_dnd_replace" msgid="8019520786644276623">"Buyisela"</string> <string name="running_foreground_services_title" msgid="381024150898615683">"Izinhlelo zokusebenza zisebenza ngasemuva"</string> <string name="running_foreground_services_msg" msgid="6326247670075574355">"Thepha ngemininingwane ekusetshenzisweni kwebhethri nedatha"</string> + <string name="data_usage_disable_mobile" msgid="5116269981510015864">"Vala idatha yeselula?"</string> </resources> diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 056008245563..745d6015d0ff 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -127,7 +127,7 @@ <attr name="lightIconTheme" format="reference" /> <attr name="darkIconTheme" format="reference" /> - <attr name="wallpaperTextColor" format="color" /> - <attr name="wallpaperTextColorSecondary" format="color" /> + <attr name="wallpaperTextColor" format="reference|color" /> + <attr name="wallpaperTextColorSecondary" format="reference|color" /> </resources> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index b0ee03989298..5917dc56124b 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -267,14 +267,15 @@ <!-- Doze: alpha to apply to small icons when dozing --> <integer name="doze_small_icon_alpha">222</integer><!-- 87% of 0xff --> - <!-- Doze: the brightness value to use for the lower brightness AOD mode --> - <integer name="config_doze_aod_brightness_low">5</integer> - - <!-- Doze: the brightness value to use for the higher brightness AOD mode --> - <integer name="config_doze_aod_brightness_high">27</integer> - - <!-- Doze: the brightness value to use for the sunlight AOD mode --> - <integer name="config_doze_aod_brightness_sunlight">28</integer> + <!-- Doze: Table that translates sensor values from the doze_brightness_sensor_type sensor + to brightness values; -1 means keeping the current brightness. --> + <integer-array name="config_doze_brightness_sensor_to_brightness"> + <item>-1</item> <!-- 0: OFF --> + <item>2</item> <!-- 1: NIGHT --> + <item>5</item> <!-- 2: LOW --> + <item>27</item> <!-- 3: HIGH --> + <item>28</item> <!-- 4: SUN --> + </integer-array> <!-- Doze: whether the double tap sensor reports 2D touch coordinates --> <bool name="doze_double_tap_reports_touch_coordinates">false</bool> @@ -396,4 +397,8 @@ one bar higher than they actually are --> <bool name="config_inflateSignalStrength">false</bool> + <!-- Should we vibrate on an icon animation of the shelf. This should only be active if the + vibrator is capable of subtle vibrations --> + <bool name="config_vibrateOnIconAnimation">false</bool> + </resources> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 837cb8fcb3ba..906786596422 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2046,4 +2046,7 @@ been identified for them as running). [CHAR LIMIT=NONE] --> <string name="running_foreground_services_msg">Tap for details on battery and data usage</string> + <!-- Prompt to turn off data usage [CHAR LIMIT=NONE] --> + <string name="data_usage_disable_mobile" msgid="8656552431969276305">Turn off mobile data?</string> + </resources> diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index aee0ef8c65b3..dca021eeaa80 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -16,7 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android"> - <style name="RecentsTheme" parent="RecentsBase"> + <style name="RecentsTheme" parent="@android:style/Theme.Material"> <!-- NoTitle --> <item name="android:windowNoTitle">true</item> <!-- Misc --> @@ -27,13 +27,6 @@ <item name="android:ambientShadowAlpha">0.35</item> </style> - <!-- OverlayManager might replace this style entirely, use RecentsTheme to set a property - that should exist in both light and dark versions of Recents --> - <style name="RecentsBase" parent="@android:style/Theme.Material"> - <item name="android:textColorPrimaryInverse">@*android:color/primary_text_material_dark</item> - <item name="android:textColorSecondaryInverse">@*android:color/secondary_text_material_dark</item> - </style> - <!-- Recents theme --> <style name="RecentsTheme.Wallpaper"> <item name="android:windowBackground">@*android:color/transparent</item> @@ -41,8 +34,13 @@ <item name="android:windowShowWallpaper">true</item> <item name="android:windowDisablePreview">true</item> <item name="clearAllStyle">@style/ClearAllButtonDefaultMargins</item> - <item name="wallpaperTextColor">?android:attr/textColorPrimaryInverse</item> - <item name="wallpaperTextColorSecondary">?android:attr/textColorSecondaryInverse</item> + <item name="wallpaperTextColor">@*android:color/primary_text_material_dark</item> + <item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_dark</item> + </style> + + <style name="RecentsTheme.Wallpaper.Light"> + <item name="wallpaperTextColor">@*android:color/primary_text_material_light</item> + <item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_light</item> </style> <style name="ClearAllButtonDefaultMargins"> @@ -301,21 +299,26 @@ <style name="Animation.StatusBar"> </style> - <!-- Overlay manager may replace this theme --> - <style name="systemui_base" parent="@*android:style/Theme.DeviceDefault.QuickSettings" /> - - <style name="systemui_theme" parent="systemui_base"> + <style name="Theme.SystemUI" parent="@*android:style/Theme.DeviceDefault.QuickSettings"> <item name="lightIconTheme">@style/DualToneLightTheme</item> <item name="darkIconTheme">@style/DualToneDarkTheme</item> - <item name="wallpaperTextColor">?android:attr/textColorPrimaryInverse</item> - <item name="wallpaperTextColorSecondary">?android:attr/textColorSecondaryInverse</item> - <item name="android:colorControlHighlight">?android:attr/textColorSecondaryInverse</item> + <item name="wallpaperTextColor">@*android:color/primary_text_material_dark</item> + <item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_dark</item> + <item name="android:colorControlHighlight">@*android:color/primary_text_material_dark</item> <item name="*android:lockPatternStyle">@style/LockPatternStyle</item> + <item name="passwordStyle">@style/PasswordTheme</item> + </style> + + <style name="Theme.SystemUI.Light" parent="@*android:style/Theme.DeviceDefault.QuickSettings"> + <item name="wallpaperTextColor">@*android:color/primary_text_material_light</item> + <item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_light</item> + <item name="android:colorControlHighlight">@*android:color/primary_text_material_light</item> + <item name="passwordStyle">@style/PasswordTheme.Light</item> </style> <style name="LockPatternStyle"> - <item name="*android:regularColor">?android:attr/textColorPrimaryInverse</item> - <item name="*android:successColor">?android:attr/textColorPrimaryInverse</item> + <item name="*android:regularColor">?attr/wallpaperTextColor</item> + <item name="*android:successColor">?attr/wallpaperTextColor</item> <item name="*android:errorColor">?android:attr/colorError</item> </style> diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index 165ca2a2d3be..27bc599f7f52 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -21,6 +21,7 @@ import android.app.AlertDialog; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.os.UserHandle; +import android.support.annotation.VisibleForTesting; import android.util.AttributeSet; import android.util.Log; import android.util.Slog; @@ -470,7 +471,8 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe return 0; } - protected int getLayoutIdFor(SecurityMode securityMode) { + @VisibleForTesting + public int getLayoutIdFor(SecurityMode securityMode) { switch (securityMode) { case Pattern: return R.layout.keyguard_pattern_view; case PIN: return R.layout.keyguard_pin_view; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 7c0aa0700d9c..32775fe9d5c1 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -132,6 +132,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private static final int MSG_DREAMING_STATE_CHANGED = 333; private static final int MSG_USER_UNLOCKED = 334; private static final int MSG_ASSISTANT_STACK_CHANGED = 335; + private static final int MSG_FINGERPRINT_AUTHENTICATION_CONTINUE = 336; /** Fingerprint state: Not listening to fingerprint. */ private static final int FINGERPRINT_STATE_STOPPED = 0; @@ -200,6 +201,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private int mFingerprintRunningState = FINGERPRINT_STATE_STOPPED; private LockPatternUtils mLockPatternUtils; + /** + * Short delay before restarting fingerprint authentication after a successful try + * This should be slightly longer than the time between onFingerprintAuthenticated and + * setKeyguardGoingAway(true). + */ + private static final int FINGERPRINT_CONTINUE_DELAY_MS = 500; + // If FP daemon dies, keyguard should retry after a short delay private int mHardwareUnavailableRetryCount = 0; private static final int HW_UNAVAILABLE_TIMEOUT = 3000; // ms @@ -294,6 +302,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mAssistantVisible = (boolean)msg.obj; updateFingerprintListeningState(); break; + case MSG_FINGERPRINT_AUTHENTICATION_CONTINUE: + updateFingerprintListeningState(); + break; } } }; @@ -446,9 +457,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } } + mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_FINGERPRINT_AUTHENTICATION_CONTINUE), + FINGERPRINT_CONTINUE_DELAY_MS); + // Only authenticate fingerprint once when assistant is visible mAssistantVisible = false; - updateFingerprintListeningState(); Trace.endSection(); } @@ -1136,6 +1149,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } private void updateFingerprintListeningState() { + // If this message exists, we should not authenticate again until this message is + // consumed by the handler + if (mHandler.hasMessages(MSG_FINGERPRINT_AUTHENTICATION_CONTINUE)) { + return; + } mHandler.removeCallbacks(mRetryFingerprintAuthentication); boolean shouldListenForFingerprint = shouldListenForFingerprint(); if (mFingerprintRunningState == FINGERPRINT_STATE_RUNNING && !shouldListenForFingerprint) { @@ -1148,9 +1166,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private boolean shouldListenForFingerprint() { return (mKeyguardIsVisible || !mDeviceInteractive || - (mBouncer && !mKeyguardGoingAway) || mGoingToSleep || - (mAssistantVisible && mKeyguardOccluded)) - && !mSwitchingUser && !isFingerprintDisabled(getCurrentUser()); + (mBouncer && !mKeyguardGoingAway) || mGoingToSleep || + (mAssistantVisible && mKeyguardOccluded)) + && !mSwitchingUser && !isFingerprintDisabled(getCurrentUser()) + && !mKeyguardGoingAway; } private void startListeningForFingerprint() { diff --git a/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java b/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java index 6296297a81c2..9fe730affbd9 100644 --- a/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java +++ b/packages/SystemUI/src/com/android/systemui/DockedStackExistsListener.java @@ -74,8 +74,11 @@ public class DockedStackExistsListener { private static void onDockedStackExistsChanged(boolean exists) { synchronized (sCallbacks) { - sCallbacks.removeIf(wf -> wf.get() == null); - sCallbacks.forEach(wf -> wf.get().accept(exists)); + sCallbacks.removeIf(wf -> { + Consumer<Boolean> l = wf.get(); + if (l != null) l.accept(exists); + return l == null; + }); } } diff --git a/packages/SystemUI/src/com/android/systemui/HardwareBgDrawable.java b/packages/SystemUI/src/com/android/systemui/HardwareBgDrawable.java index 6417e292158a..467ec2e50b48 100644 --- a/packages/SystemUI/src/com/android/systemui/HardwareBgDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/HardwareBgDrawable.java @@ -22,7 +22,8 @@ import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; -import android.util.Log; + +import com.android.settingslib.Utils; public class HardwareBgDrawable extends LayerDrawable { @@ -43,22 +44,25 @@ public class HardwareBgDrawable extends LayerDrawable { } mRoundTop = roundTop; mLayers = layers; - mLayers[1].setTint(0xffeeeeee); } private static Drawable[] getLayers(Context context, boolean roundTop, boolean roundEnd) { int drawable = roundEnd ? R.drawable.rounded_bg_full : R.drawable.rounded_bg; + final Drawable[] layers; if (roundTop) { - return new Drawable[]{ + layers = new Drawable[]{ + context.getDrawable(drawable).mutate(), context.getDrawable(drawable).mutate(), + }; + } else { + layers = new Drawable[]{ context.getDrawable(drawable).mutate(), + context.getDrawable(roundEnd ? R.drawable.rounded_full_bg_bottom + : R.drawable.rounded_bg_bottom).mutate(), }; } - return new Drawable[]{ - context.getDrawable(drawable).mutate(), - context.getDrawable(roundEnd ? R.drawable.rounded_full_bg_bottom - : R.drawable.rounded_bg_bottom).mutate(), - }; + layers[1].setTint(Utils.getColorAttr(context, android.R.attr.colorPrimaryDark)); + return layers; } public void setCutPoint(int point) { diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java index 211f0c75b5dd..d8da5ed71894 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java @@ -118,7 +118,7 @@ public class SystemUIApplication extends Application implements SysUiServiceProv // Set the application theme that is inherited by all services. Note that setting the // application theme in the manifest does only work for activities. Keep this in sync with // the theme set there. - setTheme(R.style.systemui_theme); + setTheme(R.style.Theme_SystemUI); SystemUIFactory.createFromConfig(this); diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java index 523724499d96..0c067ff38295 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java @@ -40,6 +40,8 @@ import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.volume.VolumeDialogControllerImpl; +import java.util.function.Consumer; + /** * Class factory to provide customizable SystemUI components. */ @@ -84,8 +86,10 @@ public class SystemUIFactory { public ScrimController createScrimController(LightBarController lightBarController, ScrimView scrimBehind, ScrimView scrimInFront, View headsUpScrim, - LockscreenWallpaper lockscreenWallpaper) { - return new ScrimController(lightBarController, scrimBehind, scrimInFront, headsUpScrim); + LockscreenWallpaper lockscreenWallpaper, + Consumer<Boolean> scrimVisibleListener) { + return new ScrimController(lightBarController, scrimBehind, scrimInFront, headsUpScrim, + scrimVisibleListener); } public NotificationIconAreaController createNotificationIconAreaController(Context context, diff --git a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java index fe8373ffa127..9ba7be86aa0a 100644 --- a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java +++ b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java @@ -31,11 +31,16 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.colorextraction.types.ExtractionType; import com.android.internal.colorextraction.types.Tonal; +import com.android.systemui.Dumpable; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.Arrays; /** * ColorExtractor aware of wallpaper visibility */ -public class SysuiColorExtractor extends ColorExtractor { +public class SysuiColorExtractor extends ColorExtractor implements Dumpable { private static final String TAG = "SysuiColorExtractor"; private boolean mWallpaperVisible; // Colors to return when the wallpaper isn't visible @@ -134,6 +139,11 @@ public class SysuiColorExtractor extends ColorExtractor { * @return colors */ public GradientColors getColors(int which, int type, boolean ignoreWallpaperVisibility) { + // mWallpaperVisible only handles the "system wallpaper" and will be always set to false + // if we have different lock and system wallpapers. + if (which == WallpaperManager.FLAG_LOCK) { + ignoreWallpaperVisibility = true; + } if (mWallpaperVisible || ignoreWallpaperVisibility) { return super.getColors(which, type); } else { @@ -149,4 +159,20 @@ public class SysuiColorExtractor extends ColorExtractor { } } + @Override + public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + pw.println("SysuiColorExtractor:"); + + pw.println(" Current wallpaper colors:"); + pw.println(" system: " + mSystemColors); + pw.println(" lock: " + mLockColors); + + GradientColors[] system = mGradientColors.get(WallpaperManager.FLAG_SYSTEM); + GradientColors[] lock = mGradientColors.get(WallpaperManager.FLAG_LOCK); + pw.println(" Gradients:"); + pw.println(" system: " + Arrays.toString(system)); + pw.println(" lock: " + Arrays.toString(lock)); + pw.println(" Default scrim: " + mWpHiddenColors); + + } } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java index 57fb14e50249..9b97634d7419 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java @@ -44,6 +44,8 @@ public interface DozeHost { void setDozeScreenBrightness(int value); + void onIgnoreTouchWhilePulsing(boolean ignore); + interface Callback { default void onNotificationHeadsUp() {} default void onPowerSaveChanged(boolean active) {} diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java index 0993ace8cfcc..79de48a17423 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java @@ -164,6 +164,11 @@ public class DozeLog { } } + public static void traceState(DozeMachine.State state) { + if (!ENABLED) return; + log("state " + state); + } + public static void traceProximityResult(Context context, boolean near, long millis, int pulseReason) { if (!ENABLED) return; @@ -233,10 +238,10 @@ public class DozeLog { + state + " blocked=" + blocked); } - public static void tracePulseCanceledByProx(Context context) { + public static void tracePulseTouchDisabledByProx(Context context, boolean disabled) { if (!ENABLED) return; init(context); - log("pulseCanceledByProx"); + log("pulseTouchDisabledByProx " + disabled); } public static void setRegisterKeyguardCallback(boolean registerKeyguardCallback) { diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java index a1dfeb34a670..8ec6afc326e1 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java @@ -17,6 +17,7 @@ package com.android.systemui.doze; import android.annotation.MainThread; +import android.os.Trace; import android.os.UserHandle; import android.util.Log; import android.view.Display; @@ -225,6 +226,9 @@ public class DozeMachine { State oldState = mState; mState = newState; + DozeLog.traceState(newState); + Trace.traceCounter(Trace.TRACE_TAG_APP, "doze_machine_state", newState.ordinal()); + updatePulseReason(newState, oldState, pulseReason); performTransitionOnComponents(oldState, newState); updateWakeLockState(newState); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java index ed4b131cd83f..32baf9413314 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java @@ -35,12 +35,9 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen private final Handler mHandler; private final SensorManager mSensorManager; private final Sensor mLightSensor; + private final int[] mSensorToBrightness; private boolean mRegistered; - private final int mHighBrightness; - private final int mLowBrightness; - private final int mSunlightBrightness; - public DozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, Sensor lightSensor, Handler handler) { mContext = context; @@ -49,12 +46,8 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen mLightSensor = lightSensor; mHandler = handler; - mLowBrightness = context.getResources().getInteger( - R.integer.config_doze_aod_brightness_low); - mHighBrightness = context.getResources().getInteger( - R.integer.config_doze_aod_brightness_high); - mSunlightBrightness = context.getResources().getInteger( - R.integer.config_doze_aod_brightness_sunlight); + mSensorToBrightness = context.getResources().getIntArray( + R.array.config_doze_brightness_sensor_to_brightness); } @Override @@ -81,21 +74,18 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen @Override public void onSensorChanged(SensorEvent event) { if (mRegistered) { - mDozeService.setDozeScreenBrightness(computeBrightness((int) event.values[0])); + int brightness = computeBrightness((int) event.values[0]); + if (brightness > 0) { + mDozeService.setDozeScreenBrightness(brightness); + } } } private int computeBrightness(int sensorValue) { - // The sensor reports 0 for off, 1 for low brightness, 2 for high brightness, and 3 for - // sunlight. We currently use DozeScreenState for screen off, so we treat off as low - // brightness. - if (sensorValue >= 3) { - return mSunlightBrightness; - } else if (sensorValue == 2) { - return mHighBrightness; - } else { - return mLowBrightness; + if (sensorValue < 0 || sensorValue >= mSensorToBrightness.length) { + return -1; } + return mSensorToBrightness[sensorValue]; } @Override diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index ea064797f8f5..15981e573ca1 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -162,10 +162,10 @@ public class DozeTriggers implements DozeMachine.Part { final boolean pausing = (state == DozeMachine.State.DOZE_AOD_PAUSING); final boolean aod = (state == DozeMachine.State.DOZE_AOD); - if (near && state == DozeMachine.State.DOZE_PULSING) { - if (DEBUG) Log.i(TAG, "Prox NEAR, ending pulse"); - DozeLog.tracePulseCanceledByProx(mContext); - mMachine.requestState(DozeMachine.State.DOZE_PULSE_DONE); + if (state == DozeMachine.State.DOZE_PULSING) { + boolean ignoreTouch = near; + if (DEBUG) Log.i(TAG, "Prox changed, ignore touch = " + ignoreTouch); + mDozeHost.onIgnoreTouchWhilePulsing(ignoreTouch); } if (far && (paused || pausing)) { if (DEBUG) Log.i(TAG, "Prox FAR, unpausing AOD"); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java index 1dc37cdbca7a..884745213350 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java @@ -100,7 +100,6 @@ public class DozeUi implements DozeMachine.Part { private boolean shouldAnimateWakeup(DozeMachine.State state) { switch (state) { - case DOZE_AOD: case DOZE_REQUEST_PULSE: case DOZE_PULSING: case DOZE_PULSE_DONE: diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java index ad177a7e849f..7799c0190f54 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java @@ -68,6 +68,7 @@ import android.text.TextUtils; import android.util.ArraySet; import android.util.Log; import android.util.MathUtils; +import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -143,7 +144,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn * @param context everything needs a context :( */ public GlobalActionsDialog(Context context, GlobalActionsManager windowManagerFuncs) { - mContext = context; + mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme); mWindowManagerFuncs = windowManagerFuncs; mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); mDreamManager = IDreamManager.Stub.asInterface( @@ -1226,7 +1227,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn public ActionsDialog(Context context, OnClickListener clickListener, MyAdapter adapter, OnItemLongClickListener longClickListener) { super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions); - mContext = getContext(); + mContext = context; mAdapter = adapter; mClickListener = clickListener; mLongClickListener = longClickListener; @@ -1238,8 +1239,8 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogIn window.requestFeature(Window.FEATURE_NO_TITLE); window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); - window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE - | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + window.addFlags( + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java index c1e51b9c0bbb..08b7b71a47d8 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java @@ -15,6 +15,7 @@ package com.android.systemui.globalactions; import com.android.systemui.Dependency; +import com.android.systemui.R; import com.android.systemui.plugins.GlobalActions; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardMonitor; @@ -38,9 +39,7 @@ public class GlobalActionsImpl implements GlobalActions { @Override public void showGlobalActions(GlobalActionsManager manager) { if (mGlobalActions == null) { - final ContextThemeWrapper context = new ContextThemeWrapper(mContext, - android.R.style.Theme_Material_Light); - mGlobalActions = new GlobalActionsDialog(context, manager); + mGlobalActions = new GlobalActionsDialog(mContext, manager); } mGlobalActions.showDialog(mKeyguardMonitor.isShowing(), mDeviceProvisionedController.isDeviceProvisioned()); diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ScreenLifecycle.java b/packages/SystemUI/src/com/android/systemui/keyguard/ScreenLifecycle.java index 3f39dfe5d936..b6fce4408bcf 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ScreenLifecycle.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ScreenLifecycle.java @@ -16,6 +16,8 @@ package com.android.systemui.keyguard; +import android.os.Trace; + import com.android.systemui.Dumpable; import java.io.FileDescriptor; @@ -38,22 +40,22 @@ public class ScreenLifecycle extends Lifecycle<ScreenLifecycle.Observer> impleme } public void dispatchScreenTurningOn() { - mScreenState = SCREEN_TURNING_ON; + setScreenState(SCREEN_TURNING_ON); dispatch(Observer::onScreenTurningOn); } public void dispatchScreenTurnedOn() { - mScreenState = SCREEN_ON; + setScreenState(SCREEN_ON); dispatch(Observer::onScreenTurnedOn); } public void dispatchScreenTurningOff() { - mScreenState = SCREEN_TURNING_OFF; + setScreenState(SCREEN_TURNING_OFF); dispatch(Observer::onScreenTurningOff); } public void dispatchScreenTurnedOff() { - mScreenState = SCREEN_OFF; + setScreenState(SCREEN_OFF); dispatch(Observer::onScreenTurnedOff); } @@ -63,6 +65,11 @@ public class ScreenLifecycle extends Lifecycle<ScreenLifecycle.Observer> impleme pw.println(" mScreenState=" + mScreenState); } + private void setScreenState(int screenState) { + mScreenState = screenState; + Trace.traceCounter(Trace.TRACE_TAG_APP, "screenState", screenState); + } + public interface Observer { default void onScreenTurningOn() {} default void onScreenTurnedOn() {} diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java index 578e6fb1ab01..951c0ea6a26b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/WakefulnessLifecycle.java @@ -16,6 +16,8 @@ package com.android.systemui.keyguard; +import android.os.Trace; + import com.android.systemui.Dumpable; import java.io.FileDescriptor; @@ -39,22 +41,22 @@ public class WakefulnessLifecycle extends Lifecycle<WakefulnessLifecycle.Observe } public void dispatchStartedWakingUp() { - mWakefulness = WAKEFULNESS_WAKING; + setWakefulness(WAKEFULNESS_WAKING); dispatch(Observer::onStartedWakingUp); } public void dispatchFinishedWakingUp() { - mWakefulness = WAKEFULNESS_AWAKE; + setWakefulness(WAKEFULNESS_AWAKE); dispatch(Observer::onFinishedWakingUp); } public void dispatchStartedGoingToSleep() { - mWakefulness = WAKEFULNESS_GOING_TO_SLEEP; + setWakefulness(WAKEFULNESS_GOING_TO_SLEEP); dispatch(Observer::onStartedGoingToSleep); } public void dispatchFinishedGoingToSleep() { - mWakefulness = WAKEFULNESS_ASLEEP; + setWakefulness(WAKEFULNESS_ASLEEP); dispatch(Observer::onFinishedGoingToSleep); } @@ -64,6 +66,11 @@ public class WakefulnessLifecycle extends Lifecycle<WakefulnessLifecycle.Observe pw.println(" mWakefulness=" + mWakefulness); } + private void setWakefulness(int wakefulness) { + mWakefulness = wakefulness; + Trace.traceCounter(Trace.TRACE_TAG_APP, "wakefulness", wakefulness); + } + public interface Observer { default void onStartedWakingUp() {} default void onFinishedWakingUp() {} diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java index ebf4b5d83029..6c6054cb6d12 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -92,7 +92,7 @@ public class PipManager implements BasePipManager { ComponentName topPipActivity = PipUtils.getTopPinnedActivity(mContext, mActivityManager); - mMenuController.hideMenu(); + mMenuController.onActivityUnpinned(topPipActivity); mTouchHandler.onActivityUnpinned(topPipActivity); mNotificationController.onActivityUnpinned(topPipActivity); diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java index e310847943c5..c558056530b6 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java @@ -22,6 +22,7 @@ import android.app.ActivityManager.StackInfo; import android.app.ActivityOptions; import android.app.IActivityManager; import android.app.RemoteAction; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ParceledListSlice; @@ -32,6 +33,7 @@ import android.os.Handler; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; +import android.os.SystemClock; import android.os.UserHandle; import android.util.Log; import android.view.IWindowManager; @@ -77,6 +79,9 @@ public class PipMenuActivityController { public static final int MENU_STATE_CLOSE = 1; public static final int MENU_STATE_FULL = 2; + // The duration to wait before we consider the start activity as having timed out + private static final long START_ACTIVITY_REQUEST_TIMEOUT_MS = 300; + /** * A listener interface to receive notification on changes in PIP. */ @@ -125,8 +130,9 @@ public class PipMenuActivityController { private ReferenceCountedTrigger mOnAttachDecrementTrigger; private boolean mStartActivityRequested; + private long mStartActivityRequestedTime; private Messenger mToActivityMessenger; - private Messenger mMessenger = new Messenger(new Handler() { + private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { @@ -161,7 +167,7 @@ public class PipMenuActivityController { } case MESSAGE_UPDATE_ACTIVITY_CALLBACK: { mToActivityMessenger = msg.replyTo; - mStartActivityRequested = false; + setStartActivityRequested(false); if (mOnAttachDecrementTrigger != null) { mOnAttachDecrementTrigger.decrement(); mOnAttachDecrementTrigger = null; @@ -174,7 +180,17 @@ public class PipMenuActivityController { } } } - }); + }; + private Messenger mMessenger = new Messenger(mHandler); + + private Runnable mStartActivityRequestedTimeoutRunnable = () -> { + setStartActivityRequested(false); + if (mOnAttachDecrementTrigger != null) { + mOnAttachDecrementTrigger.decrement(); + mOnAttachDecrementTrigger = null; + } + Log.e(TAG, "Expected start menu activity request timed out"); + }; private ActionListener mMediaActionListener = new ActionListener() { @Override @@ -202,6 +218,11 @@ public class PipMenuActivityController { } } + public void onActivityUnpinned(ComponentName topPipActivity) { + hideMenu(); + setStartActivityRequested(false); + } + public void onPinnedStackAnimationEnded() { // Note: Only active menu activities care about this event if (mToActivityMessenger != null) { @@ -243,7 +264,9 @@ public class PipMenuActivityController { } catch (RemoteException e) { Log.e(TAG, "Could not notify menu to update dismiss fraction", e); } - } else if (!mStartActivityRequested) { + } else if (!mStartActivityRequested || isStartActivityRequestedElapsed()) { + // If we haven't requested the start activity, or if it previously took too long to + // start, then start it startMenuActivity(MENU_STATE_NONE, null /* stackBounds */, null /* movementBounds */, false /* allowMenuTimeout */); } @@ -273,7 +296,9 @@ public class PipMenuActivityController { } catch (RemoteException e) { Log.e(TAG, "Could not notify menu to show", e); } - } else if (!mStartActivityRequested) { + } else if (!mStartActivityRequested || isStartActivityRequestedElapsed()) { + // If we haven't requested the start activity, or if it previously took too long to + // start, then start it startMenuActivity(menuState, stackBounds, movementBounds, allowMenuTimeout); } } @@ -368,12 +393,12 @@ public class PipMenuActivityController { pinnedStackInfo.taskIds[pinnedStackInfo.taskIds.length - 1]); options.setTaskOverlay(true, true /* canResume */); mContext.startActivityAsUser(intent, options.toBundle(), UserHandle.CURRENT); - mStartActivityRequested = true; + setStartActivityRequested(true); } else { Log.e(TAG, "No PIP tasks found"); } } catch (RemoteException e) { - mStartActivityRequested = false; + setStartActivityRequested(false); Log.e(TAG, "Error showing PIP menu activity", e); } } @@ -416,6 +441,14 @@ public class PipMenuActivityController { } /** + * @return whether the time of the activity request has exceeded the timeout. + */ + private boolean isStartActivityRequestedElapsed() { + return (SystemClock.uptimeMillis() - mStartActivityRequestedTime) + >= START_ACTIVITY_REQUEST_TIMEOUT_MS; + } + + /** * Handles changes in menu visibility. */ private void onMenuStateChanged(int menuState, boolean resize) { @@ -443,12 +476,24 @@ public class PipMenuActivityController { mMenuState = menuState; } + private void setStartActivityRequested(boolean requested) { + mHandler.removeCallbacks(mStartActivityRequestedTimeoutRunnable); + mStartActivityRequested = requested; + mStartActivityRequestedTime = requested ? SystemClock.uptimeMillis() : 0; + } + public final void onBusEvent(HidePipMenuEvent event) { if (mStartActivityRequested) { // If the menu has been start-requested, but not actually started, then we defer the - // trigger callback until the menu has started and called back to the controller + // trigger callback until the menu has started and called back to the controller. mOnAttachDecrementTrigger = event.getAnimationTrigger(); mOnAttachDecrementTrigger.increment(); + + // Fallback for b/63752800, we have started the PipMenuActivity but it has not made any + // callbacks. Don't continue to wait for the menu to show past some timeout. + mHandler.removeCallbacks(mStartActivityRequestedTimeoutRunnable); + mHandler.postDelayed(mStartActivityRequestedTimeoutRunnable, + START_ACTIVITY_REQUEST_TIMEOUT_MS); } } @@ -458,5 +503,7 @@ public class PipMenuActivityController { pw.println(innerPrefix + "mMenuState=" + mMenuState); pw.println(innerPrefix + "mToActivityMessenger=" + mToActivityMessenger); pw.println(innerPrefix + "mListeners=" + mListeners.size()); + pw.println(innerPrefix + "mStartActivityRequested=" + mStartActivityRequested); + pw.println(innerPrefix + "mStartActivityRequestedTime=" + mStartActivityRequestedTime); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index 14afbfae29f1..12fccda907ff 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -83,7 +83,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { @Override protected void handleClick() { // Secondary clicks are header clicks, just toggle. - final boolean isEnabled = (Boolean)mState.value; + final boolean isEnabled = mState.value; mController.setBluetoothEnabled(!isEnabled); } @@ -100,6 +100,9 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { return; } showDetail(true); + if (!mState.value) { + mController.setBluetoothEnabled(true); + } } @Override @@ -179,6 +182,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { refreshState(); if (isShowingDetail()) { mDetailAdapter.updateItems(); + fireToggleStateChanged(mDetailAdapter.getToggleState()); } } @@ -269,7 +273,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> { item.icon = R.drawable.ic_qs_bluetooth_on; item.line1 = device.getName(); item.tag = device; - int state = mController.getMaxConnectionState(device); + int state = device.getMaxConnectionState(); if (state == BluetoothProfile.STATE_CONNECTED) { item.icon = R.drawable.ic_qs_bluetooth_connected; int batteryLevel = device.getBatteryLevel(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index 4e728f68890a..1e78e650bbf9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -16,6 +16,7 @@ package com.android.systemui.qs.tiles; +import android.app.AlertDialog; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -40,6 +41,8 @@ import com.android.systemui.qs.CellTileView; import com.android.systemui.qs.CellTileView.SignalIcon; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.tileimpl.QSTileImpl; +import com.android.systemui.statusbar.phone.SystemUIDialog; +import com.android.systemui.statusbar.policy.KeyguardMonitor; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; @@ -64,11 +67,13 @@ public class CellularTile extends QSTileImpl<SignalState> { private final CellSignalCallback mSignalCallback = new CellSignalCallback(); private final ActivityStarter mActivityStarter; + private final KeyguardMonitor mKeyguardMonitor; public CellularTile(QSHost host) { super(host); mController = Dependency.get(NetworkController.class); mActivityStarter = Dependency.get(ActivityStarter.class); + mKeyguardMonitor = Dependency.get(KeyguardMonitor.class); mDataController = mController.getMobileDataController(); mDetailAdapter = new CellularDetailAdapter(); } @@ -104,7 +109,28 @@ public class CellularTile extends QSTileImpl<SignalState> { @Override protected void handleClick() { - mDataController.setMobileDataEnabled(!mDataController.isMobileDataEnabled()); + if (mDataController.isMobileDataEnabled()) { + if (mKeyguardMonitor.isSecure() && !mKeyguardMonitor.canSkipBouncer()) { + mActivityStarter.postQSRunnableDismissingKeyguard(() -> { + showDisableDialog(); + }); + } else { + showDisableDialog(); + } + } else { + mDataController.setMobileDataEnabled(true); + } + } + + private void showDisableDialog() { + mHost.collapsePanels(); + SystemUIDialog.applyFlags(new AlertDialog.Builder(mContext) + .setMessage(R.string.data_usage_disable_mobile) + .setNegativeButton(android.R.string.cancel, null) + .setPositiveButton( + com.android.internal.R.string.alert_windows_notification_turn_off_action, + (d, w) -> mDataController.setMobileDataEnabled(false)) + .create()).show(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index 6c31cef4b787..5938749d14d2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -33,6 +33,7 @@ import android.provider.Settings.Global; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig.ZenRule; import android.service.quicksettings.Tile; +import android.util.Log; import android.util.Slog; import android.view.LayoutInflater; import android.view.View; @@ -54,6 +55,7 @@ import com.android.systemui.plugins.qs.QSTile.BooleanState; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.ZenModeController; +import com.android.systemui.statusbar.policy.ZenModeController.Callback; import com.android.systemui.volume.ZenModePanel; /** Quick settings tile: Do not disturb **/ @@ -147,7 +149,22 @@ public class DndTile extends QSTileImpl<BooleanState> { Toast.LENGTH_LONG).show(); return; } - showDetail(true); + if (!mState.value) { + // Because of the complexity of the zen panel, it needs to be shown after + // we turn on zen below. + mController.addCallback(new ZenModeController.Callback() { + @Override + public void onZenChanged(int zen) { + mController.removeCallback(this); + showDetail(true); + } + }); + int zen = Prefs.getInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, + Global.ZEN_MODE_ALARMS); + mController.setZen(zen, null, TAG); + } else { + showDetail(true); + } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index 73915092e8b4..cb8c39dad30a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -127,6 +127,9 @@ public class WifiTile extends QSTileImpl<SignalState> { return; } showDetail(true); + if (!mState.value) { + mController.setWifiEnabled(true); + } } @Override @@ -311,12 +314,10 @@ public class WifiTile extends QSTileImpl<SignalState> { public View createDetailView(Context context, View convertView, ViewGroup parent) { if (DEBUG) Log.d(TAG, "createDetailView convertView=" + (convertView != null)); mAccessPoints = null; - mWifiController.scanForAccessPoints(); - fireScanStateChanged(true); mItems = QSDetailItems.convertOrInflate(context, convertView, parent); mItems.setTagSuffix("Wifi"); mItems.setCallback(this); - updateItems(); + mWifiController.scanForAccessPoints(); // updates APs and items setItemsVisible(mState.value); return mItems; } @@ -324,12 +325,30 @@ public class WifiTile extends QSTileImpl<SignalState> { @Override public void onAccessPointsChanged(final List<AccessPoint> accessPoints) { mAccessPoints = accessPoints.toArray(new AccessPoint[accessPoints.size()]); + filterUnreachableAPs(); + updateItems(); if (accessPoints != null && accessPoints.size() > 0) { fireScanStateChanged(false); } } + /** Filter unreachable APs from mAccessPoints */ + private void filterUnreachableAPs() { + int numReachable = 0; + for (AccessPoint ap : mAccessPoints) { + if (ap.isReachable()) numReachable++; + } + if (numReachable != mAccessPoints.length) { + AccessPoint[] unfiltered = mAccessPoints; + mAccessPoints = new AccessPoint[numReachable]; + int i = 0; + for (AccessPoint ap : unfiltered) { + if (ap.isReachable()) mAccessPoints[i++] = ap; + } + } + } + @Override public void onSettingsActivityTriggered(Intent settingsIntent) { mActivityStarter.postStartActivityDismissingKeyguard(settingsIntent, 0); diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index f2ea6a683e95..c0550b5c52e6 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java @@ -20,11 +20,11 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.TaskStackBuilder; +import android.app.WallpaperManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; @@ -41,12 +41,15 @@ import android.view.ViewTreeObserver.OnPreDrawListener; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; +import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.keyguard.LatencyTracker; import com.android.systemui.DejankUtils; +import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.R; +import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.recents.events.EventBus; import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent; import com.android.systemui.recents.events.activity.ConfigurationChangedEvent; @@ -100,7 +103,8 @@ import java.util.List; /** * The main Recents activity that is started from RecentsComponent. */ -public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreDrawListener { +public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreDrawListener, + ColorExtractor.OnColorsChangedListener { private final static String TAG = "RecentsActivity"; private final static boolean DEBUG = false; @@ -129,6 +133,10 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD private DozeTrigger mIterateTrigger; private final UserInteractionEvent mUserInteractionEvent = new UserInteractionEvent(); + // Theme and colors + private SysuiColorExtractor mColorExtractor; + private boolean mUsingDarkText; + /** * A common Runnable to finish Recents by launching Home with an animation depending on the * last activity launch state. Generally we always launch home when we exit Recents rather than @@ -329,6 +337,14 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD mPackageMonitor = new RecentsPackageMonitor(); mPackageMonitor.register(this); + // Select theme based on wallpaper colors + mColorExtractor = Dependency.get(SysuiColorExtractor.class); + mColorExtractor.addOnColorsChangedListener(this); + mUsingDarkText = mColorExtractor.getColors(ColorExtractor.TYPE_DARK, + WallpaperManager.FLAG_SYSTEM, true).supportsDarkText(); + setTheme(mUsingDarkText ? R.style.RecentsTheme_Wallpaper_Light + : R.style.RecentsTheme_Wallpaper); + // Set the Recents layout setContentView(R.layout.recents); takeKeyEvents(true); @@ -375,13 +391,37 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD EventBus.getDefault().send(new RecentsVisibilityChangedEvent(this, true)); MetricsLogger.visible(this, MetricsEvent.OVERVIEW_ACTIVITY); - // Make sure we have the right gradient and we're listening for update events - mRecentsView.onStart(); + // Getting system scrim colors ignoring wallpaper visibility since it should never be grey. + ColorExtractor.GradientColors systemColors = mColorExtractor.getColors( + ColorExtractor.TYPE_DARK, WallpaperManager.FLAG_SYSTEM, true); + // We don't want to interpolate colors because we're defining the initial state. + // Gradient should be set/ready when you open "Recents". + mRecentsView.setScrimColors(systemColors, false); + // Notify of the next draw mRecentsView.getViewTreeObserver().addOnPreDrawListener(mRecentsDrawnEventListener); } @Override + public void onColorsChanged(ColorExtractor colorExtractor, int which) { + if ((which & WallpaperManager.FLAG_SYSTEM) != 0) { + // Recents doesn't care about the wallpaper being visible or not, it always + // wants to scrim with wallpaper colors + ColorExtractor.GradientColors colors = mColorExtractor.getColors( + WallpaperManager.FLAG_SYSTEM, + ColorExtractor.TYPE_DARK, true /* ignoreVis */); + boolean darkText = colors.supportsDarkText(); + if (darkText != mUsingDarkText) { + mUsingDarkText = darkText; + setTheme(mUsingDarkText ? R.style.RecentsTheme_Wallpaper_Light + : R.style.RecentsTheme_Wallpaper); + mRecentsView.reevaluateStyles(); + } + mRecentsView.setScrimColors(colors, true /* animated */); + } + } + + @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); @@ -483,12 +523,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD mLastConfig.orientation != newDeviceConfiguration.orientation, mLastConfig.densityDpi != newDeviceConfiguration.densityDpi, numStackTasks > 0)); - int configDiff = mLastConfig.updateFrom(newDeviceConfiguration); - - // Recreate activity if an overlay was enabled/disabled - if ((configDiff & ActivityInfo.CONFIG_ASSETS_PATHS) != 0) { - recreate(); - } + mLastConfig.updateFrom(newDeviceConfiguration); } @Override @@ -508,9 +543,6 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD MetricsLogger.hidden(this, MetricsEvent.OVERVIEW_ACTIVITY); Recents.getTaskLoader().getHighResThumbnailLoader().setVisible(false); - // We don't need to update the gradient when we're not visible - mRecentsView.onStop(); - if (!isChangingConfigurations()) { // Workaround for b/22542869, if the RecentsActivity is started again, but without going // through SystemUI, we need to reset the config launch flags to ensure that we do not diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index cfc49a80f014..86e93fdd63ad 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -952,11 +952,11 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener private GraphicBuffer drawThumbnailTransitionBitmap(Task toTask, TaskViewTransform toTransform) { SystemServicesProxy ssp = Recents.getSystemServices(); - if (toTransform != null && toTask.key != null) { + int width = (int) toTransform.rect.width(); + int height = (int) toTransform.rect.height(); + if (toTransform != null && toTask.key != null && width > 0 && height > 0) { synchronized (mHeaderBarLock) { boolean disabledInSafeMode = !toTask.isSystemApp && ssp.isInSafeMode(); - int width = (int) toTransform.rect.width(); - int height = (int) toTransform.rect.height(); mHeaderBar.onTaskViewSizeChanged(width, height); if (RecentsDebugFlags.Static.EnableTransitionThumbnailDebugMode) { return RecentsTransitionHelper.drawViewIntoGraphicBuffer(width, mTaskBarHeight, diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index 9e69b292a1a6..ccaf3cd6df52 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -21,13 +21,12 @@ import static android.app.ActivityManager.StackId.INVALID_STACK_ID; import android.animation.Animator; import android.animation.ObjectAnimator; import android.app.ActivityOptions.OnAnimationStartedListener; -import android.app.WallpaperColors; -import android.app.WallpaperManager; import android.content.Context; +import android.content.res.ColorStateList; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.PointF; import android.graphics.Rect; -import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.util.ArraySet; import android.util.AttributeSet; @@ -43,12 +42,12 @@ import android.widget.FrameLayout; import android.widget.TextView; import com.android.internal.colorextraction.ColorExtractor; +import com.android.internal.colorextraction.drawable.GradientDrawable; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.systemui.Dependency; +import com.android.settingslib.Utils; import com.android.systemui.Interpolators; import com.android.systemui.R; -import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.recents.Recents; import com.android.systemui.recents.RecentsActivity; import com.android.systemui.recents.RecentsActivityLaunchState; @@ -83,8 +82,6 @@ import com.android.systemui.stackdivider.WindowManagerProxy; import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.phone.ScrimController; -import com.android.internal.colorextraction.drawable.GradientDrawable; - import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; @@ -93,7 +90,7 @@ import java.util.List; * This view is the the top level layout that contains TaskStacks (which are laid out according * to their SpaceNode bounds. */ -public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsChangedListener { +public class RecentsView extends FrameLayout { private static final String TAG = "RecentsView"; @@ -107,6 +104,9 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC private TaskStackView mTaskStackView; private TextView mStackActionButton; private TextView mEmptyView; + private final float mStackButtonShadowRadius; + private final PointF mStackButtonShadowDistance; + private final int mStackButtonShadowColor; private boolean mAwaitingFirstLayout = true; private boolean mLastTaskLaunchedWasFreeform; @@ -117,7 +117,6 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC private float mBusynessFactor; private GradientDrawable mBackgroundScrim; - private final SysuiColorExtractor mColorExtractor; private Animator mBackgroundScrimAnimator; private RecentsTransitionHelper mTransitionHelper; @@ -148,32 +147,54 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC mFlingAnimationUtils = new FlingAnimationUtils(context, 0.3f); mBackgroundScrim = new GradientDrawable(context); mBackgroundScrim.setCallback(this); - mColorExtractor = Dependency.get(SysuiColorExtractor.class); - LayoutInflater inflater = LayoutInflater.from(context); + boolean usingDarkText = Color.luminance( + Utils.getColorAttr(mContext, R.attr.wallpaperTextColor)) < 0.5f; + LayoutInflater inflater = LayoutInflater.from(context); mEmptyView = (TextView) inflater.inflate(R.layout.recents_empty, this, false); addView(mEmptyView); - boolean usingDarkText = - Color.luminance(mEmptyView.getTextColors().getDefaultColor()) < 0.5f; if (RecentsDebugFlags.Static.EnableStackActionButton) { + if (mStackActionButton != null) { + removeView(mStackActionButton); + } mStackActionButton = (TextView) inflater.inflate(Recents.getConfiguration() .isLowRamDevice ? R.layout.recents_low_ram_stack_action_button : R.layout.recents_stack_action_button, this, false); - mStackActionButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - EventBus.getDefault().send(new DismissAllTaskViewsEvent()); - } - }); - // Disable black shadow if text color is already dark. + mStackActionButton.setOnClickListener( + v -> EventBus.getDefault().send(new DismissAllTaskViewsEvent())); + + mStackButtonShadowRadius = mStackActionButton.getShadowRadius(); + mStackButtonShadowDistance = new PointF(mStackActionButton.getShadowDx(), + mStackActionButton.getShadowDy()); + mStackButtonShadowColor = mStackActionButton.getShadowColor(); + addView(mStackActionButton); + } + + reevaluateStyles(); + } + + public void reevaluateStyles() { + int textColor = Utils.getColorAttr(mContext, R.attr.wallpaperTextColor); + boolean usingDarkText = Color.luminance(textColor) < 0.5f; + + mEmptyView.setTextColor(textColor); + mEmptyView.setCompoundDrawableTintList(new ColorStateList(new int[][]{ + {android.R.attr.state_enabled}}, new int[]{textColor})); + + if (mStackActionButton != null) { + mStackActionButton.setTextColor(textColor); + // Enable/disable shadow if text color is already dark. if (usingDarkText) { mStackActionButton.setShadowLayer(0, 0, 0, 0); + } else { + mStackActionButton.setShadowLayer(mStackButtonShadowRadius, + mStackButtonShadowDistance.x, mStackButtonShadowDistance.y, + mStackButtonShadowColor); } - addView(mStackActionButton); } // Let's also require dark status and nav bars if the text is dark @@ -372,6 +393,16 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC } } + /** + * Set the color of the scrim. + * + * @param scrimColors Colors to use. + * @param animated Interpolate colors if true. + */ + public void setScrimColors(ColorExtractor.GradientColors scrimColors, boolean animated) { + mBackgroundScrim.setColors(scrimColors, animated); + } + @Override protected void onAttachedToWindow() { EventBus.getDefault().register(this, RecentsActivity.EVENT_BUS_PRIORITY + 1); @@ -936,29 +967,4 @@ public class RecentsView extends FrameLayout implements ColorExtractor.OnColorsC mTaskStackView.dump(innerPrefix, writer); } } - - @Override - public void onColorsChanged(ColorExtractor colorExtractor, int which) { - if ((which & WallpaperManager.FLAG_SYSTEM) != 0) { - // Recents doesn't care about the wallpaper being visible or not, it always - // wants to scrim with wallpaper colors - mBackgroundScrim.setColors( - mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM, - ColorExtractor.TYPE_DARK, true)); - } - } - - public void onStart() { - mColorExtractor.addOnColorsChangedListener(this); - // Getting system scrim colors ignoring wallpaper visibility since it should never be grey. - ColorExtractor.GradientColors systemColors = mColorExtractor.getColors( - ColorExtractor.TYPE_DARK, WallpaperManager.FLAG_SYSTEM, true); - // We don't want to interpolate colors because we're defining the initial state. - // Gradient should be set/ready when you open "Recents". - mBackgroundScrim.setColors(systemColors, false); - } - - public void onStop() { - mColorExtractor.removeOnColorsChangedListener(this); - } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java index b27924626b2d..d810ea4b3b1c 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java @@ -23,6 +23,7 @@ import android.content.res.Resources; import android.graphics.Path; import android.graphics.Rect; import android.util.ArraySet; +import android.util.Log; import android.util.MutableFloat; import android.util.SparseArray; import android.util.SparseIntArray; @@ -487,6 +488,13 @@ public class TaskStackLayoutAlgorithm { int height = mStackRect.height() - mInitialTopOffset - mStackBottomOffset; mTaskRect.set(mStackRect.left, mStackRect.top, mStackRect.right, mStackRect.top + height); + if (mTaskRect.width() <= 0 || mTaskRect.height() <= 0) { + // Logging for b/36654830 + Log.e(TAG, "Invalid task rect: taskRect=" + mTaskRect + " stackRect=" + mStackRect + + " displayRect=" + displayRect + " windowRect=" + windowRect + + " taskStackBounds=" + taskStackBounds); + } + // Short circuit here if the stack rects haven't changed so we don't do all the work below if (!lastStackRect.equals(mStackRect)) { // Reinitialize the focused and unfocused curves diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DismissView.java b/packages/SystemUI/src/com/android/systemui/statusbar/DismissView.java index 543666407fb9..d7c6443a6c3b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/DismissView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/DismissView.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar; +import android.annotation.ColorInt; import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; @@ -46,6 +47,10 @@ public class DismissView extends StackScrollerDecorView { mDismissButton = (DismissViewButton) findContentView(); } + public void setTextColor(@ColorInt int color) { + mDismissButton.setTextColor(color); + } + public void setOnButtonClickListener(OnClickListener listener) { mContent.setOnClickListener(listener); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java b/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java index 92b0890a5d2b..58adde269758 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar; +import android.annotation.ColorInt; import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; @@ -45,6 +46,10 @@ public class EmptyShadeView extends StackScrollerDecorView { return findViewById(R.id.no_notifications); } + public void setTextColor(@ColorInt int color) { + mEmptyText.setTextColor(color); + } + @Override protected void onFinishInflate() { super.onFinishInflate(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java index e5b1afe31370..68802b9432f4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java @@ -107,7 +107,6 @@ public class NotificationData { * Resets the notification entry to be re-used. */ public void reset() { - lastFullScreenIntentLaunchTime = NOT_LAUNCHED_YET; if (row != null) { row.reset(); } @@ -122,6 +121,7 @@ public class NotificationData { } public void notifyFullScreenIntentLaunched() { + setInterruption(); lastFullScreenIntentLaunchTime = SystemClock.elapsedRealtime(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java index 1889806bf985..41db927a67bd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java @@ -78,6 +78,9 @@ public class NotificationShelf extends ActivatableNotificationView implements private boolean mNoAnimationsInThisFrame; private boolean mAnimationsEnabled = true; private boolean mShowNotificationShelf; + private boolean mVibrationOnAnimation; + private boolean mUserTouchingScreen; + private boolean mTouchActive; public NotificationShelf(Context context, AttributeSet attrs) { super(context, attrs); @@ -94,12 +97,24 @@ public class NotificationShelf extends ActivatableNotificationView implements setClipChildren(false); setClipToPadding(false); mShelfIcons.setShowAllIcons(false); + mVibrationOnAnimation = mContext.getResources().getBoolean( + R.bool.config_vibrateOnIconAnimation); + updateVibrationOnAnimation(); mViewInvertHelper = new ViewInvertHelper(mShelfIcons, NotificationPanelView.DOZE_ANIMATION_DURATION); mShelfState = new ShelfState(); initDimens(); } + private void updateVibrationOnAnimation() { + mShelfIcons.setVibrateOnAnimation(mVibrationOnAnimation && mTouchActive); + } + + public void setTouchActive(boolean touchActive) { + mTouchActive = touchActive; + updateVibrationOnAnimation(); + } + public void bind(AmbientState ambientState, NotificationStackScrollLayout hostLayout) { mAmbientState = ambientState; mHostLayout = hostLayout; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 05d47ec9af63..cc4c31326e68 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -23,11 +23,12 @@ import android.animation.ValueAnimator; import android.app.Notification; import android.content.Context; import android.content.pm.ApplicationInfo; -import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -54,9 +55,16 @@ import com.android.systemui.statusbar.notification.NotificationIconDozeHelper; import com.android.systemui.statusbar.notification.NotificationUtils; import java.text.NumberFormat; +import java.util.Arrays; public class StatusBarIconView extends AnimatedImageView { public static final int NO_COLOR = 0; + + /** + * Multiply alpha values with (1+DARK_ALPHA_BOOST) when dozing. The chosen value boosts + * everything above 30% to 50%, making it appear on 1bit color depths. + */ + private static final float DARK_ALPHA_BOOST = 0.67f; private final int ANIMATION_DURATION_FAST = 100; public static final int STATE_ICON = 0; @@ -131,6 +139,9 @@ public class StatusBarIconView extends AnimatedImageView { private final NotificationIconDozeHelper mDozer; private int mContrastedDrawableColor; private int mCachedContrastBackgroundColor = NO_COLOR; + private float[] mMatrix; + private ColorMatrixColorFilter mMatrixColorFilter; + private boolean mIsInShelf; public StatusBarIconView(Context context, String slot, StatusBarNotification sbn) { this(context, slot, sbn, false); @@ -544,14 +555,33 @@ public class StatusBarIconView extends AnimatedImageView { private void updateIconColor() { if (mCurrentSetColor != NO_COLOR) { - setImageTintList(ColorStateList.valueOf(NotificationUtils.interpolateColors( - mCurrentSetColor, Color.WHITE, mDarkAmount))); + if (mMatrixColorFilter == null) { + mMatrix = new float[4 * 5]; + mMatrixColorFilter = new ColorMatrixColorFilter(mMatrix); + } + int color = NotificationUtils.interpolateColors( + mCurrentSetColor, Color.WHITE, mDarkAmount); + updateTintMatrix(mMatrix, color, DARK_ALPHA_BOOST * mDarkAmount); + mMatrixColorFilter.setColorMatrixArray(mMatrix); + setColorFilter(mMatrixColorFilter); + invalidate(); // setColorFilter only invalidates if the filter instance changed. } else { - setImageTintList(null); mDozer.updateGrayscale(this, mDarkAmount); } } + /** + * Updates {@param array} such that it represents a matrix that changes RGB to {@param color} + * and multiplies A with 1+{@param alphaBoost}. + */ + private static void updateTintMatrix(float[] array, int color, float alphaBoost) { + Arrays.fill(array, 0); + array[4] = Color.red(color); + array[9] = Color.green(color); + array[14] = Color.blue(color); + array[18] = 1 + alphaBoost; + } + public void setIconColor(int iconColor, boolean animate) { if (mIconColor != iconColor) { mIconColor = iconColor; @@ -766,6 +796,14 @@ public class StatusBarIconView extends AnimatedImageView { } } + public void setIsInShelf(boolean isInShelf) { + mIsInShelf = isInShelf; + } + + public boolean isInShelf() { + return mIsInShelf; + } + public interface OnVisibilityChangedListener { void onVisibilityChanged(int newVisibility); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java index 9338887098eb..6060134de6da 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/FullscreenUserSwitcher.java @@ -74,6 +74,15 @@ public class FullscreenUserSwitcher { automaticallySelectUser(); }); + // Any interaction with the screen should cancel the timer. + mContainer.setOnClickListener(v -> { + cancelTimer(); + }); + mUserGridView.setOnTouchListener((v, e) -> { + cancelTimer(); + return false; + }); + mSwitchingUsers = mParent.findViewById(R.id.switching_users); } @@ -152,6 +161,7 @@ public class FullscreenUserSwitcher { if (mTimer != null) { mTimer.cancel(); mTimer = null; + mProgressBar.setProgress(0, true /* animate */); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java index 2dc467f2add1..2283c130190c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java @@ -322,7 +322,7 @@ public class DozeScrimController { mHandler.removeCallbacks(mPulseOutExtended); if (DEBUG) Log.d(TAG, "Pulse out, mDozing=" + mDozing); if (!mDozing) return; - startScrimAnimation(true /* inFront */, mDozeParameters.getAlwaysOn() ? 0 : 1, + startScrimAnimation(true /* inFront */, 1, mDozeParameters.getPulseOutDuration(), Interpolators.ALPHA_IN, mPulseOutFinished); } @@ -336,6 +336,9 @@ public class DozeScrimController { // Signal that the pulse is all finished so we can turn the screen off now. pulseFinished(); + if (mDozeParameters.getAlwaysOn()) { + mScrimController.setDozeInFrontAlpha(0); + } } }; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java index b4fe900e5320..02202cf26c38 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java @@ -166,14 +166,6 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { } mHandler.postDelayed(mReleaseFingerprintWakeLockRunnable, FINGERPRINT_WAKELOCK_TIMEOUT_MS); - - if (pulsingOrAod()) { - // If we are waking the device up while we are pulsing the clock and the - // notifications would light up first, creating an unpleasant animation. - // Defer changing the screen brightness by forcing doze brightness on our window - // until the clock and the notifications are faded out. - mStatusBarWindowManager.setForceDozeBrightness(true); - } } Trace.endSection(); } @@ -194,6 +186,13 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { } boolean wasDeviceInteractive = mUpdateMonitor.isDeviceInteractive(); mMode = calculateMode(); + if (mMode == MODE_WAKE_AND_UNLOCK_PULSING && pulsingOrAod()) { + // If we are waking the device up while we are pulsing the clock and the + // notifications would light up first, creating an unpleasant animation. + // Defer changing the screen brightness by forcing doze brightness on our window + // until the clock and the notifications are faded out. + mStatusBarWindowManager.setForceDozeBrightness(true); + } if (!wasDeviceInteractive) { if (DEBUG_FP_WAKELOCK) { Log.i(TAG, "fp wakelock: Authenticated, waking up..."); @@ -244,9 +243,6 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { case MODE_NONE: break; } - if (mMode != MODE_WAKE_AND_UNLOCK_PULSING) { - mStatusBarWindowManager.setForceDozeBrightness(false); - } mStatusBar.notifyFpAuthModeChanged(); Trace.endSection(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java index 95f32bb1d07b..49bac99e9f92 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java @@ -249,6 +249,7 @@ public class KeyguardBouncer { mKeyguardView.setViewMediatorCallback(mCallback); mContainer.addView(mRoot, mContainer.getChildCount()); mRoot.setVisibility(View.INVISIBLE); + mRoot.dispatchApplyWindowInsets(mRoot.getRootWindowInsets()); } protected void removeView() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index bccc5d5d5fa1..c24129079d4f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -178,7 +178,7 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange : 0); setRestingAlpha( anyFingerprintIcon ? 1f : KeyguardAffordanceHelper.SWIPE_RESTING_ALPHA_AMOUNT); - setImageDrawable(icon); + setImageDrawable(icon, false); mHasFingerPrintIcon = anyFingerprintIcon; if (animation != null && isAnim) { animation.forceAnimationOnUI(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 03dd41ff1ae0..57c88275113c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -59,6 +59,7 @@ import com.android.systemui.statusbar.policy.KeyButtonDrawable; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.util.function.Consumer; public class NavigationBarView extends FrameLayout implements PluginListener<NavGesture> { final static boolean DEBUG = false; @@ -316,7 +317,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav mDockedIcon = getDrawable(ctx, R.drawable.ic_sysbar_docked, R.drawable.ic_sysbar_docked_dark); } - if (oldConfig.densityDpi != newConfig.densityDpi) { + if (oldConfig.densityDpi != newConfig.densityDpi + || oldConfig.getLayoutDirection() != newConfig.getLayoutDirection()) { mBackIcon = getDrawable(ctx, R.drawable.ic_sysbar_back, R.drawable.ic_sysbar_back_dark); mBackLandIcon = mBackIcon; mBackAltIcon = getDrawable(ctx, @@ -562,10 +564,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener); - DockedStackExistsListener.register(exists -> mHandler.post(() -> { - mDockedStackExists = exists; - updateRecentsIcon(); - })); + DockedStackExistsListener.register(mDockedListener); updateRotatedViews(); } @@ -574,15 +573,16 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav mRotatedViews[Surface.ROTATION_180] = findViewById(R.id.rot0); mRotatedViews[Surface.ROTATION_270] = mRotatedViews[Surface.ROTATION_90] = findViewById(R.id.rot90); + + updateCurrentView(); } public boolean needsReorient(int rotation) { return mCurrentRotation != rotation; } - private boolean updateCurrentView() { + private void updateCurrentView() { final int rot = mDisplay.getRotation(); - if (rot == mCurrentRotation) return false; for (int i=0; i<4; i++) { mRotatedViews[i].setVisibility(View.GONE); } @@ -594,7 +594,6 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav } updateLayoutTransitionsEnabled(); mCurrentRotation = rot; - return true; } private void updateRecentsIcon() { @@ -607,14 +606,11 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav } public void reorient() { - if (!updateCurrentView()) { - return; - } + updateCurrentView(); mDeadZone = (DeadZone) mCurrentView.findViewById(R.id.deadzone); ((NavigationBarFrame) getRootView()).setDeadZone(mDeadZone); - mDeadZone.setDisplayRotation(mCurrentRotation); // force the low profile & disabled states into compliance @@ -648,7 +644,6 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav mVertical = newVertical; //Log.v(TAG, String.format("onSizeChanged: h=%d, w=%d, vert=%s", h, w, mVertical?"y":"n")); reorient(); - getHomeButton().setVertical(mVertical); notifyVerticalChangedListener(newVertical); } @@ -669,7 +664,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav updateTaskSwitchHelper(); updateIcons(getContext(), mConfiguration, newConfig); updateRecentsIcon(); - if (uiCarModeChanged || mConfiguration.densityDpi != newConfig.densityDpi) { + if (uiCarModeChanged || mConfiguration.densityDpi != newConfig.densityDpi + || mConfiguration.getLayoutDirection() != newConfig.getLayoutDirection()) { // If car mode or density changes, we need to reset the icons. setNavigationIconHints(mNavigationIconHints, true); } @@ -837,4 +833,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav void onVerticalChanged(boolean isVertical); } + private final Consumer<Boolean> mDockedListener = exists -> mHandler.post(() -> { + mDockedStackExists = exists; + updateRecentsIcon(); + }); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java index 38c8d31e0970..e0d9748c48bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java @@ -22,6 +22,8 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.Icon; +import android.os.VibrationEffect; +import android.os.Vibrator; import android.support.v4.util.ArrayMap; import android.support.v4.util.ArraySet; import android.util.AttributeSet; @@ -122,6 +124,8 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { private float mVisualOverflowAdaption; private boolean mDisallowNextAnimation; private boolean mAnimationsEnabled = true; + private boolean mVibrateOnAnimation; + private Vibrator mVibrator; private ArrayMap<String, ArrayList<StatusBarIcon>> mReplacingIcons; private int mDarkOffsetX; @@ -129,6 +133,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { super(context, attrs); initDimens(); setWillNotDraw(!DEBUG); + mVibrator = mContext.getSystemService(Vibrator.class); } private void initDimens() { @@ -499,6 +504,10 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { return width - (getWidth() - getActualPaddingStart() - getActualPaddingEnd()) > 0; } + public void setVibrateOnAnimation(boolean vibrateOnAnimation) { + mVibrateOnAnimation = vibrateOnAnimation; + } + public int getIconSize() { return mIconSize; } @@ -611,6 +620,13 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { } else { super.applyToView(view); } + boolean wasInShelf = icon.isInShelf(); + boolean inShelf = iconAppearAmount == 1.0f; + icon.setIsInShelf(inShelf); + if (mVibrateOnAnimation && !justAdded && mAnimationsEnabled + && wasInShelf != inShelf) { + mVibrator.vibrate(VibrationEffect.get(VibrationEffect.EFFECT_TICK)); + } } justAdded = false; justReplaced = false; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index 4ffc15fb3d4a..04be35789807 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -231,6 +231,7 @@ public class NotificationPanelView extends PanelView implements private int mAmbientIndicationBottomPadding; private boolean mIsFullWidth; private float mDarkAmount; + private float mDarkAmountTarget; private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger(); private boolean mNoVisibleNotifications = true; private ValueAnimator mDarkAnimator; @@ -2578,8 +2579,13 @@ public class NotificationPanelView extends PanelView implements return; } if (mDarkAnimator != null && mDarkAnimator.isRunning()) { - mDarkAnimator.cancel(); + if (animate && mDarkAmountTarget == darkAmount) { + return; + } else { + mDarkAnimator.cancel(); + } } + mDarkAmountTarget = darkAmount; if (animate) { mDarkAnimator = ObjectAnimator.ofFloat(this, SET_DARK_AMOUNT_PROPERTY, darkAmount); mDarkAnimator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java index 16d85bec4829..d3ee55098474 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -24,6 +24,8 @@ import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.os.SystemClock; +import android.os.VibrationEffect; +import android.os.Vibrator; import android.util.AttributeSet; import android.util.Log; import android.view.InputDevice; @@ -98,6 +100,7 @@ public abstract class PanelView extends FrameLayout { private FlingAnimationUtils mFlingAnimationUtilsClosing; private FlingAnimationUtils mFlingAnimationUtilsDismissing; private FalsingManager mFalsingManager; + private final Vibrator mVibrator; /** * Whether an instant expand request is currently pending and we are just waiting for layout. @@ -199,6 +202,7 @@ public abstract class PanelView extends FrameLayout { mFalsingManager = FalsingManager.getInstance(context); mNotificationsDragEnabled = getResources().getBoolean(R.bool.config_enableNotificationShadeDrag); + mVibrator = mContext.getSystemService(Vibrator.class); } protected void loadDimens() { @@ -390,6 +394,7 @@ public abstract class PanelView extends FrameLayout { runPeekAnimation(INITIAL_OPENING_PEEK_DURATION, getOpeningHeight(), false /* collapseWhenFinished */); notifyBarPanelExpansionChanged(); + mVibrator.vibrate(VibrationEffect.get(VibrationEffect.EFFECT_CLICK)); } protected abstract float getOpeningHeight(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index 6cdb75706003..4ae13936d1eb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -196,8 +196,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, } // TTY status - mIconController.setIcon(mSlotTty, R.drawable.stat_sys_tty_mode, null); - mIconController.setIconVisibility(mSlotTty, false); + updateTTY(); // bluetooth status updateBluetooth(); @@ -419,9 +418,17 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mIconController.setIconVisibility(mSlotBluetooth, bluetoothEnabled); } - private final void updateTTY(Intent intent) { - int currentTtyMode = intent.getIntExtra(TelecomManager.EXTRA_CURRENT_TTY_MODE, - TelecomManager.TTY_MODE_OFF); + private final void updateTTY() { + TelecomManager telecomManager = + (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE); + if (telecomManager == null) { + updateTTY(TelecomManager.TTY_MODE_OFF); + } else { + updateTTY(telecomManager.getCurrentTtyMode()); + } + } + + private final void updateTTY(int currentTtyMode) { boolean enabled = currentTtyMode != TelecomManager.TTY_MODE_OFF; if (DEBUG) Log.v(TAG, "updateTTY: enabled: " + enabled); @@ -755,7 +762,8 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { updateSimState(intent); } else if (action.equals(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED)) { - updateTTY(intent); + updateTTY(intent.getIntExtra(TelecomManager.EXTRA_CURRENT_TTY_MODE, + TelecomManager.TTY_MODE_OFF)); } else if (action.equals(Intent.ACTION_MANAGED_PROFILE_AVAILABLE) || action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE) || action.equals(Intent.ACTION_MANAGED_PROFILE_REMOVED)) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 62d4b736d93a..f9dd8bf5b202 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -25,6 +25,7 @@ import android.content.Context; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.os.Trace; import android.util.MathUtils; import android.view.View; import android.view.ViewGroup; @@ -36,6 +37,7 @@ import android.view.animation.PathInterpolator; import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.internal.colorextraction.ColorExtractor.OnColorsChangedListener; +import com.android.internal.graphics.ColorUtils; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dependency; import com.android.systemui.R; @@ -46,6 +48,8 @@ import com.android.systemui.statusbar.ScrimView; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.statusbar.stack.ViewState; +import java.util.function.Consumer; + /** * Controls both the scrim behind the notifications and in front of the notifications (when a * security method gets shown). @@ -85,6 +89,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, private boolean mNeedsDrawableColorUpdate; protected float mScrimBehindAlpha; + protected float mScrimBehindAlphaResValue; protected float mScrimBehindAlphaKeyguard = SCRIM_BEHIND_ALPHA_KEYGUARD; protected float mScrimBehindAlphaUnlocking = SCRIM_BEHIND_ALPHA_UNLOCKING; @@ -125,17 +130,24 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, private boolean mWakingUpFromAodInProgress; /** Wake up from AOD transition is animating; need to reset when animation finishes */ private boolean mWakingUpFromAodAnimationRunning; + private boolean mScrimsVisble; + private final Consumer<Boolean> mScrimVisibleListener; public ScrimController(LightBarController lightBarController, ScrimView scrimBehind, - ScrimView scrimInFront, View headsUpScrim) { + ScrimView scrimInFront, View headsUpScrim, + Consumer<Boolean> scrimVisibleListener) { mScrimBehind = scrimBehind; mScrimInFront = scrimInFront; mHeadsUpScrim = headsUpScrim; + mScrimVisibleListener = scrimVisibleListener; final Context context = scrimBehind.getContext(); mUnlockMethodCache = UnlockMethodCache.getInstance(context); mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(context); mLightBarController = lightBarController; - mScrimBehindAlpha = context.getResources().getFloat(R.dimen.scrim_behind_alpha); + mScrimBehindAlphaResValue = context.getResources().getFloat(R.dimen.scrim_behind_alpha); + // Scrim alpha is initially set to the value on the resource but might be changed + // to make sure that text on top of it is legible. + mScrimBehindAlpha = mScrimBehindAlphaResValue; mColorExtractor = Dependency.get(SysuiColorExtractor.class); mColorExtractor.addOnColorsChangedListener(this); @@ -192,7 +204,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, scheduleUpdate(); } + /** Prepares the wakeUpFromAod animation (while turning on screen); Forces black scrims. */ public void prepareWakeUpFromAod() { + if (mWakingUpFromAodInProgress) { + return; + } mWakingUpFromAodInProgress = true; mWakingUpFromAodStarting = true; mAnimateChange = false; @@ -200,10 +216,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, onPreDraw(); } + /** Starts the wakeUpFromAod animation (once screen is on); animate to transparent scrims. */ public void wakeUpFromAod() { if (mWakeAndUnlocking || mAnimateKeyguardFadingOut) { // Wake and unlocking has a separate transition that must not be interfered with. mWakingUpFromAodStarting = false; + mWakingUpFromAodInProgress = false; return; } if (mWakingUpFromAodStarting) { @@ -218,6 +236,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mWakeAndUnlocking = true; mAnimatingDozeUnlock = true; mWakingUpFromAodStarting = false; + mWakingUpFromAodInProgress = false; scheduleUpdate(); } @@ -328,21 +347,30 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, } protected void updateScrims() { - - // Make sure we have the right gradients + // Make sure we have the right gradients and their opacities will satisfy GAR. if (mNeedsDrawableColorUpdate) { mNeedsDrawableColorUpdate = false; + final GradientColors currentScrimColors; if (mKeyguardShowing) { // Always animate color changes if we're seeing the keyguard mScrimInFront.setColors(mLockColors, true /* animated */); mScrimBehind.setColors(mLockColors, true /* animated */); + currentScrimColors = mLockColors; } else { // Only animate scrim color if the scrim view is actually visible boolean animateScrimInFront = mScrimInFront.getViewAlpha() != 0; boolean animateScrimBehind = mScrimBehind.getViewAlpha() != 0; mScrimInFront.setColors(mSystemColors, animateScrimInFront); mScrimBehind.setColors(mSystemColors, animateScrimBehind); + currentScrimColors = mSystemColors; } + + // Calculate minimum scrim opacity for white or black text. + int textColor = currentScrimColors.supportsDarkText() ? Color.BLACK : Color.WHITE; + int mainColor = currentScrimColors.getMainColor(); + float minOpacity = ColorUtils.calculateMinimumBackgroundAlpha(textColor, mainColor, + 4.5f /* minimumContrast */) / 255f; + mScrimBehindAlpha = Math.max(mScrimBehindAlphaResValue, minOpacity); mLightBarController.setScrimColor(mScrimInFront.getColors()); } @@ -351,7 +379,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, setScrimBehindAlpha(0f); } else if (mWakeAndUnlocking) { // During wake and unlock, we first hide everything behind a black scrim, which then - // gets faded out from animateKeyguardFadingOut. + // gets faded out from animateKeyguardFadingOut. This must never be animated. + mAnimateChange = false; if (mDozing) { setScrimInFrontAlpha(0f); setScrimBehindAlpha(1f); @@ -359,13 +388,24 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, setScrimInFrontAlpha(1f); setScrimBehindAlpha(0f); } - } else if (!mKeyguardShowing && !mBouncerShowing) { + } else if (!mKeyguardShowing && !mBouncerShowing && !mWakingUpFromAodStarting) { updateScrimNormal(); setScrimInFrontAlpha(0); } else { updateScrimKeyguard(); } mAnimateChange = false; + dispatchScrimsVisible(); + } + + private void dispatchScrimsVisible() { + boolean scrimsVisible = mScrimBehind.getViewAlpha() > 0 || mScrimInFront.getViewAlpha() > 0; + + if (mScrimsVisble != scrimsVisible) { + mScrimsVisble = scrimsVisible; + + mScrimVisibleListener.accept(scrimsVisible); + } } private void updateScrimKeyguard() { @@ -457,6 +497,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, alpha = Math.max(0, Math.min(1.0f, alpha)); scrimView.setViewAlpha(alpha); + Trace.traceCounter(Trace.TRACE_TAG_APP, + scrim == mScrimInFront ? "front_scrim_alpha" : "back_scrim_alpha", + (int) (alpha * 255)); + int dozeTint = Color.TRANSPARENT; boolean dozing = mAnimatingDozeUnlock || mDozing; @@ -464,6 +508,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, if (dozing || frontScrimDozing && scrim == mScrimInFront) { dozeTint = Color.BLACK; } + Trace.traceCounter(Trace.TRACE_TAG_APP, + scrim == mScrimInFront ? "front_scrim_tint" : "back_scrim_tint", + dozeTint == Color.BLACK ? 1 : 0); + scrimView.setTint(dozeTint); } else { scrim.setAlpha(alpha1); @@ -477,6 +525,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, float alpha = (float) animation.getAnimatedValue(); setCurrentScrimAlpha(scrim, alpha); updateScrimColor(scrim); + dispatchScrimsVisible(); }); anim.setInterpolator(getInterpolator()); anim.setStartDelay(mAnimationDelay); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 5033c4036479..ab021b49c6a8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -119,6 +119,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.view.Display; +import android.view.HapticFeedbackConstants; import android.view.IWindowManager; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -640,6 +641,15 @@ public class StatusBar extends SystemUI implements DemoMode, // Fingerprint (as computed by getLoggingFingerprint() of the last logged state. private int mLastLoggedStateFingerprint; + public boolean isStartedGoingToSleep() { + return mStartedGoingToSleep; + } + + /** + * If set, the device has started going to sleep but isn't fully non-interactive yet. + */ + protected boolean mStartedGoingToSleep; + private final OnChildLocationsChangedListener mNotificationLocationsChangedListener = new OnChildLocationsChangedListener() { @Override @@ -981,9 +991,6 @@ public class StatusBar extends SystemUI implements DemoMode, Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(this); Dependency.get(ConfigurationController.class).addCallback(this); - - // Make sure that we're using the correct theme - onOverlayChanged(); } protected void createIconController() { @@ -996,6 +1003,7 @@ public class StatusBar extends SystemUI implements DemoMode, final Context context = mContext; updateDisplaySize(); // populates mDisplayMetrics updateResources(); + updateTheme(); inflateStatusBarWindow(context); mStatusBarWindow.setService(this); @@ -1125,7 +1133,12 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimView scrimInFront = (ScrimView) mStatusBarWindow.findViewById(R.id.scrim_in_front); View headsUpScrim = mStatusBarWindow.findViewById(R.id.heads_up_scrim); mScrimController = SystemUIFactory.getInstance().createScrimController(mLightBarController, - scrimBehind, scrimInFront, headsUpScrim, mLockscreenWallpaper); + scrimBehind, scrimInFront, headsUpScrim, mLockscreenWallpaper, + scrimsVisible -> { + if (mStatusBarWindowManager != null) { + mStatusBarWindowManager.setScrimsVisible(scrimsVisible); + } + }); if (mScrimSrcModeEnabled) { Runnable runnable = new Runnable() { @Override @@ -1204,7 +1217,6 @@ public class StatusBar extends SystemUI implements DemoMode, }); } - PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); if (!pm.isScreenOn()) { mBroadcastReceiver.onReceive(mContext, new Intent(Intent.ACTION_SCREEN_OFF)); @@ -1309,14 +1321,14 @@ public class StatusBar extends SystemUI implements DemoMode, reevaluateStyles(); } - public void onOverlayChanged() { + private void reinflateViews() { reevaluateStyles(); // Clock and bottom icons mNotificationPanel.onOverlayChanged(); - + // The status bar on the keyguard is a special layout. + mKeyguardStatusBar.onOverlayChanged(); // Recreate Indication controller because internal references changed - // TODO: unregister callbacks before recreating mKeyguardIndicationController = SystemUIFactory.getInstance().createKeyguardIndicationController(mContext, mStatusBarWindow.findViewById(R.id.keyguard_indication_area), @@ -2864,17 +2876,6 @@ public class StatusBar extends SystemUI implements DemoMode, updateTheme(); } - public boolean isUsingDarkText() { - OverlayInfo themeInfo = null; - try { - themeInfo = mOverlayManager.getOverlayInfo("com.android.systemui.theme.lightwallpaper", - mCurrentUserId); - } catch (RemoteException e) { - e.printStackTrace(); - } - return themeInfo != null && themeInfo.isEnabled(); - } - public boolean isUsingDarkTheme() { OverlayInfo themeInfo = null; try { @@ -3524,6 +3525,14 @@ public class StatusBar extends SystemUI implements DemoMode, pw.print (" "); mStackScroller.dump(fd, pw, args); } + pw.println(" Theme:"); + if (mOverlayManager == null) { + pw.println(" overlay manager not initialized!"); + } else { + pw.println(" dark overlay on: " + isUsingDarkTheme()); + } + final boolean lightWpTheme = mContext.getThemeResId() == R.style.Theme_SystemUI_Light; + pw.println(" light wallpaper theme: " + lightWpTheme); DozeLog.dump(pw); @@ -3727,7 +3736,6 @@ public class StatusBar extends SystemUI implements DemoMode, } } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { - notifyHeadsUpScreenOff(); finishBarAnimations(); resetUserExpandedStates(); } @@ -4582,24 +4590,13 @@ public class StatusBar extends SystemUI implements DemoMode, * Switches theme from light to dark and vice-versa. */ private void updateTheme() { + final boolean inflated = mStackScroller != null; - int which; - if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) { - which = WallpaperManager.FLAG_LOCK; - } else { - which = WallpaperManager.FLAG_SYSTEM; - } - - // Gradient defines if text color should be light or dark. - final boolean useDarkText = mColorExtractor.getColors(which, true /* ignoreVisibility */) - .supportsDarkText(); - // And wallpaper defines if QS should be light or dark. + // The system wallpaper defines if QS should be light or dark. WallpaperColors systemColors = mColorExtractor .getWallpaperColors(WallpaperManager.FLAG_SYSTEM); final boolean useDarkTheme = systemColors != null && (systemColors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0; - - // Enable/disable dark UI. if (isUsingDarkTheme() != useDarkTheme) { try { mOverlayManager.setEnabled("com.android.systemui.theme.dark", @@ -4608,21 +4605,37 @@ public class StatusBar extends SystemUI implements DemoMode, Log.w(TAG, "Can't change theme", e); } } - // Enable/disable dark text overlay. - if (isUsingDarkText() != useDarkText) { - try { - mOverlayManager.setEnabled("com.android.systemui.theme.lightwallpaper", - useDarkText, mCurrentUserId); - } catch (RemoteException e) { - Log.w(TAG, "Can't change theme", e); + + // Lock wallpaper defines the color of the majority of the views, hence we'll use it + // to set our default theme. + final boolean lockDarkText = mColorExtractor.getColors(WallpaperManager.FLAG_LOCK, true + /* ignoreVisibility */).supportsDarkText(); + final int themeResId = lockDarkText ? R.style.Theme_SystemUI_Light : R.style.Theme_SystemUI; + if (mContext.getThemeResId() != themeResId) { + mContext.setTheme(themeResId); + if (inflated) { + reinflateViews(); } } - // Make sure we have the correct navbar/statusbar colors. - mStatusBarWindowManager.setKeyguardDark(useDarkText); + if (inflated) { + int which; + if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) { + which = WallpaperManager.FLAG_LOCK; + } else { + which = WallpaperManager.FLAG_SYSTEM; + } + final boolean useDarkText = mColorExtractor.getColors(which, + true /* ignoreVisibility */).supportsDarkText(); + mStackScroller.updateDecorViews(useDarkText); + + // Make sure we have the correct navbar/statusbar colors. + mStatusBarWindowManager.setKeyguardDark(useDarkText); + } } private void updateDozingState() { + Trace.traceCounter(Trace.TRACE_TAG_APP, "dozing", mDozing ? 1 : 0); Trace.beginSection("StatusBar#updateDozingState"); boolean animate = !mDozing && mDozeServiceHost.shouldAnimateWakeup(); mNotificationPanel.setDozing(mDozing, animate); @@ -4726,6 +4739,7 @@ public class StatusBar extends SystemUI implements DemoMode, // Make our window larger and the panel expanded. makeExpandedVisible(true); mNotificationPanel.expand(false /* animate */); + recomputeDisableFlags(false /* animate */); } private void instantCollapseNotificationPanel() { @@ -5127,6 +5141,7 @@ public class StatusBar extends SystemUI implements DemoMode, recomputeDisableFlags(true /* animate */); } + WakefulnessLifecycle.Observer mWakefulnessObserver = new WakefulnessLifecycle.Observer() { @Override public void onFinishedGoingToSleep() { @@ -5161,11 +5176,20 @@ public class StatusBar extends SystemUI implements DemoMode, } @Override + public void onStartedGoingToSleep() { + notifyHeadsUpGoingToSleep(); + dismissVolumeDialog(); + } + + @Override public void onStartedWakingUp() { mDeviceInteractive = true; mStackScroller.setAnimationsEnabled(true); mVisualStabilityManager.setScreenOn(true); mNotificationPanel.setTouchDisabled(false); + + maybePrepareWakeUpFromAod(); + mDozeServiceHost.stopDozing(); updateVisibleToUser(); updateIsKeyguard(); @@ -5178,11 +5202,7 @@ public class StatusBar extends SystemUI implements DemoMode, mFalsingManager.onScreenTurningOn(); mNotificationPanel.onScreenTurningOn(); - int wakefulness = mWakefulnessLifecycle.getWakefulness(); - if (mDozing && (wakefulness == WAKEFULNESS_WAKING - || wakefulness == WAKEFULNESS_ASLEEP) && !isPulsing()) { - mScrimController.prepareWakeUpFromAod(); - } + maybePrepareWakeUpFromAod(); if (mLaunchCameraOnScreenTurningOn) { mNotificationPanel.launchCamera(false, mLastCameraLaunchSource); @@ -5207,6 +5227,18 @@ public class StatusBar extends SystemUI implements DemoMode, } }; + public int getWakefulnessState() { + return mWakefulnessLifecycle.getWakefulness(); + } + + private void maybePrepareWakeUpFromAod() { + int wakefulness = mWakefulnessLifecycle.getWakefulness(); + if (mDozing && (wakefulness == WAKEFULNESS_WAKING + || wakefulness == WAKEFULNESS_ASLEEP) && !isPulsing()) { + mScrimController.prepareWakeUpFromAod(); + } + } + private void vibrateForCameraGesture() { // Make sure to pass -1 for repeat so VibratorService doesn't stop us when going to sleep. mVibrator.vibrate(mCameraLaunchGestureVibePattern, -1 /* repeat */); @@ -5363,6 +5395,7 @@ public class StatusBar extends SystemUI implements DemoMode, private final class DozeServiceHost implements DozeHost { private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>(); private boolean mAnimateWakeup; + private boolean mIgnoreTouchWhilePulsing; @Override public String toString() { @@ -5433,6 +5466,7 @@ public class StatusBar extends SystemUI implements DemoMode, mStackScroller.setPulsing(pulsing); mNotificationPanel.setPulsing(pulsing != null); mVisualStabilityManager.setPulsing(pulsing != null); + mIgnoreTouchWhilePulsing = false; } }, reason); } @@ -5447,6 +5481,17 @@ public class StatusBar extends SystemUI implements DemoMode, } @Override + public void onIgnoreTouchWhilePulsing(boolean ignore) { + if (ignore != mIgnoreTouchWhilePulsing) { + DozeLog.tracePulseTouchDisabledByProx(mContext, ignore); + } + mIgnoreTouchWhilePulsing = ignore; + if (isDozing() && ignore) { + mStatusBarWindow.cancelCurrentTouch(); + } + } + + @Override public void dozeTimeTick() { mNotificationPanel.refreshTime(); } @@ -5494,6 +5539,11 @@ public class StatusBar extends SystemUI implements DemoMode, @Override public void setAnimateWakeup(boolean animateWakeup) { + if (mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_AWAKE + || mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_WAKING) { + // Too late to change the wakeup animation. + return; + } mAnimateWakeup = animateWakeup; } @@ -5538,6 +5588,10 @@ public class StatusBar extends SystemUI implements DemoMode, } } + public boolean shouldIgnoreTouch() { + return isDozing() && mDozeServiceHost.mIgnoreTouchWhilePulsing; + } + // Begin Extra BaseStatusBar methods. protected CommandQueue mCommandQueue; @@ -6349,6 +6403,7 @@ public class StatusBar extends SystemUI implements DemoMode, if (row.isDark()) { return false; } + v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); if (row.areGutsExposed()) { closeAndSaveGuts(false /* removeLeavebehind */, false /* force */, true /* removeControls */, -1 /* x */, -1 /* y */, @@ -6831,7 +6886,6 @@ public class StatusBar extends SystemUI implements DemoMode, } }); - final boolean keyguardShowing = mStatusBarKeyguardViewManager.isShowing(); final boolean afterKeyguardGone = intent.isActivity() && PreviewInflater.wouldLaunchResolverActivity(mContext, intent.getIntent(), mCurrentUserId); @@ -6858,7 +6912,7 @@ public class StatusBar extends SystemUI implements DemoMode, } } final StatusBarNotification parentToCancelFinal = parentToCancel; - new Thread() { + final Runnable runnable = new Runnable() { @Override public void run() { try { @@ -6930,7 +6984,14 @@ public class StatusBar extends SystemUI implements DemoMode, }); } } - }.start(); + }; + + if (mStatusBarKeyguardViewManager.isShowing() + && mStatusBarKeyguardViewManager.isOccluded()) { + mStatusBarKeyguardViewManager.addAfterKeyguardGoneRunnable(runnable); + } else { + new Thread(runnable).start(); + } // close the shade if it was open animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, @@ -7234,7 +7295,7 @@ public class StatusBar extends SystemUI implements DemoMode, setAreThereNotifications(); } - protected void notifyHeadsUpScreenOff() { + protected void notifyHeadsUpGoingToSleep() { maybeEscalateHeadsUp(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java index debba49622ae..eaa6a33b05d7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java @@ -185,7 +185,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D private boolean isExpanded(State state) { return !state.forceCollapsed && (state.isKeyguardShowingAndNotOccluded() || state.panelVisible || state.keyguardFadingAway || state.bouncerShowing - || state.headsUpShowing); + || state.headsUpShowing || state.scrimsVisible); } private void applyFitsSystemWindows(State state) { @@ -324,6 +324,11 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D apply(mCurrentState); } + public void setScrimsVisible(boolean scrimsVisible) { + mCurrentState.scrimsVisible = scrimsVisible; + apply(mCurrentState); + } + public void setHeadsUpShowing(boolean showing) { mCurrentState.headsUpShowing = showing; apply(mCurrentState); @@ -425,6 +430,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D boolean remoteInputActive; boolean forcePluginOpen; boolean dozing; + boolean scrimsVisible; private boolean isKeyguardShowingAndNotOccluded() { return keyguardShowing && !keyguardOccluded; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java index adc33a144689..03f42a6f760d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java @@ -246,18 +246,27 @@ public class StatusBarWindowView extends FrameLayout { return false; } + public void setTouchActive(boolean touchActive) { + mTouchActive = touchActive; + mStackScrollLayout.setTouchActive(touchActive); + } + @Override public boolean dispatchTouchEvent(MotionEvent ev) { boolean isDown = ev.getActionMasked() == MotionEvent.ACTION_DOWN; + boolean isCancel = ev.getActionMasked() == MotionEvent.ACTION_CANCEL; + if (!isCancel && mService.shouldIgnoreTouch()) { + return false; + } if (isDown && mNotificationPanel.isFullyCollapsed()) { mNotificationPanel.startExpandLatencyTracking(); } if (isDown) { - mTouchActive = true; + setTouchActive(true); mTouchCancelled = false; } else if (ev.getActionMasked() == MotionEvent.ACTION_UP || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) { - mTouchActive = false; + setTouchActive(false); } if (mTouchCancelled) { return false; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java index 2783ec5d0492..7b6725bfa392 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java @@ -69,9 +69,10 @@ public class SystemUIDialog extends AlertDialog { } } - public static void applyFlags(AlertDialog dialog) { + public static AlertDialog applyFlags(AlertDialog dialog) { dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL); dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + return dialog; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java index d1e4963f18ec..c0a683734b8b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java @@ -97,8 +97,9 @@ public class AccessPointControllerImpl @Override public void scanForAccessPoints() { - if (DEBUG) Log.d(TAG, "scan!"); - mWifiTracker.forceScan(); + if (DEBUG) Log.d(TAG, "force update APs!"); + mWifiTracker.forceUpdate(); + fireAcccessPointsCallback(mWifiTracker.getAccessPoints()); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java index d652bde4f534..08ea5439f6f3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java @@ -228,7 +228,7 @@ public class KeyButtonView extends ImageView implements ButtonInterface { setPressed(false); // Always send a release ourselves because it doesn't seem to be sent elsewhere // and it feels weird to sometimes get a release haptic and other times not. - if ((SystemClock.uptimeMillis() - mDownTime) > 100) { + if ((SystemClock.uptimeMillis() - mDownTime) > 150 && !mLongClicked) { performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE); } if (mCode != 0) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 42cebe2632bb..472e30c7f6da 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -23,6 +23,7 @@ import android.animation.PropertyValuesHolder; import android.animation.TimeAnimator; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.annotation.ColorInt; import android.annotation.FloatRange; import android.annotation.Nullable; import android.content.Context; @@ -44,6 +45,7 @@ import android.util.FloatProperty; import android.util.Log; import android.util.Pair; import android.util.Property; +import android.view.ContextThemeWrapper; import android.view.InputDevice; import android.view.MotionEvent; import android.view.VelocityTracker; @@ -61,6 +63,7 @@ import android.widget.ScrollView; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.settingslib.Utils; import com.android.systemui.ExpandHelper; import com.android.systemui.Interpolators; import com.android.systemui.R; @@ -363,6 +366,7 @@ public class NotificationStackScrollLayout extends ViewGroup return object.getBackgroundFadeAmount(); } }; + private boolean mUsingLightTheme; private boolean mQsExpanded; private boolean mForwardScrollable; private boolean mBackwardScrollable; @@ -3653,6 +3657,23 @@ public class NotificationStackScrollLayout extends ViewGroup mTmpSortedChildren.clear(); } + /** + * Update colors of "dismiss" and "empty shade" views. + * + * @param lightTheme True if light theme should be used. + */ + public void updateDecorViews(boolean lightTheme) { + if (lightTheme == mUsingLightTheme) { + return; + } + mUsingLightTheme = lightTheme; + Context context = new ContextThemeWrapper(mContext, + lightTheme ? R.style.Theme_SystemUI_Light : R.style.Theme_SystemUI); + final int textColor = Utils.getColorAttr(context, R.attr.wallpaperTextColor); + mDismissView.setTextColor(textColor); + mEmptyShadeView.setTextColor(textColor); + } + public void goToFullShade(long delay) { if (mDismissView != null) { mDismissView.setInvisible(); @@ -4290,6 +4311,10 @@ public class NotificationStackScrollLayout extends ViewGroup mAmbientState.getScrollY())); } + public void setTouchActive(boolean touchActive) { + mShelf.setTouchActive(touchActive); + } + /** * A listener that is notified when some child locations might have changed. */ diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index 103eb6ec927f..ad47411554f7 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -49,6 +49,8 @@ import com.android.internal.annotations.GuardedBy; import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.SysUiServiceProvider; +import com.android.systemui.keyguard.ScreenLifecycle; +import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.plugins.VolumeDialogController; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.statusbar.phone.StatusBar; @@ -336,11 +338,17 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } } - boolean onVolumeChangedW(int stream, int flags) { + private boolean shouldShowUI(int flags) { updateStatusBar(); + return mStatusBar != null + && mStatusBar.getWakefulnessState() != WakefulnessLifecycle.WAKEFULNESS_ASLEEP + && mStatusBar.getWakefulnessState() != WakefulnessLifecycle.WAKEFULNESS_GOING_TO_SLEEP + && mStatusBar.isDeviceInteractive() + && (flags & AudioManager.FLAG_SHOW_UI) != 0; + } - final boolean showUI = (mStatusBar != null && mStatusBar.isDeviceInteractive()) && - ((flags & AudioManager.FLAG_SHOW_UI) != 0); + boolean onVolumeChangedW(int stream, int flags) { + final boolean showUI = shouldShowUI(flags); final boolean fromKey = (flags & AudioManager.FLAG_FROM_KEY) != 0; final boolean showVibrateHint = (flags & AudioManager.FLAG_SHOW_VIBRATE_HINT) != 0; final boolean showSilentHint = (flags & AudioManager.FLAG_SHOW_SILENT_HINT) != 0; @@ -905,11 +913,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa @Override public void onRemoteUpdate(Token token, String name, PlaybackInfo pi) { - if (!mRemoteStreams.containsKey(token)) { - mRemoteStreams.put(token, mNextStream); - if (D.BUG) Log.d(TAG, "onRemoteUpdate: " + name + " is stream " + mNextStream); - mNextStream++; - } + addStream(token, "onRemoteUpdate"); final int stream = mRemoteStreams.get(token); boolean changed = mState.states.indexOfKey(stream) < 0; final StreamState ss = streamStateW(stream); @@ -934,8 +938,9 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa @Override public void onRemoteVolumeChanged(Token token, int flags) { + addStream(token, "onRemoteVolumeChanged"); final int stream = mRemoteStreams.get(token); - final boolean showUI = (flags & AudioManager.FLAG_SHOW_UI) != 0; + final boolean showUI = shouldShowUI(flags); boolean changed = updateActiveStreamW(stream); if (showUI) { changed |= checkRoutedToBluetoothW(AudioManager.STREAM_MUSIC); @@ -950,6 +955,11 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa @Override public void onRemoteRemoved(Token token) { + if (!mRemoteStreams.containsKey(token)) { + if (D.BUG) Log.d(TAG, "onRemoteRemoved: stream doesn't exist, " + + "aborting remote removed for token:" + token.toString()); + return; + } final int stream = mRemoteStreams.get(token); mState.states.remove(stream); if (mState.activeStream == stream) { @@ -975,6 +985,15 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } return null; } + + private void addStream(Token token, String triggeringMethod) { + if (!mRemoteStreams.containsKey(token)) { + mRemoteStreams.put(token, mNextStream); + if (D.BUG) Log.d(TAG, triggeringMethod + ": added stream " + mNextStream + + " from token + "+ token.toString()); + mNextStream++; + } + } } public interface UserActivityListener { diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 22fb7104267c..fe3d4b7a9cdc 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -51,6 +51,7 @@ import android.util.DisplayMetrics; import android.util.Log; import android.util.Slog; import android.util.SparseBooleanArray; +import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; @@ -149,7 +150,7 @@ public class VolumeDialogImpl implements VolumeDialog, TunerService.Tunable { private TunerZenModePanel mZenPanel; public VolumeDialogImpl(Context context) { - mContext = context; + mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme); mZenModeController = Dependency.get(ZenModeController.class); mController = Dependency.get(VolumeDialogController.class); mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java index 4716552e94a1..a3aca6e1b649 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java +++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java @@ -41,6 +41,7 @@ import android.util.ArraySet; import android.util.AttributeSet; import android.util.Log; import android.util.MathUtils; +import android.util.Slog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -53,6 +54,7 @@ import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Prefs; @@ -116,8 +118,6 @@ public class ZenModePanel extends FrameLayout { private Callback mCallback; private ZenModeController mController; - private boolean mCountdownConditionSupported; - private boolean mRequestingConditions; private Condition mExitCondition; private int mBucketIndex = -1; private boolean mExpanded; @@ -126,8 +126,6 @@ public class ZenModePanel extends FrameLayout { private int mAttachedZen; private boolean mAttached; private Condition mSessionExitCondition; - private Condition[] mConditions; - private Condition mTimeCondition; private boolean mVoiceCapable; protected int mZenModeConditionLayoutId; @@ -155,8 +153,6 @@ public class ZenModePanel extends FrameLayout { public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("ZenModePanel state:"); - pw.print(" mCountdownConditionSupported="); pw.println(mCountdownConditionSupported); - pw.print(" mRequestingConditions="); pw.println(mRequestingConditions); pw.print(" mAttached="); pw.println(mAttached); pw.print(" mHidden="); pw.println(mHidden); pw.print(" mExpanded="); pw.println(mExpanded); @@ -292,7 +288,6 @@ public class ZenModePanel extends FrameLayout { private void onAttach() { setExpanded(true); - mAttached = true; mAttachedZen = mController.getZen(); ZenRule manualRule = mController.getManualRule(); mExitCondition = manualRule != null ? manualRule.condition : null; @@ -304,23 +299,26 @@ public class ZenModePanel extends FrameLayout { mController.addCallback(mZenCallback); setSessionExitCondition(copy(mExitCondition)); updateWidgets(); - setRequestingConditions(!mHidden); - ensureSelection(); + setAttached(true); } private void onDetach() { if (DEBUG) Log.d(mTag, "onDetach"); setExpanded(false); checkForAttachedZenChange(); - mAttached = false; + setAttached(false); mAttachedZen = -1; mSessionZen = -1; mController.removeCallback(mZenCallback); setSessionExitCondition(null); - setRequestingConditions(false); mTransitionHelper.clear(); } + @VisibleForTesting + void setAttached(boolean attached) { + mAttached = attached; + } + @Override public void onVisibilityAggregated(boolean isVisible) { super.onVisibilityAggregated(isVisible); @@ -342,7 +340,6 @@ public class ZenModePanel extends FrameLayout { if (mHidden == hidden) return; if (DEBUG) Log.d(mTag, "hidden=" + hidden); mHidden = hidden; - setRequestingConditions(mAttached && !mHidden); updateWidgets(); } @@ -365,29 +362,6 @@ public class ZenModePanel extends FrameLayout { fireExpanded(); } - /** Start or stop requesting relevant zen mode exit conditions */ - private void setRequestingConditions(final boolean requesting) { - if (mRequestingConditions == requesting) return; - if (DEBUG) Log.d(mTag, "setRequestingConditions " + requesting); - mRequestingConditions = requesting; - if (mRequestingConditions) { - mTimeCondition = parseExistingTimeCondition(mContext, mExitCondition); - if (mTimeCondition != null) { - mBucketIndex = -1; - } else { - mBucketIndex = DEFAULT_BUCKET_INDEX; - mTimeCondition = ZenModeConfig.toTimeCondition(mContext, - MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser()); - } - if (DEBUG) Log.d(mTag, "Initial bucket index: " + mBucketIndex); - - mConditions = null; // reset conditions - handleUpdateConditions(); - } else { - hideAllConditions(); - } - } - protected void addZenConditions(int count) { for (int i = 0; i < count; i++) { final View rb = mInflater.inflate(mZenModeButtonLayoutId, mEdit, false); @@ -401,9 +375,7 @@ public class ZenModePanel extends FrameLayout { public void init(ZenModeController controller) { mController = controller; - mCountdownConditionSupported = mController.isCountdownConditionSupported(); - final int countdownDelta = mCountdownConditionSupported ? COUNTDOWN_CONDITION_COUNT : 0; - final int minConditions = 1 /*forever*/ + countdownDelta; + final int minConditions = 1 /*forever*/ + COUNTDOWN_CONDITION_COUNT; addZenConditions(minConditions); mSessionZen = getSelectedZen(-1); handleUpdateManualRule(mController.getManualRule()); @@ -426,10 +398,6 @@ public class ZenModePanel extends FrameLayout { return isForever(condition) ? null : getConditionId(condition); } - private static boolean sameConditionId(Condition lhs, Condition rhs) { - return lhs == null ? rhs == null : rhs != null && lhs.id.equals(rhs.id); - } - private static Condition copy(Condition condition) { return condition == null ? null : condition.copy(); } @@ -438,17 +406,24 @@ public class ZenModePanel extends FrameLayout { mCallback = callback; } - private void handleUpdateManualRule(ZenRule rule) { + @VisibleForTesting + void handleUpdateManualRule(ZenRule rule) { final int zen = rule != null ? rule.zenMode : Global.ZEN_MODE_OFF; handleUpdateZen(zen); final Condition c = rule == null ? null : rule.condition != null ? rule.condition : createCondition(rule.conditionId); - handleExitConditionChanged(c); + handleUpdateConditions(c); + setExitCondition(c); } private Condition createCondition(Uri conditionId) { - if (ZenModeConfig.isValidCountdownConditionId(conditionId)) { + if (ZenModeConfig.isValidCountdownToAlarmConditionId(conditionId)) { + long time = ZenModeConfig.tryParseCountdownConditionId(conditionId); + Condition c = ZenModeConfig.toNextAlarmCondition( + mContext, time, ActivityManager.getCurrentUser()); + return c; + } else if (ZenModeConfig.isValidCountdownConditionId(conditionId)) { long time = ZenModeConfig.tryParseCountdownConditionId(conditionId); int mins = (int) ((time - System.currentTimeMillis() + DateUtils.MINUTE_IN_MILLIS / 2) / DateUtils.MINUTE_IN_MILLIS); @@ -466,48 +441,10 @@ public class ZenModePanel extends FrameLayout { } mZenButtons.setSelectedValue(zen, false /* fromClick */); updateWidgets(); - handleUpdateConditions(); - if (mExpanded) { - final Condition selected = getSelectedCondition(); - if (!Objects.equals(mExitCondition, selected)) { - select(selected); - } - } - } - - private void handleExitConditionChanged(Condition exitCondition) { - setExitCondition(exitCondition); - if (DEBUG) Log.d(mTag, "handleExitConditionChanged " + mExitCondition); - if (exitCondition == null) return; - final int N = getVisibleConditions(); - for (int i = 0; i < N; i++) { - final ConditionTag tag = getConditionTagAt(i); - if (tag != null && sameConditionId(tag.condition, mExitCondition)) { - bind(exitCondition, mZenRadioGroupContent.getChildAt(i), i); - tag.rb.setChecked(true); - return; - } - } - if (mCountdownConditionSupported && ZenModeConfig.isValidCountdownConditionId( - exitCondition.id)) { - bind(exitCondition, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX), - COUNTDOWN_CONDITION_INDEX); - getConditionTagAt(COUNTDOWN_CONDITION_INDEX).rb.setChecked(true); - } } - private Condition getSelectedCondition() { - final int N = getVisibleConditions(); - for (int i = 0; i < N; i++) { - final ConditionTag tag = getConditionTagAt(i); - if (tag != null && tag.rb.isChecked()) { - return tag.condition; - } - } - return null; - } - - private int getSelectedZen(int defValue) { + @VisibleForTesting + int getSelectedZen(int defValue) { final Object zen = mZenButtons.getSelectedValue(); return zen != null ? (Integer) zen : defValue; } @@ -575,56 +512,66 @@ public class ZenModePanel extends FrameLayout { return getResources().getString(warningRes, template); } - private static Condition parseExistingTimeCondition(Context context, Condition condition) { - if (condition == null) return null; - final long time = ZenModeConfig.tryParseCountdownConditionId(condition.id); - if (time == 0) return null; - final long now = System.currentTimeMillis(); - final long span = time - now; - if (span <= 0 || span > MAX_BUCKET_MINUTES * MINUTES_MS) return null; - return ZenModeConfig.toTimeCondition(context, - time, Math.round(span / (float) MINUTES_MS), ActivityManager.getCurrentUser(), - false /*shortVersion*/); - } - - private void handleUpdateConditions() { + @VisibleForTesting + void handleUpdateConditions(Condition c) { if (mTransitionHelper.isTransitioning()) { return; } - final int conditionCount = mConditions == null ? 0 : mConditions.length; - if (DEBUG) Log.d(mTag, "handleUpdateConditions conditionCount=" + conditionCount); // forever bind(forever(), mZenRadioGroupContent.getChildAt(FOREVER_CONDITION_INDEX), FOREVER_CONDITION_INDEX); - // countdown - if (mCountdownConditionSupported && mTimeCondition != null) { - bind(mTimeCondition, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX), - COUNTDOWN_CONDITION_INDEX); - } - // countdown until alarm - if (mCountdownConditionSupported) { - Condition nextAlarmCondition = getTimeUntilNextAlarmCondition(); - if (nextAlarmCondition != null) { - mZenRadioGroup.getChildAt( - COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(View.VISIBLE); - mZenRadioGroupContent.getChildAt( - COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(View.VISIBLE); - bind(nextAlarmCondition, - mZenRadioGroupContent.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX), - COUNTDOWN_ALARM_CONDITION_INDEX); + if (c == null) { + bindGenericCountdown(); + bindNextAlarm(getTimeUntilNextAlarmCondition()); + } else if (isForever(c)) { + getConditionTagAt(FOREVER_CONDITION_INDEX).rb.setChecked(true); + bindGenericCountdown(); + bindNextAlarm(getTimeUntilNextAlarmCondition()); + } else { + if (isAlarm(c)) { + bindGenericCountdown(); + + bindNextAlarm(c); + getConditionTagAt(COUNTDOWN_ALARM_CONDITION_INDEX).rb.setChecked(true); + } else if (isCountdown(c)) { + bindNextAlarm(getTimeUntilNextAlarmCondition()); + + bind(c, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX), + COUNTDOWN_CONDITION_INDEX); + getConditionTagAt(COUNTDOWN_CONDITION_INDEX).rb.setChecked(true); } else { - mZenRadioGroup.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(View.GONE); - mZenRadioGroupContent.getChildAt( - COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(View.GONE); + Slog.wtf(TAG, "Invalid manual condition: " + c); } } - // ensure something is selected - if (mExpanded) { - ensureSelection(); - } mZenConditions.setVisibility(mSessionZen != Global.ZEN_MODE_OFF ? View.VISIBLE : View.GONE); } + private void bindGenericCountdown() { + mBucketIndex = DEFAULT_BUCKET_INDEX; + Condition countdown = ZenModeConfig.toTimeCondition(mContext, + MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser()); + // don't change the hour condition while the user is viewing the panel + if (!mAttached || getConditionTagAt(COUNTDOWN_CONDITION_INDEX).condition == null) { + bind(countdown, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX), + COUNTDOWN_CONDITION_INDEX); + } + } + + private void bindNextAlarm(Condition c) { + View alarmContent = mZenRadioGroupContent.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX); + ConditionTag tag = (ConditionTag) alarmContent.getTag(); + // Don't change the alarm condition while the user is viewing the panel + if (c != null && (!mAttached || tag == null || tag.condition == null)) { + bind(c, alarmContent, COUNTDOWN_ALARM_CONDITION_INDEX); + } + + tag = (ConditionTag) alarmContent.getTag(); + boolean showAlarm = tag != null && tag.condition != null; + mZenRadioGroup.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility( + showAlarm ? View.VISIBLE : View.GONE); + alarmContent.setVisibility(showAlarm ? View.VISIBLE : View.GONE); + } + private Condition forever() { return new Condition(mForeverId, foreverSummary(mContext), "", "", 0 /*icon*/, Condition.STATE_TRUE, 0 /*flags*/); @@ -637,7 +584,6 @@ public class ZenModePanel extends FrameLayout { // Returns a time condition if the next alarm is within the next week. private Condition getTimeUntilNextAlarmCondition() { GregorianCalendar weekRange = new GregorianCalendar(); - final long now = weekRange.getTimeInMillis(); setToMidnight(weekRange); weekRange.add(Calendar.DATE, 6); final long nextAlarmMs = mController.getNextAlarm(); @@ -647,9 +593,8 @@ public class ZenModePanel extends FrameLayout { setToMidnight(nextAlarm); if (weekRange.compareTo(nextAlarm) >= 0) { - return ZenModeConfig.toTimeCondition(mContext, nextAlarmMs, - Math.round((nextAlarmMs - now) / (float) MINUTES_MS), - ActivityManager.getCurrentUser(), true); + return ZenModeConfig.toNextAlarmCondition(mContext, nextAlarmMs, + ActivityManager.getCurrentUser()); } } return null; @@ -662,11 +607,13 @@ public class ZenModePanel extends FrameLayout { calendar.set(Calendar.MILLISECOND, 0); } - private ConditionTag getConditionTagAt(int index) { + @VisibleForTesting + ConditionTag getConditionTagAt(int index) { return (ConditionTag) mZenRadioGroupContent.getChildAt(index).getTag(); } - private int getVisibleConditions() { + @VisibleForTesting + int getVisibleConditions() { int rt = 0; final int N = mZenRadioGroupContent.getChildCount(); for (int i = 0; i < N; i++) { @@ -682,34 +629,8 @@ public class ZenModePanel extends FrameLayout { } } - private void ensureSelection() { - // are we left without anything selected? if so, set a default - final int visibleConditions = getVisibleConditions(); - if (visibleConditions == 0) return; - for (int i = 0; i < visibleConditions; i++) { - final ConditionTag tag = getConditionTagAt(i); - if (tag != null && tag.rb.isChecked()) { - if (DEBUG) Log.d(mTag, "Not selecting a default, checked=" + tag.condition); - return; - } - } - final ConditionTag foreverTag = getConditionTagAt(FOREVER_CONDITION_INDEX); - if (foreverTag == null) return; - if (DEBUG) Log.d(mTag, "Selecting a default"); - final int favoriteIndex = mPrefs.getMinuteIndex(); - if (mExitCondition != null && mExitCondition.equals(mTimeCondition)) { - getConditionTagAt(COUNTDOWN_CONDITION_INDEX).rb.setChecked(true); - } else if (favoriteIndex == -1 || !mCountdownConditionSupported || - mAttachedZen != Global.ZEN_MODE_OFF) { - foreverTag.rb.setChecked(true); - } else { - mTimeCondition = ZenModeConfig.toTimeCondition(mContext, - MINUTE_BUCKETS[favoriteIndex], ActivityManager.getCurrentUser()); - mBucketIndex = favoriteIndex; - bind(mTimeCondition, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX), - COUNTDOWN_CONDITION_INDEX); - getConditionTagAt(COUNTDOWN_CONDITION_INDEX).rb.setChecked(true); - } + private static boolean isAlarm(Condition c) { + return c != null && ZenModeConfig.isValidCountdownToAlarmConditionId(c.id); } private static boolean isCountdown(Condition c) { @@ -877,10 +798,9 @@ public class ZenModePanel extends FrameLayout { newCondition = ZenModeConfig.toTimeCondition(mContext, MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser()); } - mTimeCondition = newCondition; - bind(mTimeCondition, row, rowId); + bind(newCondition, row, rowId); tag.rb.setChecked(true); - select(mTimeCondition); + select(newCondition); announceConditionSelection(tag); } @@ -902,7 +822,7 @@ public class ZenModePanel extends FrameLayout { setExitCondition(condition); if (realConditionId == null) { mPrefs.setMinuteIndex(-1); - } else if (isCountdown(condition) && mBucketIndex != -1) { + } else if ((isAlarm(condition) || isCountdown(condition)) && mBucketIndex != -1) { mPrefs.setMinuteIndex(mBucketIndex); } setSessionExitCondition(copy(condition)); @@ -951,7 +871,8 @@ public class ZenModePanel extends FrameLayout { } // used as the view tag on condition rows - private static class ConditionTag { + @VisibleForTesting + static class ConditionTag { RadioButton rb; View lines; TextView line1; diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java b/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java new file mode 100644 index 000000000000..5dbcd8a73aac --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/volume/ZenRadioLayout.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2017 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.systemui.volume; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +/** + * Specialized layout for zen mode that allows the radio buttons to reside within + * a RadioGroup, but also makes sure that all the heights off the radio buttons align + * with the corresponding content in the second child of this view. + */ +public class ZenRadioLayout extends LinearLayout { + + public ZenRadioLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** + * Run 2 measurement passes, 1 that figures out the size of the content, and another + * that sets the size of the radio buttons to the heights of the corresponding content. + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + ViewGroup radioGroup = (ViewGroup) getChildAt(0); + ViewGroup radioContent = (ViewGroup) getChildAt(1); + int size = radioGroup.getChildCount(); + if (size != radioContent.getChildCount()) { + throw new IllegalStateException("Expected matching children"); + } + boolean hasChanges = false; + for (int i = 0; i < size; i++) { + View radio = radioGroup.getChildAt(i); + View content = radioContent.getChildAt(i); + if (radio.getLayoutParams().height != content.getMeasuredHeight()) { + hasChanges = true; + radio.getLayoutParams().height = content.getMeasuredHeight(); + } + } + // Measure again if any heights changed. + if (hasChanges) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } +} diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml index f24e7b56bfc4..03f3c56aab73 100644 --- a/packages/SystemUI/tests/AndroidManifest.xml +++ b/packages/SystemUI/tests/AndroidManifest.xml @@ -39,6 +39,8 @@ <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.GET_APP_OPS_STATS" /> <uses-permission android:name="android.permission.BLUETOOTH" /> + <uses-permission android:name="android.permission.TRUST_LISTENER" /> + <uses-permission android:name="android.permission.USE_FINGERPRINT" /> <application> <uses-library android:name="android.test.runner" /> diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java new file mode 100644 index 000000000000..fcf327b5d1fa --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2017 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.keyguard; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import android.content.Context; +import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; +import android.test.UiThreadTest; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; + +import com.android.systemui.SysuiTestCase; + +@SmallTest +@RunWith(AndroidJUnit4.class) +public class KeyguardSecurityContainerTest extends SysuiTestCase { + + @UiThreadTest + @Test + public void showSecurityScreen_canInflateAllModes() { + KeyguardSecurityContainer keyguardSecurityContainer = + new KeyguardSecurityContainer(getContext()); + + Context context = getContext(); + + for (int theme : new int[] {R.style.Theme_SystemUI, R.style.Theme_SystemUI_Light}) { + context.setTheme(theme); + final LayoutInflater inflater = LayoutInflater.from(context); + KeyguardSecurityModel.SecurityMode[] modes = + KeyguardSecurityModel.SecurityMode.values(); + for (KeyguardSecurityModel.SecurityMode mode : modes) { + final int resId = keyguardSecurityContainer.getLayoutIdFor(mode); + if (resId == 0) { + continue; + } + inflater.inflate(resId, null /* root */, false /* attach */); + } + } + } +}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java index 641f2636c6ae..333e73dc10f4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java @@ -87,6 +87,10 @@ class DozeHostFake implements DozeHost { } @Override + public void onIgnoreTouchWhilePulsing(boolean ignore) { + } + + @Override public void abortPulsing() { pulseAborted = true; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java index 8060f5beb9b2..12e9f7c97cde 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java @@ -26,6 +26,7 @@ import android.content.Context; import android.media.AudioManager; import android.support.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.statusbar.phone.StatusBar; import org.junit.Before; @@ -48,6 +49,7 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { @Test public void testVolumeChangeW_deviceNotInteractiveAOD() { when(mStatusBar.isDeviceInteractive()).thenReturn(false); + when(mStatusBar.getWakefulnessState()).thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI); verify(mCallback, never()).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED); } @@ -55,6 +57,18 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { @Test public void testVolumeChangeW_deviceInteractive() { when(mStatusBar.isDeviceInteractive()).thenReturn(true); + when(mStatusBar.getWakefulnessState()).thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); + mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI); + verify(mCallback, times(1)).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED); + } + + @Test + public void testVolumeChangeW_deviceInteractive_StartedSleeping() { + when(mStatusBar.isDeviceInteractive()).thenReturn(true); + when(mStatusBar.getWakefulnessState()).thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); + mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI); + when(mStatusBar.isDeviceInteractive()).thenReturn(false); + when(mStatusBar.getWakefulnessState()).thenReturn(WakefulnessLifecycle.WAKEFULNESS_GOING_TO_SLEEP); mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI); verify(mCallback, times(1)).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/ZenModePanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/ZenModePanelTest.java new file mode 100644 index 000000000000..0fdbfd1944fe --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/ZenModePanelTest.java @@ -0,0 +1,217 @@ +/** + * Copyright (C) 2017 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.systemui.volume; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import android.net.Uri; +import android.provider.Settings; +import android.service.notification.Condition; +import android.service.notification.ZenModeConfig; +import android.support.test.annotation.UiThreadTest; +import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; +import android.view.LayoutInflater; + +import com.android.systemui.SysuiTestCase; +import com.android.systemui.statusbar.policy.ZenModeController; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +@SmallTest +@RunWith(AndroidJUnit4.class) +public class ZenModePanelTest extends SysuiTestCase { + + ZenModePanel mPanel; + ZenModeController mController; + Uri mForeverId; + + @Before + public void setup() throws Exception { + final LayoutInflater layoutInflater = LayoutInflater.from(mContext); + mPanel = (ZenModePanel) layoutInflater.inflate(com.android.systemui.R.layout.zen_mode_panel, + null); + mController = mock(ZenModeController.class); + mForeverId = Condition.newId(mContext).appendPath("forever").build(); + + mPanel.init(mController); + } + + private void assertProperConditionTagTypes(boolean hasAlarm) { + final int N = mPanel.getVisibleConditions(); + assertEquals(hasAlarm ? 3 : 2, N); + + assertEquals(mForeverId, mPanel.getConditionTagAt(0).condition.id); + assertTrue(ZenModeConfig.isValidCountdownConditionId( + mPanel.getConditionTagAt(1).condition.id)); + assertFalse(ZenModeConfig.isValidCountdownToAlarmConditionId( + mPanel.getConditionTagAt(1).condition.id)); + if (hasAlarm) { + assertTrue(ZenModeConfig.isValidCountdownToAlarmConditionId( + mPanel.getConditionTagAt(2).condition.id)); + } + } + + @Test + public void testHandleUpdateConditions_foreverSelected_alarmExists() { + Condition forever = new Condition(mForeverId, "", Condition.STATE_TRUE); + + when(mController.getNextAlarm()).thenReturn(System.currentTimeMillis() + 1000); + + mPanel.handleUpdateConditions(forever); + assertProperConditionTagTypes(true); + assertTrue(mPanel.getConditionTagAt(0).rb.isChecked()); + } + + @Test + public void testHandleUpdateConditions_foreverSelected_noAlarm() { + Uri foreverId = Condition.newId(mContext).appendPath("forever").build(); + Condition forever = new Condition(foreverId, "", Condition.STATE_TRUE); + + when(mController.getNextAlarm()).thenReturn((long) 0); + + mPanel.handleUpdateConditions(forever); + assertProperConditionTagTypes(false); + assertEquals(foreverId, mPanel.getConditionTagAt(0).condition.id); + } + + @Test + public void testHandleUpdateConditions_countdownSelected_alarmExists() { + Uri foreverId = Condition.newId(mContext).appendPath("forever").build(); + + Condition countdown = new Condition(ZenModeConfig.toCountdownConditionId( + System.currentTimeMillis() + (3 * 60 * 60 * 1000) + 4000, false), + "", Condition.STATE_TRUE); + + when(mController.getNextAlarm()).thenReturn(System.currentTimeMillis() + 1000); + + mPanel.handleUpdateConditions(countdown); + assertProperConditionTagTypes(true); + assertTrue(mPanel.getConditionTagAt(1).rb.isChecked()); + } + + @Test + public void testHandleUpdateConditions_countdownSelected_noAlarm() { + Uri foreverId = Condition.newId(mContext).appendPath("forever").build(); + + Condition countdown = new Condition(ZenModeConfig.toCountdownConditionId( + System.currentTimeMillis() + (3 * 60 * 60 * 1000) + 4000, false), + "", Condition.STATE_TRUE); + + when(mController.getNextAlarm()).thenReturn((long) 0); + + mPanel.handleUpdateConditions(countdown); + assertProperConditionTagTypes(false); + assertTrue(mPanel.getConditionTagAt(1).rb.isChecked()); + } + + @Test + public void testHandleUpdateConditions_nextAlarmSelected() { + Uri foreverId = Condition.newId(mContext).appendPath("forever").build(); + + Condition alarm = new Condition(ZenModeConfig.toCountdownConditionId( + System.currentTimeMillis() + 1000, true), + "", Condition.STATE_TRUE); + when(mController.getNextAlarm()).thenReturn(System.currentTimeMillis() + 9000); + + mPanel.handleUpdateConditions(alarm); + + assertProperConditionTagTypes(true); + assertEquals(alarm, mPanel.getConditionTagAt(2).condition); + assertTrue(mPanel.getConditionTagAt(2).rb.isChecked()); + } + + @Test + public void testHandleUpdateConditions_foreverSelected_alarmConditionDoesNotChangeIfAttached() { + Uri foreverId = Condition.newId(mContext).appendPath("forever").build(); + Condition forever = new Condition(foreverId, "", Condition.STATE_TRUE); + + Condition alarm = new Condition(ZenModeConfig.toCountdownConditionId( + System.currentTimeMillis() + 9000, true), + "", Condition.STATE_TRUE); + when(mController.getNextAlarm()).thenReturn(System.currentTimeMillis() + 1000); + + mPanel.handleUpdateConditions(alarm); + mPanel.setAttached(true); + mPanel.handleUpdateConditions(forever); + + assertProperConditionTagTypes(true); + assertEquals(alarm, mPanel.getConditionTagAt(2).condition); + assertTrue(mPanel.getConditionTagAt(0).rb.isChecked()); + } + + @Test + public void testHandleUpdateConditions_foreverSelected_timeConditionDoesNotChangeIfAttached() { + Uri foreverId = Condition.newId(mContext).appendPath("forever").build(); + Condition forever = new Condition(foreverId, "", Condition.STATE_TRUE); + + Condition countdown = new Condition(ZenModeConfig.toCountdownConditionId( + System.currentTimeMillis() + (3 * 60 * 60 * 1000) + 4000, false), + "", Condition.STATE_TRUE); + when(mController.getNextAlarm()).thenReturn((long) 0); + + mPanel.handleUpdateConditions(countdown); + mPanel.setAttached(true); + mPanel.handleUpdateConditions(forever); + + assertProperConditionTagTypes(false); + assertEquals(countdown, mPanel.getConditionTagAt(1).condition); + assertTrue(mPanel.getConditionTagAt(0).rb.isChecked()); + } + + @Test + @UiThreadTest + public void testHandleUpdateManualRule_stillSelectedAfterModeChange() { + ZenModeConfig.ZenRule rule = new ZenModeConfig.ZenRule(); + + Condition alarm = new Condition(ZenModeConfig.toCountdownConditionId( + System.currentTimeMillis() + 1000, true), + "", Condition.STATE_TRUE); + + rule.condition = alarm; + rule.conditionId = alarm.id; + rule.enabled = true; + rule.zenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; + + mPanel.handleUpdateManualRule(rule); + + assertProperConditionTagTypes(true); + assertEquals(alarm, mPanel.getConditionTagAt(2).condition); + assertTrue(mPanel.getConditionTagAt(2).rb.isChecked()); + + assertEquals(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, + mPanel.getSelectedZen(Settings.Global.ZEN_MODE_OFF)); + + rule.zenMode = Settings.Global.ZEN_MODE_NO_INTERRUPTIONS; + + mPanel.handleUpdateManualRule(rule); + + assertProperConditionTagTypes(true); + assertEquals(alarm, mPanel.getConditionTagAt(2).condition); + assertTrue(mPanel.getConditionTagAt(2).rb.isChecked()); + + assertEquals(Settings.Global.ZEN_MODE_NO_INTERRUPTIONS, + mPanel.getSelectedZen(Settings.Global.ZEN_MODE_OFF)); + } +} diff --git a/packages/overlays/SysuiLightWallpaperThemeOverlay/Android.mk b/packages/overlays/SysuiLightWallpaperThemeOverlay/Android.mk deleted file mode 100644 index 4782a166146b..000000000000 --- a/packages/overlays/SysuiLightWallpaperThemeOverlay/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_RRO_THEME := SysuiLightWallpaperTheme -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := SysuiLightWallpaperThemeOverlay - -include $(BUILD_RRO_PACKAGE) diff --git a/packages/overlays/SysuiLightWallpaperThemeOverlay/AndroidManifest.xml b/packages/overlays/SysuiLightWallpaperThemeOverlay/AndroidManifest.xml deleted file mode 100644 index 0a8749c64ea2..000000000000 --- a/packages/overlays/SysuiLightWallpaperThemeOverlay/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.android.systemui.theme.lightwallpaper" - android:versionCode="1" - android:versionName="1.0"> - <overlay android:targetPackage="com.android.systemui" android:priority="2"/> - - <application android:label="@string/sysui_overlay_light" android:hasCode="false"/> -</manifest> diff --git a/packages/overlays/SysuiLightWallpaperThemeOverlay/res/values/strings.xml b/packages/overlays/SysuiLightWallpaperThemeOverlay/res/values/strings.xml deleted file mode 100644 index acc3d16610ec..000000000000 --- a/packages/overlays/SysuiLightWallpaperThemeOverlay/res/values/strings.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/** - * Copyright (c) 2017, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ ---> -<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - - <string name="sysui_overlay_light">Light</string> - -</resources> - diff --git a/packages/overlays/SysuiLightWallpaperThemeOverlay/res/values/styles.xml b/packages/overlays/SysuiLightWallpaperThemeOverlay/res/values/styles.xml deleted file mode 100644 index 53912b50df00..000000000000 --- a/packages/overlays/SysuiLightWallpaperThemeOverlay/res/values/styles.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<resources> - <style name="systemui_base" parent="@*android:style/Theme.DeviceDefault.QuickSettings"> - <item name="android:textColorPrimaryInverse">@*android:color/primary_text_material_light</item> - <item name="android:textColorSecondaryInverse">@*android:color/secondary_text_material_light</item> - </style> - - <style name="RecentsBase" parent="@android:style/Theme.Material"> - <item name="android:textColorPrimaryInverse">@*android:color/primary_text_material_light</item> - <item name="android:textColorSecondaryInverse">@*android:color/secondary_text_material_light</item> - </style> -</resources>
\ No newline at end of file diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index 6167d85f33c7..bb6ed74c95cb 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -4214,6 +4214,11 @@ message MetricsEvent { // OS: O DR ACTION_CAMERA_EVENT = 1032; + // OPEN: Settings > Trampoline Intent > Settings page + // CATEGORY: SETTINGS + // OS: O DR + TRAMPOLINE_SETTINGS_EVENT = 1033; + // ---- End O-DR1 Constants, all O-DR1 constants go above this line ---- // ACTION: Settings > Network & Internet > Mobile network > Mobile data diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java index 86e32e041a96..086dd29f0c97 100644 --- a/services/autofill/java/com/android/server/autofill/Helper.java +++ b/services/autofill/java/com/android/server/autofill/Helper.java @@ -16,11 +16,16 @@ package com.android.server.autofill; +import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Bundle; +import android.service.autofill.Dataset; +import android.util.ArrayMap; import android.util.ArraySet; import android.view.autofill.AutofillId; +import android.view.autofill.AutofillValue; +import java.util.ArrayList; import java.util.Arrays; import java.util.Objects; import java.util.Set; @@ -82,4 +87,16 @@ public final class Helper { } return array; } + + @NonNull + static ArrayMap<AutofillId, AutofillValue> getFields(@NonNull Dataset dataset) { + final ArrayList<AutofillId> ids = dataset.getFieldIds(); + final ArrayList<AutofillValue> values = dataset.getFieldValues(); + final int size = ids == null ? 0 : ids.size(); + final ArrayMap<AutofillId, AutofillValue> fields = new ArrayMap<>(size); + for (int i = 0; i < size; i++) { + fields.put(ids.get(i), values.get(i)); + } + return fields; + } } diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index a38b9d3f4b66..f8fb13a54115 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -715,7 +715,13 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState + id + " destroyed"); return; } - + if (mResponses == null) { + // Typically happens when app explicitly called cancel() while the service was showing + // the auth UI. + Slog.w(TAG, "setAuthenticationResultLocked(" + authenticationId + "): no responses"); + removeSelf(); + return; + } final int requestId = AutofillManager.getRequestIdFromAuthenticationId(authenticationId); final FillResponse authenticatedResponse = mResponses.get(requestId); if (authenticatedResponse == null || data == null) { @@ -781,7 +787,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return true; } - final int lastResponseIdx = getLastResponseIndex(); + final int lastResponseIdx = getLastResponseIndexLocked(); if (lastResponseIdx < 0) { Slog.w(TAG, "showSaveLocked(): did not get last response. mResponses=" + mResponses + ", mViewStates=" + mViewStates); @@ -798,15 +804,20 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState /* * The Save dialog is only shown if all conditions below are met: * - * - saveInfo is not null - * - autofillValue of all required ids is not null + * - saveInfo is not null. + * - autofillValue of all required ids is not null. * - autofillValue of at least one id (required or optional) has changed. + * - there is no Dataset in the last FillResponse whose values of all dataset fields matches + * the current values of all fields in the screen. */ - if (saveInfo == null) { return true; } + // Cache used to make sure changed fields do not belong to a dataset. + final ArrayMap<AutofillId, AutofillValue> currentValues = new ArrayMap<>(); + final ArraySet<AutofillId> allIds = new ArraySet<>(); + final AutofillId[] requiredIds = saveInfo.getRequiredIds(); boolean allRequiredAreNotEmpty = true; boolean atLeastOneChanged = false; @@ -817,6 +828,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState Slog.w(TAG, "null autofill id on " + Arrays.toString(requiredIds)); continue; } + allIds.add(id); final ViewState viewState = mViewStates.get(id); if (viewState == null) { Slog.w(TAG, "showSaveLocked(): no ViewState for required " + id); @@ -835,18 +847,19 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState value = initialValue; } else { if (sDebug) { - Slog.d(TAG, "showSaveLocked(): empty value for required " + id ); + Slog.d(TAG, "empty value for required " + id ); } allRequiredAreNotEmpty = false; break; } } + currentValues.put(id, value); final AutofillValue filledValue = viewState.getAutofilledValue(); if (!value.equals(filledValue)) { if (sDebug) { - Slog.d(TAG, "showSaveLocked(): found a change on required " + id + ": " - + filledValue + " => " + value); + Slog.d(TAG, "found a change on required " + id + ": " + filledValue + + " => " + value); } atLeastOneChanged = true; } @@ -859,22 +872,34 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState // No change on required ids yet, look for changes on optional ids. for (int i = 0; i < optionalIds.length; i++) { final AutofillId id = optionalIds[i]; + allIds.add(id); final ViewState viewState = mViewStates.get(id); if (viewState == null) { - Slog.w(TAG, "showSaveLocked(): no ViewState for optional " + id); + Slog.w(TAG, "no ViewState for optional " + id); continue; } if ((viewState.getState() & ViewState.STATE_CHANGED) != 0) { final AutofillValue currentValue = viewState.getCurrentValue(); + currentValues.put(id, currentValue); final AutofillValue filledValue = viewState.getAutofilledValue(); if (currentValue != null && !currentValue.equals(filledValue)) { if (sDebug) { - Slog.d(TAG, "finishSessionLocked(): found a change on optional " - + id + ": " + filledValue + " => " + currentValue); + Slog.d(TAG, "found a change on optional " + id + ": " + filledValue + + " => " + currentValue); } atLeastOneChanged = true; break; } + } else { + // Update current values cache based on initial value + final AutofillValue initialValue = getValueFromContexts(id); + if (sDebug) { + Slog.d(TAG, "no current value for " + id + "; initial value is " + + initialValue); + } + if (initialValue != null) { + currentValues.put(id, initialValue); + } } } } @@ -901,6 +926,42 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } + // Make sure the service doesn't have the fields already by checking the datasets + // content. + final List<Dataset> datasets = response.getDatasets(); + if (datasets != null) { + datasets_loop: for (int i = 0; i < datasets.size(); i++) { + final Dataset dataset = datasets.get(i); + final ArrayMap<AutofillId, AutofillValue> datasetValues = + Helper.getFields(dataset); + if (sVerbose) { + Slog.v(TAG, "Checking if saved fields match contents of dataset #" + i + + ": " + dataset + "; allIds=" + allIds); + } + for (int j = 0; j < allIds.size(); j++) { + final AutofillId id = allIds.valueAt(j); + final AutofillValue currentValue = currentValues.get(id); + if (currentValue == null) { + if (sDebug) { + Slog.d(TAG, "dataset has value for field that is null: " + id); + } + continue datasets_loop; + } + final AutofillValue datasetValue = datasetValues.get(id); + if (!currentValue.equals(datasetValue)) { + if (sDebug) Slog.d(TAG, "found a change on id " + id); + continue datasets_loop; + } + if (sVerbose) Slog.v(TAG, "no changes for id " + id); + } + if (sDebug) { + Slog.d(TAG, "ignoring Save UI because all fields match contents of " + + "dataset #" + i + ": " + dataset); + } + return true; + } + } + if (sDebug) Slog.d(TAG, "Good news, everyone! All checks passed, show save UI!"); mService.setSaveShown(id); getUiForShowing().showSaveUi(mService.getServiceLabel(), saveInfo, @@ -1096,7 +1157,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } - final ArrayList<Dataset> datasets = response.getDatasets(); + final List<Dataset> datasets = response.getDatasets(); if (datasets != null) { final int numDatasets = datasets.size(); @@ -1265,7 +1326,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState // Only track the views of the last response as only those are reported back to the // service, see #showSaveLocked - final FillResponse response = mResponses.valueAt(getLastResponseIndex()); + final FillResponse response = mResponses.valueAt(getLastResponseIndexLocked()); ArraySet<AutofillId> trackedViews = null; boolean saveOnAllViewsInvisible = false; @@ -1292,7 +1353,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState // Must also track that are part of datasets, otherwise the FillUI won't be hidden when // they go away (if they're not savable). - final ArrayList<Dataset> datasets = response.getDatasets(); + final List<Dataset> datasets = response.getDatasets(); ArraySet<AutofillId> fillableIds = null; if (datasets != null) { for (int i = 0; i < datasets.size(); i++) { @@ -1365,7 +1426,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState * Sets the state of all views in the given response. */ private void setViewStatesLocked(FillResponse response, int state, boolean clearResponse) { - final ArrayList<Dataset> datasets = response.getDatasets(); + final List<Dataset> datasets = response.getDatasets(); if (datasets != null) { for (int i = 0; i < datasets.size(); i++) { final Dataset dataset = datasets.get(i); @@ -1642,17 +1703,19 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } - private int getLastResponseIndex() { + private int getLastResponseIndexLocked() { // The response ids are monotonically increasing so // we just find the largest id which is the last. We // do not rely on the internal ordering in sparse // array to avoid - wow this stopped working!? int lastResponseIdx = -1; int lastResponseId = -1; - final int responseCount = mResponses.size(); - for (int i = 0; i < responseCount; i++) { - if (mResponses.keyAt(i) > lastResponseId) { - lastResponseIdx = i; + if (mResponses != null) { + final int responseCount = mResponses.size(); + for (int i = 0; i < responseCount; i++) { + if (mResponses.keyAt(i) > lastResponseId) { + lastResponseIdx = i; + } } } return lastResponseIdx; diff --git a/services/autofill/java/com/android/server/autofill/ui/CustomScrollView.java b/services/autofill/java/com/android/server/autofill/ui/CustomScrollView.java new file mode 100644 index 000000000000..e68263a51415 --- /dev/null +++ b/services/autofill/java/com/android/server/autofill/ui/CustomScrollView.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2017 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.autofill.ui; + +import static com.android.server.autofill.Helper.sDebug; + +import android.content.Context; +import android.graphics.Point; +import android.util.AttributeSet; +import android.util.Slog; +import android.util.TypedValue; +import android.view.View; +import android.widget.ScrollView; + +import com.android.internal.R; + +/** + * Custom scroll view that stretches to a maximum height. + */ +public class CustomScrollView extends ScrollView { + + private static final String TAG = "CustomScrollView"; + + private int mWidth = -1; + private int mHeight = -1; + + public CustomScrollView(Context context) { + super(context); + } + + public CustomScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + if (getChildCount() == 0) { + // Should not happen + Slog.e(TAG, "no children"); + return; + } + + calculateDimensions(); + setMeasuredDimension(mWidth, mHeight); + } + + private void calculateDimensions() { + if (mWidth != -1) return; + + final TypedValue typedValue = new TypedValue(); + final Point point = new Point(); + final Context context = getContext(); + context.getDisplay().getSize(point); + context.getTheme().resolveAttribute(R.attr.autofillSaveCustomSubtitleMaxHeight, + typedValue, true); + final View child = getChildAt(0); + final int childHeight = child.getMeasuredHeight(); + final int maxHeight = (int) typedValue.getFraction(point.y, point.y); + + mWidth = point.x; + mHeight = Math.min(childHeight, maxHeight); + if (sDebug) { + Slog.d(TAG, "calculateDimensions(): maxHeight=" + maxHeight + + ", childHeight=" + childHeight + ", w=" + mWidth + ", h=" + mHeight); + } + } +} diff --git a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java index cb19d8158023..035186525ae0 100644 --- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java +++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java @@ -33,11 +33,13 @@ import android.util.Slog; import android.view.Gravity; import android.view.Window; import android.view.WindowManager; -import android.widget.LinearLayout; import android.widget.RemoteViews; +import android.widget.ScrollView; import android.widget.TextView; import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; import com.android.internal.R; import com.android.server.UiThread; @@ -140,27 +142,6 @@ final class SaveUi { types.add(context.getString(R.string.autofill_save_type_email_address)); } - final CustomDescription customDescription = info.getCustomDescription(); - - if (customDescription != null) { - if (sDebug) Slog.d(TAG, "Using custom description"); - - final RemoteViews presentation = customDescription.getPresentation(valueFinder); - if (presentation != null) { - try { - final View remote = presentation.apply(context, null); - final LinearLayout layout = view.findViewById( - R.id.autofill_save_custom_subtitle); - layout.addView(remote); - layout.setVisibility(View.VISIBLE); - } catch (Exception e) { - Slog.e(TAG, "Could not inflate custom description. ", e); - } - } else { - Slog.w(TAG, "could not create remote presentation for custom title"); - } - } - switch (types.size()) { case 1: mTitle = Html.fromHtml(context.getString(R.string.autofill_save_title_with_type, @@ -181,14 +162,39 @@ final class SaveUi { } titleView.setText(mTitle); - mSubTitle = info.getDescription(); - if (mSubTitle != null) { - final TextView subTitleView = (TextView) view.findViewById(R.id.autofill_save_subtitle); - subTitleView.setText(mSubTitle); - subTitleView.setVisibility(View.VISIBLE); - } - if (sDebug) Slog.d(TAG, "on constructor: title=" + mTitle + ", subTitle=" + mSubTitle); + ScrollView subtitleContainer = null; + final CustomDescription customDescription = info.getCustomDescription(); + if (customDescription != null) { + mSubTitle = null; + if (sDebug) Slog.d(TAG, "Using custom description"); + + final RemoteViews presentation = customDescription.getPresentation(valueFinder); + if (presentation != null) { + try { + final View customSubtitleView = presentation.apply(context, null); + subtitleContainer = view.findViewById(R.id.autofill_save_custom_subtitle); + subtitleContainer.addView(customSubtitleView); + subtitleContainer.setVisibility(View.VISIBLE); + } catch (Exception e) { + Slog.e(TAG, "Could not inflate custom description. ", e); + } + } else { + Slog.w(TAG, "could not create remote presentation for custom title"); + } + } else { + mSubTitle = info.getDescription(); + if (mSubTitle != null) { + subtitleContainer = view.findViewById(R.id.autofill_save_custom_subtitle); + final TextView subtitleView = new TextView(context); + subtitleView.setText(mSubTitle); + subtitleContainer.addView(subtitleView, + new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT)); + subtitleContainer.setVisibility(View.VISIBLE); + } + if (sDebug) Slog.d(TAG, "on constructor: title=" + mTitle + ", subTitle=" + mSubTitle); + } final TextView noButton = view.findViewById(R.id.autofill_save_no); if (info.getNegativeActionStyle() == SaveInfo.NEGATIVE_BUTTON_STYLE_REJECT) { @@ -222,6 +228,7 @@ final class SaveUi { final WindowManager.LayoutParams params = window.getAttributes(); params.width = WindowManager.LayoutParams.MATCH_PARENT; params.accessibilityTitle = context.getString(R.string.autofill_save_accessibility_title); + params.windowAnimations = R.style.AutofillSaveAnimation; Slog.i(TAG, "Showing save dialog: " + mTitle); mDialog.show(); diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 41de97c8bcbb..d47ca1ccf17a 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -776,7 +776,9 @@ public class BackupManagerService implements BackupManagerServiceInterface { // side unpredictability. @Override public int generateRandomIntegerToken() { - int token = mTokenGenerator.nextInt() & ~0xFF; + int token = mTokenGenerator.nextInt(); + if (token < 0) token = -token; + token &= ~0xFF; token |= (mNextToken.incrementAndGet() & 0xFF); return token; } diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 71c423c58d7b..ac41079e5237 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -4582,10 +4582,12 @@ public class ConnectivityService extends IConnectivityManager.Stub */ private void updateCapabilities( int oldScore, NetworkAgentInfo nai, NetworkCapabilities networkCapabilities) { - if (nai.everConnected && !nai.networkCapabilities.equalImmutableCapabilities( - networkCapabilities)) { - Slog.wtf(TAG, "BUG: " + nai + " changed immutable capabilities: " - + nai.networkCapabilities + " -> " + networkCapabilities); + // Sanity check: a NetworkAgent should not change its static capabilities or parameters. + if (nai.everConnected) { + String diff = nai.networkCapabilities.describeImmutableDifferences(networkCapabilities); + if (!TextUtils.isEmpty(diff)) { + Slog.wtf(TAG, "BUG: " + nai + " changed immutable capabilities:" + diff); + } } // Don't modify caller's NetworkCapabilities. diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index a8e2f3227240..ce062aaa7d92 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -50,6 +50,7 @@ import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import android.annotation.BinderThread; +import android.annotation.ColorInt; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; @@ -231,6 +232,13 @@ public class InputMethodManagerService extends IInputMethodManager.Stub int WIRED_AFFORDANCE = 1; } + /** + * A protected broadcast intent action for internal use for {@link PendingIntent} in + * the notification. + */ + private static final String ACTION_SHOW_INPUT_METHOD_PICKER = + "com.android.server.InputMethodManagerService.SHOW_INPUT_METHOD_PICKER"; + final Context mContext; final Resources mRes; final Handler mHandler; @@ -836,6 +844,16 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } } else if (Intent.ACTION_LOCALE_CHANGED.equals(action)) { onActionLocaleChanged(); + } else if (ACTION_SHOW_INPUT_METHOD_PICKER.equals(action)) { + // ACTION_SHOW_INPUT_METHOD_PICKER action is a protected-broadcast and it is + // guaranteed to be send only from the system, so that there is no need for extra + // security check such as + // {@link #canShowInputMethodPickerLocked(IInputMethodClient)}. + mHandler.obtainMessage( + MSG_SHOW_IM_SUBTYPE_PICKER, + InputMethodManager.SHOW_IM_PICKER_MODE_INCLUDE_AUXILIARY_SUBTYPES, + 0 /* arg2 */) + .sendToTarget(); } else { Slog.w(TAG, "Unexpected intent " + intent); } @@ -1285,6 +1303,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub Bundle extras = new Bundle(); extras.putBoolean(Notification.EXTRA_ALLOW_DURING_SETUP, true); + @ColorInt final int accentColor = mContext.getColor( + com.android.internal.R.color.system_notification_accent_color); mImeSwitcherNotification = new Notification.Builder(mContext, SystemNotificationChannels.VIRTUAL_KEYBOARD) .setSmallIcon(com.android.internal.R.drawable.ic_notification_ime_default) @@ -1292,9 +1312,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub .setOngoing(true) .addExtras(extras) .setCategory(Notification.CATEGORY_SYSTEM) - .setColor(com.android.internal.R.color.system_notification_accent_color); + .setColor(accentColor); - Intent intent = new Intent(Settings.ACTION_SHOW_INPUT_METHOD_PICKER); + Intent intent = new Intent(ACTION_SHOW_INPUT_METHOD_PICKER) + .setPackage(mContext.getPackageName()); mImeSwitchPendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0); mShowOngoingImeSwitcherForPhones = false; @@ -1445,6 +1466,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub broadcastFilter.addAction(Intent.ACTION_USER_REMOVED); broadcastFilter.addAction(Intent.ACTION_SETTING_RESTORED); broadcastFilter.addAction(Intent.ACTION_LOCALE_CHANGED); + broadcastFilter.addAction(ACTION_SHOW_INPUT_METHOD_PICKER); mContext.registerReceiver(new ImmsBroadcastReceiver(), broadcastFilter); buildInputMethodListLocked(true /* resetDefaultEnabledIme */); diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index aa2ce1ce3857..1ca0112cb4f3 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -2969,6 +2969,11 @@ class StorageManagerService extends IStorageManager.Stub synchronized (mLock) { mLocalUnlockedUsers = ArrayUtils.appendInt(mLocalUnlockedUsers, userId); } + if (userId == UserHandle.USER_SYSTEM) { + String propertyName = "sys.user." + userId + ".ce_available"; + Slog.d(TAG, "Setting property: " + propertyName + "=true"); + SystemProperties.set(propertyName, "true"); + } } @Override diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java index aceedf1ab805..6a81d3211c9d 100644 --- a/services/core/java/com/android/server/Watchdog.java +++ b/services/core/java/com/android/server/Watchdog.java @@ -19,6 +19,7 @@ package com.android.server; import android.app.IActivityController; import android.os.Binder; import android.os.RemoteException; +import com.android.internal.os.ZygoteConnectionConstants; import com.android.server.am.ActivityManagerService; import android.content.BroadcastReceiver; @@ -57,6 +58,11 @@ public class Watchdog extends Thread { // Set this to true to have the watchdog record kernel thread stacks when it fires static final boolean RECORD_KERNEL_THREADS = true; + // Note 1: Do not lower this value below thirty seconds without tightening the invoke-with + // timeout in com.android.internal.os.ZygoteConnection, or wrapped applications + // can trigger the watchdog. + // Note 2: The debug value is already below the wait time in ZygoteConnection. Wrapped + // applications may not work with a debug build. CTS will fail. static final long DEFAULT_TIMEOUT = DB ? 10*1000 : 60*1000; static final long CHECK_INTERVAL = DEFAULT_TIMEOUT / 2; @@ -262,6 +268,10 @@ public class Watchdog extends Thread { // Initialize monitor for Binder threads. addMonitor(new BinderThreadMonitor()); + + // See the notes on DEFAULT_TIMEOUT. + assert DB || + DEFAULT_TIMEOUT > ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS; } public void init(Context context, ActivityManagerService activity) { diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index f6c56ed44f8f..1281fb1fecb4 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -23945,9 +23945,19 @@ public class ActivityManagerService extends IActivityManager.Stub // We might change the visibilities here, so prepare an empty app transition which // might be overridden later if we actually change visibilities. - mWindowManager.prepareAppTransition(TRANSIT_NONE, false /* alwaysKeepCurrent */); + final boolean wasTransitionSet = + mWindowManager.getPendingAppTransition() != TRANSIT_NONE; + if (!wasTransitionSet) { + mWindowManager.prepareAppTransition(TRANSIT_NONE, + false /* alwaysKeepCurrent */); + } mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); - mWindowManager.executeAppTransition(); + + // If there was a transition set already we don't want to interfere with it as we + // might be starting it too early. + if (!wasTransitionSet) { + mWindowManager.executeAppTransition(); + } } if (callback != null) { callback.run(); diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 410824e01e35..ec20c0472e4d 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -42,7 +42,6 @@ import static android.content.Intent.CATEGORY_LAUNCHER; import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; import static android.content.Intent.FLAG_ACTIVITY_NO_HISTORY; import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION; -import static android.content.pm.ActivityInfo.CONFIG_ROTATION; import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT; import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE; import static android.content.pm.ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE; @@ -2572,10 +2571,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo changes &= ~CONFIG_SMALLEST_SCREEN_SIZE; } } - // We don't want rotation to cause relaunches. - if ((changes & CONFIG_ROTATION) != 0) { - changes &= ~CONFIG_ROTATION; - } + return changes; } diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index 739497b771aa..7c7eda7a3efe 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -802,7 +802,7 @@ public final class BroadcastQueue { IPackageManager pm = AppGlobals.getPackageManager(); for (int i = perms.length-1; i >= 0; i--) { try { - PermissionInfo pi = pm.getPermissionInfo(perms[i], 0); + PermissionInfo pi = pm.getPermissionInfo(perms[i], "android", 0); if ((pi.protectionLevel & (PermissionInfo.PROTECTION_MASK_BASE | PermissionInfo.PROTECTION_FLAG_PRIVILEGED)) != PermissionInfo.PROTECTION_SIGNATURE) { diff --git a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java index 703e50a08855..0d935dba22c6 100644 --- a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java +++ b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java @@ -142,6 +142,18 @@ public class NetworkNotificationManager { extraInfo = null; } + // Clear any previous notification with lower priority, otherwise return. http://b/63676954. + // A new SIGN_IN notification with a new intent should override any existing one. + final int previousEventId = mNotificationTypeMap.get(id); + final NotificationType previousNotifyType = NotificationType.getFromId(previousEventId); + if (priority(previousNotifyType) > priority(notifyType)) { + Slog.d(TAG, String.format( + "ignoring notification %s for network %s with existing notification %s", + notifyType, id, previousNotifyType)); + return; + } + clearNotification(id); + if (DBG) { Slog.d(TAG, String.format( "showNotification tag=%s event=%s transport=%s extraInfo=%s highPrioriy=%s", @@ -274,4 +286,22 @@ public class NetworkNotificationManager { NotificationType t = NotificationType.getFromId(eventId); return (t != null) ? t.name() : "UNKNOWN"; } + + private static int priority(NotificationType t) { + if (t == null) { + return 0; + } + switch (t) { + case SIGN_IN: + return 4; + case NO_INTERNET: + return 3; + case NETWORK_SWITCH: + return 2; + case LOST_INTERNET: + return 1; + default: + return 0; + } + } } diff --git a/services/core/java/com/android/server/content/SyncLogger.java b/services/core/java/com/android/server/content/SyncLogger.java index db794643b4df..d93bdc9efabf 100644 --- a/services/core/java/com/android/server/content/SyncLogger.java +++ b/services/core/java/com/android/server/content/SyncLogger.java @@ -22,6 +22,7 @@ import android.os.Environment; import android.os.FileUtils; import android.os.SystemProperties; import android.text.format.DateUtils; +import android.util.Log; import android.util.Slog; import com.android.internal.annotations.GuardedBy; @@ -127,6 +128,8 @@ public class SyncLogger { @GuardedBy("mLock") private boolean mErrorShown; + private static final boolean DO_LOGCAT = Log.isLoggable(TAG, Log.DEBUG); + RotatingFileLogger() { mLogPath = new File(Environment.getDataSystemDirectory(), "syncmanager-log"); } @@ -158,6 +161,8 @@ public class SyncLogger { mStringBuilder.append(android.os.Process.myTid()); mStringBuilder.append(' '); + final int messageStart = mStringBuilder.length(); + for (Object o : message) { mStringBuilder.append(o); } @@ -166,6 +171,11 @@ public class SyncLogger { try { mLogWriter.append(mStringBuilder); mLogWriter.flush(); + + // Also write on logcat. + if (DO_LOGCAT) { + Log.d(TAG, mStringBuilder.substring(messageStart)); + } } catch (IOException e) { handleException("Failed to write log", e); } diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java index c250005204ba..3e05d50b0355 100644 --- a/services/core/java/com/android/server/content/SyncManager.java +++ b/services/core/java/com/android/server/content/SyncManager.java @@ -1704,6 +1704,8 @@ public class SyncManager { // Include "this" in the message so that the handler can ignore it if this // ActiveSyncContext is no longer the mActiveSyncContext at message handling // time. + mLogger.log("onFinished result=", result, " endpoint=", + (mSyncOperation == null ? "null" : mSyncOperation.target)); sendSyncFinishedOrCanceledMessage(this, result); } @@ -1745,6 +1747,7 @@ public class SyncManager { Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND | Context.BIND_ALLOW_OOM_MANAGEMENT, new UserHandle(mSyncOperation.target.userId)); + mLogger.log("bindService() returned=", mBound, " for ", this); if (!bindResult) { mBound = false; } else { @@ -1767,6 +1770,7 @@ public class SyncManager { } if (mBound) { mBound = false; + mLogger.log("unbindService for ", this); mContext.unbindService(this); try { mBatteryStats.noteSyncFinish(mEventName, mSyncAdapterUid); @@ -2729,9 +2733,14 @@ public class SyncManager { // outstanding try { if (currentSyncContext.mSyncAdapter != null) { + mLogger.log("Calling cancelSync for SERVICE_DISCONNECTED ", + currentSyncContext, + " adapter=", currentSyncContext.mSyncAdapter); currentSyncContext.mSyncAdapter.cancelSync(currentSyncContext); + mLogger.log("Canceled"); } } catch (RemoteException e) { + mLogger.log("RemoteException ", Log.getStackTraceString(e)); // We don't need to retry this in this case. } @@ -3217,14 +3226,15 @@ public class SyncManager { mLogger.log("Sync start: account=" + syncOperation.target.account, " authority=", syncOperation.target.provider, " reason=", SyncOperation.reasonToString(null, syncOperation.reason), - " extras=", SyncOperation.extrasToString(syncOperation.extras)); + " extras=", SyncOperation.extrasToString(syncOperation.extras), + " adapter=", activeSyncContext.mSyncAdapter); activeSyncContext.mSyncAdapter = ISyncAdapter.Stub.asInterface(syncAdapter); activeSyncContext.mSyncAdapter .startSync(activeSyncContext, syncOperation.target.provider, syncOperation.target.account, syncOperation.extras); - mLogger.log("Sync finish"); + mLogger.log("Sync is running now..."); } catch (RemoteException remoteExc) { mLogger.log("Sync failed with RemoteException: ", remoteExc.toString()); Log.d(TAG, "maybeStartNextSync: caught a RemoteException, rescheduling", remoteExc); @@ -3297,7 +3307,6 @@ public class SyncManager { activeSyncContext.mSyncAdapter.asBinder().unlinkToDeath(activeSyncContext, 0); activeSyncContext.mIsLinkedToDeath = false; } - closeActiveSyncContext(activeSyncContext); final long elapsedTime = SystemClock.elapsedRealtime() - activeSyncContext.mStartTime; String historyMessage; int downstreamActivity; @@ -3355,8 +3364,12 @@ public class SyncManager { } if (activeSyncContext.mSyncAdapter != null) { try { + mLogger.log("Calling cancelSync for runSyncFinishedOrCanceled ", + activeSyncContext, " adapter=", activeSyncContext.mSyncAdapter); activeSyncContext.mSyncAdapter.cancelSync(activeSyncContext); + mLogger.log("Canceled"); } catch (RemoteException e) { + mLogger.log("RemoteException ", Log.getStackTraceString(e)); // we don't need to retry this in this case } } @@ -3365,6 +3378,9 @@ public class SyncManager { upstreamActivity = 0; } + // Close and unbind the service. Don't use activeSyncContext.mSyncAdapter after this. + closeActiveSyncContext(activeSyncContext); + stopSyncEvent(activeSyncContext.mHistoryRowId, syncOperation, historyMessage, upstreamActivity, downstreamActivity, elapsedTime); // Check for full-resync and schedule it after closing off the last sync. diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index fb911ce05254..fb8ae1247796 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -169,11 +169,17 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // a stylish color fade animation instead. private boolean mColorFadeFadesConfig; - // True if we need to transition to the off state when coming out of a doze state. - // Some display hardware will show artifacts (flickers, etc) when transitioning from a doze - // to a fully on state. In order to hide these, we first transition to off to let the system - // animate the screen on as it normally would, which is a much smoother experience. - private boolean mTransitionOffAfterDozeConfig; + // True if we need to fake a transition to off when coming out of a doze state. + // Some display hardware will blank itself when coming out of doze in order to hide + // artifacts. For these displays we fake a transition into OFF so that policy can appropriately + // blank itself and begin an appropriate power on animation. + private boolean mDisplayBlanksAfterDozeConfig; + + // True if there are only buckets of brightness values when the display is in the doze state, + // rather than a full range of values. If this is true, then we'll avoid animating the screen + // brightness since it'd likely be multiple jarring brightness transitions instead of just one + // to reach the final state. + private boolean mBrightnessBucketsInDozeConfig; // The pending power request. // Initially null until the first call to requestPowerState. @@ -422,8 +428,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mColorFadeFadesConfig = resources.getBoolean( com.android.internal.R.bool.config_animateScreenLights); - mTransitionOffAfterDozeConfig = resources.getBoolean( - com.android.internal.R.bool.config_displayTransitionOffAfterDoze); + mDisplayBlanksAfterDozeConfig = resources.getBoolean( + com.android.internal.R.bool.config_displayBlanksAfterDoze); + + mBrightnessBucketsInDozeConfig = resources.getBoolean( + com.android.internal.R.bool.config_displayBrightnessBucketsInDoze); if (!DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) { mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); @@ -788,7 +797,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call boolean wasOrWillBeInVr = (state == Display.STATE_VR || oldState == Display.STATE_VR); if ((state == Display.STATE_ON && mSkipRampState == RAMP_STATE_SKIP_NONE - || state == Display.STATE_DOZE) + || state == Display.STATE_DOZE && !mBrightnessBucketsInDozeConfig) && !wasOrWillBeInVr) { animateScreenBrightness(brightness, slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast); @@ -811,7 +820,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // Notify policy about screen turned on. if (ready && state != Display.STATE_OFF && mReportedScreenStateToPolicy == REPORTED_TO_POLICY_SCREEN_TURNING_ON) { - mReportedScreenStateToPolicy = REPORTED_TO_POLICY_SCREEN_ON; + setReportedScreenState(REPORTED_TO_POLICY_SCREEN_ON); mWindowManagerPolicy.screenTurnedOn(); } @@ -894,10 +903,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } private boolean setScreenState(int state) { - return setScreenState(state, false /*force*/); + return setScreenState(state, false /*reportOnly*/); } - private boolean setScreenState(int state, boolean force) { + private boolean setScreenState(int state, boolean reportOnly) { final boolean isOff = (state == Display.STATE_OFF); if (mPowerState.getScreenState() != state) { @@ -905,32 +914,24 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // actually turn the screen off. if (isOff && !mScreenOffBecauseOfProximity) { if (mReportedScreenStateToPolicy == REPORTED_TO_POLICY_SCREEN_ON) { - mReportedScreenStateToPolicy = REPORTED_TO_POLICY_SCREEN_TURNING_OFF; + setReportedScreenState(REPORTED_TO_POLICY_SCREEN_TURNING_OFF); blockScreenOff(); mWindowManagerPolicy.screenTurningOff(mPendingScreenOffUnblocker); - if (force) { - // If we're forcing the power state transition then immediately - // unblock the screen off event. This keeps the lifecycle consistent, - // so WindowManagerPolicy will always see screenTurningOff before - // screenTurnedOff, but we don't actually block on them for the state - // change. - unblockScreenOff(); - } else { - return false; - } + unblockScreenOff(); } else if (mPendingScreenOffUnblocker != null) { // Abort doing the state change until screen off is unblocked. return false; } } - mPowerState.setScreenState(state); - - // Tell battery stats about the transition. - try { - mBatteryStats.noteScreenState(state); - } catch (RemoteException ex) { - // same process + if (!reportOnly) { + mPowerState.setScreenState(state); + // Tell battery stats about the transition. + try { + mBatteryStats.noteScreenState(state); + } catch (RemoteException ex) { + // same process + } } } @@ -942,7 +943,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // finished drawing underneath. if (isOff && mReportedScreenStateToPolicy != REPORTED_TO_POLICY_SCREEN_OFF && !mScreenOffBecauseOfProximity) { - mReportedScreenStateToPolicy = REPORTED_TO_POLICY_SCREEN_OFF; + setReportedScreenState(REPORTED_TO_POLICY_SCREEN_OFF); unblockScreenOn(); mWindowManagerPolicy.screenTurnedOff(); } else if (!isOff @@ -952,10 +953,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // Complete the full state transition on -> turningOff -> off. unblockScreenOff(); mWindowManagerPolicy.screenTurnedOff(); - mReportedScreenStateToPolicy = REPORTED_TO_POLICY_SCREEN_OFF; + setReportedScreenState(REPORTED_TO_POLICY_SCREEN_OFF); } if (!isOff && mReportedScreenStateToPolicy == REPORTED_TO_POLICY_SCREEN_OFF) { - mReportedScreenStateToPolicy = REPORTED_TO_POLICY_SCREEN_TURNING_ON; + setReportedScreenState(REPORTED_TO_POLICY_SCREEN_TURNING_ON); if (mPowerState.getColorFadeLevel() == 0.0f) { blockScreenOn(); } else { @@ -968,6 +969,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call return mPendingScreenOnUnblocker == null; } + private void setReportedScreenState(int state) { + Trace.traceCounter(Trace.TRACE_TAG_POWER, "ReportedScreenStateToPolicy", state); + mReportedScreenStateToPolicy = state; + } + private int clampScreenBrightness(int value) { return MathUtils.constrain( value, mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum); @@ -997,15 +1003,20 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mPendingScreenOff = false; } - if (mTransitionOffAfterDozeConfig && - Display.isDozeState(mPowerState.getScreenState()) + if (mDisplayBlanksAfterDozeConfig + && Display.isDozeState(mPowerState.getScreenState()) && !Display.isDozeState(target)) { - setScreenState(Display.STATE_OFF, true /*force*/); // Skip the screen off animation and add a black surface to hide the - // contents of the screen. This will also trigger another power state update so that we - // end up converging on the target state. + // contents of the screen. + mPowerState.prepareColorFade(mContext, + mColorFadeFadesConfig ? ColorFade.MODE_FADE : ColorFade.MODE_WARM_UP); mColorFadeOffAnimator.end(); - return; + // Some display hardware will blank itself on the transition between doze and non-doze + // but still on display states. In this case we want to report to policy that the + // display has turned off so it can prepare the appropriate power on animation, but we + // don't want to actually transition to the fully off state since that takes + // significantly longer to transition from. + setScreenState(Display.STATE_OFF, target != Display.STATE_OFF /*reportOnly*/); } // If we were in the process of turning off the screen but didn't quite @@ -1307,7 +1318,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call pw.println(" mAppliedLowPower=" + mAppliedLowPower); pw.println(" mPendingScreenOnUnblocker=" + mPendingScreenOnUnblocker); pw.println(" mPendingScreenOff=" + mPendingScreenOff); - pw.println(" mReportedToPolicy=" + reportedToPolicyToString(mReportedScreenStateToPolicy)); + pw.println(" mReportedToPolicy=" + + reportedToPolicyToString(mReportedScreenStateToPolicy)); pw.println(" mScreenBrightnessRampAnimator.isAnimating()=" + mScreenBrightnessRampAnimator.isAnimating()); diff --git a/services/core/java/com/android/server/display/DisplayPowerState.java b/services/core/java/com/android/server/display/DisplayPowerState.java index d0c15801a232..763f56ff918f 100644 --- a/services/core/java/com/android/server/display/DisplayPowerState.java +++ b/services/core/java/com/android/server/display/DisplayPowerState.java @@ -20,6 +20,7 @@ import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.PowerManager; +import android.os.Trace; import android.util.FloatProperty; import android.util.IntProperty; import android.util.Slog; @@ -49,6 +50,7 @@ final class DisplayPowerState { private static final String TAG = "DisplayPowerState"; private static boolean DEBUG = false; + private static String COUNTER_COLOR_FADE = "ColorFadeLevel"; private final Handler mHandler; private final Choreographer mChoreographer; @@ -190,6 +192,7 @@ final class DisplayPowerState { * Dismisses the color fade surface. */ public void dismissColorFade() { + Trace.traceCounter(Trace.TRACE_TAG_POWER, COUNTER_COLOR_FADE, 100); if (mColorFade != null) mColorFade.dismiss(); mColorFadePrepared = false; mColorFadeReady = true; @@ -328,6 +331,8 @@ final class DisplayPowerState { if (mColorFadePrepared) { mColorFade.draw(mColorFadeLevel); + Trace.traceCounter(Trace.TRACE_TAG_POWER, + COUNTER_COLOR_FADE, Math.round(mColorFadeLevel * 100)); } mColorFadeReady = true; diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index cdc973b079ea..ce5f430c148f 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -515,6 +515,7 @@ final class LocalDisplayAdapter extends DisplayAdapter { try { final int mode = getPowerModeForState(state); SurfaceControl.setDisplayPowerMode(token, mode); + Trace.traceCounter(Trace.TRACE_TAG_POWER, "DisplayPowerMode", mode); } finally { Trace.traceEnd(Trace.TRACE_TAG_POWER); } @@ -530,6 +531,8 @@ final class LocalDisplayAdapter extends DisplayAdapter { + "id=" + displayId + ", brightness=" + brightness + ")"); try { mBacklight.setBrightness(brightness); + Trace.traceCounter(Trace.TRACE_TAG_POWER, + "DisplayBrightness", brightness); } finally { Trace.traceEnd(Trace.TRACE_TAG_POWER); } diff --git a/services/core/java/com/android/server/display/NightDisplayService.java b/services/core/java/com/android/server/display/NightDisplayService.java index b3cf57b3564a..026921deea55 100644 --- a/services/core/java/com/android/server/display/NightDisplayService.java +++ b/services/core/java/com/android/server/display/NightDisplayService.java @@ -111,11 +111,7 @@ public final class NightDisplayService extends SystemService private float[] mMatrixNight = new float[16]; /** - * These coefficients were generated by an LLS quadratic regression fitted to the - * overdetermined system based on experimental readings (and subsequent conversion from xy - * chromaticity coordinates to gamma-corrected RGB values): { (temperature, R, G, B) } -> - * { (7304, 1.0, 1.0, 1.0), (4082, 1.0, 0.857, 0.719), (2850, 1.0, .754, .516), - * (2596, 1.0, 0.722, 0.454) }. The 3x3 matrix is formatted like so: + * The 3x3 color transformation matrix is formatted like so: * <table> * <tr><td>R: a coefficient</td><td>G: a coefficient</td><td>B: a coefficient</td></tr> * <tr><td>R: b coefficient</td><td>G: b coefficient</td><td>B: b coefficient</td></tr> @@ -123,9 +119,9 @@ public final class NightDisplayService extends SystemService * </table> */ private static final float[] mColorTempCoefficients = new float[] { - 0.0f, -0.00000000962353339f, -0.0000000189359041f, - 0.0f, 0.000153045476f, 0.000302412211f, - 1.0f, 0.390782778f, -0.198650895f + 0.0f, -0.000000014365268757f, -0.000000000910931179f, + 0.0f, 0.000255092801250106f, 0.000207598323269139f, + 1.0f, -0.064156942434907716f, -0.349361641294833436f }; private int mCurrentUser = UserHandle.USER_NULL; @@ -410,7 +406,7 @@ public final class NightDisplayService extends SystemService return; } - Matrix.setIdentityM(mMatrixNight, 0); + Matrix.setIdentityM(outTemp, 0); final float squareTemperature = colorTemperature * colorTemperature; final float red = squareTemperature * mColorTempCoefficients[0] diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java index d99c27c666c8..e25f3e65d3d8 100644 --- a/services/core/java/com/android/server/job/JobSchedulerService.java +++ b/services/core/java/com/android/server/job/JobSchedulerService.java @@ -76,6 +76,7 @@ import com.android.internal.app.procstats.ProcessStats; import com.android.internal.util.ArrayUtils; import com.android.internal.util.DumpUtils; import com.android.server.DeviceIdleController; +import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.job.JobStore.JobStatusFunctor; import com.android.server.job.controllers.AppIdleController; @@ -355,11 +356,11 @@ public final class JobSchedulerService extends com.android.server.SystemService synchronized (mLock) { try { mParser.setString(Settings.Global.getString(mResolver, - Settings.Global.ALARM_MANAGER_CONSTANTS)); + Settings.Global.JOB_SCHEDULER_CONSTANTS)); } catch (IllegalArgumentException e) { // Failed to parse the settings string, log this and move on // with defaults. - Slog.e(TAG, "Bad device idle settings", e); + Slog.e(TAG, "Bad jobscheduler settings", e); } MIN_IDLE_COUNT = mParser.getInt(KEY_MIN_IDLE_COUNT, @@ -919,8 +920,57 @@ public final class JobSchedulerService extends com.android.server.SystemService mControllers.add(AppIdleController.get(this)); mControllers.add(ContentObserverController.get(this)); mControllers.add(DeviceIdleJobsController.get(this)); + + // If the job store determined that it can't yet reschedule persisted jobs, + // we need to start watching the clock. + if (!mJobs.jobTimesInflatedValid()) { + Slog.w(TAG, "!!! RTC not yet good; tracking time updates for job scheduling"); + context.registerReceiver(mTimeSetReceiver, new IntentFilter(Intent.ACTION_TIME_CHANGED)); + } } + private final BroadcastReceiver mTimeSetReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) { + // When we reach clock sanity, recalculate the temporal windows + // of all affected jobs. + if (mJobs.clockNowValidToInflate(System.currentTimeMillis())) { + Slog.i(TAG, "RTC now valid; recalculating persisted job windows"); + + // We've done our job now, so stop watching the time. + context.unregisterReceiver(this); + + // And kick off the work to update the affected jobs, using a secondary + // thread instead of chugging away here on the main looper thread. + FgThread.getHandler().post(mJobTimeUpdater); + } + } + } + }; + + private final Runnable mJobTimeUpdater = () -> { + final ArrayList<JobStatus> toRemove = new ArrayList<>(); + final ArrayList<JobStatus> toAdd = new ArrayList<>(); + synchronized (mLock) { + // Note: we intentionally both look up the existing affected jobs and replace them + // with recalculated ones inside the same lock lifetime. + getJobStore().getRtcCorrectedJobsLocked(toAdd, toRemove); + + // Now, at each position [i], we have both the existing JobStatus + // and the one that replaces it. + final int N = toAdd.size(); + for (int i = 0; i < N; i++) { + final JobStatus oldJob = toRemove.get(i); + final JobStatus newJob = toAdd.get(i); + if (DEBUG) { + Slog.v(TAG, " replacing " + oldJob + " with " + newJob); + } + cancelJobImplLocked(oldJob, newJob, "deferred rtc calculation"); + } + } + }; + @Override public void onStart() { publishLocalService(JobSchedulerInternal.class, new LocalService()); diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java index a34e251f3608..031bdd0ee39c 100644 --- a/services/core/java/com/android/server/job/JobServiceContext.java +++ b/services/core/java/com/android/server/job/JobServiceContext.java @@ -219,6 +219,10 @@ public final class JobServiceContext implements ServiceConnection { isDeadlineExpired, triggeredUris, triggeredAuthorities); mExecutionStartTimeElapsed = SystemClock.elapsedRealtime(); + // Once we'e begun executing a job, we by definition no longer care whether + // it was inflated from disk with not-yet-coherent delay/deadline bounds. + job.clearPersistedUtcTimes(); + mVerb = VERB_BINDING; scheduleOpTimeOutLocked(); final Intent intent = new Intent().setComponent(job.getServiceComponent()); diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java index 84810bebf1f1..62b06d6242ea 100644 --- a/services/core/java/com/android/server/job/JobStore.java +++ b/services/core/java/com/android/server/job/JobStore.java @@ -72,10 +72,15 @@ public final class JobStore { /** Threshold to adjust how often we want to write to the db. */ private static final int MAX_OPS_BEFORE_WRITE = 1; + final Object mLock; final JobSet mJobSet; // per-caller-uid tracking final Context mContext; + // Bookkeeping around incorrect boot-time system clock + private final long mXmlTimestamp; + private boolean mRtcGood; + private int mDirtyOperations; private static final Object sSingletonLock = new Object(); @@ -120,7 +125,52 @@ public final class JobStore { mJobSet = new JobSet(); - readJobMapFromDisk(mJobSet); + // If the current RTC is earlier than the timestamp on our persisted jobs file, + // we suspect that the RTC is uninitialized and so we cannot draw conclusions + // about persisted job scheduling. + // + // Note that if the persisted jobs file does not exist, we proceed with the + // assumption that the RTC is good. This is less work and is safe: if the + // clock updates to sanity then we'll be saving the persisted jobs file in that + // correct state, which is normal; or we'll wind up writing the jobs file with + // an incorrect historical timestamp. That's fine; at worst we'll reboot with + // a *correct* timestamp, see a bunch of overdue jobs, and run them; then + // settle into normal operation. + mXmlTimestamp = mJobsFile.getLastModifiedTime(); + mRtcGood = (System.currentTimeMillis() > mXmlTimestamp); + + readJobMapFromDisk(mJobSet, mRtcGood); + } + + public boolean jobTimesInflatedValid() { + return mRtcGood; + } + + public boolean clockNowValidToInflate(long now) { + return now >= mXmlTimestamp; + } + + /** + * Find all the jobs that were affected by RTC clock uncertainty at boot time. Returns + * parallel lists of the existing JobStatus objects and of new, equivalent JobStatus instances + * with now-corrected time bounds. + */ + public void getRtcCorrectedJobsLocked(final ArrayList<JobStatus> toAdd, + final ArrayList<JobStatus> toRemove) { + final long elapsedNow = SystemClock.elapsedRealtime(); + + // Find the jobs that need to be fixed up, collecting them for post-iteration + // replacement with their new versions + forEachJob(job -> { + final Pair<Long, Long> utcTimes = job.getPersistedUtcTimes(); + if (utcTimes != null) { + Pair<Long, Long> elapsedRuntimes = + convertRtcBoundsToElapsed(utcTimes, elapsedNow); + toAdd.add(new JobStatus(job, elapsedRuntimes.first, elapsedRuntimes.second, + 0, job.getLastSuccessfulRunTime(), job.getLastFailedRunTime())); + toRemove.add(job); + } + }); } /** @@ -241,8 +291,6 @@ public final class JobStore { /** * Every time the state changes we write all the jobs in one swath, instead of trying to * track incremental changes. - * @return Whether the operation was successful. This will only fail for e.g. if the system is - * low on storage. If this happens, we continue as normal */ private void maybeWriteStatusToDiskAsync() { mDirtyOperations++; @@ -250,20 +298,21 @@ public final class JobStore { if (DEBUG) { Slog.v(TAG, "Writing jobs to disk."); } - mIoHandler.post(new WriteJobsMapToDiskRunnable()); + mIoHandler.removeCallbacks(mWriteRunnable); + mIoHandler.post(mWriteRunnable); } } @VisibleForTesting - public void readJobMapFromDisk(JobSet jobSet) { - new ReadJobMapFromDiskRunnable(jobSet).run(); + public void readJobMapFromDisk(JobSet jobSet, boolean rtcGood) { + new ReadJobMapFromDiskRunnable(jobSet, rtcGood).run(); } /** * Runnable that writes {@link #mJobSet} out to xml. * NOTE: This Runnable locks on mLock */ - private final class WriteJobsMapToDiskRunnable implements Runnable { + private final Runnable mWriteRunnable = new Runnable() { @Override public void run() { final long startElapsed = SystemClock.elapsedRealtime(); @@ -280,7 +329,7 @@ public final class JobStore { }); } writeJobsMapImpl(storeCopy); - if (JobSchedulerService.DEBUG) { + if (DEBUG) { Slog.v(TAG, "Finished writing, took " + (SystemClock.elapsedRealtime() - startElapsed) + "ms"); } @@ -311,7 +360,7 @@ public final class JobStore { out.endTag(null, "job-info"); out.endDocument(); - // Write out to disk in one fell sweep. + // Write out to disk in one fell swoop. FileOutputStream fos = mJobsFile.startWrite(); fos.write(baos.toByteArray()); mJobsFile.finishWrite(fos); @@ -417,15 +466,27 @@ public final class JobStore { out.startTag(null, XML_TAG_ONEOFF); } + // If we still have the persisted times, we need to record those directly because + // we haven't yet been able to calculate the usual elapsed-timebase bounds + // correctly due to wall-clock uncertainty. + Pair <Long, Long> utcJobTimes = jobStatus.getPersistedUtcTimes(); + if (DEBUG && utcJobTimes != null) { + Slog.i(TAG, "storing original UTC timestamps for " + jobStatus); + } + + final long nowRTC = System.currentTimeMillis(); + final long nowElapsed = SystemClock.elapsedRealtime(); if (jobStatus.hasDeadlineConstraint()) { // Wall clock deadline. - final long deadlineWallclock = System.currentTimeMillis() + - (jobStatus.getLatestRunTimeElapsed() - SystemClock.elapsedRealtime()); + final long deadlineWallclock = (utcJobTimes == null) + ? nowRTC + (jobStatus.getLatestRunTimeElapsed() - nowElapsed) + : utcJobTimes.second; out.attribute(null, "deadline", Long.toString(deadlineWallclock)); } if (jobStatus.hasTimingDelayConstraint()) { - final long delayWallclock = System.currentTimeMillis() + - (jobStatus.getEarliestRunTime() - SystemClock.elapsedRealtime()); + final long delayWallclock = (utcJobTimes == null) + ? nowRTC + (jobStatus.getEarliestRunTime() - nowElapsed) + : utcJobTimes.first; out.attribute(null, "delay", Long.toString(delayWallclock)); } @@ -443,6 +504,25 @@ public final class JobStore { out.endTag(null, XML_TAG_ONEOFF); } } + }; + + /** + * Translate the supplied RTC times to the elapsed timebase, with clamping appropriate + * to interpreting them as a job's delay + deadline times for alarm-setting purposes. + * @param rtcTimes a Pair<Long, Long> in which {@code first} is the "delay" earliest + * allowable runtime for the job, and {@code second} is the "deadline" time at which + * the job becomes overdue. + */ + private static Pair<Long, Long> convertRtcBoundsToElapsed(Pair<Long, Long> rtcTimes, + long nowElapsed) { + final long nowWallclock = System.currentTimeMillis(); + final long earliest = (rtcTimes.first > JobStatus.NO_EARLIEST_RUNTIME) + ? nowElapsed + Math.max(rtcTimes.first - nowWallclock, 0) + : JobStatus.NO_EARLIEST_RUNTIME; + final long latest = (rtcTimes.second < JobStatus.NO_LATEST_RUNTIME) + ? nowElapsed + Math.max(rtcTimes.second - nowWallclock, 0) + : JobStatus.NO_LATEST_RUNTIME; + return Pair.create(earliest, latest); } /** @@ -451,13 +531,15 @@ public final class JobStore { */ private final class ReadJobMapFromDiskRunnable implements Runnable { private final JobSet jobSet; + private final boolean rtcGood; /** * @param jobSet Reference to the (empty) set of JobStatus objects that back the JobStore, * so that after disk read we can populate it directly. */ - ReadJobMapFromDiskRunnable(JobSet jobSet) { + ReadJobMapFromDiskRunnable(JobSet jobSet, boolean rtcIsGood) { this.jobSet = jobSet; + this.rtcGood = rtcIsGood; } @Override @@ -466,7 +548,7 @@ public final class JobStore { List<JobStatus> jobs; FileInputStream fis = mJobsFile.openRead(); synchronized (mLock) { - jobs = readJobMapImpl(fis); + jobs = readJobMapImpl(fis, rtcGood); if (jobs != null) { long now = SystemClock.elapsedRealtime(); IActivityManager am = ActivityManager.getService(); @@ -480,21 +562,21 @@ public final class JobStore { } fis.close(); } catch (FileNotFoundException e) { - if (JobSchedulerService.DEBUG) { + if (DEBUG) { Slog.d(TAG, "Could not find jobs file, probably there was nothing to load."); } } catch (XmlPullParserException e) { - if (JobSchedulerService.DEBUG) { + if (DEBUG) { Slog.d(TAG, "Error parsing xml.", e); } } catch (IOException e) { - if (JobSchedulerService.DEBUG) { + if (DEBUG) { Slog.d(TAG, "Error parsing xml.", e); } } } - private List<JobStatus> readJobMapImpl(FileInputStream fis) + private List<JobStatus> readJobMapImpl(FileInputStream fis, boolean rtcIsGood) throws XmlPullParserException, IOException { XmlPullParser parser = Xml.newPullParser(); parser.setInput(fis, StandardCharsets.UTF_8.name()); @@ -533,7 +615,7 @@ public final class JobStore { tagName = parser.getName(); // Start reading job. if ("job".equals(tagName)) { - JobStatus persistedJob = restoreJobFromXml(parser); + JobStatus persistedJob = restoreJobFromXml(rtcIsGood, parser); if (persistedJob != null) { if (DEBUG) { Slog.d(TAG, "Read out " + persistedJob); @@ -556,8 +638,8 @@ public final class JobStore { * will take the parser into the body of the job tag. * @return Newly instantiated job holding all the information we just read out of the xml tag. */ - private JobStatus restoreJobFromXml(XmlPullParser parser) throws XmlPullParserException, - IOException { + private JobStatus restoreJobFromXml(boolean rtcIsGood, XmlPullParser parser) + throws XmlPullParserException, IOException { JobInfo.Builder jobBuilder; int uid, sourceUserId; long lastSuccessfulRunTime; @@ -621,10 +703,10 @@ public final class JobStore { return null; } - // Tuple of (earliest runtime, latest runtime) in elapsed realtime after disk load. - Pair<Long, Long> elapsedRuntimes; + // Tuple of (earliest runtime, latest runtime) in UTC. + final Pair<Long, Long> rtcRuntimes; try { - elapsedRuntimes = buildExecutionTimesFromXml(parser); + rtcRuntimes = buildRtcExecutionTimesFromXml(parser); } catch (NumberFormatException e) { if (DEBUG) { Slog.d(TAG, "Error parsing execution time parameters, skipping."); @@ -633,6 +715,8 @@ public final class JobStore { } final long elapsedNow = SystemClock.elapsedRealtime(); + Pair<Long, Long> elapsedRuntimes = convertRtcBoundsToElapsed(rtcRuntimes, elapsedNow); + if (XML_TAG_PERIODIC.equals(parser.getName())) { try { String val = parser.getAttributeValue(null, "period"); @@ -722,7 +806,8 @@ public final class JobStore { JobStatus js = new JobStatus( jobBuilder.build(), uid, sourcePackageName, sourceUserId, sourceTag, elapsedRuntimes.first, elapsedRuntimes.second, - lastSuccessfulRunTime, lastFailedRunTime); + lastSuccessfulRunTime, lastFailedRunTime, + (rtcIsGood) ? null : rtcRuntimes); return js; } @@ -778,6 +863,32 @@ public final class JobStore { } /** + * Extract a job's earliest/latest run time data from XML. These are returned in + * unadjusted UTC wall clock time, because we do not yet know whether the system + * clock is reliable for purposes of calculating deltas from 'now'. + * + * @param parser + * @return A Pair of timestamps in UTC wall-clock time. The first is the earliest + * time at which the job is to become runnable, and the second is the deadline at + * which it becomes overdue to execute. + * @throws NumberFormatException + */ + private Pair<Long, Long> buildRtcExecutionTimesFromXml(XmlPullParser parser) + throws NumberFormatException { + String val; + // Pull out execution time data. + val = parser.getAttributeValue(null, "delay"); + final long earliestRunTimeRtc = (val != null) + ? Long.parseLong(val) + : JobStatus.NO_EARLIEST_RUNTIME; + val = parser.getAttributeValue(null, "deadline"); + final long latestRunTimeRtc = (val != null) + ? Long.parseLong(val) + : JobStatus.NO_LATEST_RUNTIME; + return Pair.create(earliestRunTimeRtc, latestRunTimeRtc); + } + + /** * Convenience function to read out and convert deadline and delay from xml into elapsed real * time. * @return A {@link android.util.Pair}, where the first value is the earliest elapsed runtime diff --git a/services/core/java/com/android/server/job/controllers/JobStatus.java b/services/core/java/com/android/server/job/controllers/JobStatus.java index 9658da7a5de0..303b0007e1f7 100644 --- a/services/core/java/com/android/server/job/controllers/JobStatus.java +++ b/services/core/java/com/android/server/job/controllers/JobStatus.java @@ -28,10 +28,12 @@ import android.os.SystemClock; import android.os.UserHandle; import android.text.format.Time; import android.util.ArraySet; +import android.util.Pair; import android.util.Slog; import android.util.TimeUtils; import com.android.server.job.GrantedUriPermissions; +import com.android.server.job.JobSchedulerService; import java.io.PrintWriter; import java.util.ArrayList; @@ -50,6 +52,7 @@ import java.util.Arrays; */ public final class JobStatus { static final String TAG = "JobSchedulerService"; + static final boolean DEBUG = JobSchedulerService.DEBUG; public static final long NO_LATEST_RUNTIME = Long.MAX_VALUE; public static final long NO_EARLIEST_RUNTIME = 0L; @@ -196,6 +199,18 @@ public final class JobStatus { private long mLastFailedRunTime; /** + * Transient: when a job is inflated from disk before we have a reliable RTC clock time, + * we retain the canonical (delay, deadline) scheduling tuple read out of the persistent + * store in UTC so that we can fix up the job's scheduling criteria once we get a good + * wall-clock time. If we have to persist the job again before the clock has been updated, + * we record these times again rather than calculating based on the earliest/latest elapsed + * time base figures. + * + * 'first' is the earliest/delay time, and 'second' is the latest/deadline time. + */ + private Pair<Long, Long> mPersistedUtcTimes; + + /** * For use only by ContentObserverController: state it is maintaining about content URIs * being observed. */ @@ -280,13 +295,20 @@ public final class JobStatus { mLastFailedRunTime = lastFailedRunTime; } - /** Copy constructor. */ + /** Copy constructor: used specifically when cloning JobStatus objects for persistence, + * so we preserve RTC window bounds if the source object has them. */ public JobStatus(JobStatus jobStatus) { this(jobStatus.getJob(), jobStatus.getUid(), jobStatus.getSourcePackageName(), jobStatus.getSourceUserId(), jobStatus.getSourceTag(), jobStatus.getNumFailures(), jobStatus.getEarliestRunTime(), jobStatus.getLatestRunTimeElapsed(), jobStatus.getLastSuccessfulRunTime(), jobStatus.getLastFailedRunTime()); + mPersistedUtcTimes = jobStatus.mPersistedUtcTimes; + if (jobStatus.mPersistedUtcTimes != null) { + if (DEBUG) { + Slog.i(TAG, "Cloning job with persisted run times", new RuntimeException("here")); + } + } } /** @@ -298,10 +320,22 @@ public final class JobStatus { */ public JobStatus(JobInfo job, int callingUid, String sourcePackageName, int sourceUserId, String sourceTag, long earliestRunTimeElapsedMillis, long latestRunTimeElapsedMillis, - long lastSuccessfulRunTime, long lastFailedRunTime) { + long lastSuccessfulRunTime, long lastFailedRunTime, + Pair<Long, Long> persistedExecutionTimesUTC) { this(job, callingUid, sourcePackageName, sourceUserId, sourceTag, 0, earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis, lastSuccessfulRunTime, lastFailedRunTime); + + // Only during initial inflation do we record the UTC-timebase execution bounds + // read from the persistent store. If we ever have to recreate the JobStatus on + // the fly, it means we're rescheduling the job; and this means that the calculated + // elapsed timebase bounds intrinsically become correct. + this.mPersistedUtcTimes = persistedExecutionTimesUTC; + if (persistedExecutionTimesUTC != null) { + if (DEBUG) { + Slog.i(TAG, "+ restored job with RTC times because of bad boot clock"); + } + } } /** Create a new job to be rescheduled with the provided parameters. */ @@ -612,6 +646,14 @@ public final class JobStatus { return latestRunTimeElapsedMillis; } + public Pair<Long, Long> getPersistedUtcTimes() { + return mPersistedUtcTimes; + } + + public void clearPersistedUtcTimes() { + mPersistedUtcTimes = null; + } + boolean setChargingConstraintSatisfied(boolean state) { return setConstraintSatisfied(CONSTRAINT_CHARGING, state); } @@ -799,6 +841,9 @@ public final class JobStatus { if (job.isRequireDeviceIdle()) { sb.append(" IDLE"); } + if (job.isPeriodic()) { + sb.append(" PERIODIC"); + } if (job.isPersisted()) { sb.append(" PERSISTED"); } diff --git a/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java b/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java index 4facbb87af42..d39679dcfad0 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java @@ -160,6 +160,11 @@ class LockSettingsShellCommand extends ShellCommand { final boolean havePassword = mLockPatternUtils.isLockPasswordEnabled(mCurrentUserId); final boolean havePattern = mLockPatternUtils.isLockPatternEnabled(mCurrentUserId); if (havePassword || havePattern) { + if (mLockPatternUtils.isManagedProfileWithUnifiedChallenge(mCurrentUserId)) { + getOutPrintWriter().println("Profile uses unified challenge"); + return false; + } + try { final boolean result; if (havePassword) { @@ -168,7 +173,9 @@ class LockSettingsShellCommand extends ShellCommand { result = mLockPatternUtils.checkPattern(stringToPattern(mOld), mCurrentUserId); } if (!result) { - mLockPatternUtils.reportFailedPasswordAttempt(mCurrentUserId); + if (!mLockPatternUtils.isManagedProfileWithUnifiedChallenge(mCurrentUserId)) { + mLockPatternUtils.reportFailedPasswordAttempt(mCurrentUserId); + } getOutPrintWriter().println("Old password '" + mOld + "' didn't match"); } return result; diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java index 5ba8f4853407..922df1e3dba8 100644 --- a/services/core/java/com/android/server/media/MediaRouterService.java +++ b/services/core/java/com/android/server/media/MediaRouterService.java @@ -355,7 +355,7 @@ public final class MediaRouterService extends IMediaRouterService.Stub void restoreRoute(int uid) { ClientRecord clientRecord = null; UserRecord userRecord = mUserRecords.get(UserHandle.getUserId(uid)); - if (userRecord.mClientRecords != null) { + if (userRecord != null && userRecord.mClientRecords != null) { for (ClientRecord cr : userRecord.mClientRecords) { if (validatePackageName(uid, cr.mPackageName)) { clientRecord = cr; diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index f70486a8b889..aabb24573084 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -19,6 +19,7 @@ package com.android.server.net; import static android.Manifest.permission.ACCESS_NETWORK_STATE; import static android.Manifest.permission.CONNECTIVITY_INTERNAL; import static android.Manifest.permission.MANAGE_NETWORK_POLICY; +import static android.Manifest.permission.MANAGE_SUBSCRIPTION_PLANS; import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY; import static android.Manifest.permission.READ_PHONE_STATE; import static android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE; @@ -311,6 +312,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final String ATTR_LIMIT_BEHAVIOR = "limitBehavior"; private static final String ATTR_USAGE_BYTES = "usageBytes"; private static final String ATTR_USAGE_TIME = "usageTime"; + private static final String ATTR_OWNER_PACKAGE = "ownerPackage"; private static final String ACTION_ALLOW_BACKGROUND = "com.android.server.net.action.ALLOW_BACKGROUND"; @@ -372,8 +374,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { /** Currently active network rules for ifaces. */ final ArrayMap<NetworkPolicy, String[]> mNetworkRules = new ArrayMap<>(); - /** Defined subscription plans. */ + /** Map from subId to subscription plans. */ final SparseArray<SubscriptionPlan[]> mSubscriptionPlans = new SparseArray<>(); + /** Map from subId to package name that owns subscription plans. */ + final SparseArray<String> mSubscriptionPlansOwner = new SparseArray<>(); /** Defined UID policies. */ @GuardedBy("mUidRulesFirstLock") final SparseIntArray mUidPolicy = new SparseIntArray(); @@ -1261,13 +1265,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { * @param subId that has its associated NetworkPolicy updated if necessary * @return if any policies were updated */ - private boolean maybeUpdateMobilePolicyCycleNL(int subId) { - if (LOGV) Slog.v(TAG, "maybeUpdateMobilePolicyCycleNL()"); - final PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId); - - if (config == null) { - return false; - } + private boolean maybeUpdateMobilePolicyCycleAL(int subId) { + if (LOGV) Slog.v(TAG, "maybeUpdateMobilePolicyCycleAL()"); boolean policyUpdated = false; final String subscriberId = TelephonyManager.from(mContext).getSubscriberId(subId); @@ -1278,48 +1277,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { for (int i = mNetworkPolicy.size() - 1; i >= 0; i--) { final NetworkTemplate template = mNetworkPolicy.keyAt(i); if (template.matches(probeIdent)) { - NetworkPolicy policy = mNetworkPolicy.valueAt(i); - - // only update the policy if the user didn't change any of the defaults. - if (!policy.inferred) { - // TODO: inferred could be split, so that if a user changes their data limit or - // warning, it doesn't prevent their cycle date from being updated. - if (LOGD) Slog.v(TAG, "Didn't update NetworkPolicy because policy.inferred"); - continue; - } - - final int currentCycleDay; - if (policy.cycleRule.isMonthly()) { - currentCycleDay = policy.cycleRule.start.getDayOfMonth(); - } else { - currentCycleDay = NetworkPolicy.CYCLE_NONE; - } - - final int cycleDay = getCycleDayFromCarrierConfig(config, currentCycleDay); - final long warningBytes = getWarningBytesFromCarrierConfig(config, - policy.warningBytes); - final long limitBytes = getLimitBytesFromCarrierConfig(config, - policy.limitBytes); - - if (currentCycleDay == cycleDay && - policy.warningBytes == warningBytes && - policy.limitBytes == limitBytes) { - continue; - } - - policyUpdated = true; - policy.cycleRule = NetworkPolicy.buildRule(cycleDay, ZoneId.systemDefault()); - policy.warningBytes = warningBytes; - policy.limitBytes = limitBytes; - - if (LOGD) { - Slog.d(TAG, "Updated NetworkPolicy " + policy + " which matches subscriber " - + NetworkIdentity.scrubSubscriberId(subscriberId) - + " from CarrierConfigManager"); - } + final NetworkPolicy policy = mNetworkPolicy.valueAt(i); + policyUpdated |= updateDefaultMobilePolicyAL(subId, policy); } } - return policyUpdated; } @@ -1441,7 +1402,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { synchronized (mNetworkPoliciesSecondLock) { final boolean added = ensureActiveMobilePolicyAL(subId, subscriberId); if (added) return; - final boolean updated = maybeUpdateMobilePolicyCycleNL(subId); + final boolean updated = maybeUpdateMobilePolicyCycleAL(subId); if (!updated) return; // update network and notification rules, as the data cycle changed and it's // possible that we should be triggering warnings/limits now @@ -1598,12 +1559,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final NetworkPolicy policy = mNetworkRules.keyAt(i); final String[] ifaces = mNetworkRules.valueAt(i); - final Pair<ZonedDateTime, ZonedDateTime> cycle = NetworkPolicyManager - .cycleIterator(policy).next(); - final long start = cycle.first.toInstant().toEpochMilli(); - final long end = cycle.second.toInstant().toEpochMilli(); - final long totalBytes = getTotalBytes(policy.template, start, end); - if (LOGD) { Slog.d(TAG, "applying policy " + policy + " to ifaces " + Arrays.toString(ifaces)); } @@ -1612,19 +1567,27 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final boolean hasLimit = policy.limitBytes != LIMIT_DISABLED; if (hasLimit || policy.metered) { final long quotaBytes; - if (!hasLimit) { + if (hasLimit && policy.hasCycle()) { + final Pair<ZonedDateTime, ZonedDateTime> cycle = NetworkPolicyManager + .cycleIterator(policy).next(); + final long start = cycle.first.toInstant().toEpochMilli(); + final long end = cycle.second.toInstant().toEpochMilli(); + final long totalBytes = getTotalBytes(policy.template, start, end); + + if (policy.lastLimitSnooze >= start) { + // snoozing past quota, but we still need to restrict apps, + // so push really high quota. + quotaBytes = Long.MAX_VALUE; + } else { + // remaining "quota" bytes are based on total usage in + // current cycle. kernel doesn't like 0-byte rules, so we + // set 1-byte quota and disable the radio later. + quotaBytes = Math.max(1, policy.limitBytes - totalBytes); + } + } else { // metered network, but no policy limit; we still need to // restrict apps, so push really high quota. quotaBytes = Long.MAX_VALUE; - } else if (policy.lastLimitSnooze >= start) { - // snoozing past quota, but we still need to restrict apps, - // so push really high quota. - quotaBytes = Long.MAX_VALUE; - } else { - // remaining "quota" bytes are based on total usage in - // current cycle. kernel doesn't like 0-byte rules, so we - // set 1-byte quota and disable the radio later. - quotaBytes = Math.max(1, policy.limitBytes - totalBytes); } if (ifaces.length > 1) { @@ -1739,28 +1702,89 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { @VisibleForTesting public NetworkPolicy buildDefaultMobilePolicy(int subId, String subscriberId) { - PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId); - - final int cycleDay = getCycleDayFromCarrierConfig(config, - ZonedDateTime.now().getDayOfMonth()); - final long warningBytes = getWarningBytesFromCarrierConfig(config, - getPlatformDefaultWarningBytes()); - final long limitBytes = getLimitBytesFromCarrierConfig(config, - getPlatformDefaultLimitBytes()); - final NetworkTemplate template = buildTemplateMobileAll(subscriberId); - final RecurrenceRule cycleRule = NetworkPolicy.buildRule(cycleDay, ZoneId.systemDefault()); + final RecurrenceRule cycleRule = NetworkPolicy + .buildRule(ZonedDateTime.now().getDayOfMonth(), ZoneId.systemDefault()); final NetworkPolicy policy = new NetworkPolicy(template, cycleRule, - warningBytes, limitBytes, SNOOZE_NEVER, SNOOZE_NEVER, true, true); + getPlatformDefaultWarningBytes(), getPlatformDefaultLimitBytes(), + SNOOZE_NEVER, SNOOZE_NEVER, true, true); + synchronized (mUidRulesFirstLock) { + synchronized (mNetworkPoliciesSecondLock) { + updateDefaultMobilePolicyAL(subId, policy); + } + } return policy; } + /** + * Update the given {@link NetworkPolicy} based on any carrier-provided + * defaults via {@link SubscriptionPlan} or {@link CarrierConfigManager}. + * Leaves policy untouched if the user has modified it. + * + * @return if the policy was modified + */ + private boolean updateDefaultMobilePolicyAL(int subId, NetworkPolicy policy) { + if (!policy.inferred) { + if (LOGD) Slog.d(TAG, "Ignoring user-defined policy " + policy); + return false; + } + + final NetworkPolicy original = new NetworkPolicy(policy.template, policy.cycleRule, + policy.warningBytes, policy.limitBytes, policy.lastWarningSnooze, + policy.lastLimitSnooze, policy.metered, policy.inferred); + + final SubscriptionPlan[] plans = mSubscriptionPlans.get(subId); + if (!ArrayUtils.isEmpty(plans)) { + final SubscriptionPlan plan = plans[0]; + policy.cycleRule = plan.getCycleRule(); + final long planLimitBytes = plan.getDataLimitBytes(); + if (planLimitBytes == SubscriptionPlan.BYTES_UNKNOWN) { + policy.warningBytes = getPlatformDefaultWarningBytes(); + policy.limitBytes = getPlatformDefaultLimitBytes(); + } else if (planLimitBytes == SubscriptionPlan.BYTES_UNLIMITED) { + policy.warningBytes = NetworkPolicy.WARNING_DISABLED; + policy.limitBytes = NetworkPolicy.LIMIT_DISABLED; + } else { + policy.warningBytes = (planLimitBytes * 9) / 10; + switch (plan.getDataLimitBehavior()) { + case SubscriptionPlan.LIMIT_BEHAVIOR_BILLED: + case SubscriptionPlan.LIMIT_BEHAVIOR_DISABLED: + policy.limitBytes = planLimitBytes; + break; + default: + policy.limitBytes = NetworkPolicy.LIMIT_DISABLED; + break; + } + } + } else { + final PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId); + final int currentCycleDay; + if (policy.cycleRule.isMonthly()) { + currentCycleDay = policy.cycleRule.start.getDayOfMonth(); + } else { + currentCycleDay = NetworkPolicy.CYCLE_NONE; + } + final int cycleDay = getCycleDayFromCarrierConfig(config, currentCycleDay); + policy.cycleRule = NetworkPolicy.buildRule(cycleDay, ZoneId.systemDefault()); + policy.warningBytes = getWarningBytesFromCarrierConfig(config, policy.warningBytes); + policy.limitBytes = getLimitBytesFromCarrierConfig(config, policy.limitBytes); + } + + if (policy.equals(original)) { + return false; + } else { + Slog.d(TAG, "Updated " + original + " to " + policy); + return true; + } + } + private void readPolicyAL() { if (LOGV) Slog.v(TAG, "readPolicyAL()"); // clear any existing policy and read from disk mNetworkPolicy.clear(); mSubscriptionPlans.clear(); + mSubscriptionPlansOwner.clear(); mUidPolicy.clear(); FileInputStream fis = null; @@ -1902,6 +1926,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { mSubscriptionPlans.put(subId, ArrayUtils.appendElement( SubscriptionPlan.class, mSubscriptionPlans.get(subId), plan)); + final String ownerPackage = readStringAttribute(in, ATTR_OWNER_PACKAGE); + mSubscriptionPlansOwner.put(subId, ownerPackage); + } else if (TAG_UID_POLICY.equals(tag)) { final int uid = readIntAttribute(in, ATTR_UID); final int policy = readIntAttribute(in, ATTR_POLICY); @@ -2074,12 +2101,14 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { // write all known subscription plans for (int i = 0; i < mSubscriptionPlans.size(); i++) { final int subId = mSubscriptionPlans.keyAt(i); + final String ownerPackage = mSubscriptionPlansOwner.get(subId); final SubscriptionPlan[] plans = mSubscriptionPlans.valueAt(i); if (ArrayUtils.isEmpty(plans)) continue; for (SubscriptionPlan plan : plans) { out.startTag(null, TAG_SUBSCRIPTION_PLAN); writeIntAttribute(out, ATTR_SUB_ID, subId); + writeStringAttribute(out, ATTR_OWNER_PACKAGE, ownerPackage); final RecurrenceRule cycleRule = plan.getCycleRule(); writeStringAttribute(out, ATTR_CYCLE_START, RecurrenceRule.convertZonedDateTime(cycleRule.start)); @@ -2589,14 +2618,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { // Verify they're not lying about package name mAppOps.checkPackage(callingUid, callingPackage); - // Verify they have phone permission from user - mContext.enforceCallingOrSelfPermission(READ_PHONE_STATE, TAG); - if (mAppOps.checkOp(AppOpsManager.OP_READ_PHONE_STATE, callingUid, - callingPackage) != AppOpsManager.MODE_ALLOWED) { - throw new SecurityException( - "Calling package " + callingPackage + " does not hold " + READ_PHONE_STATE); - } - final SubscriptionInfo si; final PersistableBundle config; final long token = Binder.clearCallingIdentity(); @@ -2609,8 +2630,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } // First check: is caller the CarrierService? - if (si.isEmbedded() && si.canManageSubscription(mContext, callingPackage)) { - return; + if (si != null) { + if (si.isEmbedded() && si.canManageSubscription(mContext, callingPackage)) { + return; + } } // Second check: has the CarrierService delegated access? @@ -2630,8 +2653,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return; } - throw new SecurityException("Calling package " + callingPackage - + " has no access to subscription plans for " + subId); + // Final check: does the caller hold a permission? + mContext.enforceCallingOrSelfPermission(MANAGE_SUBSCRIPTION_PLANS, TAG); } @Override @@ -2650,6 +2673,22 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { .setDataUsage(1 * TrafficStats.GB_IN_BYTES, ZonedDateTime.now().minusHours(36).toInstant().toEpochMilli()) .build()); + plans.add(SubscriptionPlan.Builder + .createRecurringMonthly(ZonedDateTime.parse("2017-03-14T00:00:00.000Z")) + .setTitle("G-Mobile Happy") + .setDataLimit(SubscriptionPlan.BYTES_UNLIMITED, + SubscriptionPlan.LIMIT_BEHAVIOR_BILLED) + .setDataUsage(5 * TrafficStats.GB_IN_BYTES, + ZonedDateTime.now().minusHours(36).toInstant().toEpochMilli()) + .build()); + plans.add(SubscriptionPlan.Builder + .createRecurringMonthly(ZonedDateTime.parse("2017-03-14T00:00:00.000Z")) + .setTitle("G-Mobile, Charged after limit") + .setDataLimit(5 * TrafficStats.GB_IN_BYTES, + SubscriptionPlan.LIMIT_BEHAVIOR_BILLED) + .setDataUsage(5 * TrafficStats.GB_IN_BYTES, + ZonedDateTime.now().minusHours(36).toInstant().toEpochMilli()) + .build()); } else if ("month_soft".equals(fake)) { plans.add(SubscriptionPlan.Builder .createRecurringMonthly(ZonedDateTime.parse("2007-03-14T00:00:00.000Z")) @@ -2661,6 +2700,23 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { .setDataUsage(1 * TrafficStats.GB_IN_BYTES, ZonedDateTime.now().minusHours(1).toInstant().toEpochMilli()) .build()); + plans.add(SubscriptionPlan.Builder + .createRecurringMonthly(ZonedDateTime.parse("2017-03-14T00:00:00.000Z")) + .setTitle("G-Mobile, Throttled after limit") + .setDataLimit(5 * TrafficStats.GB_IN_BYTES, + SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED) + .setDataUsage(5 * TrafficStats.GB_IN_BYTES, + ZonedDateTime.now().minusHours(1).toInstant().toEpochMilli()) + .build()); + plans.add(SubscriptionPlan.Builder + .createRecurringMonthly(ZonedDateTime.parse("2017-03-14T00:00:00.000Z")) + .setTitle("G-Mobile, No data connection after limit") + .setDataLimit(5 * TrafficStats.GB_IN_BYTES, + SubscriptionPlan.LIMIT_BEHAVIOR_DISABLED) + .setDataUsage(5 * TrafficStats.GB_IN_BYTES, + ZonedDateTime.now().minusHours(1).toInstant().toEpochMilli()) + .build()); + } else if ("month_none".equals(fake)) { plans.add(SubscriptionPlan.Builder .createRecurringMonthly(ZonedDateTime.parse("2007-03-14T00:00:00.000Z")) @@ -2691,6 +2747,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { ZonedDateTime.now().plusDays(20)) .setTitle("G-Mobile Nickel Nights") .setSummary("5¢/GB between 1-5AM") + .setDataLimit(5 * TrafficStats.GB_IN_BYTES, + SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED) .setDataUsage(15 * TrafficStats.MB_IN_BYTES, ZonedDateTime.now().minusHours(30).toInstant().toEpochMilli()) .build()); @@ -2699,18 +2757,39 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { ZonedDateTime.now().plusDays(20)) .setTitle("G-Mobile Bonus 3G") .setSummary("Unlimited 3G data") - .setDataLimit(5 * TrafficStats.GB_IN_BYTES, + .setDataLimit(1 * TrafficStats.GB_IN_BYTES, SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED) .setDataUsage(300 * TrafficStats.MB_IN_BYTES, ZonedDateTime.now().minusHours(1).toInstant().toEpochMilli()) .build()); + } else if ("unlimited".equals(fake)) { + plans.add(SubscriptionPlan.Builder + .createNonrecurring(ZonedDateTime.now().minusDays(20), + ZonedDateTime.now().plusDays(10)) + .setTitle("G-Mobile Awesome") + .setDataLimit(SubscriptionPlan.BYTES_UNLIMITED, + SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED) + .setDataUsage(50 * TrafficStats.MB_IN_BYTES, + ZonedDateTime.now().minusHours(3).toInstant().toEpochMilli()) + .build()); } return plans.toArray(new SubscriptionPlan[plans.size()]); } synchronized (mUidRulesFirstLock) { synchronized (mNetworkPoliciesSecondLock) { - return mSubscriptionPlans.get(subId); + // Only give out plan details to the package that defined them, + // so that we don't risk leaking plans between apps. We always + // let in core system components (like the Settings app). + final String ownerPackage = mSubscriptionPlansOwner.get(subId); + if (Objects.equals(ownerPackage, callingPackage) + || (UserHandle.getCallingAppId() == android.os.Process.SYSTEM_UID)) { + return mSubscriptionPlans.get(subId); + } else { + Log.w(TAG, "Not returning plans because caller " + callingPackage + + " doesn't match owner " + ownerPackage); + return null; + } } } } @@ -2729,8 +2808,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { synchronized (mUidRulesFirstLock) { synchronized (mNetworkPoliciesSecondLock) { mSubscriptionPlans.put(subId, plans); - // TODO: update any implicit details from newly defined plans - handleNetworkPoliciesUpdateAL(false); + mSubscriptionPlansOwner.put(subId, callingPackage); + + final String subscriberId = mContext.getSystemService(TelephonyManager.class) + .getSubscriberId(subId); + ensureActiveMobilePolicyAL(subId, subscriberId); + maybeUpdateMobilePolicyCycleAL(subId); + handleNetworkPoliciesUpdateAL(true); } } } finally { @@ -2766,6 +2850,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { fout.print("Restrict background: "); fout.println(mRestrictBackground); fout.print("Restrict power: "); fout.println(mRestrictPower); fout.print("Device idle: "); fout.println(mDeviceIdleMode); + fout.print("Metered ifaces: "); fout.println(String.valueOf(mMeteredIfaces)); + + fout.println(); fout.println("Network policies:"); fout.increaseIndent(); for (int i = 0; i < mNetworkPolicy.size(); i++) { @@ -2773,8 +2860,24 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } fout.decreaseIndent(); - fout.print("Metered ifaces: "); fout.println(String.valueOf(mMeteredIfaces)); + fout.println(); + fout.println("Subscription plans:"); + fout.increaseIndent(); + for (int i = 0; i < mSubscriptionPlans.size(); i++) { + final int subId = mSubscriptionPlans.keyAt(i); + fout.println("Subscriber ID " + subId + ":"); + fout.increaseIndent(); + final SubscriptionPlan[] plans = mSubscriptionPlans.valueAt(i); + if (!ArrayUtils.isEmpty(plans)) { + for (SubscriptionPlan plan : plans) { + fout.println(plan); + } + } + fout.decreaseIndent(); + } + fout.decreaseIndent(); + fout.println(); fout.println("Policy for UIDs:"); fout.increaseIndent(); int size = mUidPolicy.size(); diff --git a/services/core/java/com/android/server/notification/CountdownConditionProvider.java b/services/core/java/com/android/server/notification/CountdownConditionProvider.java index c1a7ac63aa46..c165fc13cc52 100644 --- a/services/core/java/com/android/server/notification/CountdownConditionProvider.java +++ b/services/core/java/com/android/server/notification/CountdownConditionProvider.java @@ -52,6 +52,7 @@ public class CountdownConditionProvider extends SystemConditionProviderService { private boolean mConnected; private long mTime; + private boolean mIsAlarm; public CountdownConditionProvider() { if (DEBUG) Slog.d(TAG, "new CountdownConditionProvider()"); @@ -110,9 +111,11 @@ public class CountdownConditionProvider extends SystemConditionProviderService { public void onSubscribe(Uri conditionId) { if (DEBUG) Slog.d(TAG, "onSubscribe " + conditionId); mTime = ZenModeConfig.tryParseCountdownConditionId(conditionId); + mIsAlarm = ZenModeConfig.isValidCountdownToAlarmConditionId(conditionId); final AlarmManager alarms = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); - final Intent intent = new Intent(ACTION).putExtra(EXTRA_CONDITION_ID, conditionId) + final Intent intent = new Intent(ACTION) + .putExtra(EXTRA_CONDITION_ID, conditionId) .setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT); @@ -123,7 +126,7 @@ public class CountdownConditionProvider extends SystemConditionProviderService { DateUtils.getRelativeTimeSpanString(mTime, now, DateUtils.MINUTE_IN_MILLIS); if (mTime <= now) { // in the past, already false - notifyCondition(newCondition(mTime, Condition.STATE_FALSE)); + notifyCondition(newCondition(mTime, mIsAlarm, Condition.STATE_FALSE)); } else { // in the future, set an alarm alarms.setExact(AlarmManager.RTC_WAKEUP, mTime, pendingIntent); @@ -145,17 +148,18 @@ public class CountdownConditionProvider extends SystemConditionProviderService { public void onReceive(Context context, Intent intent) { if (ACTION.equals(intent.getAction())) { final Uri conditionId = intent.getParcelableExtra(EXTRA_CONDITION_ID); + final boolean alarm = ZenModeConfig.isValidCountdownToAlarmConditionId(conditionId); final long time = ZenModeConfig.tryParseCountdownConditionId(conditionId); if (DEBUG) Slog.d(TAG, "Countdown condition fired: " + conditionId); if (time > 0) { - notifyCondition(newCondition(time, Condition.STATE_FALSE)); + notifyCondition(newCondition(time, alarm, Condition.STATE_FALSE)); } } } } - private static final Condition newCondition(long time, int state) { - return new Condition(ZenModeConfig.toCountdownConditionId(time), + private static final Condition newCondition(long time, boolean alarm, int state) { + return new Condition(ZenModeConfig.toCountdownConditionId(time, alarm), "", "", "", 0, state,Condition.FLAG_RELEVANT_NOW); } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index fb391f885874..75b24a9461bc 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -21,6 +21,7 @@ import static android.app.NotificationManager.IMPORTANCE_NONE; import static android.content.pm.PackageManager.FEATURE_LEANBACK; import static android.content.pm.PackageManager.FEATURE_TELEVISION; import static android.content.pm.PackageManager.PERMISSION_GRANTED; +import static android.os.UserHandle.USER_NULL; import static android.service.notification.NotificationListenerService .NOTIFICATION_CHANNEL_OR_GROUP_ADDED; import static android.service.notification.NotificationListenerService @@ -405,8 +406,7 @@ public class NotificationManagerService extends SystemService { } - protected void readDefaultApprovedServices() { - final int userId = UserHandle.USER_SYSTEM; + protected void readDefaultApprovedServices(int userId) { String defaultListenerAccess = getContext().getResources().getString( com.android.internal.R.string.config_defaultListenerAccessPackages); if (defaultListenerAccess != null) { @@ -488,7 +488,7 @@ public class NotificationManagerService extends SystemService { } catch (FileNotFoundException e) { // No data yet // Load default managed services approvals - readDefaultApprovedServices(); + readDefaultApprovedServices(UserHandle.USER_SYSTEM); } catch (IOException e) { Log.wtf(TAG, "Unable to read notification policy", e); } catch (NumberFormatException e) { @@ -977,7 +977,7 @@ public class NotificationManagerService extends SystemService { // turn off LED when user passes through lock screen mNotificationLight.turnOff(); } else if (action.equals(Intent.ACTION_USER_SWITCHED)) { - final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); + final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL); // reload per-user settings mSettingsObserver.update(null); mUserProfiles.updateCache(context); @@ -987,14 +987,18 @@ public class NotificationManagerService extends SystemService { mAssistants.onUserSwitched(user); mZenModeHelper.onUserSwitched(user); } else if (action.equals(Intent.ACTION_USER_ADDED)) { - mUserProfiles.updateCache(context); + final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL); + if (userId != USER_NULL) { + mUserProfiles.updateCache(context); + readDefaultApprovedServices(userId); + } } else if (action.equals(Intent.ACTION_USER_REMOVED)) { - final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); + final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL); mZenModeHelper.onUserRemoved(user); mRankingHelper.onUserRemoved(user); savePolicyFile(); } else if (action.equals(Intent.ACTION_USER_UNLOCKED)) { - final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); + final int user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL); mConditionProviders.onUserUnlocked(user); mListeners.onUserUnlocked(user); mAssistants.onUserUnlocked(user); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9e61d1336f98..c128a0e49e83 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -292,6 +292,7 @@ import dalvik.system.DexFile; import dalvik.system.VMRuntime; import libcore.io.IoUtils; +import libcore.io.Streams; import libcore.util.EmptyArray; import org.xmlpull.v1.XmlPullParser; @@ -309,6 +310,8 @@ import java.io.FileOutputStream; import java.io.FileReader; import java.io.FilenameFilter; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -340,6 +343,7 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.zip.GZIPInputStream; /** * Keep track of all those APKs everywhere. @@ -393,6 +397,7 @@ public class PackageManagerService extends IPackageManager.Stub private static final boolean DEBUG_FILTERS = false; private static final boolean DEBUG_PERMISSIONS = false; private static final boolean DEBUG_SHARED_LIBRARIES = false; + private static final boolean DEBUG_COMPRESSION = Build.IS_DEBUGGABLE; // Debug output for dexopting. This is shared between PackageManagerService, OtaDexoptService // and PackageDexOptimizer. All these classes have their own flag to allow switching a single @@ -447,6 +452,8 @@ public class PackageManagerService extends IPackageManager.Stub static final int FLAGS_REMOVE_CHATTY = 1<<31; private static final String STATIC_SHARED_LIB_DELIMITER = "_"; + /** Extension of the compressed packages */ + private final static String COMPRESSED_EXTENSION = ".gz"; private static final int[] EMPTY_INT_ARRAY = new int[0]; @@ -2634,9 +2641,21 @@ public class PackageManagerService extends IPackageManager.Stub | PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags, 0); // Prune any system packages that no longer exist. - final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<String>(); + final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<>(); + // Stub packages must either be replaced with full versions in the /data + // partition or be disabled. + final List<String> stubSystemApps = new ArrayList<>(); if (!mOnlyCore) { - Iterator<PackageSetting> psit = mSettings.mPackages.values().iterator(); + // do this first before mucking with mPackages for the "expecting better" case + final Iterator<PackageParser.Package> pkgIterator = mPackages.values().iterator(); + while (pkgIterator.hasNext()) { + final PackageParser.Package pkg = pkgIterator.next(); + if (pkg.isStub) { + stubSystemApps.add(pkg.packageName); + } + } + + final Iterator<PackageSetting> psit = mSettings.mPackages.values().iterator(); while (psit.hasNext()) { PackageSetting ps = psit.next(); @@ -2724,36 +2743,37 @@ public class PackageManagerService extends IPackageManager.Stub | PackageParser.PARSE_FORWARD_LOCK, scanFlags | SCAN_REQUIRE_KNOWN, 0); - /** - * Remove disable package settings for any updated system - * apps that were removed via an OTA. If they're not a - * previously-updated app, remove them completely. - * Otherwise, just revoke their system-level permissions. - */ + // Remove disable package settings for updated system apps that were + // removed via an OTA. If the update is no longer present, remove the + // app completely. Otherwise, revoke their system privileges. for (String deletedAppName : possiblyDeletedUpdatedSystemApps) { PackageParser.Package deletedPkg = mPackages.get(deletedAppName); mSettings.removeDisabledSystemPackageLPw(deletedAppName); - String msg; + final String msg; if (deletedPkg == null) { + // should have found an update, but, we didn't; remove everything msg = "Updated system package " + deletedAppName - + " no longer exists; it's data will be wiped"; + + " no longer exists; removing its data"; // Actual deletion of code and data will be handled by later // reconciliation step } else { - msg = "Updated system app + " + deletedAppName - + " no longer present; removing system privileges for " - + deletedAppName; + // found an update; revoke system privileges + msg = "Updated system package + " + deletedAppName + + " no longer exists; revoking system privileges"; - deletedPkg.applicationInfo.flags &= ~ApplicationInfo.FLAG_SYSTEM; + // Don't do anything if a stub is removed from the system image. If + // we were to remove the uncompressed version from the /data partition, + // this is where it'd be done. - PackageSetting deletedPs = mSettings.mPackages.get(deletedAppName); + final PackageSetting deletedPs = mSettings.mPackages.get(deletedAppName); + deletedPkg.applicationInfo.flags &= ~ApplicationInfo.FLAG_SYSTEM; deletedPs.pkgFlags &= ~ApplicationInfo.FLAG_SYSTEM; } logCriticalInfo(Log.WARN, msg); } - /** + /* * Make sure all system apps that we expected to appear on * the userdata partition actually showed up. If they never * appeared, crawl back and revive the system version. @@ -2795,6 +2815,11 @@ public class PackageManagerService extends IPackageManager.Stub } } } + + // Uncompress and install any stubbed system applications. + // This must be done last to ensure all stubs are replaced or disabled. + decompressSystemApplications(stubSystemApps, scanFlags); + final long dataScanTime = SystemClock.uptimeMillis() - systemScanTime - startTime; final int dataPackagesCount = mPackages.size() - systemPackagesCount; Slog.i(TAG, "Finished scanning non-system apps. Time: " + dataScanTime @@ -3062,6 +3087,174 @@ public class PackageManagerService extends IPackageManager.Stub Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } + /** + * Uncompress and install stub applications. + * <p>In order to save space on the system partition, some applications are shipped in a + * compressed form. In addition the compressed bits for the full application, the + * system image contains a tiny stub comprised of only the Android manifest. + * <p>During the first boot, attempt to uncompress and install the full application. If + * the application can't be installed for any reason, disable the stub and prevent + * uncompressing the full application during future boots. + * <p>In order to forcefully attempt an installation of a full application, go to app + * settings and enable the application. + */ + private void decompressSystemApplications(@NonNull List<String> stubSystemApps, int scanFlags) { + for (int i = stubSystemApps.size() - 1; i >= 0; --i) { + final String pkgName = stubSystemApps.get(i); + // skip if the system package is already disabled + if (mSettings.isDisabledSystemPackageLPr(pkgName)) { + stubSystemApps.remove(i); + continue; + } + // skip if the package isn't installed (?!); this should never happen + final PackageParser.Package pkg = mPackages.get(pkgName); + if (pkg == null) { + stubSystemApps.remove(i); + continue; + } + // skip if the package has been disabled by the user + final PackageSetting ps = mSettings.mPackages.get(pkgName); + if (ps != null) { + final int enabledState = ps.getEnabled(UserHandle.USER_SYSTEM); + if (enabledState == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) { + stubSystemApps.remove(i); + continue; + } + } + + if (DEBUG_COMPRESSION) { + Slog.i(TAG, "Uncompressing system stub; pkg: " + pkgName); + } + + // uncompress the binary to its eventual destination on /data + final File scanFile = decompressPackage(pkg); + if (scanFile == null) { + continue; + } + + // install the package to replace the stub on /system + try { + mSettings.disableSystemPackageLPw(pkgName, true /*replaced*/); + removePackageLI(pkg, true /*chatty*/); + scanPackageTracedLI(scanFile, 0 /*reparseFlags*/, scanFlags, 0, null); + ps.setEnabled(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, + UserHandle.USER_SYSTEM, "android"); + stubSystemApps.remove(i); + continue; + } catch (PackageManagerException e) { + Slog.e(TAG, "Failed to parse uncompressed system package: " + e.getMessage()); + } + + // any failed attempt to install the package will be cleaned up later + } + + // disable any stub still left; these failed to install the full application + for (int i = stubSystemApps.size() - 1; i >= 0; --i) { + final String pkgName = stubSystemApps.get(i); + final PackageSetting ps = mSettings.mPackages.get(pkgName); + ps.setEnabled(PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + UserHandle.USER_SYSTEM, "android"); + logCriticalInfo(Log.ERROR, "Stub disabled; pkg: " + pkgName); + } + } + + private int decompressFile(File srcFile, File dstFile) throws ErrnoException { + if (DEBUG_COMPRESSION) { + Slog.i(TAG, "Decompress file" + + "; src: " + srcFile.getAbsolutePath() + + ", dst: " + dstFile.getAbsolutePath()); + } + try ( + InputStream fileIn = new GZIPInputStream(new FileInputStream(srcFile)); + OutputStream fileOut = new FileOutputStream(dstFile, false /*append*/); + ) { + Streams.copy(fileIn, fileOut); + Os.chmod(dstFile.getAbsolutePath(), 0644); + return PackageManager.INSTALL_SUCCEEDED; + } catch (IOException e) { + logCriticalInfo(Log.ERROR, "Failed to decompress file" + + "; src: " + srcFile.getAbsolutePath() + + ", dst: " + dstFile.getAbsolutePath()); + } + return PackageManager.INSTALL_FAILED_INTERNAL_ERROR; + } + + private File[] getCompressedFiles(String codePath) { + return new File(codePath).listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.toLowerCase().endsWith(COMPRESSED_EXTENSION); + } + }); + } + + private boolean compressedFileExists(String codePath) { + final File[] compressedFiles = getCompressedFiles(codePath); + return compressedFiles != null && compressedFiles.length > 0; + } + + /** + * Decompresses the given package on the system image onto + * the /data partition. + * @return The directory the package was decompressed into. Otherwise, {@code null}. + */ + private File decompressPackage(PackageParser.Package pkg) { + final File[] compressedFiles = getCompressedFiles(pkg.codePath); + if (compressedFiles == null || compressedFiles.length == 0) { + if (DEBUG_COMPRESSION) { + Slog.i(TAG, "No files to decompress"); + } + return null; + } + final File dstCodePath = + getNextCodePath(Environment.getDataAppDirectory(null), pkg.packageName); + int ret = PackageManager.INSTALL_SUCCEEDED; + try { + Os.mkdir(dstCodePath.getAbsolutePath(), 0755); + Os.chmod(dstCodePath.getAbsolutePath(), 0755); + for (File srcFile : compressedFiles) { + final String srcFileName = srcFile.getName(); + final String dstFileName = srcFileName.substring( + 0, srcFileName.length() - COMPRESSED_EXTENSION.length()); + final File dstFile = new File(dstCodePath, dstFileName); + ret = decompressFile(srcFile, dstFile); + if (ret != PackageManager.INSTALL_SUCCEEDED) { + logCriticalInfo(Log.ERROR, "Failed to decompress" + + "; pkg: " + pkg.packageName + + ", file: " + dstFileName); + break; + } + } + } catch (ErrnoException e) { + logCriticalInfo(Log.ERROR, "Failed to decompress" + + "; pkg: " + pkg.packageName + + ", err: " + e.errno); + } + if (ret == PackageManager.INSTALL_SUCCEEDED) { + final File libraryRoot = new File(dstCodePath, LIB_DIR_NAME); + NativeLibraryHelper.Handle handle = null; + try { + handle = NativeLibraryHelper.Handle.create(dstCodePath); + ret = NativeLibraryHelper.copyNativeBinariesWithOverride(handle, libraryRoot, + null /*abiOverride*/); + } catch (IOException e) { + logCriticalInfo(Log.ERROR, "Failed to extract native libraries" + + "; pkg: " + pkg.packageName); + ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR; + } finally { + IoUtils.closeQuietly(handle); + } + } + if (ret != PackageManager.INSTALL_SUCCEEDED) { + if (dstCodePath == null || !dstCodePath.exists()) { + return null; + } + removeCodePathLI(dstCodePath); + return null; + } + return dstCodePath; + } + private void updateInstantAppInstallerLocked(String modifiedPackage) { // we're only interested in updating the installer appliction when 1) it's not // already set or 2) the modified package is the installer @@ -4030,18 +4223,67 @@ public class PackageManagerService extends IPackageManager.Stub } @Override - public PermissionInfo getPermissionInfo(String name, int flags) { - if (getInstantAppPackageName(Binder.getCallingUid()) != null) { + public PermissionInfo getPermissionInfo(String name, String packageName, int flags) { + final int callingUid = Binder.getCallingUid(); + if (getInstantAppPackageName(callingUid) != null) { return null; } // reader synchronized (mPackages) { final BasePermission p = mSettings.mPermissions.get(name); - if (p != null) { - return generatePermissionInfo(p, flags); + if (p == null) { + return null; } - return null; + // If the caller is an app that targets pre 26 SDK drop protection flags. + final PermissionInfo permissionInfo = generatePermissionInfo(p, flags); + if (permissionInfo != null) { + permissionInfo.protectionLevel = adjustPermissionProtectionFlagsLPr( + permissionInfo.protectionLevel, packageName, callingUid); + } + return permissionInfo; + } + } + + private int adjustPermissionProtectionFlagsLPr(int protectionLevel, + String packageName, int uid) { + // Signature permission flags area always reported + final int protectionLevelMasked = protectionLevel + & (PermissionInfo.PROTECTION_NORMAL + | PermissionInfo.PROTECTION_DANGEROUS + | PermissionInfo.PROTECTION_SIGNATURE); + if (protectionLevelMasked == PermissionInfo.PROTECTION_SIGNATURE) { + return protectionLevel; + } + + // System sees all flags. + final int appId = UserHandle.getAppId(uid); + if (appId == Process.SYSTEM_UID || appId == Process.ROOT_UID + || appId == Process.SHELL_UID) { + return protectionLevel; } + + // Normalize package name to handle renamed packages and static libs + packageName = resolveInternalPackageNameLPr(packageName, + PackageManager.VERSION_CODE_HIGHEST); + + // Apps that target O see flags for all protection levels. + final PackageSetting ps = mSettings.mPackages.get(packageName); + if (ps == null) { + return protectionLevel; + } + if (ps.appId != appId) { + return protectionLevel; + } + + final PackageParser.Package pkg = mPackages.get(packageName); + if (pkg == null) { + return protectionLevel; + } + if (pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.O) { + return protectionLevelMasked; + } + + return protectionLevel; } @Override @@ -7750,6 +7992,9 @@ public class PackageManagerService extends IPackageManager.Stub String resolvedType, int flags, int userId) { if (!sUserManager.exists(userId)) return Collections.emptyList(); final int callingUid = Binder.getCallingUid(); + enforceCrossUserPermission(callingUid, userId, + false /*requireFullPermission*/, false /*checkShell*/, + "query intent receivers"); final String instantAppPkgName = getInstantAppPackageName(callingUid); flags = updateFlagsForResolve(flags, userId, intent, callingUid, false /*includeInstantApps*/); @@ -7856,6 +8101,9 @@ public class PackageManagerService extends IPackageManager.Stub String resolvedType, int flags, int userId, int callingUid, boolean includeInstantApps) { if (!sUserManager.exists(userId)) return Collections.emptyList(); + enforceCrossUserPermission(callingUid, userId, + false /*requireFullPermission*/, false /*checkShell*/, + "query intent receivers"); final String instantAppPkgName = getInstantAppPackageName(callingUid); flags = updateFlagsForResolve(flags, userId, intent, callingUid, includeInstantApps); ComponentName comp = intent.getComponent(); @@ -8283,8 +8531,10 @@ public class PackageManagerService extends IPackageManager.Stub if (HIDE_EPHEMERAL_APIS || isEphemeralDisabled()) { return null; } - mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_INSTANT_APPS, - "getEphemeralApplications"); + if (!canViewInstantApps(Binder.getCallingUid(), userId)) { + mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_INSTANT_APPS, + "getEphemeralApplications"); + } enforceCrossUserPermission(Binder.getCallingUid(), userId, true /* requireFullPermission */, false /* checkShell */, "getEphemeralApplications"); @@ -8369,9 +8619,10 @@ public class PackageManagerService extends IPackageManager.Stub return null; } - mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_INSTANT_APPS, - "getInstantAppIcon"); - + if (!canViewInstantApps(Binder.getCallingUid(), userId)) { + mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_INSTANT_APPS, + "getInstantAppIcon"); + } enforceCrossUserPermission(Binder.getCallingUid(), userId, true /* requireFullPermission */, false /* checkShell */, "getInstantAppIcon"); @@ -10707,6 +10958,9 @@ public class PackageManagerService extends IPackageManager.Stub r.info.encryptionAware = r.info.directBootAware = true; } } + if (compressedFileExists(pkg.baseCodePath)) { + pkg.isStub = true; + } } else { // Only allow system apps to be flagged as core apps. pkg.coreApp = false; @@ -15077,6 +15331,11 @@ public class PackageManagerService extends IPackageManager.Stub @Override public int getIntentVerificationStatus(String packageName, int userId) { final int callingUid = Binder.getCallingUid(); + if (UserHandle.getUserId(callingUid) != userId) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, + "getIntentVerificationStatus" + userId); + } if (getInstantAppPackageName(callingUid) != null) { return INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED; } @@ -15160,6 +15419,10 @@ public class PackageManagerService extends IPackageManager.Stub public boolean setDefaultBrowserPackageName(String packageName, int userId) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null); + if (UserHandle.getCallingUserId() != userId) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null); + } synchronized (mPackages) { boolean result = mSettings.setDefaultBrowserPackageNameLPw(packageName, userId); @@ -15173,6 +15436,10 @@ public class PackageManagerService extends IPackageManager.Stub @Override public String getDefaultBrowserPackageName(int userId) { + if (UserHandle.getCallingUserId() != userId) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null); + } if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return null; } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index e89ab1de7b65..e3cf459774e9 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -816,6 +816,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { private static final int MSG_BUGREPORT_TV = 22; private static final int MSG_ACCESSIBILITY_TV = 23; private static final int MSG_DISPATCH_BACK_KEY_TO_AUTOFILL = 24; + private static final int MSG_SYSTEM_KEY_PRESS = 25; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1; @@ -905,6 +906,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { case MSG_DISPATCH_BACK_KEY_TO_AUTOFILL: mAutofillManagerInternal.onBackKeyPressed(); break; + case MSG_SYSTEM_KEY_PRESS: + sendSystemKeyToStatusBar(msg.arg1); + break; } } } @@ -1276,14 +1280,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } // Inform the StatusBar; but do not allow it to consume the event. - IStatusBarService statusBar = getStatusBarService(); - if (statusBar != null) { - try { - statusBar.handleSystemKey(event.getKeyCode()); - } catch (RemoteException e) { - // Oh well. - } - } + sendSystemKeyToStatusBarAsync(event.getKeyCode()); // If the power key has still not yet been handled, then detect short // press, long press, or multi press and decide what to do. @@ -5982,6 +5979,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } if (down) { + sendSystemKeyToStatusBarAsync(event.getKeyCode()); + TelecomManager telecomManager = getTelecommService(); if (telecomManager != null) { if (telecomManager.isRinging()) { @@ -6019,7 +6018,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { event, AudioManager.USE_DEFAULT_STREAM_TYPE, false); break; } - } if (mUseTvRouting || mHandleVolumeKeysInWM) { // Defer special key handlings to @@ -6225,20 +6223,36 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (!mAccessibilityManager.isEnabled() || !mAccessibilityManager.sendFingerprintGesture(event.getKeyCode())) { if (areSystemNavigationKeysEnabled()) { - IStatusBarService sbar = getStatusBarService(); - if (sbar != null) { - try { - sbar.handleSystemKey(event.getKeyCode()); - } catch (RemoteException e1) { - // oops, no statusbar. Ignore event. - } - } + sendSystemKeyToStatusBarAsync(event.getKeyCode()); } } } } /** + * Notify the StatusBar that a system key was pressed. + */ + private void sendSystemKeyToStatusBar(int keyCode) { + IStatusBarService statusBar = getStatusBarService(); + if (statusBar != null) { + try { + statusBar.handleSystemKey(keyCode); + } catch (RemoteException e) { + // Oh well. + } + } + } + + /** + * Notify the StatusBar that a system key was pressed without blocking the current thread. + */ + private void sendSystemKeyToStatusBarAsync(int keyCode) { + Message message = mHandler.obtainMessage(MSG_SYSTEM_KEY_PRESS, keyCode, 0); + message.setAsynchronous(true); + mHandler.sendMessage(message); + } + + /** * Returns true if the key can have global actions attached to it. * We reserve all power management keys for the system since they require * very careful handling. diff --git a/services/core/java/com/android/server/power/Notifier.java b/services/core/java/com/android/server/power/Notifier.java index f5bb082fac6d..0ecf0e1ea7a7 100644 --- a/services/core/java/com/android/server/power/Notifier.java +++ b/services/core/java/com/android/server/power/Notifier.java @@ -18,7 +18,6 @@ package com.android.server.power; import android.app.ActivityManagerInternal; import android.app.AppOpsManager; -import android.app.RetailDemoModeServiceInternal; import com.android.internal.app.IAppOpsService; import com.android.internal.app.IBatteryStats; @@ -94,7 +93,6 @@ final class Notifier { private final ActivityManagerInternal mActivityManagerInternal; private final InputManagerInternal mInputManagerInternal; private final InputMethodManagerInternal mInputMethodManagerInternal; - private final RetailDemoModeServiceInternal mRetailDemoModeServiceInternal; private final NotifierHandler mHandler; private final Intent mScreenOnIntent; @@ -140,7 +138,6 @@ final class Notifier { mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class); mInputManagerInternal = LocalServices.getService(InputManagerInternal.class); mInputMethodManagerInternal = LocalServices.getService(InputMethodManagerInternal.class); - mRetailDemoModeServiceInternal = LocalServices.getService(RetailDemoModeServiceInternal.class); mHandler = new NotifierHandler(looper); mScreenOnIntent = new Intent(Intent.ACTION_SCREEN_ON); @@ -587,9 +584,6 @@ final class Notifier { } mUserActivityPending = false; } - if (mRetailDemoModeServiceInternal != null) { - mRetailDemoModeServiceInternal.onUserActivity(); - } mPolicy.userActivity(); } diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java index 56612ad21398..e894275fe2b6 100644 --- a/services/core/java/com/android/server/power/ShutdownThread.java +++ b/services/core/java/com/android/server/power/ShutdownThread.java @@ -20,7 +20,10 @@ package com.android.server.power; import android.app.AlertDialog; import android.app.Dialog; import android.app.IActivityManager; +import android.app.KeyguardManager; import android.app.ProgressDialog; +import android.app.WallpaperColors; +import android.app.WallpaperManager; import android.bluetooth.BluetoothAdapter; import android.bluetooth.IBluetoothManager; import android.content.BroadcastReceiver; @@ -28,7 +31,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; -import android.content.om.IOverlayManager; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.media.AudioAttributes; @@ -53,6 +55,7 @@ import android.view.ViewGroup; import android.view.WindowManager; import android.widget.ProgressBar; import android.widget.TextView; + import com.android.internal.telephony.ITelephony; import com.android.server.pm.PackageManagerService; @@ -300,17 +303,21 @@ public final class ShutdownThread extends Thread { d.setContentView(com.android.internal.R.layout.shutdown_dialog); d.setCancelable(false); - int color = Color.WHITE; + int color; try { - IOverlayManager service = IOverlayManager.Stub.asInterface( - ServiceManager.getService(Context.OVERLAY_SERVICE)); - if (service.getOverlayInfo("com.android.systemui.theme.lightwallpaper", 0).isEnabled()) { - color = Color.BLACK; - } + boolean onKeyguard = context.getSystemService( + KeyguardManager.class).isKeyguardLocked(); + WallpaperColors currentColors = context.getSystemService(WallpaperManager.class) + .getWallpaperColors(onKeyguard ? + WallpaperManager.FLAG_LOCK : WallpaperManager.FLAG_SYSTEM); + color = currentColors != null && + (currentColors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) + != 0 ? + Color.BLACK : Color.WHITE; } catch (Exception e) { - // Shutdown UI really shouldn't crash or have strict dependencies on other services. - Log.w(TAG, "Problem getting overlay state", e); + color = Color.WHITE; } + ProgressBar bar = d.findViewById(com.android.internal.R.id.progress); bar.getIndeterminateDrawable().setTint(color); ((TextView) d.findViewById(com.android.internal.R.id.text1)).setTextColor(color); diff --git a/services/core/java/com/android/server/timezone/RulesManagerService.java b/services/core/java/com/android/server/timezone/RulesManagerService.java index 1c5aa600580a..50f27ed67a36 100644 --- a/services/core/java/com/android/server/timezone/RulesManagerService.java +++ b/services/core/java/com/android/server/timezone/RulesManagerService.java @@ -57,7 +57,6 @@ import static android.app.timezone.RulesState.STAGED_OPERATION_NONE; import static android.app.timezone.RulesState.STAGED_OPERATION_UNINSTALL; import static android.app.timezone.RulesState.STAGED_OPERATION_UNKNOWN; -// TODO(nfuller) Check error handling best practices in the system server. public final class RulesManagerService extends IRulesManager.Stub { private static final String TAG = "timezone.RulesManagerService"; @@ -336,7 +335,7 @@ public final class RulesManagerService extends IRulesManager.Stub { private final CheckToken mCheckToken; private final ICallback mCallback; - public UninstallRunnable(CheckToken checkToken, ICallback callback) { + UninstallRunnable(CheckToken checkToken, ICallback callback) { mCheckToken = checkToken; mCallback = callback; } @@ -401,54 +400,85 @@ public final class RulesManagerService extends IRulesManager.Stub { if ("-format_state".equals(args[0]) && args[1] != null) { for (char c : args[1].toCharArray()) { switch (c) { - case 'p': // Report operation in progress - pw.println("Operation in progress: " - + rulesState.isOperationInProgress()); + case 'p': { + // Report operation in progress + String value = "Unknown"; + if (rulesState != null) { + value = Boolean.toString(rulesState.isOperationInProgress()); + } + pw.println("Operation in progress: " + value); break; - case 's': // Report system image rules version - pw.println("System rules version: " - + rulesState.getSystemRulesVersion()); + } + case 's': { + // Report system image rules version + String value = "Unknown"; + if (rulesState != null) { + value = rulesState.getSystemRulesVersion(); + } + pw.println("System rules version: " + value); break; - case 'c': // Report current installation state - pw.println("Current install state: " - + distroStatusToString(rulesState.getDistroStatus())); + } + case 'c': { + // Report current installation state + String value = "Unknown"; + if (rulesState != null) { + value = distroStatusToString(rulesState.getDistroStatus()); + } + pw.println("Current install state: " + value); break; - case 'i': // Report currently installed version - DistroRulesVersion installedRulesVersion = - rulesState.getInstalledDistroRulesVersion(); - pw.print("Installed rules version: "); - if (installedRulesVersion == null) { - pw.println("<None>"); - } else { - pw.println(installedRulesVersion.toDumpString()); + } + case 'i': { + // Report currently installed version + String value = "Unknown"; + if (rulesState != null) { + DistroRulesVersion installedRulesVersion = + rulesState.getInstalledDistroRulesVersion(); + if (installedRulesVersion == null) { + value = "<None>"; + } else { + value = installedRulesVersion.toDumpString(); + } } + pw.println("Installed rules version: " + value); break; - case 'o': // Report staged operation type - int stagedOperationType = rulesState.getStagedOperationType(); - pw.println("Staged operation: " - + stagedOperationToString(stagedOperationType)); + } + case 'o': { + // Report staged operation type + String value = "Unknown"; + if (rulesState != null) { + int stagedOperationType = rulesState.getStagedOperationType(); + value = stagedOperationToString(stagedOperationType); + } + pw.println("Staged operation: " + value); break; - case 't': + } + case 't': { // Report staged version (i.e. the one that will be installed next boot // if the staged operation is an install). - pw.print("Staged rules version: "); - DistroRulesVersion stagedDistroRulesVersion = - rulesState.getStagedDistroRulesVersion(); - if (stagedDistroRulesVersion == null) { - pw.println("<None>"); - } else { - pw.println(stagedDistroRulesVersion.toDumpString()); + String value = "Unknown"; + if (rulesState != null) { + DistroRulesVersion stagedDistroRulesVersion = + rulesState.getStagedDistroRulesVersion(); + if (stagedDistroRulesVersion == null) { + value = "<None>"; + } else { + value = stagedDistroRulesVersion.toDumpString(); + } } + pw.println("Staged rules version: " + value); break; - case 'a': + } + case 'a': { // Report the active rules version (i.e. the rules in use by the current // process). pw.println("Active rules version (ICU, libcore): " + ICU.getTZDataVersion() + "," + ZoneInfoDB.getInstance().getVersion()); break; - default: + } + default: { pw.println("Unknown option: " + c); + } } } return; diff --git a/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java b/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java index b89ce1cd0f89..0cf61c0c7c5a 100644 --- a/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java +++ b/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java @@ -57,7 +57,6 @@ final class RulesManagerServiceHelperImpl implements PermissionHelper, Executor return true; } - // TODO(nfuller): Wake lock required while running in background thread? @Override public void execute(Runnable runnable) { AsyncTask.execute(runnable); diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index 74c1b24ede28..425b23f29d0f 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -1125,8 +1125,8 @@ public class VrManagerService extends SystemService implements EnabledComponentC private void setPersistentVrModeEnabled(boolean enabled) { synchronized(mLock) { setPersistentModeAndNotifyListenersLocked(enabled); - // Disabling persistent mode when not showing a VR should disable the overall vr mode. - if (!enabled && mCurrentVrModeComponent == null) { + // Disabling persistent mode should disable the overall vr mode. + if (!enabled) { setVrMode(false, null, 0, -1, null); } } diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 63890bf346ef..c4ff455fa3d3 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -1311,7 +1311,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree // going to the bottom. Allowing closing {@link AppWindowToken} to participate can lead to // an Activity in another task being started in the wrong orientation during the transition. if (!(sendingToBottom || mService.mClosingApps.contains(this)) - && (isVisible() || mService.mOpeningApps.contains(this))) { + && (isVisible() || mService.mOpeningApps.contains(this) || isOnTop())) { return mOrientation; } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index a37b2e56b0d0..4d77d40584c1 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1183,7 +1183,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final int dh = displayInfo.logicalHeight; config.orientation = (dw <= dh) ? Configuration.ORIENTATION_PORTRAIT : Configuration.ORIENTATION_LANDSCAPE; - config.setRotation(displayInfo.rotation); config.screenWidthDp = (int)(mService.mPolicy.getConfigDisplayWidth(dw, dh, displayInfo.rotation, @@ -3309,6 +3308,13 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo setLayoutNeeded(); } + + @Override + boolean isOnTop() { + // Considered always on top + return true; + } + @Override void positionChildAt(int position, TaskStack child, boolean includingParents) { if (StackId.isAlwaysOnTop(child.mStackId) && position != POSITION_TOP) { diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 600bc5c47062..3df73d7c627a 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -472,6 +472,13 @@ class WindowContainer<E extends WindowContainer> implements Comparable<WindowCon return false; } + /** +a * Returns whether this child is on top of the window hierarchy. + */ + boolean isOnTop() { + return getParent().getTopChild() == this && getParent().isOnTop(); + } + /** Returns the top child container. */ E getTopChild() { return mChildren.peekLast(); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index f0ac39a5586b..5db691ef10f7 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6011,9 +6011,9 @@ public class WindowManagerService extends IWindowManager.Stub return; } - if (!displayContent.isReady() || !mPolicy.isScreenOn()) { - // No need to freeze the screen before the display is ready, system is ready, or if - // the screen is off. + if (!displayContent.isReady() || !mPolicy.isScreenOn() || !okToAnimate()) { + // No need to freeze the screen before the display is ready, if the screen is off, + // or we can't currently animate. return; } diff --git a/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp b/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp index 492be17ba352..b3817db1d203 100644 --- a/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp +++ b/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp @@ -27,14 +27,17 @@ #include <android/hidl/manager/1.0/IServiceManager.h> #include <core_jni_helpers.h> #include <hidl/ServiceManagement.h> +#include <nativehelper/JNIHelp.h> #include <utils/Log.h> -#include <JNIHelp.h> namespace android { namespace server { namespace BroadcastRadio { namespace BroadcastRadioService { +using std::lock_guard; +using std::mutex; + using hardware::Return; using hardware::hidl_string; using hardware::hidl_vec; @@ -50,7 +53,7 @@ using V1_0::ProgramInfo; using V1_0::MetaData; using V1_0::ITuner; -static Mutex gContextMutex; +static mutex gContextMutex; static struct { struct { @@ -90,8 +93,8 @@ static ServiceContext& getNativeContext(jlong nativeContextHandle) { } static jlong nativeInit(JNIEnv *env, jobject obj) { - ALOGV("nativeInit()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto nativeContext = new ServiceContext(); static_assert(sizeof(jlong) >= sizeof(nativeContext), "jlong is smaller than a pointer"); @@ -99,16 +102,16 @@ static jlong nativeInit(JNIEnv *env, jobject obj) { } static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeFinalize()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto ctx = reinterpret_cast<ServiceContext*>(nativeContext); delete ctx; } static jobject nativeLoadModules(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeLoadModules()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(nativeContext); // Get list of registered HIDL HAL implementations. @@ -182,8 +185,8 @@ static jobject nativeLoadModules(JNIEnv *env, jobject obj, jlong nativeContext) static jobject nativeOpenTuner(JNIEnv *env, jobject obj, long nativeContext, jint moduleId, jobject bandConfig, bool withAudio, jobject callback) { - ALOGV("nativeOpenTuner()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(nativeContext); if (callback == nullptr) { diff --git a/services/core/jni/BroadcastRadio/NativeCallbackThread.cpp b/services/core/jni/BroadcastRadio/NativeCallbackThread.cpp index 0c84e6dbf03b..85ec9e07e39e 100644 --- a/services/core/jni/BroadcastRadio/NativeCallbackThread.cpp +++ b/services/core/jni/BroadcastRadio/NativeCallbackThread.cpp @@ -23,45 +23,38 @@ namespace android { -NativeCallbackThread::NativeCallbackThread(JavaVM *vm) : mExitting(false), mvm(vm) { - auto res = pthread_create(&mThread, nullptr, main, this); - if (res != 0) { - ALOGE("Couldn't start NativeCallbackThread"); - mThread = 0; - return; - } +using std::lock_guard; +using std::mutex; +using std::unique_lock; + +NativeCallbackThread::NativeCallbackThread(JavaVM *vm) : mvm(vm), mExiting(false), + mThread(&NativeCallbackThread::threadLoop, this) { ALOGD("Started native callback thread %p", this); } NativeCallbackThread::~NativeCallbackThread() { - ALOGV("~NativeCallbackThread %p", this); + ALOGV("%s %p", __func__, this); stop(); } -void* NativeCallbackThread::main(void *args) { - auto self = reinterpret_cast<NativeCallbackThread*>(args); - self->main(); - return nullptr; -} - -void NativeCallbackThread::main() { - ALOGV("NativeCallbackThread::main()"); +void NativeCallbackThread::threadLoop() { + ALOGV("%s", __func__); JNIEnv *env = nullptr; JavaVMAttachArgs aargs = {JNI_VERSION_1_4, "NativeCallbackThread", nullptr}; if (mvm->AttachCurrentThread(&env, &aargs) != JNI_OK || env == nullptr) { ALOGE("Couldn't attach thread"); + mExiting = true; return; } - while (!mExitting) { + while (!mExiting) { ALOGV("Waiting for task..."); Task task; { - AutoMutex _l(mQueueMutex); - auto res = mQueueCond.wait(mQueueMutex); - ALOGE_IF(res != 0, "Wait failed: %d", res); - if (mExitting || res != 0) break; + unique_lock<mutex> lk(mQueueMutex); + mQueueCond.wait(lk); + if (mExiting) break; if (mQueue.empty()) continue; task = mQueue.front(); @@ -84,36 +77,35 @@ void NativeCallbackThread::main() { } void NativeCallbackThread::enqueue(const Task &task) { - AutoMutex _l(mQueueMutex); + lock_guard<mutex> lk(mQueueMutex); - if (mThread == 0 || mExitting) { + if (mExiting) { ALOGW("Callback thread %p is not serving calls", this); return; } mQueue.push(task); - mQueueCond.signal(); + mQueueCond.notify_one(); } void NativeCallbackThread::stop() { - ALOGV("stop() %p", this); + ALOGV("%s %p", __func__, this); { - AutoMutex _l(mQueueMutex); + lock_guard<mutex> lk(mQueueMutex); - if (mThread == 0 || mExitting) return; + if (mExiting) return; - mExitting = true; - mQueueCond.signal(); + mExiting = true; + mQueueCond.notify_one(); } - if (pthread_self() == mThread) { + if (mThread.get_id() == std::thread::id()) { // you can't self-join a thread, but it's ok when calling from our sub-task ALOGD("About to stop native callback thread %p", this); + mThread.detach(); } else { - auto ret = pthread_join(mThread, nullptr); - ALOGE_IF(ret != 0, "Couldn't join thread: %d", ret); - + mThread.join(); ALOGD("Stopped native callback thread %p", this); } } diff --git a/services/core/jni/BroadcastRadio/NativeCallbackThread.h b/services/core/jni/BroadcastRadio/NativeCallbackThread.h index 4e03b119e834..53990be06535 100644 --- a/services/core/jni/BroadcastRadio/NativeCallbackThread.h +++ b/services/core/jni/BroadcastRadio/NativeCallbackThread.h @@ -20,26 +20,23 @@ #include <android-base/macros.h> #include <functional> #include <jni.h> -#include <pthread.h> #include <queue> -#include <utils/Condition.h> -#include <utils/Mutex.h> +#include <thread> namespace android { class NativeCallbackThread { typedef std::function<void(JNIEnv*)> Task; - pthread_t mThread; - Mutex mQueueMutex; - Condition mQueueCond; - std::atomic<bool> mExitting; - JavaVM *mvm; std::queue<Task> mQueue; - static void* main(void *args); - void main(); + std::mutex mQueueMutex; + std::condition_variable mQueueCond; + std::atomic<bool> mExiting; + std::thread mThread; + + void threadLoop(); DISALLOW_COPY_AND_ASSIGN(NativeCallbackThread); diff --git a/services/core/jni/BroadcastRadio/Tuner.cpp b/services/core/jni/BroadcastRadio/Tuner.cpp index 2e8798bd7955..f5a85c1bbd83 100644 --- a/services/core/jni/BroadcastRadio/Tuner.cpp +++ b/services/core/jni/BroadcastRadio/Tuner.cpp @@ -22,12 +22,12 @@ #include "convert.h" #include "TunerCallback.h" -#include <JNIHelp.h> -#include <Utils.h> #include <android/hardware/broadcastradio/1.1/IBroadcastRadioFactory.h> #include <binder/IPCThreadState.h> +#include <broadcastradio-utils/Utils.h> #include <core_jni_helpers.h> #include <media/AudioSystem.h> +#include <nativehelper/JNIHelp.h> #include <utils/Log.h> namespace android { @@ -35,6 +35,9 @@ namespace server { namespace BroadcastRadio { namespace Tuner { +using std::lock_guard; +using std::mutex; + using hardware::Return; using hardware::hidl_death_recipient; using hardware::hidl_vec; @@ -49,7 +52,7 @@ using V1_0::Result; using V1_1::ITunerCallback; using V1_1::ProgramListResult; -static Mutex gContextMutex; +static mutex gContextMutex; static struct { struct { @@ -106,8 +109,8 @@ static TunerContext& getNativeContext(JNIEnv *env, JavaRef<jobject> const &jTune } static jlong nativeInit(JNIEnv *env, jobject obj, jint halRev, bool withAudio, jint band) { - ALOGV("nativeInit()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto ctx = new TunerContext(); ctx->mHalRev = static_cast<HalRevision>(halRev); @@ -119,8 +122,8 @@ static jlong nativeInit(JNIEnv *env, jobject obj, jint halRev, bool withAudio, j } static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeFinalize()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto ctx = reinterpret_cast<TunerContext*>(nativeContext); delete ctx; @@ -150,10 +153,9 @@ static void notifyAudioService(TunerContext& ctx, bool connected) { void assignHalInterfaces(JNIEnv *env, JavaRef<jobject> const &jTuner, sp<V1_0::IBroadcastRadio> halModule, sp<V1_0::ITuner> halTuner) { - ALOGV("setHalTuner(%p)", halTuner.get()); + ALOGV("%s(%p)", __func__, halTuner.get()); ALOGE_IF(halTuner == nullptr, "HAL tuner is a nullptr"); - - AutoMutex _l(gContextMutex); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(env, jTuner); if (ctx.mIsClosed) { @@ -187,12 +189,12 @@ static sp<V1_0::ITuner> getHalTuner(const TunerContext& ctx) { } sp<V1_0::ITuner> getHalTuner(jlong nativeContext) { - AutoMutex _l(gContextMutex); + lock_guard<mutex> lk(gContextMutex); return getHalTuner(getNativeContext(nativeContext)); } sp<V1_1::ITuner> getHalTuner11(jlong nativeContext) { - AutoMutex _l(gContextMutex); + lock_guard<mutex> lk(gContextMutex); return getNativeContext(nativeContext).mHalTuner11; } @@ -206,8 +208,9 @@ Region getRegion(JNIEnv *env, jobject obj) { } static void nativeClose(JNIEnv *env, jobject obj, jlong nativeContext) { - AutoMutex _l(gContextMutex); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(nativeContext); + if (ctx.mIsClosed) return; ctx.mIsClosed = true; @@ -228,9 +231,10 @@ static void nativeClose(JNIEnv *env, jobject obj, jlong nativeContext) { } static void nativeSetConfiguration(JNIEnv *env, jobject obj, jlong nativeContext, jobject config) { - ALOGV("nativeSetConfiguration()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(nativeContext); + auto halTuner = getHalTuner(ctx); if (halTuner == nullptr) return; @@ -244,7 +248,7 @@ static void nativeSetConfiguration(JNIEnv *env, jobject obj, jlong nativeContext static jobject nativeGetConfiguration(JNIEnv *env, jobject obj, jlong nativeContext, Region region) { - ALOGV("nativeSetConfiguration()"); + ALOGV("%s", __func__); auto halTuner = getHalTuner(nativeContext); if (halTuner == nullptr) return nullptr; @@ -263,7 +267,7 @@ static jobject nativeGetConfiguration(JNIEnv *env, jobject obj, jlong nativeCont static void nativeStep(JNIEnv *env, jobject obj, jlong nativeContext, bool directionDown, bool skipSubChannel) { - ALOGV("nativeStep()"); + ALOGV("%s", __func__); auto halTuner = getHalTuner(nativeContext); if (halTuner == nullptr) return; @@ -273,7 +277,7 @@ static void nativeStep(JNIEnv *env, jobject obj, jlong nativeContext, static void nativeScan(JNIEnv *env, jobject obj, jlong nativeContext, bool directionDown, bool skipSubChannel) { - ALOGV("nativeScan()"); + ALOGV("%s", __func__); auto halTuner = getHalTuner(nativeContext); if (halTuner == nullptr) return; @@ -282,9 +286,10 @@ static void nativeScan(JNIEnv *env, jobject obj, jlong nativeContext, } static void nativeTune(JNIEnv *env, jobject obj, jlong nativeContext, jobject jSelector) { - ALOGV("nativeTune()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(nativeContext); + auto halTuner10 = getHalTuner(ctx); auto halTuner11 = ctx.mHalTuner11; if (halTuner10 == nullptr) return; @@ -304,7 +309,7 @@ static void nativeTune(JNIEnv *env, jobject obj, jlong nativeContext, jobject jS } static void nativeCancel(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeCancel()"); + ALOGV("%s", __func__); auto halTuner = getHalTuner(nativeContext); if (halTuner == nullptr) return; @@ -323,9 +328,10 @@ static void nativeCancelAnnouncement(JNIEnv *env, jobject obj, jlong nativeConte } static jobject nativeGetProgramInformation(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeGetProgramInformation()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(nativeContext); + auto halTuner10 = getHalTuner(ctx); auto halTuner11 = ctx.mHalTuner11; if (halTuner10 == nullptr) return nullptr; @@ -355,7 +361,7 @@ static jobject nativeGetProgramInformation(JNIEnv *env, jobject obj, jlong nativ } static bool nativeStartBackgroundScan(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeStartBackgroundScan()"); + ALOGV("%s", __func__); auto halTuner = getHalTuner11(nativeContext); if (halTuner == nullptr) { ALOGI("Background scan is not supported with HAL < 1.1"); @@ -369,7 +375,7 @@ static bool nativeStartBackgroundScan(JNIEnv *env, jobject obj, jlong nativeCont } static jobject nativeGetProgramList(JNIEnv *env, jobject obj, jlong nativeContext, jstring jFilter) { - ALOGV("nativeGetProgramList()"); + ALOGV("%s", __func__); auto halTuner = getHalTuner11(nativeContext); if (halTuner == nullptr) { ALOGI("Program list is not supported with HAL < 1.1"); @@ -398,7 +404,7 @@ static jobject nativeGetProgramList(JNIEnv *env, jobject obj, jlong nativeContex static jbyteArray nativeGetImage(JNIEnv *env, jobject obj, jlong nativeContext, jint id) { ALOGV("%s(%x)", __func__, id); - AutoMutex _l(gContextMutex); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(nativeContext); if (ctx.mHalModule11 == nullptr) { @@ -435,7 +441,7 @@ static jbyteArray nativeGetImage(JNIEnv *env, jobject obj, jlong nativeContext, } static bool nativeIsAnalogForced(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeIsAnalogForced()"); + ALOGV("%s", __func__); auto halTuner = getHalTuner11(nativeContext); if (halTuner == nullptr) { jniThrowException(env, "java/lang/IllegalStateException", @@ -456,7 +462,7 @@ static bool nativeIsAnalogForced(JNIEnv *env, jobject obj, jlong nativeContext) } static void nativeSetAnalogForced(JNIEnv *env, jobject obj, jlong nativeContext, bool isForced) { - ALOGV("nativeSetAnalogForced()"); + ALOGV("%s(%d)", __func__, isForced); auto halTuner = getHalTuner11(nativeContext); if (halTuner == nullptr) { jniThrowException(env, "java/lang/IllegalStateException", @@ -469,7 +475,7 @@ static void nativeSetAnalogForced(JNIEnv *env, jobject obj, jlong nativeContext, } static bool nativeIsAntennaConnected(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeIsAntennaConnected()"); + ALOGV("%s", __func__); auto halTuner = getHalTuner(nativeContext); if (halTuner == nullptr) return false; diff --git a/services/core/jni/BroadcastRadio/TunerCallback.cpp b/services/core/jni/BroadcastRadio/TunerCallback.cpp index d22ee827453f..04bdddf61aa0 100644 --- a/services/core/jni/BroadcastRadio/TunerCallback.cpp +++ b/services/core/jni/BroadcastRadio/TunerCallback.cpp @@ -22,9 +22,9 @@ #include "Tuner.h" #include "convert.h" -#include <JNIHelp.h> -#include <Utils.h> +#include <broadcastradio-utils/Utils.h> #include <core_jni_helpers.h> +#include <nativehelper/JNIHelp.h> #include <utils/Log.h> namespace android { @@ -32,6 +32,9 @@ namespace server { namespace BroadcastRadio { namespace TunerCallback { +using std::lock_guard; +using std::mutex; + using hardware::Return; using hardware::hidl_vec; @@ -76,7 +79,7 @@ enum class TunerError : jint { BACKGROUND_SCAN_FAILED = 6, }; -static Mutex gContextMutex; +static mutex gContextMutex; class NativeCallback : public ITunerCallback { jobject mJTuner; @@ -122,13 +125,13 @@ private: NativeCallback::NativeCallback(JNIEnv *env, jobject jTuner, jobject jCallback, HalRevision halRev) : mCallbackThread(gvm), mHalRev(halRev) { - ALOGV("NativeCallback()"); + ALOGV("%s", __func__); mJTuner = env->NewGlobalRef(jTuner); mJCallback = env->NewGlobalRef(jCallback); } NativeCallback::~NativeCallback() { - ALOGV("~NativeCallback()"); + ALOGV("%s", __func__); // stop callback thread before dereferencing client callback mCallbackThread.stop(); @@ -155,7 +158,7 @@ Return<void> NativeCallback::hardwareFailure() { } Return<void> NativeCallback::configChange(Result result, const BandConfig& config) { - ALOGV("configChange(%d)", result); + ALOGV("%s(%d)", __func__, result); mCallbackThread.enqueue([result, config, this](JNIEnv *env) { if (result == Result::OK) { @@ -173,7 +176,7 @@ Return<void> NativeCallback::configChange(Result result, const BandConfig& confi } Return<void> NativeCallback::tuneComplete(Result result, const V1_0::ProgramInfo& info) { - ALOGV("tuneComplete(%d)", result); + ALOGV("%s(%d)", __func__, result); if (mHalRev > HalRevision::V1_0) { ALOGW("1.0 callback was ignored"); @@ -185,7 +188,7 @@ Return<void> NativeCallback::tuneComplete(Result result, const V1_0::ProgramInfo } Return<void> NativeCallback::tuneComplete_1_1(Result result, const ProgramSelector& selector) { - ALOGV("tuneComplete_1_1(%d)", result); + ALOGV("%s(%d)", __func__, result); mCallbackThread.enqueue([result, this](JNIEnv *env) { if (result == Result::OK) { @@ -201,17 +204,17 @@ Return<void> NativeCallback::tuneComplete_1_1(Result result, const ProgramSelect } Return<void> NativeCallback::afSwitch(const V1_0::ProgramInfo& info) { - ALOGV("afSwitch()"); + ALOGV("%s", __func__); return tuneComplete(Result::OK, info); } Return<void> NativeCallback::afSwitch_1_1(const ProgramSelector& selector) { - ALOGV("afSwitch_1_1()"); + ALOGV("%s", __func__); return tuneComplete_1_1(Result::OK, selector); } Return<void> NativeCallback::antennaStateChange(bool connected) { - ALOGV("antennaStateChange(%d)", connected); + ALOGV("%s(%d)", __func__, connected); mCallbackThread.enqueue([this, connected](JNIEnv *env) { env->CallVoidMethod(mJCallback, gjni.TunerCallback.onAntennaState, connected); @@ -221,7 +224,7 @@ Return<void> NativeCallback::antennaStateChange(bool connected) { } Return<void> NativeCallback::trafficAnnouncement(bool active) { - ALOGV("trafficAnnouncement(%d)", active); + ALOGV("%s(%d)", __func__, active); mCallbackThread.enqueue([this, active](JNIEnv *env) { env->CallVoidMethod(mJCallback, gjni.TunerCallback.onTrafficAnnouncement, active); @@ -231,7 +234,7 @@ Return<void> NativeCallback::trafficAnnouncement(bool active) { } Return<void> NativeCallback::emergencyAnnouncement(bool active) { - ALOGV("emergencyAnnouncement(%d)", active); + ALOGV("%s(%d)", __func__, active); mCallbackThread.enqueue([this, active](JNIEnv *env) { env->CallVoidMethod(mJCallback, gjni.TunerCallback.onEmergencyAnnouncement, active); @@ -243,7 +246,7 @@ Return<void> NativeCallback::emergencyAnnouncement(bool active) { Return<void> NativeCallback::newMetadata(uint32_t channel, uint32_t subChannel, const hidl_vec<MetaData>& metadata) { // channel and subChannel are not used - ALOGV("newMetadata(%d, %d)", channel, subChannel); + ALOGV("%s(%d, %d)", __func__, channel, subChannel); if (mHalRev > HalRevision::V1_0) { ALOGW("1.0 callback was ignored"); @@ -258,7 +261,7 @@ Return<void> NativeCallback::newMetadata(uint32_t channel, uint32_t subChannel, } Return<void> NativeCallback::backgroundScanAvailable(bool isAvailable) { - ALOGV("backgroundScanAvailable(%d)", isAvailable); + ALOGV("%s(%d)", __func__, isAvailable); mCallbackThread.enqueue([this, isAvailable](JNIEnv *env) { env->CallVoidMethod(mJCallback, @@ -269,7 +272,7 @@ Return<void> NativeCallback::backgroundScanAvailable(bool isAvailable) { } Return<void> NativeCallback::backgroundScanComplete(ProgramListResult result) { - ALOGV("backgroundScanComplete(%d)", result); + ALOGV("%s(%d)", __func__, result); mCallbackThread.enqueue([this, result](JNIEnv *env) { if (result == ProgramListResult::OK) { @@ -285,7 +288,7 @@ Return<void> NativeCallback::backgroundScanComplete(ProgramListResult result) { } Return<void> NativeCallback::programListChanged() { - ALOGV("programListChanged()"); + ALOGV("%s", __func__); mCallbackThread.enqueue([this](JNIEnv *env) { env->CallVoidMethod(mJCallback, gjni.TunerCallback.onProgramListChanged); @@ -295,7 +298,7 @@ Return<void> NativeCallback::programListChanged() { } Return<void> NativeCallback::programInfoChanged() { - ALOGV("programInfoChanged()"); + ALOGV("%s", __func__); mCallbackThread.enqueue([this](JNIEnv *env) { env->CallVoidMethod(mJCallback, gjni.TunerCallback.onProgramInfoChanged); @@ -318,8 +321,8 @@ static TunerCallbackContext& getNativeContext(JNIEnv *env, jobject jTunerCb) { } static jlong nativeInit(JNIEnv *env, jobject obj, jobject jTuner, jint jHalRev) { - ALOGV("nativeInit()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto halRev = static_cast<HalRevision>(jHalRev); @@ -331,16 +334,16 @@ static jlong nativeInit(JNIEnv *env, jobject obj, jobject jTuner, jint jHalRev) } static void nativeFinalize(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeFinalize()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto ctx = reinterpret_cast<TunerCallbackContext*>(nativeContext); delete ctx; } static void nativeDetach(JNIEnv *env, jobject obj, jlong nativeContext) { - ALOGV("nativeDetach()"); - AutoMutex _l(gContextMutex); + ALOGV("%s", __func__); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(nativeContext); if (ctx.mNativeCallback == nullptr) return; @@ -349,7 +352,7 @@ static void nativeDetach(JNIEnv *env, jobject obj, jlong nativeContext) { } sp<ITunerCallback> getNativeCallback(JNIEnv *env, jobject jTunerCallback) { - AutoMutex _l(gContextMutex); + lock_guard<mutex> lk(gContextMutex); auto& ctx = getNativeContext(env, jTunerCallback); return ctx.mNativeCallback; } diff --git a/services/core/jni/BroadcastRadio/convert.cpp b/services/core/jni/BroadcastRadio/convert.cpp index a2e5643323f9..ba1395f73045 100644 --- a/services/core/jni/BroadcastRadio/convert.cpp +++ b/services/core/jni/BroadcastRadio/convert.cpp @@ -19,9 +19,9 @@ #include "convert.h" -#include <JNIHelp.h> -#include <Utils.h> +#include <broadcastradio-utils/Utils.h> #include <core_jni_helpers.h> +#include <nativehelper/JNIHelp.h> #include <utils/Log.h> namespace android { @@ -262,7 +262,7 @@ static Deemphasis DeemphasisForRegion(Region region) { static JavaRef<jobject> ModulePropertiesFromHal(JNIEnv *env, const V1_0::Properties &prop10, const V1_1::Properties *prop11, jint moduleId, const std::string& serviceName) { - ALOGV("ModulePropertiesFromHal()"); + ALOGV("%s", __func__); using namespace std::placeholders; auto jServiceName = make_javastr(env, serviceName); @@ -298,7 +298,7 @@ JavaRef<jobject> ModulePropertiesFromHal(JNIEnv *env, const V1_1::Properties &pr } static JavaRef<jobject> BandDescriptorFromHal(JNIEnv *env, const V1_0::BandConfig &config, Region region) { - ALOGV("BandDescriptorFromHal()"); + ALOGV("%s", __func__); jint spacing = config.spacings.size() > 0 ? config.spacings[0] : 0; ALOGW_IF(config.spacings.size() == 0, "No channel spacing specified"); @@ -327,7 +327,7 @@ static JavaRef<jobject> BandDescriptorFromHal(JNIEnv *env, const V1_0::BandConfi } JavaRef<jobject> BandConfigFromHal(JNIEnv *env, const V1_0::BandConfig &config, Region region) { - ALOGV("BandConfigFromHal()"); + ALOGV("%s", __func__); auto descriptor = BandDescriptorFromHal(env, config, region); if (descriptor == nullptr) return nullptr; @@ -350,7 +350,7 @@ JavaRef<jobject> BandConfigFromHal(JNIEnv *env, const V1_0::BandConfig &config, } V1_0::BandConfig BandConfigToHal(JNIEnv *env, jobject jConfig, Region ®ion) { - ALOGV("BandConfigToHal()"); + ALOGV("%s", __func__); auto jDescriptor = env->GetObjectField(jConfig, gjni.BandConfig.descriptor); if (jDescriptor == nullptr) { ALOGE("Descriptor is missing"); @@ -392,7 +392,7 @@ Direction DirectionToHal(bool directionDown) { } JavaRef<jobject> MetadataFromHal(JNIEnv *env, const hidl_vec<V1_0::MetaData> &metadata) { - ALOGV("MetadataFromHal()"); + ALOGV("%s", __func__); if (metadata.size() == 0) return nullptr; auto jMetadata = make_javaref(env, env->NewObject( @@ -445,13 +445,13 @@ JavaRef<jobject> MetadataFromHal(JNIEnv *env, const hidl_vec<V1_0::MetaData> &me } static JavaRef<jobject> ProgramIdentifierFromHal(JNIEnv *env, const ProgramIdentifier &id) { - ALOGV("ProgramIdentifierFromHal()"); + ALOGV("%s", __func__); return make_javaref(env, env->NewObject(gjni.ProgramSelector.Identifier.clazz, gjni.ProgramSelector.Identifier.cstor, id.type, id.value)); } static JavaRef<jobject> ProgramSelectorFromHal(JNIEnv *env, const ProgramSelector &selector) { - ALOGV("ProgramSelectorFromHal()"); + ALOGV("%s", __func__); auto jPrimary = ProgramIdentifierFromHal(env, selector.primaryId); auto jSecondary = ArrayFromHal(env, selector.secondaryIds, gjni.ProgramSelector.Identifier.clazz, ProgramIdentifierFromHal); @@ -462,7 +462,7 @@ static JavaRef<jobject> ProgramSelectorFromHal(JNIEnv *env, const ProgramSelecto } static ProgramIdentifier ProgramIdentifierToHal(JNIEnv *env, jobject jId) { - ALOGV("ProgramIdentifierToHal()"); + ALOGV("%s", __func__); ProgramIdentifier id = {}; id.type = env->GetIntField(jId, gjni.ProgramSelector.Identifier.type); @@ -471,7 +471,7 @@ static ProgramIdentifier ProgramIdentifierToHal(JNIEnv *env, jobject jId) { } ProgramSelector ProgramSelectorToHal(JNIEnv *env, jobject jSelector) { - ALOGV("ProgramSelectorToHal()"); + ALOGV("%s", __func__); ProgramSelector selector = {}; @@ -509,7 +509,7 @@ ProgramSelector ProgramSelectorToHal(JNIEnv *env, jobject jSelector) { static JavaRef<jobject> ProgramInfoFromHal(JNIEnv *env, const V1_0::ProgramInfo &info10, const V1_1::ProgramInfo *info11, const ProgramSelector &selector) { - ALOGV("ProgramInfoFromHal()"); + ALOGV("%s", __func__); auto jMetadata = MetadataFromHal(env, info10.metadata); auto jVendorInfo = info11 ? make_javastr(env, info11->vendorInfo) : nullptr; diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 3757b7d0c53d..61267ef5047a 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -1194,8 +1194,13 @@ public final class SystemServer { traceEnd(); } - if (!disableNonCoreServices && context.getResources().getBoolean( - R.bool.config_enableUpdateableTimeZoneRules)) { + // timezone.RulesManagerService will prevent a device starting up if the chain of trust + // required for safe time zone updates might be broken. RuleManagerService cannot do + // this check when mOnlyCore == true, so we don't enable the service in this case. + final boolean startRulesManagerService = + !mOnlyCore && context.getResources().getBoolean( + R.bool.config_enableUpdateableTimeZoneRules); + if (startRulesManagerService) { traceBeginAndSlog("StartTimeZoneRulesManagerService"); mSystemServiceManager.startService(TIME_ZONE_RULES_MANAGER_SERVICE_CLASS); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); diff --git a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java index 689c8f7e6e01..31ed8ba7dd23 100644 --- a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java +++ b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java @@ -10,6 +10,7 @@ import android.os.SystemClock; import android.test.AndroidTestCase; import android.test.RenamingDelegatingContext; import android.util.Log; +import android.util.Pair; import com.android.server.job.JobStore.JobSet; import com.android.server.job.controllers.JobStatus; @@ -63,7 +64,7 @@ public class JobStoreTest extends AndroidTestCase { Thread.sleep(IO_WAIT); // Manually load tasks from xml file. final JobSet jobStatusSet = new JobSet(); - mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); + mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true); assertEquals("Didn't get expected number of persisted tasks.", 1, jobStatusSet.size()); final JobStatus loadedTaskStatus = jobStatusSet.getAllJobs().get(0); @@ -98,7 +99,7 @@ public class JobStoreTest extends AndroidTestCase { Thread.sleep(IO_WAIT); final JobSet jobStatusSet = new JobSet(); - mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); + mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true); assertEquals("Incorrect # of persisted tasks.", 2, jobStatusSet.size()); Iterator<JobStatus> it = jobStatusSet.getAllJobs().iterator(); JobStatus loaded1 = it.next(); @@ -146,7 +147,7 @@ public class JobStoreTest extends AndroidTestCase { Thread.sleep(IO_WAIT); final JobSet jobStatusSet = new JobSet(); - mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); + mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true); assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size()); JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); assertTasksEqual(task, loaded.getJob()); @@ -164,7 +165,7 @@ public class JobStoreTest extends AndroidTestCase { Thread.sleep(IO_WAIT); final JobSet jobStatusSet = new JobSet(); - mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); + mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true); assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size()); JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); assertEquals("Source package not equal.", loaded.getSourcePackageName(), @@ -185,7 +186,7 @@ public class JobStoreTest extends AndroidTestCase { Thread.sleep(IO_WAIT); final JobSet jobStatusSet = new JobSet(); - mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); + mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true); assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size()); JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); assertEquals("Period not equal.", loaded.getJob().getIntervalMillis(), @@ -200,20 +201,23 @@ public class JobStoreTest extends AndroidTestCase { JobInfo.Builder b = new Builder(8, mComponent) .setPeriodic(TWO_HOURS, ONE_HOUR) .setPersisted(true); + final long rtcNow = System.currentTimeMillis(); final long invalidLateRuntimeElapsedMillis = SystemClock.elapsedRealtime() + (TWO_HOURS * ONE_HOUR) + TWO_HOURS; // > period+flex final long invalidEarlyRuntimeElapsedMillis = invalidLateRuntimeElapsedMillis - TWO_HOURS; // Early is (late - period). + final Pair<Long, Long> persistedExecutionTimesUTC = new Pair<>(rtcNow, rtcNow + ONE_HOUR); final JobStatus js = new JobStatus(b.build(), SOME_UID, "somePackage", 0 /* sourceUserId */, "someTag", invalidEarlyRuntimeElapsedMillis, invalidLateRuntimeElapsedMillis, - 0 /* lastSuccessfulRunTime */, 0 /* lastFailedRunTime */); + 0 /* lastSuccessfulRunTime */, 0 /* lastFailedRunTime */, + persistedExecutionTimesUTC); mTaskStoreUnderTest.add(js); Thread.sleep(IO_WAIT); final JobSet jobStatusSet = new JobSet(); - mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); + mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true); assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size()); JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); @@ -236,7 +240,7 @@ public class JobStoreTest extends AndroidTestCase { mTaskStoreUnderTest.add(js); Thread.sleep(IO_WAIT); final JobSet jobStatusSet = new JobSet(); - mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); + mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true); JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); assertEquals("Priority not correctly persisted.", 42, loaded.getPriority()); } @@ -257,7 +261,7 @@ public class JobStoreTest extends AndroidTestCase { mTaskStoreUnderTest.add(jsPersisted); Thread.sleep(IO_WAIT); final JobSet jobStatusSet = new JobSet(); - mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); + mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet, true); assertEquals("Job count is incorrect.", 1, jobStatusSet.size()); JobStatus jobStatus = jobStatusSet.getAllJobs().iterator().next(); assertEquals("Wrong job persisted.", 43, jobStatus.getJobId()); diff --git a/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java b/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java index 520666b6ab8d..432cfc7a22ee 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java @@ -17,6 +17,7 @@ package com.android.server.wm; import android.app.ActivityManager; +import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.Rect; import android.view.DisplayInfo; @@ -49,6 +50,20 @@ public class AppBoundsTests extends WindowTestsBase { } /** + * Ensures that appBounds causes {@link android.content.pm.ActivityInfo.CONFIG_APP_BOUNDS} diff. + */ + @Test + public void testAppBoundsConfigurationDiff() { + final Configuration config = new Configuration(); + final Configuration config2 = new Configuration(); + config.appBounds = new Rect(0, 1, 1, 0); + config2.appBounds = new Rect(1, 2, 2, 1); + + assertEquals(ActivityInfo.CONFIG_SCREEN_SIZE, config.diff(config2)); + assertEquals(0, config.diffPublicOnly(config2)); + } + + /** * Ensures the configuration app bounds at the root level match the app dimensions. */ @Test diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java index 36083bf7a71e..b09601e698f9 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java @@ -185,6 +185,11 @@ public class AppWindowTokenTests extends WindowTestsBase { assertEquals(SCREEN_ORIENTATION_UNSET, token.getOrientation()); // Can specify orientation if the current orientation candidate is orientation behind. assertEquals(SCREEN_ORIENTATION_LANDSCAPE, token.getOrientation(SCREEN_ORIENTATION_BEHIND)); + + token.sendingToBottom = false; + token.setIsOnTop(true); + // Allow for token to provide orientation hidden if on top and not being sent to bottom. + assertEquals(SCREEN_ORIENTATION_LANDSCAPE, token.getOrientation()); } @Test diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java index b83532cfa831..7ff1110e00f7 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java @@ -89,6 +89,7 @@ public class WindowTestUtils { /** Used so we can gain access to some protected members of the {@link AppWindowToken} class. */ public static class TestAppWindowToken extends AppWindowToken { + boolean mOnTop = false; TestAppWindowToken(DisplayContent dc) { super(dc.mService, new IApplicationToken.Stub() {}, false, dc, true /* fillsParent */, @@ -125,6 +126,15 @@ public class WindowTestUtils { int positionInParent() { return getParent().mChildren.indexOf(this); } + + void setIsOnTop(boolean onTop) { + mOnTop = onTop; + } + + @Override + boolean isOnTop() { + return mOnTop; + } } /* Used so we can gain access to some protected members of the {@link WindowToken} class */ diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 0001d42f4329..8368f423c757 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -269,7 +269,9 @@ public class CarrierConfigManager { * * @see SubscriptionManager#getSubscriptionPlans(int) * @see SubscriptionManager#setSubscriptionPlans(int, java.util.List) + * @hide */ + @SystemApi public static final String KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING = "config_plans_package_override_string"; @@ -1396,11 +1398,7 @@ public class CarrierConfigManager { * <p> * This setting may be still overridden by explicit user choice. By default, * the platform value will be used. - * - * @deprecated replaced by - * {@link SubscriptionManager#setSubscriptionPlans(int, java.util.List)} */ - @Deprecated public static final String KEY_MONTHLY_DATA_CYCLE_DAY_INT = "monthly_data_cycle_day_int"; @@ -1425,7 +1423,6 @@ public class CarrierConfigManager { * default data limit, if one exists, will be disabled. A user selected data limit will not be * overridden. */ - @Deprecated public static final int DATA_CYCLE_THRESHOLD_DISABLED = -2; /** @@ -1438,11 +1435,7 @@ public class CarrierConfigManager { * <p> * This setting may be overridden by explicit user choice. By default, the platform value * will be used. - * - * @deprecated replaced by - * {@link SubscriptionManager#setSubscriptionPlans(int, java.util.List)} */ - @Deprecated public static final String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long"; @@ -1456,11 +1449,7 @@ public class CarrierConfigManager { * <p> * This setting may be overridden by explicit user choice. By default, the platform value * will be used. - * - * @deprecated replaced by - * {@link SubscriptionManager#setSubscriptionPlans(int, java.util.List)} */ - @Deprecated public static final String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long"; diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 503bf820c9a0..88f4880a98f8 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -18,6 +18,7 @@ package android.telephony; import android.annotation.NonNull; import android.annotation.SdkConstant; +import android.annotation.SystemApi; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemService; import android.content.Context; @@ -31,14 +32,13 @@ import android.os.Message; import android.os.RemoteException; import android.os.ServiceManager; import android.util.DisplayMetrics; - import com.android.internal.telephony.IOnSubscriptionsChangedListener; import com.android.internal.telephony.ISub; import com.android.internal.telephony.ITelephonyRegistry; import com.android.internal.telephony.PhoneConstants; - import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; /** @@ -59,7 +59,7 @@ public class SubscriptionManager { /** Base value for Dummy SUBSCRIPTION_ID's. */ /** FIXME: Remove DummySubId's, but for now have them map just below INVALID_SUBSCRIPTION_ID - /** @hide */ + /** @hide */ public static final int DUMMY_SUBSCRIPTION_ID_BASE = INVALID_SUBSCRIPTION_ID - 1; /** An invalid phone identifier */ @@ -368,7 +368,7 @@ public class SubscriptionManager { */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String SUB_DEFAULT_CHANGED_ACTION = - "android.intent.action.SUB_DEFAULT_CHANGED"; + "android.intent.action.SUB_DEFAULT_CHANGED"; /** * Broadcast Action: The default subscription has changed. This has the following @@ -621,7 +621,7 @@ public class SubscriptionManager { } if (result == null) { - result = new ArrayList<SubscriptionInfo>(); + result = new ArrayList<>(); } return result; } @@ -1450,8 +1450,8 @@ public class SubscriptionManager { try { ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); if (iSub != null) { - resultValue = iSub.getSubscriptionProperty(subId, propKey, - context.getOpPackageName()); + resultValue = iSub.getSubscriptionProperty(subId, propKey, + context.getOpPackageName()); } } catch (RemoteException ex) { // ignore it @@ -1555,13 +1555,17 @@ public class SubscriptionManager { * </ul> * * @param subId the subscriber this relationship applies to + * @hide */ + @SystemApi public @NonNull List<SubscriptionPlan> getSubscriptionPlans(int subId) { final INetworkPolicyManager npm = INetworkPolicyManager.Stub .asInterface(ServiceManager.getService(Context.NETWORK_POLICY_SERVICE)); try { - return Arrays.asList(npm.getSubscriptionPlans(subId, - mContext.getOpPackageName())); + SubscriptionPlan[] subscriptionPlans = + npm.getSubscriptionPlans(subId, mContext.getOpPackageName()); + return subscriptionPlans == null + ? Collections.emptyList() : Arrays.asList(subscriptionPlans); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1583,7 +1587,9 @@ public class SubscriptionManager { * @param plans the list of plans. The first plan is always the primary and * most important plan. Any additional plans are secondary and * may not be displayed or used by decision making logic. + * @hide */ + @SystemApi public void setSubscriptionPlans(int subId, @NonNull List<SubscriptionPlan> plans) { final INetworkPolicyManager npm = INetworkPolicyManager.Stub .asInterface(ServiceManager.getService(Context.NETWORK_POLICY_SERVICE)); diff --git a/telephony/java/android/telephony/SubscriptionPlan.java b/telephony/java/android/telephony/SubscriptionPlan.java index c9419c535b82..265e3e7c8a01 100644 --- a/telephony/java/android/telephony/SubscriptionPlan.java +++ b/telephony/java/android/telephony/SubscriptionPlan.java @@ -21,6 +21,7 @@ import android.annotation.CurrentTimeMillisLong; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.util.Pair; @@ -42,7 +43,9 @@ import java.util.Iterator; * * @see SubscriptionManager#setSubscriptionPlans(int, java.util.List) * @see SubscriptionManager#getSubscriptionPlans(int) + * @hide */ +@SystemApi public final class SubscriptionPlan implements Parcelable { /** {@hide} */ @IntDef(prefix = "LIMIT_BEHAVIOR_", value = { diff --git a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl index 831ab12fc3ea..748092d2a3bd 100644 --- a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl @@ -29,7 +29,7 @@ import com.android.ims.ImsSuppServiceNotification; * by having one of the methods called on the {@link IImsCallSessionListener}. * {@hide} */ -interface IImsCallSessionListener { +oneway interface IImsCallSessionListener { /** * Notifies the result of the basic session operation (setup / terminate). */ diff --git a/telephony/java/com/android/ims/internal/IImsEcbmListener.aidl b/telephony/java/com/android/ims/internal/IImsEcbmListener.aidl index d866ecbdd317..6066f4915375 100644 --- a/telephony/java/com/android/ims/internal/IImsEcbmListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsEcbmListener.aidl @@ -35,7 +35,7 @@ package com.android.ims.internal; * * {@hide} */ -interface IImsEcbmListener { +oneway interface IImsEcbmListener { /** * Notifies the application when the device enters Emergency Callback Mode. */ diff --git a/telephony/java/com/android/ims/internal/IImsExternalCallStateListener.aidl b/telephony/java/com/android/ims/internal/IImsExternalCallStateListener.aidl index 27b8fa174171..16219671cea5 100644 --- a/telephony/java/com/android/ims/internal/IImsExternalCallStateListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsExternalCallStateListener.aidl @@ -23,7 +23,7 @@ import com.android.ims.ImsExternalCallState; * * {@hide} */ -interface IImsExternalCallStateListener { +oneway interface IImsExternalCallStateListener { /** * Notifies client when Dialog Event Package update is received diff --git a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl index 98f8e0a207c2..15f872603bfb 100644 --- a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl @@ -26,7 +26,7 @@ import android.net.Uri; * * {@hide} */ -interface IImsRegistrationListener { +oneway interface IImsRegistrationListener { /** * Notifies the application when the device is connected to the IMS network. * diff --git a/telephony/java/com/android/ims/internal/IImsUtListener.aidl b/telephony/java/com/android/ims/internal/IImsUtListener.aidl index 641663109fad..300273a7bd38 100644 --- a/telephony/java/com/android/ims/internal/IImsUtListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsUtListener.aidl @@ -26,7 +26,7 @@ import com.android.ims.ImsReasonInfo; /** * {@hide} */ -interface IImsUtListener { +oneway interface IImsUtListener { /** * Notifies the result of the supplementary service configuration udpate. */ diff --git a/tests/Internal/src/com/android/internal/colorextraction/ColorExtractorTest.java b/tests/Internal/src/com/android/internal/colorextraction/ColorExtractorTest.java index 0060901578cd..cb6a83d2644b 100644 --- a/tests/Internal/src/com/android/internal/colorextraction/ColorExtractorTest.java +++ b/tests/Internal/src/com/android/internal/colorextraction/ColorExtractorTest.java @@ -16,12 +16,14 @@ package com.android.internal.colorextraction; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.mockito.Mockito.any; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import android.app.WallpaperColors; import android.app.WallpaperManager; import android.content.Context; import android.graphics.Color; @@ -29,7 +31,6 @@ import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; -import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.colorextraction.ColorExtractor.GradientColors; import com.android.internal.colorextraction.types.ExtractionType; import com.android.internal.colorextraction.types.Tonal; @@ -78,10 +79,10 @@ public class ColorExtractorTest { ExtractionType type = (inWallpaperColors, outGradientColorsNormal, outGradientColorsDark, outGradientColorsExtraDark) -> { - outGradientColorsNormal.set(colorsExpectedNormal); - outGradientColorsDark.set(colorsExpectedDark); - outGradientColorsExtraDark.set(colorsExpectedExtraDark); - }; + outGradientColorsNormal.set(colorsExpectedNormal); + outGradientColorsDark.set(colorsExpectedDark); + outGradientColorsExtraDark.set(colorsExpectedExtraDark); + }; ColorExtractor extractor = new ColorExtractor(mContext, type); GradientColors colors = extractor.getColors(WallpaperManager.FLAG_SYSTEM, @@ -92,4 +93,22 @@ public class ColorExtractorTest { colors = extractor.getColors(WallpaperManager.FLAG_SYSTEM, ColorExtractor.TYPE_EXTRA_DARK); assertEquals("Extracted colors not being used!", colors, colorsExpectedExtraDark); } + + @Test + public void addOnColorsChangedListener_invokesListener() { + ColorExtractor.OnColorsChangedListener mockedListeners = + mock(ColorExtractor.OnColorsChangedListener.class); + ColorExtractor extractor = new ColorExtractor(mContext, new Tonal(mContext)); + extractor.addOnColorsChangedListener(mockedListeners); + + extractor.onColorsChanged(new WallpaperColors(Color.valueOf(Color.RED), null, null), + WallpaperManager.FLAG_LOCK); + verify(mockedListeners, times(1)).onColorsChanged(any(), + eq(WallpaperManager.FLAG_LOCK)); + + extractor.removeOnColorsChangedListener(mockedListeners); + extractor.onColorsChanged(new WallpaperColors(Color.valueOf(Color.RED), null, null), + WallpaperManager.FLAG_LOCK); + verifyNoMoreInteractions(mockedListeners); + } } diff --git a/tests/Internal/src/com/android/internal/graphics/ColorUtilsTest.java b/tests/Internal/src/com/android/internal/graphics/ColorUtilsTest.java new file mode 100644 index 000000000000..73df9a09ea75 --- /dev/null +++ b/tests/Internal/src/com/android/internal/graphics/ColorUtilsTest.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.internal.graphics; + +import android.graphics.Color; +import android.support.test.filters.SmallTest; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +@SmallTest +public class ColorUtilsTest { + + @Test + public void calculateMinimumBackgroundAlpha_satisfiestContrast() { + + int alpha = ColorUtils.calculateMinimumBackgroundAlpha(Color.WHITE, Color.BLACK, 4.5f); + assertTrue("Alpha doesn't need to be 255 to satisfy contrast", alpha < 255); + + int worstCase = ColorUtils.blendARGB(Color.WHITE, Color.BLACK, alpha/255f); + worstCase = ColorUtils.setAlphaComponent(worstCase, 255); + double contrast = ColorUtils.calculateContrast(Color.WHITE, worstCase); + assertTrue("Blended color should satisfy contrast", contrast >= 4.5); + + } +} diff --git a/tests/net/java/com/android/server/connectivity/NetworkNotificationManagerTest.java b/tests/net/java/com/android/server/connectivity/NetworkNotificationManagerTest.java index f201bc7a7d3c..911347c13478 100644 --- a/tests/net/java/com/android/server/connectivity/NetworkNotificationManagerTest.java +++ b/tests/net/java/com/android/server/connectivity/NetworkNotificationManagerTest.java @@ -16,6 +16,16 @@ package com.android.server.connectivity; +import static com.android.server.connectivity.NetworkNotificationManager.NotificationType.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.app.Notification; import android.app.NotificationManager; import android.content.Context; @@ -37,15 +47,6 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import static com.android.server.connectivity.NetworkNotificationManager.NotificationType.*; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyInt; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - public class NetworkNotificationManagerTest extends TestCase { static final NetworkCapabilities CELL_CAPABILITIES = new NetworkCapabilities(); @@ -140,4 +141,47 @@ public class NetworkNotificationManagerTest extends TestCase { verify(mNotificationManager, never()).notifyAsUser(any(), anyInt(), any(), any()); } + + @SmallTest + public void testDuplicatedNotificationsNoInternetThenSignIn() { + final int id = 101; + final String tag = NetworkNotificationManager.tagFor(id); + + // Show first NO_INTERNET + mManager.showNotification(id, NO_INTERNET, mWifiNai, mCellNai, null, false); + verify(mNotificationManager, times(1)) + .notifyAsUser(eq(tag), eq(NO_INTERNET.eventId), any(), any()); + + // Captive portal detection triggers SIGN_IN a bit later, clearing the previous NO_INTERNET + mManager.showNotification(id, SIGN_IN, mWifiNai, mCellNai, null, false); + verify(mNotificationManager, times(1)) + .cancelAsUser(eq(tag), eq(NO_INTERNET.eventId), any()); + verify(mNotificationManager, times(1)) + .notifyAsUser(eq(tag), eq(SIGN_IN.eventId), any(), any()); + + // Network disconnects + mManager.clearNotification(id); + verify(mNotificationManager, times(1)).cancelAsUser(eq(tag), eq(SIGN_IN.eventId), any()); + } + + @SmallTest + public void testDuplicatedNotificationsSignInThenNoInternet() { + final int id = 101; + final String tag = NetworkNotificationManager.tagFor(id); + + // Show first SIGN_IN + mManager.showNotification(id, SIGN_IN, mWifiNai, mCellNai, null, false); + verify(mNotificationManager, times(1)) + .notifyAsUser(eq(tag), eq(SIGN_IN.eventId), any(), any()); + reset(mNotificationManager); + + // NO_INTERNET arrives after, but is ignored. + mManager.showNotification(id, NO_INTERNET, mWifiNai, mCellNai, null, false); + verify(mNotificationManager, never()).cancelAsUser(any(), anyInt(), any()); + verify(mNotificationManager, never()).notifyAsUser(any(), anyInt(), any(), any()); + + // Network disconnects + mManager.clearNotification(id); + verify(mNotificationManager, times(1)).cancelAsUser(eq(tag), eq(SIGN_IN.eventId), any()); + } } diff --git a/tools/aapt2/java/AnnotationProcessor.cpp b/tools/aapt2/java/AnnotationProcessor.cpp index a0ef00b1ea1f..1f83fa098d74 100644 --- a/tools/aapt2/java/AnnotationProcessor.cpp +++ b/tools/aapt2/java/AnnotationProcessor.cpp @@ -18,12 +18,29 @@ #include <algorithm> +#include "text/Unicode.h" +#include "text/Utf8Iterator.h" #include "util/Util.h" -using android::StringPiece; +using ::aapt::text::Utf8Iterator; +using ::android::StringPiece; namespace aapt { +StringPiece AnnotationProcessor::ExtractFirstSentence(const StringPiece& comment) { + Utf8Iterator iter(comment); + while (iter.HasNext()) { + const char32_t codepoint = iter.Next(); + if (codepoint == U'.') { + const size_t current_position = iter.Position(); + if (!iter.HasNext() || text::IsWhitespace(iter.Next())) { + return comment.substr(0, current_position); + } + } + } + return comment; +} + void AnnotationProcessor::AppendCommentLine(std::string& comment) { static const std::string sDeprecated = "@deprecated"; static const std::string sSystemApi = "@SystemApi"; diff --git a/tools/aapt2/java/AnnotationProcessor.h b/tools/aapt2/java/AnnotationProcessor.h index 99cd44fd2cc1..a06eda0f9c5c 100644 --- a/tools/aapt2/java/AnnotationProcessor.h +++ b/tools/aapt2/java/AnnotationProcessor.h @@ -53,6 +53,8 @@ namespace aapt { */ class AnnotationProcessor { public: + static android::StringPiece ExtractFirstSentence(const android::StringPiece& comment); + /** * Adds more comments. Since resources can have various values with different * configurations, diff --git a/tools/aapt2/java/AnnotationProcessor_test.cpp b/tools/aapt2/java/AnnotationProcessor_test.cpp index 3e43c4295c07..9ccac8888426 100644 --- a/tools/aapt2/java/AnnotationProcessor_test.cpp +++ b/tools/aapt2/java/AnnotationProcessor_test.cpp @@ -18,6 +18,10 @@ #include "test/Test.h" +using ::testing::Eq; +using ::testing::HasSubstr; +using ::testing::Not; + namespace aapt { TEST(AnnotationProcessorTest, EmitsDeprecated) { @@ -33,7 +37,7 @@ TEST(AnnotationProcessorTest, EmitsDeprecated) { processor.WriteToStream(&result, ""); std::string annotations = result.str(); - EXPECT_NE(std::string::npos, annotations.find("@Deprecated")); + EXPECT_THAT(annotations, HasSubstr("@Deprecated")); } TEST(AnnotationProcessorTest, EmitsSystemApiAnnotationAndRemovesFromComment) { @@ -44,10 +48,20 @@ TEST(AnnotationProcessorTest, EmitsSystemApiAnnotationAndRemovesFromComment) { processor.WriteToStream(&result, ""); std::string annotations = result.str(); - EXPECT_NE(std::string::npos, - annotations.find("@android.annotation.SystemApi")); - EXPECT_EQ(std::string::npos, annotations.find("@SystemApi")); - EXPECT_NE(std::string::npos, annotations.find("This is a system API")); + EXPECT_THAT(annotations, HasSubstr("@android.annotation.SystemApi")); + EXPECT_THAT(annotations, Not(HasSubstr("@SystemApi"))); + EXPECT_THAT(annotations, HasSubstr("This is a system API")); +} + +TEST(AnnotationProcessor, ExtractsFirstSentence) { + EXPECT_THAT(AnnotationProcessor::ExtractFirstSentence("This is the only sentence"), + Eq("This is the only sentence")); + EXPECT_THAT(AnnotationProcessor::ExtractFirstSentence( + "This is the\n first sentence. This is the rest of the paragraph."), + Eq("This is the\n first sentence.")); + EXPECT_THAT(AnnotationProcessor::ExtractFirstSentence( + "This is the first sentence with a {@link android.R.styleable.Theme}."), + Eq("This is the first sentence with a {@link android.R.styleable.Theme}.")); } } // namespace aapt diff --git a/tools/aapt2/java/JavaClassGenerator.cpp b/tools/aapt2/java/JavaClassGenerator.cpp index 2a23aa9e5372..44fa0f19a0e5 100644 --- a/tools/aapt2/java/JavaClassGenerator.cpp +++ b/tools/aapt2/java/JavaClassGenerator.cpp @@ -299,24 +299,16 @@ void JavaClassGenerator::ProcessStyleable(const ResourceNameRef& name, const Res } const ResourceName& attr_name = entry.attr_ref->name.value(); - styleable_comment << "<tr><td>"; - styleable_comment << "<code>{@link #" << entry.field_name << " " - << (!attr_name.package.empty() - ? attr_name.package - : context_->GetCompilationPackage()) - << ":" << attr_name.entry << "}</code>"; - styleable_comment << "</td>"; - - styleable_comment << "<td>"; + styleable_comment << "<tr><td><code>{@link #" << entry.field_name << " " + << (!attr_name.package.empty() ? attr_name.package + : context_->GetCompilationPackage()) + << ":" << attr_name.entry << "}</code></td>"; // Only use the comment up until the first '.'. This is to stay compatible with // the way old AAPT did it (presumably to keep it short and to avoid including // annotations like @hide which would affect this Styleable). - auto iter = std::find(attr_comment_line.begin(), attr_comment_line.end(), '.'); - if (iter != attr_comment_line.end()) { - attr_comment_line = attr_comment_line.substr(0, (iter - attr_comment_line.begin()) + 1); - } - styleable_comment << attr_comment_line << "</td></tr>\n"; + styleable_comment << "<td>" << AnnotationProcessor::ExtractFirstSentence(attr_comment_line) + << "</td></tr>\n"; } styleable_comment << "</table>\n"; diff --git a/tools/aapt2/text/Unicode.cpp b/tools/aapt2/text/Unicode.cpp index 38ec9c465ec2..75eeb46c7f5e 100644 --- a/tools/aapt2/text/Unicode.cpp +++ b/tools/aapt2/text/Unicode.cpp @@ -66,6 +66,17 @@ bool IsXidContinue(char32_t codepoint) { return FindCharacterProperties(codepoint) & CharacterProperties::kXidContinue; } +// Hardcode the White_Space characters since they are few and the external/icu project doesn't +// list them as data files to parse. +// Sourced from http://www.unicode.org/Public/UCD/latest/ucd/PropList.txt +bool IsWhitespace(char32_t codepoint) { + return (codepoint >= 0x0009 && codepoint <= 0x000d) || (codepoint == 0x0020) || + (codepoint == 0x0085) || (codepoint == 0x00a0) || (codepoint == 0x1680) || + (codepoint >= 0x2000 && codepoint <= 0x200a) || (codepoint == 0x2028) || + (codepoint == 0x2029) || (codepoint == 0x202f) || (codepoint == 0x205f) || + (codepoint == 0x3000); +} + bool IsJavaIdentifier(const StringPiece& str) { Utf8Iterator iter(str); diff --git a/tools/aapt2/text/Unicode.h b/tools/aapt2/text/Unicode.h index 270718734cff..546714e9a290 100644 --- a/tools/aapt2/text/Unicode.h +++ b/tools/aapt2/text/Unicode.h @@ -40,6 +40,10 @@ bool IsXidStart(char32_t codepoint); // characters in the ID_Continue set. bool IsXidContinue(char32_t codepoint); +// Returns true if the Unicode codepoint has the White_Space property. +// http://unicode.org/reports/tr44/#White_Space +bool IsWhitespace(char32_t codepoint); + // Returns true if the UTF8 string can be used as a Java identifier. // NOTE: This does not check against the set of reserved Java keywords. bool IsJavaIdentifier(const android::StringPiece& str); diff --git a/tools/aapt2/text/Utf8Iterator.cpp b/tools/aapt2/text/Utf8Iterator.cpp index 0d43353ef39a..20b9073b9a26 100644 --- a/tools/aapt2/text/Utf8Iterator.cpp +++ b/tools/aapt2/text/Utf8Iterator.cpp @@ -25,18 +25,17 @@ namespace aapt { namespace text { Utf8Iterator::Utf8Iterator(const StringPiece& str) - : str_(str), next_pos_(0), current_codepoint_(0) { + : str_(str), current_pos_(0), next_pos_(0), current_codepoint_(0) { DoNext(); } void Utf8Iterator::DoNext() { - size_t next_pos = 0u; - int32_t result = utf32_from_utf8_at(str_.data(), str_.size(), next_pos_, &next_pos); + current_pos_ = next_pos_; + int32_t result = utf32_from_utf8_at(str_.data(), str_.size(), current_pos_, &next_pos_); if (result == -1) { current_codepoint_ = 0u; } else { current_codepoint_ = static_cast<char32_t>(result); - next_pos_ = next_pos; } } @@ -44,6 +43,10 @@ bool Utf8Iterator::HasNext() const { return current_codepoint_ != 0; } +size_t Utf8Iterator::Position() const { + return current_pos_; +} + void Utf8Iterator::Skip(int amount) { while (amount > 0 && HasNext()) { Next(); diff --git a/tools/aapt2/text/Utf8Iterator.h b/tools/aapt2/text/Utf8Iterator.h index 6923957a5a22..9318401876d1 100644 --- a/tools/aapt2/text/Utf8Iterator.h +++ b/tools/aapt2/text/Utf8Iterator.h @@ -29,6 +29,10 @@ class Utf8Iterator { bool HasNext() const; + // Returns the current position of the iterator in bytes of the source UTF8 string. + // This position is the start of the codepoint returned by the next call to Next(). + size_t Position() const; + void Skip(int amount); char32_t Next(); @@ -39,6 +43,7 @@ class Utf8Iterator { void DoNext(); android::StringPiece str_; + size_t current_pos_; size_t next_pos_; char32_t current_codepoint_; }; diff --git a/tools/aapt2/text/Utf8Iterator_test.cpp b/tools/aapt2/text/Utf8Iterator_test.cpp index f3111c081276..8c3e77446595 100644 --- a/tools/aapt2/text/Utf8Iterator_test.cpp +++ b/tools/aapt2/text/Utf8Iterator_test.cpp @@ -18,6 +18,7 @@ #include "test/Test.h" +using ::android::StringPiece; using ::testing::Eq; namespace aapt { @@ -63,5 +64,32 @@ TEST(Utf8IteratorTest, IteratesOverUnicode) { EXPECT_FALSE(iter.HasNext()); } +TEST(Utf8IteratorTest, PositionPointsToTheCorrectPlace) { + const StringPiece expected("Mm🍩"); + Utf8Iterator iter(expected); + + // Before any character, the position should be 0. + EXPECT_THAT(iter.Position(), Eq(0u)); + + // The 'M' character, one byte. + ASSERT_TRUE(iter.HasNext()); + iter.Next(); + EXPECT_THAT(iter.Position(), Eq(1u)); + + // The 'm' character, one byte. + ASSERT_TRUE(iter.HasNext()); + iter.Next(); + EXPECT_THAT(iter.Position(), Eq(2u)); + + // The doughnut character, 4 bytes. + ASSERT_TRUE(iter.HasNext()); + iter.Next(); + EXPECT_THAT(iter.Position(), Eq(6u)); + + // There should be nothing left. + EXPECT_FALSE(iter.HasNext()); + EXPECT_THAT(iter.Position(), Eq(expected.size())); +} + } // namespace text } // namespace aapt diff --git a/tools/aapt2/tools/extract_unicode_properties.py b/tools/aapt2/tools/extract_unicode_properties.py index d7e0479bb788..7577ec82aa86 100644 --- a/tools/aapt2/tools/extract_unicode_properties.py +++ b/tools/aapt2/tools/extract_unicode_properties.py @@ -35,9 +35,8 @@ class CharacterProperty: return "{}0x{:04x}, 0x{:04x}, {}{}".format( "{", self.first_char, self.last_char, ' | '.join(types), "}") -def extract_unicode_properties(f, props): - prog = re.compile(r"^(?P<first>\w{4})(..(?P<last>\w{4}))?\W+;\W+(?P<prop>\w+)\n$") - chars = {} +def extract_unicode_properties(f, props, chars_out): + prog = re.compile(r"^(?P<first>\w{4})(..(?P<last>\w{4}))?\W+;\W+(?P<prop>\w+)") for line in f: result = prog.match(line) if result: @@ -49,10 +48,12 @@ def extract_unicode_properties(f, props): last_char = (int(last_char_str, 16) if last_char_str else start_char) + 1 prop_type = props[prop_type_str] for char in range(start_char, last_char): - if char not in chars: - chars[char] = CharacterProperty(char, char, 0) - chars[char].prop_type |= prop_type + if char not in chars_out: + chars_out[char] = CharacterProperty(char, char, 0) + chars_out[char].prop_type |= prop_type + return chars_out +def flatten_unicode_properties(chars): result = [] for char_prop in sorted(chars.values(), key=CharacterProperty.key): if len(result) == 0: @@ -82,17 +83,20 @@ license = """/* """ if __name__ == "__main__": - if len(sys.argv) != 2: + if len(sys.argv) < 2: print("must specify path to icu DerivedCoreProperties file (e.g:" \ "external/icu/icu4c/source/data/unidata/DerivedCoreProperties.txt)") sys.exit(1) - with open(sys.argv[1]) as f: - props = {"XID_Start": 1, "XID_Continue": 2} - char_props = extract_unicode_properties(f, props) - print("{}\nconst static std::array<CharacterProperties, {}> sCharacterProperties = {}" - .format(license, len(char_props), "{{")) - for prop in char_props: - print(" {},".format(prop)) - print("}};") + props = {"XID_Start": 1, "XID_Continue": 2} + char_props = {} + for file_path in sys.argv[1:]: + with open(file_path) as f: + extract_unicode_properties(f, props, char_props) + result = flatten_unicode_properties(char_props) + print("{}\nconst static std::array<CharacterProperties, {}> sCharacterProperties = {}" + .format(license, len(result), "{{")) + for prop in result: + print(" {},".format(prop)) + print("}};") diff --git a/wifi/java/android/net/wifi/IRttManager.aidl b/wifi/java/android/net/wifi/IRttManager.aidl index 90f66c4adc1a..383180995b21 100644 --- a/wifi/java/android/net/wifi/IRttManager.aidl +++ b/wifi/java/android/net/wifi/IRttManager.aidl @@ -23,6 +23,6 @@ import android.net.wifi.RttManager; */ interface IRttManager { - Messenger getMessenger(); + Messenger getMessenger(in IBinder binder, out int[] key); RttManager.RttCapabilities getRttCapabilities(); } diff --git a/wifi/java/android/net/wifi/RttManager.java b/wifi/java/android/net/wifi/RttManager.java index a4b3bf2a3019..ac5df05373c1 100644 --- a/wifi/java/android/net/wifi/RttManager.java +++ b/wifi/java/android/net/wifi/RttManager.java @@ -6,6 +6,7 @@ import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.SystemService; import android.content.Context; +import android.os.Binder; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -1187,6 +1188,8 @@ public class RttManager { CMD_OP_ENALBE_RESPONDER_SUCCEEDED = BASE + 7; public static final int CMD_OP_ENALBE_RESPONDER_FAILED = BASE + 8; + /** @hide */ + public static final int CMD_OP_REG_BINDER = BASE + 9; private static final int INVALID_KEY = 0; @@ -1215,9 +1218,10 @@ public class RttManager { mContext = context; mService = service; Messenger messenger = null; + int[] key = new int[1]; try { Log.d(TAG, "Get the messenger from " + mService); - messenger = mService.getMessenger(); + messenger = mService.getMessenger(new Binder(), key); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1233,6 +1237,7 @@ public class RttManager { // We cannot use fullyConnectSync because it sends the FULL_CONNECTION message // synchronously, which causes RttService to receive the wrong replyTo value. mAsyncChannel.sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION); + mAsyncChannel.sendMessage(CMD_OP_REG_BINDER, key[0]); } private void validateChannel() { diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java index afee290cbd5b..a552e629748f 100644 --- a/wifi/java/android/net/wifi/ScanResult.java +++ b/wifi/java/android/net/wifi/ScanResult.java @@ -431,6 +431,28 @@ public class ScanResult implements Parcelable { */ public AnqpInformationElement[] anqpElements; + /** + * Flag indicating if this AP is a carrier AP. The determination is based + * on the AP's SSID and if AP is using EAP security. + * + * @hide + */ + public boolean isCarrierAp; + + /** + * The EAP type {@link WifiEnterpriseConfig.Eap} associated with this AP if it is a carrier AP. + * + * @hide + */ + public int carrierApEapType; + + /** + * The name of the carrier that's associated with this AP if it is a carrier AP. + * + * @hide + */ + public String carrierName; + /** {@hide} */ public ScanResult(WifiSsid wifiSsid, String BSSID, long hessid, int anqpDomainId, byte[] osuProviders, String caps, int level, int frequency, long tsf) { @@ -455,6 +477,9 @@ public class ScanResult implements Parcelable { this.centerFreq0 = UNSPECIFIED; this.centerFreq1 = UNSPECIFIED; this.flags = 0; + this.isCarrierAp = false; + this.carrierApEapType = UNSPECIFIED; + this.carrierName = null; } /** {@hide} */ @@ -473,6 +498,9 @@ public class ScanResult implements Parcelable { this.centerFreq0 = UNSPECIFIED; this.centerFreq1 = UNSPECIFIED; this.flags = 0; + this.isCarrierAp = false; + this.carrierApEapType = UNSPECIFIED; + this.carrierName = null; } /** {@hide} */ @@ -498,6 +526,9 @@ public class ScanResult implements Parcelable { } else { this.flags = 0; } + this.isCarrierAp = false; + this.carrierApEapType = UNSPECIFIED; + this.carrierName = null; } /** {@hide} */ @@ -537,6 +568,9 @@ public class ScanResult implements Parcelable { venueName = source.venueName; operatorFriendlyName = source.operatorFriendlyName; flags = source.flags; + isCarrierAp = source.isCarrierAp; + carrierApEapType = source.carrierApEapType; + carrierName = source.carrierName; } } @@ -577,6 +611,9 @@ public class ScanResult implements Parcelable { sb.append(", centerFreq1: ").append(centerFreq1); sb.append(", 80211mcResponder: "); sb.append(((flags & FLAG_80211mc_RESPONDER) != 0) ? "is supported" : "is not supported"); + sb.append(", Carrier AP: ").append(isCarrierAp ? "yes" : "no"); + sb.append(", Carrier AP EAP Type: ").append(carrierApEapType); + sb.append(", Carrier name: ").append(carrierName); return sb.toString(); } @@ -646,6 +683,9 @@ public class ScanResult implements Parcelable { } else { dest.writeInt(0); } + dest.writeInt(isCarrierAp ? 1 : 0); + dest.writeInt(carrierApEapType); + dest.writeString(carrierName); } /** Implement the Parcelable interface {@hide} */ @@ -715,6 +755,9 @@ public class ScanResult implements Parcelable { new AnqpInformationElement(vendorId, elementId, payload); } } + sr.isCarrierAp = in.readInt() != 0; + sr.carrierApEapType = in.readInt(); + sr.carrierName = in.readString(); return sr; } diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java index f8485ef3af3a..4dc78627ef91 100644 --- a/wifi/java/android/net/wifi/WifiInfo.java +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -345,7 +345,8 @@ public class WifiInfo implements Parcelable { * Returns the service set identifier (SSID) of the current 802.11 network. * If the SSID can be decoded as UTF-8, it will be returned surrounded by double * quotation marks. Otherwise, it is returned as a string of hex digits. The - * SSID may be <unknown ssid> if there is no network currently connected. + * SSID may be <unknown ssid> if there is no network currently connected, + * or if the caller has insufficient permissions to access the SSID. * @return the SSID */ public String getSSID() { diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 598360cc9ef0..c499edcd3e44 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -1633,6 +1633,12 @@ public class WifiManager { /** * Return dynamic information about the current Wi-Fi connection, if any is active. + * <p> + * In the connected state, access to the SSID and BSSID requires + * the same permissions as {@link #getScanResults}. If such access is not allowed, + * {@link WifiInfo#getSSID} will return {@code "<unknown ssid>"} and + * {@link WifiInfo#getBSSID} will return {@code "02:00:00:00:00:00"}. + * * @return the Wi-Fi information, contained in {@link WifiInfo}. */ public WifiInfo getConnectionInfo() { @@ -2330,7 +2336,7 @@ public class WifiManager { /** WPS start succeeded */ public abstract void onStarted(String pin); - /** WPS operation completed succesfully */ + /** WPS operation completed successfully */ public abstract void onSucceeded(); /** @@ -3213,7 +3219,7 @@ public class WifiManager { * Normally the Wifi stack filters out packets not explicitly * addressed to this device. Acquring a MulticastLock will * cause the stack to receive packets addressed to multicast - * addresses. Processing these extra packets can cause a noticable + * addresses. Processing these extra packets can cause a noticeable * battery drain and should be disabled when not needed. */ public class MulticastLock { |