Merge "Telecom shell command accepts userhandle as argument of phone account"
diff --git a/api/current.txt b/api/current.txt
index 657c7c3..ee4a572 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -24274,6 +24274,7 @@
public final class Tag implements android.os.Parcelable {
method public int describeContents();
+ method public boolean done(int);
method public byte[] getId();
method public java.lang.String[] getTechList();
method public void writeToParcel(android.os.Parcel, int);
@@ -35632,12 +35633,24 @@
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 java.lang.String BOOL_ALLOW_EMERGENCY_VIDEO_CALLS = "bool_allow_emergency_video_calls";
+ field public static final java.lang.String BOOL_ALLOW_VIDEO_PAUSE = "bool_allow_video_pause";
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_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL = "allow_emergency_numbers_in_call_log_bool";
field public static final java.lang.String KEY_ALLOW_LOCAL_DTMF_TONES_BOOL = "allow_local_dtmf_tones_bool";
+ field public static final java.lang.String KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL = "allow_non_emergency_calls_in_ecm_bool";
+ field public static final java.lang.String KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL = "always_show_emergency_alert_onoff_bool";
field public static final java.lang.String KEY_APN_EXPAND_BOOL = "apn_expand_bool";
field public static final java.lang.String KEY_AUTO_RETRY_ENABLED_BOOL = "auto_retry_enabled_bool";
field public static final java.lang.String KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL = "carrier_allow_turnoff_ims_bool";
+ field public static final java.lang.String KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL = "carrier_force_disable_etws_cmas_test_bool";
+ field public static final java.lang.String KEY_CARRIER_IMS_GBA_REQUIRED_BOOL = "carrier_ims_gba_required_bool";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL = "carrier_instant_lettering_available_bool";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING = "carrier_instant_lettering_encoding_string";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_ESCAPED_CHARS_STRING = "carrier_instant_lettering_escaped_chars_string";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_INVALID_CHARS_STRING = "carrier_instant_lettering_invalid_chars_string";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT = "carrier_instant_lettering_length_limit_int";
field public static final java.lang.String KEY_CARRIER_SETTINGS_ENABLE_BOOL = "carrier_settings_enable_bool";
field public static final java.lang.String KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL = "carrier_use_ims_first_for_emergency_bool";
field public static final java.lang.String KEY_CARRIER_VOLTE_AVAILABLE_BOOL = "carrier_volte_available_bool";
@@ -35646,20 +35659,30 @@
field public static final java.lang.String KEY_CARRIER_VT_AVAILABLE_BOOL = "carrier_vt_available_bool";
field public static final java.lang.String KEY_CARRIER_VVM_PACKAGE_NAME_STRING = "carrier_vvm_package_name_string";
field public static final java.lang.String KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL = "carrier_wfc_ims_available_bool";
+ field public static final java.lang.String KEY_CDMA_DTMF_TONE_DELAY_INT = "cdma_dtmf_tone_delay_int";
field public static final java.lang.String KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY = "cdma_nonroaming_networks_string_array";
field public static final java.lang.String KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY = "cdma_roaming_networks_string_array";
+ field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_BOOL = "ci_action_on_sys_update_bool";
+ field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING = "ci_action_on_sys_update_extra_string";
+ 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_CSP_ENABLED_BOOL = "csp_enabled_bool";
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_DISABLE_CDMA_ACTIVATION_CODE_BOOL = "disable_cdma_activation_code_bool";
field public static final java.lang.String KEY_DTMF_TYPE_ENABLED_BOOL = "dtmf_type_enabled_bool";
+ field public static final java.lang.String KEY_EDITABLE_ENHANCED_4G_LTE_BOOL = "editable_enhanced_4g_lte_bool";
field public static final java.lang.String KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL = "enable_dialer_key_vibration_bool";
field public static final java.lang.String KEY_FORCE_HOME_NETWORK_BOOL = "force_home_network_bool";
+ field public static final java.lang.String KEY_GSM_DTMF_TONE_DELAY_INT = "gsm_dtmf_tone_delay_int";
field public static final java.lang.String KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY = "gsm_nonroaming_networks_string_array";
field public static final java.lang.String KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY = "gsm_roaming_networks_string_array";
field public static final java.lang.String KEY_HAS_IN_CALL_NOISE_SUPPRESSION_BOOL = "has_in_call_noise_suppression_bool";
field public static final java.lang.String KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL = "hide_carrier_network_settings_bool";
+ field public static final java.lang.String KEY_HIDE_IMS_APN_BOOL = "hide_ims_apn_bool";
+ field public static final java.lang.String KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL = "hide_preferred_network_type_bool";
field public static final java.lang.String KEY_HIDE_SIM_LOCK_SETTINGS_BOOL = "hide_sim_lock_settings_bool";
field public static final java.lang.String KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL = "ignore_sim_network_locked_events_bool";
+ field public static final java.lang.String KEY_IMS_DTMF_TONE_DELAY_INT = "ims_dtmf_tone_delay_int";
field public static final java.lang.String KEY_MMS_ALIAS_ENABLED_BOOL = "aliasEnabled";
field public static final java.lang.String KEY_MMS_ALIAS_MAX_CHARS_INT = "aliasMaxChars";
field public static final java.lang.String KEY_MMS_ALIAS_MIN_CHARS_INT = "aliasMinChars";
@@ -35693,14 +35716,17 @@
field public static final java.lang.String KEY_MMS_USER_AGENT_STRING = "userAgent";
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";
+ field public static final java.lang.String KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL = "require_entitlement_checks_bool";
field public static final java.lang.String KEY_SHOW_APN_SETTING_CDMA_BOOL = "show_apn_setting_cdma_bool";
field public static final java.lang.String KEY_SHOW_CDMA_CHOICES_BOOL = "show_cdma_choices_bool";
field public static final java.lang.String KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL = "show_onscreen_dial_button_bool";
field public static final java.lang.String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool";
+ field public static final java.lang.String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool";
field public static final java.lang.String KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL = "support_pause_ims_video_calls_bool";
field public static final java.lang.String KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL = "support_swap_after_merge_bool";
field public static final java.lang.String KEY_USE_HFA_FOR_PROVISIONING_BOOL = "use_hfa_for_provisioning_bool";
field public static final java.lang.String KEY_USE_OTASP_FOR_PROVISIONING_BOOL = "use_otasp_for_provisioning_bool";
+ field public static final java.lang.String KEY_USE_RCS_PRESENCE_BOOL = "use_rcs_presence_bool";
field public static final java.lang.String KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL = "voicemail_notification_persistent_bool";
field public static final java.lang.String KEY_VOICE_PRIVACY_DISABLE_UI_BOOL = "voice_privacy_disable_ui_bool";
field public static final java.lang.String KEY_VOLTE_REPLACEMENT_RAT_INT = "volte_replacement_rat_int";
diff --git a/api/system-current.txt b/api/system-current.txt
index 459dc59..187fa6b 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -26275,6 +26275,7 @@
public final class Tag implements android.os.Parcelable {
method public int describeContents();
+ method public boolean done(int);
method public byte[] getId();
method public java.lang.String[] getTechList();
method public void writeToParcel(android.os.Parcel, int);
@@ -37961,11 +37962,21 @@
field public static final java.lang.String BOOL_ALLOW_EMERGENCY_VIDEO_CALLS = "bool_allow_emergency_video_calls";
field public static final java.lang.String BOOL_ALLOW_VIDEO_PAUSE = "bool_allow_video_pause";
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_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL = "allow_emergency_numbers_in_call_log_bool";
field public static final java.lang.String KEY_ALLOW_LOCAL_DTMF_TONES_BOOL = "allow_local_dtmf_tones_bool";
+ field public static final java.lang.String KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL = "allow_non_emergency_calls_in_ecm_bool";
+ field public static final java.lang.String KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL = "always_show_emergency_alert_onoff_bool";
field public static final java.lang.String KEY_APN_EXPAND_BOOL = "apn_expand_bool";
field public static final java.lang.String KEY_AUTO_RETRY_ENABLED_BOOL = "auto_retry_enabled_bool";
field public static final java.lang.String KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL = "carrier_allow_turnoff_ims_bool";
+ field public static final java.lang.String KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL = "carrier_force_disable_etws_cmas_test_bool";
+ field public static final java.lang.String KEY_CARRIER_IMS_GBA_REQUIRED_BOOL = "carrier_ims_gba_required_bool";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL = "carrier_instant_lettering_available_bool";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING = "carrier_instant_lettering_encoding_string";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_ESCAPED_CHARS_STRING = "carrier_instant_lettering_escaped_chars_string";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_INVALID_CHARS_STRING = "carrier_instant_lettering_invalid_chars_string";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT = "carrier_instant_lettering_length_limit_int";
field public static final java.lang.String KEY_CARRIER_SETTINGS_ENABLE_BOOL = "carrier_settings_enable_bool";
field public static final java.lang.String KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL = "carrier_use_ims_first_for_emergency_bool";
field public static final java.lang.String KEY_CARRIER_VOLTE_AVAILABLE_BOOL = "carrier_volte_available_bool";
@@ -37974,20 +37985,30 @@
field public static final java.lang.String KEY_CARRIER_VT_AVAILABLE_BOOL = "carrier_vt_available_bool";
field public static final java.lang.String KEY_CARRIER_VVM_PACKAGE_NAME_STRING = "carrier_vvm_package_name_string";
field public static final java.lang.String KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL = "carrier_wfc_ims_available_bool";
+ field public static final java.lang.String KEY_CDMA_DTMF_TONE_DELAY_INT = "cdma_dtmf_tone_delay_int";
field public static final java.lang.String KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY = "cdma_nonroaming_networks_string_array";
field public static final java.lang.String KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY = "cdma_roaming_networks_string_array";
+ field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_BOOL = "ci_action_on_sys_update_bool";
+ field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING = "ci_action_on_sys_update_extra_string";
+ 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_CSP_ENABLED_BOOL = "csp_enabled_bool";
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_DISABLE_CDMA_ACTIVATION_CODE_BOOL = "disable_cdma_activation_code_bool";
field public static final java.lang.String KEY_DTMF_TYPE_ENABLED_BOOL = "dtmf_type_enabled_bool";
+ field public static final java.lang.String KEY_EDITABLE_ENHANCED_4G_LTE_BOOL = "editable_enhanced_4g_lte_bool";
field public static final java.lang.String KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL = "enable_dialer_key_vibration_bool";
field public static final java.lang.String KEY_FORCE_HOME_NETWORK_BOOL = "force_home_network_bool";
+ field public static final java.lang.String KEY_GSM_DTMF_TONE_DELAY_INT = "gsm_dtmf_tone_delay_int";
field public static final java.lang.String KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY = "gsm_nonroaming_networks_string_array";
field public static final java.lang.String KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY = "gsm_roaming_networks_string_array";
field public static final java.lang.String KEY_HAS_IN_CALL_NOISE_SUPPRESSION_BOOL = "has_in_call_noise_suppression_bool";
field public static final java.lang.String KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL = "hide_carrier_network_settings_bool";
+ field public static final java.lang.String KEY_HIDE_IMS_APN_BOOL = "hide_ims_apn_bool";
+ field public static final java.lang.String KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL = "hide_preferred_network_type_bool";
field public static final java.lang.String KEY_HIDE_SIM_LOCK_SETTINGS_BOOL = "hide_sim_lock_settings_bool";
field public static final java.lang.String KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL = "ignore_sim_network_locked_events_bool";
+ field public static final java.lang.String KEY_IMS_DTMF_TONE_DELAY_INT = "ims_dtmf_tone_delay_int";
field public static final java.lang.String KEY_MMS_ALIAS_ENABLED_BOOL = "aliasEnabled";
field public static final java.lang.String KEY_MMS_ALIAS_MAX_CHARS_INT = "aliasMaxChars";
field public static final java.lang.String KEY_MMS_ALIAS_MIN_CHARS_INT = "aliasMinChars";
@@ -38021,10 +38042,12 @@
field public static final java.lang.String KEY_MMS_USER_AGENT_STRING = "userAgent";
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";
+ field public static final java.lang.String KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL = "require_entitlement_checks_bool";
field public static final java.lang.String KEY_SHOW_APN_SETTING_CDMA_BOOL = "show_apn_setting_cdma_bool";
field public static final java.lang.String KEY_SHOW_CDMA_CHOICES_BOOL = "show_cdma_choices_bool";
field public static final java.lang.String KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL = "show_onscreen_dial_button_bool";
field public static final java.lang.String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool";
+ field public static final java.lang.String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool";
field public static final java.lang.String KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL = "support_pause_ims_video_calls_bool";
field public static final java.lang.String KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL = "support_swap_after_merge_bool";
field public static final java.lang.String KEY_USE_HFA_FOR_PROVISIONING_BOOL = "use_hfa_for_provisioning_bool";
diff --git a/api/test-current.txt b/api/test-current.txt
index d78973f..915fbee 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -24282,6 +24282,7 @@
public final class Tag implements android.os.Parcelable {
method public int describeContents();
+ method public boolean done(int);
method public byte[] getId();
method public java.lang.String[] getTechList();
method public void writeToParcel(android.os.Parcel, int);
@@ -35646,12 +35647,24 @@
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 java.lang.String BOOL_ALLOW_EMERGENCY_VIDEO_CALLS = "bool_allow_emergency_video_calls";
+ field public static final java.lang.String BOOL_ALLOW_VIDEO_PAUSE = "bool_allow_video_pause";
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_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL = "allow_emergency_numbers_in_call_log_bool";
field public static final java.lang.String KEY_ALLOW_LOCAL_DTMF_TONES_BOOL = "allow_local_dtmf_tones_bool";
+ field public static final java.lang.String KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL = "allow_non_emergency_calls_in_ecm_bool";
+ field public static final java.lang.String KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL = "always_show_emergency_alert_onoff_bool";
field public static final java.lang.String KEY_APN_EXPAND_BOOL = "apn_expand_bool";
field public static final java.lang.String KEY_AUTO_RETRY_ENABLED_BOOL = "auto_retry_enabled_bool";
field public static final java.lang.String KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL = "carrier_allow_turnoff_ims_bool";
+ field public static final java.lang.String KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL = "carrier_force_disable_etws_cmas_test_bool";
+ field public static final java.lang.String KEY_CARRIER_IMS_GBA_REQUIRED_BOOL = "carrier_ims_gba_required_bool";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL = "carrier_instant_lettering_available_bool";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING = "carrier_instant_lettering_encoding_string";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_ESCAPED_CHARS_STRING = "carrier_instant_lettering_escaped_chars_string";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_INVALID_CHARS_STRING = "carrier_instant_lettering_invalid_chars_string";
+ field public static final java.lang.String KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT = "carrier_instant_lettering_length_limit_int";
field public static final java.lang.String KEY_CARRIER_SETTINGS_ENABLE_BOOL = "carrier_settings_enable_bool";
field public static final java.lang.String KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL = "carrier_use_ims_first_for_emergency_bool";
field public static final java.lang.String KEY_CARRIER_VOLTE_AVAILABLE_BOOL = "carrier_volte_available_bool";
@@ -35660,20 +35673,30 @@
field public static final java.lang.String KEY_CARRIER_VT_AVAILABLE_BOOL = "carrier_vt_available_bool";
field public static final java.lang.String KEY_CARRIER_VVM_PACKAGE_NAME_STRING = "carrier_vvm_package_name_string";
field public static final java.lang.String KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL = "carrier_wfc_ims_available_bool";
+ field public static final java.lang.String KEY_CDMA_DTMF_TONE_DELAY_INT = "cdma_dtmf_tone_delay_int";
field public static final java.lang.String KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY = "cdma_nonroaming_networks_string_array";
field public static final java.lang.String KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY = "cdma_roaming_networks_string_array";
+ field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_BOOL = "ci_action_on_sys_update_bool";
+ field public static final java.lang.String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING = "ci_action_on_sys_update_extra_string";
+ 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_CSP_ENABLED_BOOL = "csp_enabled_bool";
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_DISABLE_CDMA_ACTIVATION_CODE_BOOL = "disable_cdma_activation_code_bool";
field public static final java.lang.String KEY_DTMF_TYPE_ENABLED_BOOL = "dtmf_type_enabled_bool";
+ field public static final java.lang.String KEY_EDITABLE_ENHANCED_4G_LTE_BOOL = "editable_enhanced_4g_lte_bool";
field public static final java.lang.String KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL = "enable_dialer_key_vibration_bool";
field public static final java.lang.String KEY_FORCE_HOME_NETWORK_BOOL = "force_home_network_bool";
+ field public static final java.lang.String KEY_GSM_DTMF_TONE_DELAY_INT = "gsm_dtmf_tone_delay_int";
field public static final java.lang.String KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY = "gsm_nonroaming_networks_string_array";
field public static final java.lang.String KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY = "gsm_roaming_networks_string_array";
field public static final java.lang.String KEY_HAS_IN_CALL_NOISE_SUPPRESSION_BOOL = "has_in_call_noise_suppression_bool";
field public static final java.lang.String KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL = "hide_carrier_network_settings_bool";
+ field public static final java.lang.String KEY_HIDE_IMS_APN_BOOL = "hide_ims_apn_bool";
+ field public static final java.lang.String KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL = "hide_preferred_network_type_bool";
field public static final java.lang.String KEY_HIDE_SIM_LOCK_SETTINGS_BOOL = "hide_sim_lock_settings_bool";
field public static final java.lang.String KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL = "ignore_sim_network_locked_events_bool";
+ field public static final java.lang.String KEY_IMS_DTMF_TONE_DELAY_INT = "ims_dtmf_tone_delay_int";
field public static final java.lang.String KEY_MMS_ALIAS_ENABLED_BOOL = "aliasEnabled";
field public static final java.lang.String KEY_MMS_ALIAS_MAX_CHARS_INT = "aliasMaxChars";
field public static final java.lang.String KEY_MMS_ALIAS_MIN_CHARS_INT = "aliasMinChars";
@@ -35707,14 +35730,17 @@
field public static final java.lang.String KEY_MMS_USER_AGENT_STRING = "userAgent";
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";
+ field public static final java.lang.String KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL = "require_entitlement_checks_bool";
field public static final java.lang.String KEY_SHOW_APN_SETTING_CDMA_BOOL = "show_apn_setting_cdma_bool";
field public static final java.lang.String KEY_SHOW_CDMA_CHOICES_BOOL = "show_cdma_choices_bool";
field public static final java.lang.String KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL = "show_onscreen_dial_button_bool";
field public static final java.lang.String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool";
+ field public static final java.lang.String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool";
field public static final java.lang.String KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL = "support_pause_ims_video_calls_bool";
field public static final java.lang.String KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL = "support_swap_after_merge_bool";
field public static final java.lang.String KEY_USE_HFA_FOR_PROVISIONING_BOOL = "use_hfa_for_provisioning_bool";
field public static final java.lang.String KEY_USE_OTASP_FOR_PROVISIONING_BOOL = "use_otasp_for_provisioning_bool";
+ field public static final java.lang.String KEY_USE_RCS_PRESENCE_BOOL = "use_rcs_presence_bool";
field public static final java.lang.String KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL = "voicemail_notification_persistent_bool";
field public static final java.lang.String KEY_VOICE_PRIVACY_DISABLE_UI_BOOL = "voice_privacy_disable_ui_bool";
field public static final java.lang.String KEY_VOLTE_REPLACEMENT_RAT_INT = "volte_replacement_rat_int";
diff --git a/core/java/android/nfc/INfcTag.aidl b/core/java/android/nfc/INfcTag.aidl
index 3ac1dcc..26d2bec 100644
--- a/core/java/android/nfc/INfcTag.aidl
+++ b/core/java/android/nfc/INfcTag.aidl
@@ -25,13 +25,13 @@
*/
interface INfcTag
{
- int close(int nativeHandle);
int connect(int nativeHandle, int technology);
int reconnect(int nativeHandle);
int[] getTechList(int nativeHandle);
boolean isNdef(int nativeHandle);
boolean isPresent(int nativeHandle);
TransceiveResult transceive(int nativeHandle, in byte[] data, boolean raw);
+ boolean done(int nativeHandle, int debounceMs);
NdefMessage ndefRead(int nativeHandle);
int ndefWrite(int nativeHandle, in NdefMessage msg);
diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java
index 154d5a1..40d5a8db 100644
--- a/core/java/android/nfc/Tag.java
+++ b/core/java/android/nfc/Tag.java
@@ -214,6 +214,42 @@
return techIntList;
}
+ /**
+ * Signals that you are no longer interested in communicating with this tag
+ * for as long as it remains in range.
+ *
+ * All future attempted communication to this tag will fail with {@link IOException}.
+ * The NFC controller will be put in a low-power polling mode, allowing the device
+ * to save power in cases where it's "attached" to a tag all the time (eg a tag in
+ * car dock).
+ *
+ * Additionally the debounceMs parameter allows you to specify for how long the tag needs
+ * to have gone out of range, before it will be dispatched again.
+ *
+ * Note: the NFC controller typically polls at a pretty slow interval (100 - 500 ms).
+ * This means that if the tag repeatedly goes in and out of range (for example, in
+ * case of a flaky connection), and the controller happens to poll every time the
+ * tag is out of range, it *will* re-dispatch the tag after debounceMs, despite the tag
+ * having been "in range" during the interval.
+ *
+ * Note 2: if a tag with another UID is detected after this API is called, its effect
+ * will be cancelled; if this tag shows up before the amount of time specified in
+ * debounceMs, it will be dispatched again.
+ *
+ * Note 3: some tags have a random UID, in which case this API won't work.
+ *
+ * @param debounceMs minimum amount of time the tag needs to be out of range before being
+ * dispatched again.
+ * @return false if the Tag couldn't be found (or has gone out of range), true otherwise
+ */
+ public boolean done(int debounceMs) {
+ try {
+ return mTagService.done(getServiceHandle(), debounceMs);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
private static HashMap<String, Integer> getTechStringToCodeMap() {
HashMap<String, Integer> techStringToCodeMap = new HashMap<String, Integer>();
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index fc1ba44..30593f2 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -7,7 +7,6 @@
LOCAL_CFLAGS += -Wno-unused-parameter
LOCAL_CFLAGS += -Wno-non-virtual-dtor
LOCAL_CFLAGS += -Wno-maybe-uninitialized -Wno-parentheses
-LOCAL_CFLAGS += -DHWUI_NEW_OPS
LOCAL_CPPFLAGS += -Wno-conversion-null
ifeq ($(TARGET_ARCH), arm)
diff --git a/core/jni/android_view_DisplayListCanvas.cpp b/core/jni/android_view_DisplayListCanvas.cpp
index d2c99fd..a6c61de 100644
--- a/core/jni/android_view_DisplayListCanvas.cpp
+++ b/core/jni/android_view_DisplayListCanvas.cpp
@@ -72,10 +72,16 @@
// ----------------------------------------------------------------------------
static jint android_view_DisplayListCanvas_getMaxTextureWidth(JNIEnv* env, jobject clazz) {
+ if (!Caches::hasInstance()) {
+ android::uirenderer::renderthread::RenderProxy::staticFence();
+ }
return Caches::getInstance().maxTextureSize;
}
static jint android_view_DisplayListCanvas_getMaxTextureHeight(JNIEnv* env, jobject clazz) {
+ if (!Caches::hasInstance()) {
+ android::uirenderer::renderthread::RenderProxy::staticFence();
+ }
return Caches::getInstance().maxTextureSize;
}
diff --git a/core/tests/coretests/src/android/animation/AutoCancelTest.java b/core/tests/coretests/src/android/animation/AutoCancelTest.java
index 5810818..b1f88db 100644
--- a/core/tests/coretests/src/android/animation/AutoCancelTest.java
+++ b/core/tests/coretests/src/android/animation/AutoCancelTest.java
@@ -18,12 +18,10 @@
import android.os.Handler;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
-import android.test.suitebuilder.annotation.Suppress;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;
-@Suppress // Failing
public class AutoCancelTest extends ActivityInstrumentationTestCase2<BasicAnimatorActivity> {
boolean mAnimX1Canceled = false;
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index fa7c8aa..1248a4c 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -2,7 +2,7 @@
include $(CLEAR_VARS)
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
-HWUI_NEW_OPS := true
+HWUI_NEW_OPS := false
hwui_src_files := \
font/CacheTexture.cpp \
@@ -233,7 +233,6 @@
tests/unit/GpuMemoryTrackerTests.cpp \
tests/unit/LayerUpdateQueueTests.cpp \
tests/unit/LinearAllocatorTests.cpp \
- tests/unit/LeakCheckTests.cpp \
tests/unit/VectorDrawableTests.cpp \
tests/unit/OffscreenBufferPoolTests.cpp \
tests/unit/StringUtilsTests.cpp
@@ -242,6 +241,7 @@
LOCAL_SRC_FILES += \
tests/unit/BakedOpStateTests.cpp \
tests/unit/FrameBuilderTests.cpp \
+ tests/unit/LeakCheckTests.cpp \
tests/unit/RecordingCanvasTests.cpp
endif
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index 72c7e4e..db2a2c8 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -384,6 +384,12 @@
postAndWait(task);
}
+void RenderProxy::staticFence() {
+ SETUP_TASK(fence);
+ UNUSED(args);
+ staticPostAndWait(task);
+}
+
CREATE_BRIDGE1(stopDrawing, CanvasContext* context) {
args->context->stopDrawing();
return nullptr;
diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h
index 1d30eb8..0f91b2a 100644
--- a/libs/hwui/renderthread/RenderProxy.h
+++ b/libs/hwui/renderthread/RenderProxy.h
@@ -93,6 +93,7 @@
ANDROID_API static void overrideProperty(const char* name, const char* value);
ANDROID_API void fence();
+ ANDROID_API static void staticFence();
ANDROID_API void stopDrawing();
ANDROID_API void notifyFramePending();
diff --git a/libs/hwui/tests/common/TestUtils.cpp b/libs/hwui/tests/common/TestUtils.cpp
index d56693c..5ed7aa4 100644
--- a/libs/hwui/tests/common/TestUtils.cpp
+++ b/libs/hwui/tests/common/TestUtils.cpp
@@ -21,7 +21,6 @@
#include <unistd.h>
#include <signal.h>
-#include <setjmp.h>
namespace android {
namespace uirenderer {
@@ -129,11 +128,14 @@
fprintf(stderr, "RenderThread crashed!");
}
-static jmp_buf gErrJmpBuff;
static std::function<void()> gCrashHandler = defaultCrashHandler;
+static sighandler_t gPreviousSignalHandler;
static void signalHandler(int sig) {
- longjmp(gErrJmpBuff, 1);
+ gCrashHandler();
+ if (gPreviousSignalHandler) {
+ gPreviousSignalHandler(sig);
+ }
}
void TestUtils::setRenderThreadCrashHandler(std::function<void()> crashHandler) {
@@ -141,17 +143,7 @@
}
void TestUtils::TestTask::run() {
- struct sigaction act;
- memset(&act, 0, sizeof(act));
- act.sa_handler = signalHandler;
-
- if (setjmp(gErrJmpBuff)) {
- gCrashHandler();
- return;
- }
-
- sigaction(SIGABRT, &act, nullptr);
-
+ gPreviousSignalHandler = signal(SIGABRT, signalHandler);
// RenderState only valid once RenderThread is running, so queried here
RenderState& renderState = renderthread::RenderThread::getInstance().renderState();
@@ -159,6 +151,9 @@
renderState.onGLContextCreated();
rtCallback(renderthread::RenderThread::getInstance());
renderState.onGLContextDestroyed();
+
+ // Restore the previous signal handler
+ signal(SIGABRT, gPreviousSignalHandler);
}
} /* namespace uirenderer */
diff --git a/libs/hwui/tests/unit/CrashHandlerInjector.cpp b/libs/hwui/tests/unit/CrashHandlerInjector.cpp
index 685c264..b1c678d 100644
--- a/libs/hwui/tests/unit/CrashHandlerInjector.cpp
+++ b/libs/hwui/tests/unit/CrashHandlerInjector.cpp
@@ -17,11 +17,16 @@
#include "tests/common/TestUtils.h"
#include <gtest/gtest.h>
+#include <cstdio>
using namespace android::uirenderer;
static void gunitCrashHandler() {
- FAIL() << "RenderThread fatal exception!";
+ auto testinfo = ::testing::UnitTest::GetInstance()->current_test_info();
+ printf("[ FAILED ] %s.%s\n", testinfo->test_case_name(),
+ testinfo->name());
+ printf("[ FATAL! ] RenderThread crashed, aborting tests!\n");
+ fflush(stdout);
}
static void hookError() {
diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java
index 606447b5..efae628 100644
--- a/media/java/android/media/AudioAttributes.java
+++ b/media/java/android/media/AudioAttributes.java
@@ -442,7 +442,8 @@
/**
* Sets the combination of flags.
- * @param flags the {@link AudioAttributes#FLAG_AUDIBILITY_ENFORCED} flag.
+ * @param flags a combination of {@link AudioAttributes#FLAG_AUDIBILITY_ENFORCED},
+ * {@link AudioAttributes#FLAG_HW_AV_SYNC}.
* @return the same Builder instance.
*/
public Builder setFlags(int flags) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/net/MobileDataController.java b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
similarity index 93%
rename from packages/SettingsLib/src/com/android/settingslib/net/MobileDataController.java
rename to packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
index 642b60e..5d8668b 100644
--- a/packages/SettingsLib/src/com/android/settingslib/net/MobileDataController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
@@ -42,11 +42,11 @@
import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
-public class MobileDataController {
- private static final String TAG = "MobileDataController";
+public class DataUsageController {
+ private static final String TAG = "DataUsageController";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
- private static final long DEFAULT_WARNING_LEVEL = 2L * 1024 * 1024 * 1024;
+ public static final long DEFAULT_WARNING_LEVEL = 2L * 1024 * 1024 * 1024;
private static final int FIELDS = FIELD_RX_BYTES | FIELD_TX_BYTES;
private static final StringBuilder PERIOD_BUILDER = new StringBuilder(50);
private static final java.util.Formatter PERIOD_FORMATTER = new java.util.Formatter(
@@ -62,7 +62,7 @@
private Callback mCallback;
private NetworkNameProvider mNetworkController;
- public MobileDataController(Context context) {
+ public DataUsageController(Context context) {
mContext = context;
mTelephonyManager = TelephonyManager.from(context);
mConnectivityManager = ConnectivityManager.from(context);
@@ -109,16 +109,25 @@
if (subscriberId == null) {
return warn("no subscriber id");
}
+ NetworkTemplate template = NetworkTemplate.buildTemplateMobileAll(subscriberId);
+ template = NetworkTemplate.normalize(template, mTelephonyManager.getMergedSubscriberIds());
+
+ return getDataUsageInfo(template);
+ }
+
+ public DataUsageInfo getWifiDataUsageInfo() {
+ NetworkTemplate template = NetworkTemplate.buildTemplateWifiWildcard();
+ return getDataUsageInfo(template);
+ }
+
+ public DataUsageInfo getDataUsageInfo(NetworkTemplate template) {
final INetworkStatsSession session = getSession();
if (session == null) {
return warn("no stats session");
}
- NetworkTemplate template = NetworkTemplate.buildTemplateMobileAll(subscriberId);
- template = NetworkTemplate.normalize(template, mTelephonyManager.getMergedSubscriberIds());
-
final NetworkPolicy policy = findNetworkPolicy(template);
try {
- final NetworkStatsHistory history = mSession.getHistoryForNetwork(template, FIELDS);
+ final NetworkStatsHistory history = session.getHistoryForNetwork(template, FIELDS);
final long now = System.currentTimeMillis();
final long start, end;
if (policy != null && policy.cycleDay > 0) {
@@ -153,6 +162,7 @@
}
final long totalBytes = entry.rxBytes + entry.txBytes;
final DataUsageInfo usage = new DataUsageInfo();
+ usage.startDate = start;
usage.usageLevel = totalBytes;
usage.period = formatDateRange(start, end);
if (policy != null) {
@@ -238,6 +248,7 @@
public static class DataUsageInfo {
public String carrier;
public String period;
+ public long startDate;
public long limitLevel;
public long warningLevel;
public long usageLevel;
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index df8fad4..874a946d 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -934,6 +934,10 @@
Log.e(TAG, "INTERNAL ERROR: no bugreportFile on " + info);
return;
}
+ if (TextUtils.isEmpty(info.title) && TextUtils.isEmpty(info.description)) {
+ Log.d(TAG, "Not touching zip file since neither title nor description are set");
+ return;
+ }
// It's not possible to add a new entry into an existing file, so we need to create a new
// zip, copy all entries, then rename it.
final File dir = info.bugreportFile.getParentFile();
diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml
index 7617ed4..7cbc55c 100644
--- a/packages/SystemUI/res/layout/volume_dialog.xml
+++ b/packages/SystemUI/res/layout/volume_dialog.xml
@@ -46,6 +46,9 @@
<!-- volume rows added and removed here! :-) -->
<include layout="@layout/volume_zen_footer" />
+
+ <!-- Only shown from Tuner setting -->
+ <include layout="@layout/zen_mode_panel" />
</LinearLayout>
-</RelativeLayout>
\ No newline at end of file
+</RelativeLayout>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index de49677..c39ea57 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -805,6 +805,12 @@
<!-- Interruption level: Alarms only. Optimized for narrow two-line display. [CHAR LIMIT=40] -->
<string name="interruption_level_alarms_twoline">Alarms\nonly</string>
+ <!-- Interruption level: All interruptions. [CHAR LIMIT=40] -->
+ <string name="interruption_level_all">All</string>
+
+ <!-- Interruption level: All interruptions. Optimized for narrow two-line display. [CHAR LIMIT=40] -->
+ <string name="interruption_level_all_twoline">All\n</string>
+
<!-- Indication on the keyguard that is shown when the device is charging. [CHAR LIMIT=40]-->
<string name="keyguard_indication_charging_time">Charging (<xliff:g id="charging_time_left" example="4 hours and 2 minutes">%s</xliff:g> until full)</string>
@@ -1295,4 +1301,18 @@
<!-- User visible title for the the keyboard shortcut that triggers the back action. -->
<string name="keyboard_shortcut_group_system_back">Back</string>
+ <!-- SysUI Tuner: Option to show full do not disturb panel in volume [CHAR LIMIT=60] -->
+ <string name="tuner_full_zen_title">Show do not disturb in volume</string>
+ <!-- SysUI Tuner: Summary of option to show full do not disturb panel in volume [CHAR LIMIT=NONE] -->
+ <string name="tuner_full_zen_summary">Allow full control of do not disturb in the volume dialog.</string>
+
+ <!-- SysUI Tuner: Label for screen about volume and do not disturb settings [CHAR LIMIT=60] -->
+ <string name="volume_and_do_not_disturb">Volume and Do not disturb</string>
+
+ <!-- SysUI Tuner: Switch to control volume down behavior [CHAR LIMIT=60] -->
+ <string name="volume_down_silent">Enter do not disturb on volume down</string>
+
+ <!-- SysUI Tuner: Switch to control volume up behavior [CHAR LIMIT=60] -->
+ <string name="volume_up_silent">Exit do not disturb on volume up</string>
+
</resources>
diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml
index 11ef735d..483f367 100644
--- a/packages/SystemUI/res/xml/tuner_prefs.xml
+++ b/packages/SystemUI/res/xml/tuner_prefs.xml
@@ -113,6 +113,27 @@
android:title="@string/color_transform"
android:fragment="com.android.systemui.tuner.ColorMatrixFragment" />
+ <PreferenceScreen
+ android:key="volume_and_do_not_disturb"
+ android:title="@string/volume_and_do_not_disturb">
+
+ <com.android.systemui.tuner.TunerSwitch
+ android:key="sysui_show_full_zen"
+ android:title="@string/tuner_full_zen_title"
+ android:summary="@string/tuner_full_zen_summary" />
+
+ <com.android.systemui.tuner.TunerSwitch
+ android:key="sysui_volume_down_silent"
+ android:title="@string/volume_down_silent"
+ sysui:defValue="true" />
+
+ <com.android.systemui.tuner.TunerSwitch
+ android:key="sysui_volume_up_silent"
+ android:title="@string/volume_up_silent"
+ sysui:defValue="true" />
+
+ </PreferenceScreen>
+
<!-- Warning, this goes last. -->
<Preference
android:summary="@string/tuner_persistent_warning"
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 c1dcfea..1f8fae0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -24,7 +24,7 @@
import android.view.View;
import android.view.ViewGroup;
import com.android.internal.logging.MetricsLogger;
-import com.android.settingslib.net.MobileDataController;
+import com.android.settingslib.net.DataUsageController;
import com.android.systemui.R;
import com.android.systemui.qs.QSIconView;
import com.android.systemui.qs.QSTile;
@@ -39,7 +39,7 @@
"com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity"));
private final NetworkController mController;
- private final MobileDataController mDataController;
+ private final DataUsageController mDataController;
private final CellularDetailAdapter mDetailAdapter;
private final CellSignalCallback mSignalCallback = new CellSignalCallback();
@@ -255,7 +255,7 @@
final DataUsageDetailView v = (DataUsageDetailView) (convertView != null
? convertView
: LayoutInflater.from(mContext).inflate(R.layout.data_usage, parent, false));
- final MobileDataController.DataUsageInfo info = mDataController.getDataUsageInfo();
+ final DataUsageController.DataUsageInfo info = mDataController.getDataUsageInfo();
if (info == null) return v;
v.bind(info);
return v;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java
index d814b1c2..2be43c0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java
@@ -23,7 +23,7 @@
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.android.settingslib.net.MobileDataController;
+import com.android.settingslib.net.DataUsageController;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.qs.DataUsageGraph;
@@ -59,7 +59,7 @@
R.dimen.qs_data_usage_text_size);
}
- public void bind(MobileDataController.DataUsageInfo info) {
+ public void bind(DataUsageController.DataUsageInfo info) {
final Resources res = mContext.getResources();
final int titleId;
final long bytes;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
index 255f29f..34ed37b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
@@ -47,6 +47,7 @@
super(host);
mUserManager = UserManager.get(mContext);
mProfiles = new LinkedList<UserInfo>();
+ reloadManagedProfiles(UserHandle.USER_CURRENT);
}
@Override
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 6c0c0ae..efa8f5b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -231,6 +231,10 @@
return mCurrentView;
}
+ public View[] getAllViews() {
+ return mRotatedViews;
+ }
+
public KeyButtonView getRecentsButton() {
return (KeyButtonView) getCurrentView().findViewById(R.id.recent_apps);
}
@@ -341,7 +345,6 @@
// Update menu button in case the IME state has changed.
setMenuVisibility(mShowMenu, true);
-
setDisabledFlags(mDisabledFlags, true);
}
@@ -398,12 +401,6 @@
}
}
- private void setVisibleOrGone(View view, boolean visible) {
- if (view != null) {
- view.setVisibility(visible ? VISIBLE : GONE);
- }
- }
-
public void setLayoutTransitionsEnabled(boolean enabled) {
mLayoutTransitionsEnabled = enabled;
updateLayoutTransitionsEnabled();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 78497ab..c853fb4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -495,7 +495,6 @@
private final ShadeUpdates mShadeUpdates = new ShadeUpdates();
- private int mDrawCount;
private Runnable mLaunchTransitionEndRunnable;
private boolean mLaunchTransitionFadingAway;
private ExpandableNotificationRow mDraggedDownRow;
@@ -670,8 +669,6 @@
protected PhoneStatusBarView makeStatusBarView() {
final Context context = mContext;
- Resources res = context.getResources();
-
updateDisplaySize(); // populates mDisplayMetrics
updateResources();
@@ -835,23 +832,11 @@
mZenModeController = mVolumeComponent.getZenController();
}
mCastController = new CastControllerImpl(mContext);
- final SignalClusterView signalCluster =
- (SignalClusterView) mStatusBarView.findViewById(R.id.signal_cluster);
- final SignalClusterView signalClusterKeyguard =
- (SignalClusterView) mKeyguardStatusBar.findViewById(R.id.signal_cluster);
- final SignalClusterView signalClusterQs =
- (SignalClusterView) mHeader.findViewById(R.id.signal_cluster);
- mNetworkController.addSignalCallback(signalCluster);
- mNetworkController.addSignalCallback(signalClusterKeyguard);
- signalCluster.setSecurityController(mSecurityController);
- signalCluster.setNetworkController(mNetworkController);
- signalClusterKeyguard.setSecurityController(mSecurityController);
- signalClusterKeyguard.setNetworkController(mNetworkController);
- if (signalClusterQs != null) {
- mNetworkController.addSignalCallback(signalClusterQs);
- signalClusterQs.setSecurityController(mSecurityController);
- signalClusterQs.setNetworkController(mNetworkController);
- }
+
+ initSignalCluster(mStatusBarView);
+ initSignalCluster(mKeyguardStatusBar);
+ initSignalCluster(mHeader);
+
final boolean isAPhone = mNetworkController.hasVoiceCallingFeature();
if (isAPhone) {
mNetworkController.addEmergencyListener(mHeader);
@@ -977,6 +962,16 @@
}});
}
+ private void initSignalCluster(View containerView) {
+ SignalClusterView signalCluster =
+ (SignalClusterView) containerView.findViewById(R.id.signal_cluster);
+ if (signalCluster != null) {
+ mNetworkController.addSignalCallback(signalCluster);
+ signalCluster.setSecurityController(mSecurityController);
+ signalCluster.setNetworkController(mNetworkController);
+ }
+ }
+
/** Returns true if the app shelf should be shown in the nav bar. */
private boolean shouldShowAppShelf() {
// Allow adb to override the default shelf behavior:
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index f8c72b3..b2bcde3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -19,7 +19,7 @@
import android.content.Context;
import android.content.Intent;
import android.telephony.SubscriptionInfo;
-import com.android.settingslib.net.MobileDataController;
+import com.android.settingslib.net.DataUsageController;
import com.android.settingslib.wifi.AccessPoint;
import java.util.List;
@@ -32,7 +32,7 @@
void setWifiEnabled(boolean enabled);
void onUserSwitched(int newUserId);
AccessPointController getAccessPointController();
- MobileDataController getMobileDataController();
+ DataUsageController getMobileDataController();
public interface SignalCallback {
void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index 909f497..3385c82 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -40,7 +40,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
-import com.android.settingslib.net.MobileDataController;
+import com.android.settingslib.net.DataUsageController;
import com.android.systemui.DemoMode;
import com.android.systemui.R;
@@ -59,7 +59,7 @@
/** Platform implementation of the network controller. **/
public class NetworkControllerImpl extends BroadcastReceiver
- implements NetworkController, DemoMode, MobileDataController.NetworkNameProvider {
+ implements NetworkController, DemoMode, DataUsageController.NetworkNameProvider {
// debug
static final String TAG = "NetworkController";
static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -94,7 +94,7 @@
// SIM for most actions. This may be null if there aren't any SIMs around.
private MobileSignalController mDefaultSignalController;
private final AccessPointControllerImpl mAccessPoints;
- private final MobileDataController mMobileDataController;
+ private final DataUsageController mDataUsageController;
private boolean mInetCondition; // Used for Logging and demo.
@@ -139,7 +139,7 @@
SubscriptionManager.from(context), Config.readConfig(context), bgLooper,
new CallbackHandler(),
new AccessPointControllerImpl(context, bgLooper),
- new MobileDataController(context),
+ new DataUsageController(context),
new SubscriptionDefaults());
mReceiverHandler.post(mRegisterListeners);
}
@@ -150,7 +150,7 @@
SubscriptionManager subManager, Config config, Looper bgLooper,
CallbackHandler callbackHandler,
AccessPointControllerImpl accessPointController,
- MobileDataController mobileDataController,
+ DataUsageController dataUsageController,
SubscriptionDefaults defaultsHandler) {
mContext = context;
mConfig = config;
@@ -171,10 +171,10 @@
mLocale = mContext.getResources().getConfiguration().locale;
mAccessPoints = accessPointController;
- mMobileDataController = mobileDataController;
- mMobileDataController.setNetworkController(this);
- // TODO: Find a way to move this into MobileDataController.
- mMobileDataController.setCallback(new MobileDataController.Callback() {
+ mDataUsageController = dataUsageController;
+ mDataUsageController.setNetworkController(this);
+ // TODO: Find a way to move this into DataUsageController.
+ mDataUsageController.setCallback(new DataUsageController.Callback() {
@Override
public void onMobileDataEnabled(boolean enabled) {
mCallbackHandler.setMobileDataEnabled(enabled);
@@ -236,8 +236,8 @@
}
@Override
- public MobileDataController getMobileDataController() {
- return mMobileDataController;
+ public DataUsageController getMobileDataController() {
+ return mDataUsageController;
}
public void addEmergencyListener(EmergencyListener listener) {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
index 0901015..ed6fc9e 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
@@ -21,7 +21,6 @@
import android.accessibilityservice.AccessibilityServiceInfo;
import android.animation.LayoutTransition;
-import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.app.Dialog;
@@ -62,7 +61,6 @@
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
-import android.view.animation.DecelerateInterpolator;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.SeekBar;
@@ -71,6 +69,7 @@
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.ZenModeController;
+import com.android.systemui.tuner.TunerService;
import com.android.systemui.volume.VolumeDialogController.State;
import com.android.systemui.volume.VolumeDialogController.StreamState;
@@ -85,9 +84,11 @@
*
* Methods ending in "H" must be called on the (ui) handler.
*/
-public class VolumeDialog {
+public class VolumeDialog implements TunerService.Tunable {
private static final String TAG = Util.logTag(VolumeDialog.class);
+ public static final String SHOW_FULL_ZEN = "sysui_show_full_zen";
+
private static final long USER_ATTEMPT_GRACE_PERIOD = 1000;
private static final int WAIT_FOR_RIPPLE = 200;
@@ -131,6 +132,9 @@
private boolean mHovering = false;
private int mLastActiveStream;
+ private boolean mShowFullZen;
+ private final ZenModePanel mZenPanel;
+
public VolumeDialog(Context context, int windowType, VolumeDialogController controller,
ZenModeController zenModeController, Callback callback) {
mContext = context;
@@ -221,11 +225,23 @@
mExpandButtonAnimationDuration = res.getInteger(R.integer.volume_expand_animation_duration);
mZenFooter = (ZenFooter) mDialog.findViewById(R.id.volume_zen_footer);
mZenFooter.init(zenModeController);
+ mZenPanel = (ZenModePanel) mDialog.findViewById(R.id.zen_mode_panel);
+ mZenPanel.addNoneButton();
+ mZenPanel.init(zenModeController);
+ mZenPanel.setCallback(mZenPanelCallback);
mAccessibility.init();
controller.addCallback(mControllerCallbackH, mHandler);
controller.getState();
+ TunerService.get(mContext).addTunable(this, SHOW_FULL_ZEN);
+ }
+
+ @Override
+ public void onTuningChanged(String key, String newValue) {
+ if (SHOW_FULL_ZEN.equals(key)) {
+ mShowFullZen = newValue != null && Integer.parseInt(newValue) != 0;
+ }
}
private ColorStateList loadColorStateList(int colorResId) {
@@ -278,7 +294,7 @@
.getDimensionPixelSize(R.dimen.volume_slider_interspacing);
final LinearLayout.LayoutParams lp =
new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, h);
- mDialogContentView.addView(v, mDialogContentView.getChildCount() - 1, lp);
+ mDialogContentView.addView(v, mDialogContentView.getChildCount() - 2, lp);
row.space = v;
}
row.settingsButton.addOnLayoutChangeListener(new OnLayoutChangeListener() {
@@ -306,7 +322,7 @@
}
});
// add new row just before the footer
- mDialogContentView.addView(row.view, mDialogContentView.getChildCount() - 1);
+ mDialogContentView.addView(row.view, mDialogContentView.getChildCount() - 2);
mRows.add(row);
}
@@ -655,12 +671,21 @@
if (D.BUG) Log.d(TAG, "updateFooterH");
final boolean wasVisible = mZenFooter.getVisibility() == View.VISIBLE;
final boolean visible = mState.zenMode != Global.ZEN_MODE_OFF
- && (mAudioManager.isStreamAffectedByRingerMode(mActiveStream) || mExpanded);
+ && (mAudioManager.isStreamAffectedByRingerMode(mActiveStream) || mExpanded)
+ && !mShowFullZen;
if (wasVisible != visible && !visible) {
prepareForCollapse();
}
Util.setVisOrGone(mZenFooter, visible);
mZenFooter.update();
+
+ final boolean fullWasVisible = mZenPanel.getVisibility() == View.VISIBLE;
+ final boolean fullVisible = mShowFullZen && (mState.zenMode != Global.ZEN_MODE_OFF
+ || mExpanded);
+ if (fullWasVisible != fullVisible && !fullVisible) {
+ prepareForCollapse();
+ }
+ Util.setVisOrGone(mZenPanel, fullVisible);
}
private void updateVolumeRowH(VolumeRow row) {
@@ -903,6 +928,23 @@
}
};
+ private final ZenModePanel.Callback mZenPanelCallback = new ZenModePanel.Callback() {
+ @Override
+ public void onPrioritySettings() {
+ mCallback.onZenPrioritySettingsClicked();
+ }
+
+ @Override
+ public void onInteraction() {
+ mHandler.sendEmptyMessage(H.RESCHEDULE_TIMEOUT);
+ }
+
+ @Override
+ public void onExpanded(boolean expanded) {
+ // noop.
+ }
+ };
+
private final OnClickListener mClickExpand = new OnClickListener() {
@Override
public void onClick(View v) {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java
index 1083f40..d7635ad 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java
@@ -31,6 +31,7 @@
import com.android.systemui.qs.tiles.DndTile;
import com.android.systemui.statusbar.phone.PhoneStatusBar;
import com.android.systemui.statusbar.policy.ZenModeController;
+import com.android.systemui.tuner.TunerService;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -38,16 +39,25 @@
/**
* Implementation of VolumeComponent backed by the new volume dialog.
*/
-public class VolumeDialogComponent implements VolumeComponent {
+public class VolumeDialogComponent implements VolumeComponent, TunerService.Tunable {
+
+ public static final String VOLUME_DOWN_SILENT = "sysui_volume_down_silent";
+ public static final String VOLUME_UP_SILENT = "sysui_volume_up_silent";
+ public static final String VOLUME_SILENT_DO_NOT_DISTURB = "sysui_do_not_disturb";
+
+ public static final boolean DEFAULT_VOLUME_DOWN_TO_ENTER_SILENT = true;
+ public static final boolean DEFAULT_VOLUME_UP_TO_EXIT_SILENT = true;
+ public static final boolean DEFAULT_DO_NOT_DISTURB_WHEN_SILENT = true;
+
private final SystemUI mSysui;
private final Context mContext;
private final VolumeDialogController mController;
private final ZenModeController mZenModeController;
private final VolumeDialog mDialog;
- private final VolumePolicy mVolumePolicy = new VolumePolicy(
- true, // volumeDownToEnterSilent
- true, // volumeUpToExitSilent
- true, // doNotDisturbWhenSilent
+ private VolumePolicy mVolumePolicy = new VolumePolicy(
+ DEFAULT_VOLUME_DOWN_TO_ENTER_SILENT, // volumeDownToEnterSilent
+ DEFAULT_VOLUME_UP_TO_EXIT_SILENT, // volumeUpToExitSilent
+ DEFAULT_DO_NOT_DISTURB_WHEN_SILENT, // doNotDisturbWhenSilent
400 // vibrateToSilentDebounce
);
@@ -65,6 +75,41 @@
mDialog = new VolumeDialog(context, WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY,
mController, zen, mVolumeDialogCallback);
applyConfiguration();
+ TunerService.get(mContext).addTunable(this, VOLUME_DOWN_SILENT, VOLUME_UP_SILENT,
+ VOLUME_SILENT_DO_NOT_DISTURB);
+ }
+
+ @Override
+ public void onTuningChanged(String key, String newValue) {
+ if (VOLUME_DOWN_SILENT.equals(key)) {
+ final boolean volumeDownToEnterSilent = newValue != null
+ ? Integer.parseInt(newValue) != 0
+ : DEFAULT_VOLUME_DOWN_TO_ENTER_SILENT;
+ setVolumePolicy(volumeDownToEnterSilent,
+ mVolumePolicy.volumeUpToExitSilent, mVolumePolicy.doNotDisturbWhenSilent,
+ mVolumePolicy.vibrateToSilentDebounce);
+ } else if (VOLUME_UP_SILENT.equals(key)) {
+ final boolean volumeUpToExitSilent = newValue != null
+ ? Integer.parseInt(newValue) != 0
+ : DEFAULT_VOLUME_UP_TO_EXIT_SILENT;
+ setVolumePolicy(mVolumePolicy.volumeDownToEnterSilent,
+ volumeUpToExitSilent, mVolumePolicy.doNotDisturbWhenSilent,
+ mVolumePolicy.vibrateToSilentDebounce);
+ } else if (VOLUME_SILENT_DO_NOT_DISTURB.equals(key)) {
+ final boolean doNotDisturbWhenSilent = newValue != null
+ ? Integer.parseInt(newValue) != 0
+ : DEFAULT_DO_NOT_DISTURB_WHEN_SILENT;
+ setVolumePolicy(mVolumePolicy.volumeDownToEnterSilent,
+ mVolumePolicy.volumeUpToExitSilent, doNotDisturbWhenSilent,
+ mVolumePolicy.vibrateToSilentDebounce);
+ }
+ }
+
+ private void setVolumePolicy(boolean volumeDownToEnterSilent, boolean volumeUpToExitSilent,
+ boolean doNotDisturbWhenSilent, int vibrateToSilentDebounce) {
+ mVolumePolicy = new VolumePolicy(volumeDownToEnterSilent, volumeUpToExitSilent,
+ doNotDisturbWhenSilent, vibrateToSilentDebounce);
+ mController.setVolumePolicy(mVolumePolicy);
}
private void sendUserActivity() {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
index 38d8de0..f73ba6f 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java
@@ -189,6 +189,12 @@
mZenAlarmWarning = (TextView) findViewById(R.id.zen_alarm_warning);
}
+ public void addNoneButton() {
+ mZenButtons.addButton(R.string.interruption_level_all_twoline,
+ R.string.interruption_level_all,
+ Global.ZEN_MODE_OFF);
+ }
+
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
@@ -494,6 +500,7 @@
if (mExpanded && isShown()) {
ensureSelection();
}
+ mZenConditions.setVisibility(mSessionZen != Global.ZEN_MODE_OFF ? View.VISIBLE : View.GONE);
}
private Condition forever() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
index b64fbea..5cf3767 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
@@ -33,7 +33,7 @@
import android.util.Log;
import com.android.internal.telephony.cdma.EriInfo;
-import com.android.settingslib.net.MobileDataController;
+import com.android.settingslib.net.DataUsageController;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkControllerImpl.Config;
@@ -96,7 +96,7 @@
mCallbackHandler = mock(CallbackHandler.class);
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
mConfig, Looper.getMainLooper(), mCallbackHandler,
- mock(AccessPointControllerImpl.class), mock(MobileDataController.class),
+ mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
mMockSubDefaults);
setupNetworkController();
@@ -137,7 +137,7 @@
= new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
mConfig, Looper.getMainLooper(), mCallbackHandler,
mock(AccessPointControllerImpl.class),
- mock(MobileDataController.class), mMockSubDefaults);
+ mock(DataUsageController.class), mMockSubDefaults);
setupNetworkController();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
index e4f858b..d5eca95 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
@@ -4,7 +4,7 @@
import android.telephony.TelephonyManager;
import android.test.suitebuilder.annotation.SmallTest;
-import com.android.settingslib.net.MobileDataController;
+import com.android.settingslib.net.DataUsageController;
import org.mockito.Mockito;
@SmallTest
@@ -88,7 +88,7 @@
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
mConfig, Looper.getMainLooper(), mCallbackHandler,
Mockito.mock(AccessPointControllerImpl.class),
- Mockito.mock(MobileDataController.class), mMockSubDefaults);
+ Mockito.mock(DataUsageController.class), mMockSubDefaults);
setupNetworkController();
setupDefaultSignal();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
index 760aa9a..08da382 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
@@ -29,7 +29,7 @@
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
-import com.android.settingslib.net.MobileDataController;
+import com.android.settingslib.net.DataUsageController;
import com.android.systemui.R;
import org.mockito.ArgumentCaptor;
@@ -47,7 +47,7 @@
// Create a new NetworkController as this is currently handled in constructor.
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
mConfig, Looper.getMainLooper(), mCallbackHandler,
- mock(AccessPointControllerImpl.class), mock(MobileDataController.class),
+ mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
mMockSubDefaults);
setupNetworkController();
@@ -96,7 +96,7 @@
// Create a new NetworkController as this is currently handled in constructor.
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
mConfig, Looper.getMainLooper(), mCallbackHandler,
- mock(AccessPointControllerImpl.class), mock(MobileDataController.class),
+ mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
mMockSubDefaults);
setupNetworkController();
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 2de5324..df20704 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -753,6 +753,7 @@
intentFilter.addAction(Intent.ACTION_USER_STOPPING);
intentFilter.addAction(Intent.ACTION_USER_ADDED);
intentFilter.addAction(Intent.ACTION_USER_REMOVED);
+ intentFilter.addAction(Intent.ACTION_USER_PRESENT);
mContext.registerReceiverAsUser(
mUserIntentReceiver, UserHandle.ALL, intentFilter, null, null);
@@ -1571,8 +1572,6 @@
// Try bringing up tracker, but KeyStore won't be ready yet for secondary users so wait
// for user to unlock device too.
updateLockdownVpn();
- final IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
- mContext.registerReceiverAsUser(mUserPresentReceiver, UserHandle.ALL, filter, null, null);
// Configure whether mobile data is always on.
mHandler.sendMessage(mHandler.obtainMessage(EVENT_CONFIGURE_MOBILE_DATA_ALWAYS_ON));
@@ -1582,23 +1581,6 @@
mPermissionMonitor.startMonitoring();
}
- private BroadcastReceiver mUserPresentReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- // User that sent this intent = user that was just unlocked
- final int unlockedUser = getSendingUserId();
-
- // Try creating lockdown tracker, since user present usually means
- // unlocked keystore.
- if (mUserManager.getUserInfo(unlockedUser).isPrimary() &&
- LockdownVpnTracker.isEnabled()) {
- updateLockdownVpn();
- } else {
- updateAlwaysOnVpn(unlockedUser);
- }
- }
- };
-
/**
* Setup data activity tracking for the given network.
*
@@ -3206,11 +3188,6 @@
// Tear down existing lockdown if profile was removed
mLockdownEnabled = LockdownVpnTracker.isEnabled();
if (mLockdownEnabled) {
- if (!mKeyStore.isUnlocked()) {
- Slog.w(TAG, "KeyStore locked; unable to create LockdownTracker");
- return false;
- }
-
final String profileName = new String(mKeyStore.get(Credentials.LOCKDOWN_VPN));
final VpnProfile profile = VpnProfile.decode(
profileName, mKeyStore.get(Credentials.VPN + profileName));
@@ -3589,6 +3566,11 @@
userVpn = new Vpn(mHandler.getLooper(), mContext, mNetd, userId);
mVpns.put(userId, userVpn);
}
+ if (mUserManager.getUserInfo(userId).isPrimary() && LockdownVpnTracker.isEnabled()) {
+ updateLockdownVpn();
+ } else {
+ updateAlwaysOnVpn(userId);
+ }
}
private void onUserStop(int userId) {
@@ -3622,6 +3604,15 @@
}
}
+ private void onUserPresent(int userId) {
+ // User present may be sent because of an unlock, which might mean an unlocked keystore.
+ if (mUserManager.getUserInfo(userId).isPrimary() && LockdownVpnTracker.isEnabled()) {
+ updateLockdownVpn();
+ } else {
+ updateAlwaysOnVpn(userId);
+ }
+ }
+
private BroadcastReceiver mUserIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -3637,6 +3628,8 @@
onUserAdded(userId);
} else if (Intent.ACTION_USER_REMOVED.equals(action)) {
onUserRemoved(userId);
+ } else if (Intent.ACTION_USER_PRESENT.equals(action)) {
+ onUserPresent(userId);
}
}
};
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 1d9bd91..6c502e0 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -11265,9 +11265,13 @@
+ android.Manifest.permission.DEVICE_POWER);
}
+ final int user = UserHandle.myUserId();
synchronized(this) {
long ident = Binder.clearCallingIdentity();
try {
+ if (!shown && mStackSupervisor.isFocusedUserLockedProfile()) {
+ startHomeActivityLocked(user, "setLockScreenShown");
+ }
if (DEBUG_LOCKSCREEN) logLockScreen(" shown=" + shown);
mLockScreenShown = shown ? LOCK_SCREEN_SHOWN : LOCK_SCREEN_HIDDEN;
updateSleepIfNeededLocked();
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 09bb9ab..280ab60 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -692,6 +692,12 @@
return null;
}
+ boolean isFocusedUserLockedProfile() {
+ final int userId = mFocusedStack.topRunningActivityLocked().userId;
+ return userId != UserHandle.myUserId()
+ && mService.mUserController.shouldConfirmCredentials(userId);
+ }
+
void setNextTaskIdForUserLocked(int taskId, int userId) {
final int currentTaskId = mCurTaskIdForUser.get(userId, -1);
if (taskId > currentTaskId) {
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index e957fc6..fd9abff 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -944,9 +944,6 @@
*/
public void startLegacyVpnPrivileged(VpnProfile profile, KeyStore keyStore,
LinkProperties egress) {
- if (!keyStore.isUnlocked()) {
- throw new IllegalStateException("KeyStore isn't unlocked");
- }
UserManager mgr = UserManager.get(mContext);
UserInfo user = mgr.getUserInfo(mUserHandle);
if (user.isRestricted() || mgr.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN,
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 10815b3..9eff591 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -81,7 +81,6 @@
* Flag to require or skip entitlement checks.
* If true, entitlement checks will be executed if device has been configured for it,
* If false, entitlement checks will be skipped.
- * @hide
*/
public static final String
KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL = "require_entitlement_checks_bool";
@@ -269,7 +268,6 @@
/**
* Flag specifying whether Generic Bootstrapping Architecture capable SIM is required for IMS.
- * @hide
*/
public static final String KEY_CARRIER_IMS_GBA_REQUIRED_BOOL
= "carrier_ims_gba_required_bool";
@@ -277,7 +275,6 @@
/**
* Flag specifying whether IMS instant lettering is available for the carrier. {@code True} if
* instant lettering is available for the carrier, {@code false} otherwise.
- * @hide
*/
public static final String KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL =
"carrier_instant_lettering_available_bool";
@@ -294,7 +291,6 @@
* {@link #KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL}), determines the list of characters
* which may not be contained in messages. Should be specified as a regular expression suitable
* for use with {@link String#matches(String)}.
- * @hide
*/
public static final String KEY_CARRIER_INSTANT_LETTERING_INVALID_CHARS_STRING =
"carrier_instant_lettering_invalid_chars_string";
@@ -305,7 +301,6 @@
* must be escaped with a backslash '\' character. Should be specified as a string containing
* the characters to be escaped. For example to escape quote and backslash the string would be
* a quote and a backslash.
- * @hide
*/
public static final String KEY_CARRIER_INSTANT_LETTERING_ESCAPED_CHARS_STRING =
"carrier_instant_lettering_escaped_chars_string";
@@ -319,7 +314,6 @@
* towards the messages size limit as a single bye. If a character encoding is specified, the
* message size limit will be based on the number of bytes in the message per the specified
* encoding.
- * @hide
*/
public static final String KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING =
"carrier_instant_lettering_encoding_string";
@@ -330,7 +324,6 @@
* in the InCall UI to ensure the user cannot enter more characters than allowed by the carrier.
* See also {@link #KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING} for more information on how
* the length of the message is calculated.
- * @hide
*/
public static final String KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT =
"carrier_instant_lettering_length_limit_int";
@@ -353,7 +346,6 @@
/**
* The default flag specifying whether ETWS/CMAS test setting is forcibly disabled in
* Settings->More->Emergency broadcasts menu even though developer options is turned on.
- * @hide
*/
public static final String KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL =
"carrier_force_disable_etws_cmas_test_bool";
@@ -361,7 +353,6 @@
/**
* The default flag specifying whether "Turn on Notifications" option will be always shown in
* Settings->More->Emergency broadcasts menu regardless developer options is turned on or not.
- * @hide
*/
public static final String KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL =
"always_show_emergency_alert_onoff_bool";
@@ -398,27 +389,23 @@
/**
* Flag specifying whether an additional (client initiated) intent needs to be sent on System
* update
- * @hide
*/
public static final String KEY_CI_ACTION_ON_SYS_UPDATE_BOOL = "ci_action_on_sys_update_bool";
/**
* Intent to be sent for the additional action on System update
- * @hide
*/
public static final String KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING =
"ci_action_on_sys_update_intent_string";
/**
* Extra to be included in the intent sent for additional action on System update
- * @hide
*/
public static final String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING =
"ci_action_on_sys_update_extra_string";
/**
* Value of extra included in intent sent for additional action on System update
- * @hide
*/
public static final String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING =
"ci_action_on_sys_update_extra_val_string";
@@ -427,7 +414,6 @@
* Specifies the amount of gap to be added in millis between postdial DTMF tones. When a
* non-zero value is specified, the UE shall wait for the specified amount of time before it
* sends out successive DTMF tones on the network.
- * @hide
*/
public static final String KEY_GSM_DTMF_TONE_DELAY_INT = "gsm_dtmf_tone_delay_int";
@@ -435,7 +421,6 @@
* Specifies the amount of gap to be added in millis between DTMF tones. When a non-zero value
* is specified, the UE shall wait for the specified amount of time before it sends out
* successive DTMF tones on the network.
- * @hide
*/
public static final String KEY_IMS_DTMF_TONE_DELAY_INT = "ims_dtmf_tone_delay_int";
@@ -443,32 +428,27 @@
* Specifies the amount of gap to be added in millis between postdial DTMF tones. When a
* non-zero value is specified, the UE shall wait for the specified amount of time before it
* sends out successive DTMF tones on the network.
- * @hide
*/
public static final String KEY_CDMA_DTMF_TONE_DELAY_INT = "cdma_dtmf_tone_delay_int";
/**
* Determines whether conference calls are supported by a carrier. When {@code true},
* conference calling is supported, {@code false otherwise}.
- * @hide
*/
public static final String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool";
/**
* Determine whether user can toggle Enhanced 4G LTE Mode in Settings.
- * @hide
*/
public static final String KEY_EDITABLE_ENHANCED_4G_LTE_BOOL = "editable_enhanced_4g_lte_bool";
/**
* Determine whether IMS apn can be shown.
- * @hide
*/
public static final String KEY_HIDE_IMS_APN_BOOL = "hide_ims_apn_bool";
/**
* Determine whether preferred network type can be shown.
- * @hide
*/
public static final String KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL = "hide_preferred_network_type_bool";
@@ -491,7 +471,6 @@
/**
* Allow user to add APNs
- * @hide
*/
public static final String KEY_ALLOW_ADDING_APNS_BOOL = "allow_adding_apns_bool";
@@ -540,7 +519,6 @@
* Determines whether the carrier supports making non-emergency phone calls while the phone is
* in emergency callback mode. Default value is {@code true}, meaning that non-emergency calls
* are allowed in emergency callback mode.
- * @hide
*/
public static final String KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL =
"allow_non_emergency_calls_in_ecm_bool";
@@ -549,8 +527,6 @@
* Flag indicating whether to allow carrier video calls to emergency numbers.
* When {@code true}, video calls to emergency numbers will be allowed. When {@code false},
* video calls to emergency numbers will be initiated as audio-only calls instead.
- *
- * @hide
*/
@SystemApi
public static final String BOOL_ALLOW_EMERGENCY_VIDEO_CALLS =
@@ -562,8 +538,6 @@
* to pause transmission of video when the In-Call app is sent to the background.
* When {@code false}, video pause signaling is not supported. {@code True} by default unless
* a carrier configuration overrides the default.
- *
- * @hide
*/
@SystemApi
public static final String BOOL_ALLOW_VIDEO_PAUSE =
@@ -580,8 +554,6 @@
* via {@link android.telecom.PhoneAccount#CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE}
* and can choose to hide or show the video calling icon based on whether a contact supports
* video.
- *
- * @hide
*/
@SystemApi
public static final String KEY_USE_RCS_PRESENCE_BOOL = "use_rcs_presence_bool";
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 43fe9d1..d3c1aec 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -296,7 +296,7 @@
/**
* @hide
*/
- public static final boolean EMERGENCY_ASSISTANCE_ENABLED = false;
+ public static final boolean EMERGENCY_ASSISTANCE_ENABLED = true;
/**
* The lookup key used with the {@link #ACTION_PHONE_STATE_CHANGED} broadcast
diff --git a/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java b/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java
index 54021c9..28a489a 100644
--- a/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java
@@ -64,7 +64,8 @@
private static long registerMethod(Class<?> targetClass, String methodName, Class[] types,
int nArgs) {
// Encode the number of arguments in the method name
- String methodIndexName = String.format("%1$s#%2$d", methodName, nArgs);
+ String methodIndexName = String.format("%1$s.%2$s#%3$d", targetClass.getSimpleName(),
+ methodName, nArgs);
synchronized (sMethodIndexLock) {
Long methodId = METHOD_NAME_TO_ID.get(methodIndexName);
diff --git a/wifi/java/android/net/wifi/WifiWakeReasonAndCounts.java b/wifi/java/android/net/wifi/WifiWakeReasonAndCounts.java
new file mode 100644
index 0000000..17cc29f
--- /dev/null
+++ b/wifi/java/android/net/wifi/WifiWakeReasonAndCounts.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 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 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.net.wifi;
+
+import android.os.Parcelable;
+import android.os.Parcel;
+
+/**
+ * A class representing wifi wake reason accounting.
+ */
+
+/** @hide */
+public class WifiWakeReasonAndCounts implements Parcelable {
+ private static final String TAG = "WifiWakeReasonAndCounts";
+ /**
+ * Wlan can wake host, only when it is cmd/event, local driver-fw
+ * functions(non-data, non cmd/event) and rx data.The first packet
+ * from wlan that woke up a sleep host is what is accounted here.
+ * Total wlan wake to application processor would be:
+ * [cmdEventWake + driverFwLocalWake + totalRxDataWake]
+ * A further classification is provided for identifying the reasons
+ * for wakeup.
+ */
+ public int totalCmdEventWake;
+ public int totalDriverFwLocalWake;
+ public int totalRxDataWake;
+
+ public int rxUnicast;
+ public int rxMulticast;
+ public int rxBroadcast;
+
+ public int icmp;
+ public int icmp6;
+ public int icmp6Ra;
+ public int icmp6Na;
+ public int icmp6Ns;
+
+ public int ipv4RxMulticast;
+ public int ipv6Multicast;
+ public int otherRxMulticast;
+
+ /* {@hide} */
+ public WifiWakeReasonAndCounts () {
+ }
+
+ @Override
+ /* {@hide} */
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(" totalCmdEventWake ").append(totalCmdEventWake);
+ sb.append(" totalDriverFwLocalWake ").append(totalDriverFwLocalWake);
+ sb.append(" totalRxDataWake ").append(totalRxDataWake);
+
+ sb.append(" rxUnicast ").append(rxUnicast);
+ sb.append(" rxMulticast ").append(rxMulticast);
+ sb.append(" rxBroadcast ").append(rxBroadcast);
+
+ sb.append(" icmp ").append(icmp);
+ sb.append(" icmp6 ").append(icmp6);
+ sb.append(" icmp6Ra ").append(icmp6Ra);
+ sb.append(" icmp6Na ").append(icmp6Na);
+ sb.append(" icmp6Ns ").append(icmp6Ns);
+
+ sb.append(" ipv4RxMulticast ").append(ipv4RxMulticast);
+ sb.append(" ipv6Multicast ").append(ipv6Multicast);
+ sb.append(" otherRxMulticast ").append(otherRxMulticast);
+ return sb.toString();
+ }
+
+ /* Implement the Parcelable interface
+ * {@hide}
+ */
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ /* Implement the Parcelable interface
+ * {@hide}
+ */
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(totalCmdEventWake);
+ dest.writeInt(totalDriverFwLocalWake);
+ dest.writeInt(totalRxDataWake);
+
+ dest.writeInt(rxUnicast);
+ dest.writeInt(rxMulticast);
+ dest.writeInt(rxBroadcast);
+
+ dest.writeInt(icmp);
+ dest.writeInt(icmp6);
+ dest.writeInt(icmp6Ra);
+ dest.writeInt(icmp6Na);
+ dest.writeInt(icmp6Ns);
+
+ dest.writeInt(ipv4RxMulticast);
+ dest.writeInt(ipv6Multicast);
+ dest.writeInt(otherRxMulticast);
+ }
+
+ /* Implement the Parcelable interface
+ * {@hide}
+ */
+ public static final Creator<WifiWakeReasonAndCounts> CREATOR =
+ new Creator<WifiWakeReasonAndCounts>() {
+ public WifiWakeReasonAndCounts createFromParcel(Parcel in) {
+ WifiWakeReasonAndCounts counts = new WifiWakeReasonAndCounts();
+ counts.totalCmdEventWake = in.readInt();
+ counts.totalDriverFwLocalWake = in.readInt();
+ counts.totalRxDataWake = in.readInt();
+
+ counts.rxUnicast = in.readInt();
+ counts.rxMulticast = in.readInt();
+ counts.rxBroadcast = in.readInt();
+
+ counts.icmp = in.readInt();
+ counts.icmp6 = in.readInt();
+ counts.icmp6Ra = in.readInt();
+ counts.icmp6Na = in.readInt();
+ counts.icmp6Ns = in.readInt();
+
+ counts.ipv4RxMulticast = in.readInt();
+ counts.ipv6Multicast = in.readInt();
+ counts.otherRxMulticast = in.readInt();
+ return counts;
+ }
+ /* Implement the Parcelable interface
+ * {@hide}
+ */
+ @Override
+ public WifiWakeReasonAndCounts[] newArray(int size) {
+ return new WifiWakeReasonAndCounts[size];
+ }
+ };
+}