diff options
25 files changed, 789 insertions, 171 deletions
diff --git a/Android.mk b/Android.mk index 0e5dfed53607..03b2533e8bc0 100644 --- a/Android.mk +++ b/Android.mk @@ -944,27 +944,8 @@ framework_docs_LOCAL_DROIDDOC_OPTIONS := \ -werror -hide 111 -hide 113 \ -overview $(LOCAL_PATH)/core/java/overview.html -SUPPORT_API_DIR := ./frameworks/support/api - -# More API Level information for the Support Library, which is currently -# included as part of the core framework docs build. -framework_docs_LOCAL_DROIDDOC_OPTIONS += \ - -since $(SUPPORT_API_DIR)/22.0.0.txt 22.0.0 \ - -since $(SUPPORT_API_DIR)/22.0.0.txt 22.0.0 \ - -since $(SUPPORT_API_DIR)/22.1.0.txt 22.1.0 \ - -since $(SUPPORT_API_DIR)/22.2.0.txt 22.2.0 \ - -since $(SUPPORT_API_DIR)/22.2.1.txt 22.2.1 \ - -since $(SUPPORT_API_DIR)/23.0.0.txt 23.0.0 \ - -since $(SUPPORT_API_DIR)/23.1.0.txt 23.1.0 \ - -since $(SUPPORT_API_DIR)/23.1.1.txt 23.1.1 \ - -since $(SUPPORT_API_DIR)/23.2.0.txt 23.2.0 \ - -since $(SUPPORT_API_DIR)/23.2.1.txt 23.2.1 \ - -since $(SUPPORT_API_DIR)/23.4.0.txt 23.4.0 \ - -since $(SUPPORT_API_DIR)/24.0.0.txt 24.0.0 \ - -since $(SUPPORT_API_DIR)/24.1.0.txt 24.1.0 \ - -since $(SUPPORT_API_DIR)/24.2.0.txt 24.2.0 \ - -since $(SUPPORT_API_DIR)/25.0.0.txt 25.0.0 \ - -since $(SUPPORT_API_DIR)/25.1.0.txt 25.1.0 +# Allow the support library to add its own droiddoc options. +include $(LOCAL_PATH)/../support/droiddoc.mk framework_docs_LOCAL_API_CHECK_ADDITIONAL_JAVA_DIR:= \ $(call intermediates-dir-for,JAVA_LIBRARIES,framework,,COMMON) @@ -1472,10 +1453,6 @@ LOCAL_PROTOC_FLAGS := \ LOCAL_SRC_FILES := \ $(call all-proto-files-under, core/proto) \ $(call all-proto-files-under, libs/incident/proto) -LOCAL_C_INCLUDES := \ - $(call generated-sources-dir-for,STATIC_LIBRARIES,libplatformprotos,)/proto -LOCAL_EXPORT_C_INCLUDES := \ - $(call generated-sources-dir-for,STATIC_LIBRARIES,libplatformprotos,)/proto include $(BUILD_STATIC_LIBRARY) # ==== c++ proto host library ============================== @@ -1490,10 +1467,6 @@ LOCAL_PROTOC_FLAGS := \ LOCAL_SRC_FILES := \ $(call all-proto-files-under, core/proto) \ $(call all-proto-files-under, libs/incident/proto) -LOCAL_C_INCLUDES := \ - $(call generated-sources-dir-for,STATIC_LIBRARIES,libplatformprotos,)/proto -LOCAL_EXPORT_C_INCLUDES := \ - $(call generated-sources-dir-for,STATIC_LIBRARIES,libplatformprotos,)/proto include $(BUILD_HOST_SHARED_LIBRARY) diff --git a/api/system-current.txt b/api/system-current.txt index 00fe0b66e742..ae510c9c24b9 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -34433,6 +34433,7 @@ package android.os { method public deprecated void setUserRestrictions(android.os.Bundle); method public deprecated void setUserRestrictions(android.os.Bundle, android.os.UserHandle); method public static boolean supportsMultipleUsers(); + field public static final java.lang.String ACTION_USER_RESTRICTIONS_CHANGED = "android.os.action.USER_RESTRICTIONS_CHANGED"; field public static final java.lang.String ALLOW_PARENT_PROFILE_APP_LINKING = "allow_parent_profile_app_linking"; field public static final java.lang.String DISALLOW_ADD_MANAGED_PROFILE = "no_add_managed_profile"; field public static final java.lang.String DISALLOW_ADD_USER = "no_add_user"; diff --git a/api/test-current.txt b/api/test-current.txt index dd25eb72c8b9..e58f4321c930 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -31735,6 +31735,7 @@ package android.os { method public deprecated void setUserRestrictions(android.os.Bundle); method public deprecated void setUserRestrictions(android.os.Bundle, android.os.UserHandle); method public static boolean supportsMultipleUsers(); + field public static final java.lang.String ACTION_USER_RESTRICTIONS_CHANGED = "android.os.action.USER_RESTRICTIONS_CHANGED"; field public static final java.lang.String ALLOW_PARENT_PROFILE_APP_LINKING = "allow_parent_profile_app_linking"; field public static final java.lang.String DISALLOW_ADD_MANAGED_PROFILE = "no_add_managed_profile"; field public static final java.lang.String DISALLOW_ADD_USER = "no_add_user"; @@ -35019,6 +35020,7 @@ package android.provider { field public static final java.lang.String SELECTED_INPUT_METHOD_SUBTYPE = "selected_input_method_subtype"; field public static final java.lang.String SETTINGS_CLASSNAME = "settings_classname"; field public static final java.lang.String SKIP_FIRST_USE_HINTS = "skip_first_use_hints"; + field public static final java.lang.String SYNC_PARENT_SOUNDS = "sync_parent_sounds"; field public static final java.lang.String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled"; field public static final deprecated java.lang.String TTS_DEFAULT_COUNTRY = "tts_default_country"; field public static final deprecated java.lang.String TTS_DEFAULT_LANG = "tts_default_lang"; diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index a638cd43aba9..f6712f840585 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -22,6 +22,7 @@ import android.annotation.IntDef; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.annotation.TestApi; import android.annotation.UserIdInt; import android.annotation.WorkerThread; import android.app.Activity; @@ -763,6 +764,16 @@ public class UserManager { public static final int PIN_VERIFICATION_SUCCESS = -1; /** + * Sent when user restrictions have changed. + * + * @hide + */ + @SystemApi + @TestApi // To allow seeing it from CTS. + public static final String ACTION_USER_RESTRICTIONS_CHANGED = + "android.os.action.USER_RESTRICTIONS_CHANGED"; + + /** * Error result indicating that this user is not allowed to add other users on this device. * This is a result code returned from the activity created by the intent * {@link #createUserCreationIntent(String, String, String, PersistableBundle)}. diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 391ee835e92a..7b84f6893982 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -6630,6 +6630,8 @@ public final class Settings { * This value is only used for managed profiles. * @hide */ + @TestApi + @RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS) public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds"; /** @hide */ diff --git a/core/java/android/text/Emoji.java b/core/java/android/text/Emoji.java index 83810b03b463..a07caf4384ea 100644 --- a/core/java/android/text/Emoji.java +++ b/core/java/android/text/Emoji.java @@ -132,12 +132,11 @@ public class Emoji { 0x1F910, 0x1F911, 0x1F912, 0x1F913, 0x1F914, 0x1F915, 0x1F916, 0x1F917, 0x1F918, 0x1F919, 0x1F91A, 0x1F91B, 0x1F91C, 0x1F91D, 0x1F91E, 0x1F920, 0x1F921, 0x1F922, 0x1F923, 0x1F924, 0x1F925, 0x1F926, 0x1F927, 0x1F930, 0x1F933, 0x1F934, 0x1F935, 0x1F936, 0x1F937, 0x1F938, - 0x1F939, 0x1F93A, 0x1F93B, 0x1F93C, 0x1F93D, 0x1F93E, 0x1F940, 0x1F941, 0x1F942, 0x1F943, - 0x1F944, 0x1F945, 0x1F946, 0x1F947, 0x1F948, 0x1F949, 0x1F94A, 0x1F94B, 0x1F950, 0x1F951, - 0x1F952, 0x1F953, 0x1F954, 0x1F955, 0x1F956, 0x1F957, 0x1F958, 0x1F959, 0x1F95A, 0x1F95B, - 0x1F95C, 0x1F95D, 0x1F95E, 0x1F980, 0x1F981, 0x1F982, 0x1F983, 0x1F984, 0x1F985, 0x1F986, - 0x1F987, 0x1F988, 0x1F989, 0x1F98A, 0x1F98B, 0x1F98C, 0x1F98D, 0x1F98E, 0x1F98F, 0x1F990, - 0x1F991, 0x1F9C0 + 0x1F939, 0x1F93A, 0x1F93C, 0x1F93D, 0x1F93E, 0x1F940, 0x1F941, 0x1F942, 0x1F943, 0x1F944, + 0x1F945, 0x1F947, 0x1F948, 0x1F949, 0x1F94A, 0x1F94B, 0x1F950, 0x1F951, 0x1F952, 0x1F953, + 0x1F954, 0x1F955, 0x1F956, 0x1F957, 0x1F958, 0x1F959, 0x1F95A, 0x1F95B, 0x1F95C, 0x1F95D, + 0x1F95E, 0x1F980, 0x1F981, 0x1F982, 0x1F983, 0x1F984, 0x1F985, 0x1F986, 0x1F987, 0x1F988, + 0x1F989, 0x1F98A, 0x1F98B, 0x1F98C, 0x1F98D, 0x1F98E, 0x1F98F, 0x1F990, 0x1F991, 0x1F9C0 }; // See http://www.unicode.org/Public/emoji/3.0/emoji-data.txt @@ -150,7 +149,7 @@ public class Emoji { 0x1F596, 0x1F645, 0x1F646, 0x1F647, 0x1F64B, 0x1F64C, 0x1F64D, 0x1F64E, 0x1F64F, 0x1F6A3, 0x1F6B4, 0x1F6B5, 0x1F6B6, 0x1F6C0, 0x1F918, 0x1F919, 0x1F91A, 0x1F91B, 0x1F91C, 0x1F91D, 0x1F91E, 0x1F926, 0x1F930, 0x1F933, 0x1F934, 0x1F935, 0x1F936, 0x1F937, 0x1F938, 0x1F939, - 0x1F93B, 0x1F93C, 0x1F93D, 0x1F93E + 0x1F93C, 0x1F93D, 0x1F93E }; // See http://www.unicode.org/emoji/charts/emoji-zwj-sequences.html diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 048b7c22237c..168178702ebf 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -507,7 +507,7 @@ public final class ViewRootImpl implements ViewParent, mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE); if (!sCompatibilityDone) { - sAlwaysAssignFocus = mTargetSdkVersion < Build.VERSION_CODES.O; + sAlwaysAssignFocus = true; sCompatibilityDone = true; } diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java index 38221383df3f..519a7dd8be43 100644 --- a/core/java/android/widget/SearchView.java +++ b/core/java/android/widget/SearchView.java @@ -58,6 +58,7 @@ import android.view.TouchDelegate; import android.view.View; import android.view.ViewConfiguration; import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; @@ -159,20 +160,6 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { private SearchableInfo mSearchable; private Bundle mAppSearchData; - /* - * SearchView can be set expanded before the IME is ready to be shown during - * initial UI setup. The show operation is asynchronous to account for this. - */ - private Runnable mShowImeRunnable = new Runnable() { - public void run() { - InputMethodManager imm = getContext().getSystemService(InputMethodManager.class); - - if (imm != null) { - imm.showSoftInputUnchecked(0, null); - } - } - }; - private Runnable mUpdateDrawableStateRunnable = new Runnable() { public void run() { updateFocusedState(); @@ -497,9 +484,9 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { @Override public void clearFocus() { mClearingFocus = true; - setImeVisibility(false); super.clearFocus(); mSearchSrcTextView.clearFocus(); + mSearchSrcTextView.setImeVisibility(false); mClearingFocus = false; } @@ -967,19 +954,6 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { super.onDetachedFromWindow(); } - private void setImeVisibility(final boolean visible) { - if (visible) { - post(mShowImeRunnable); - } else { - removeCallbacks(mShowImeRunnable); - InputMethodManager imm = getContext().getSystemService(InputMethodManager.class); - - if (imm != null) { - imm.hideSoftInputFromWindow(getWindowToken(), 0); - } - } - } - /** * Called by the SuggestionsAdapter * @hide @@ -1286,7 +1260,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { if (mSearchable != null) { launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString()); } - setImeVisibility(false); + mSearchSrcTextView.setImeVisibility(false); dismissSuggestions(); } } @@ -1311,7 +1285,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } else { mSearchSrcTextView.setText(""); mSearchSrcTextView.requestFocus(); - setImeVisibility(true); + mSearchSrcTextView.setImeVisibility(true); } } @@ -1319,7 +1293,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { private void onSearchClicked() { updateViewsVisibility(false); mSearchSrcTextView.requestFocus(); - setImeVisibility(true); + mSearchSrcTextView.setImeVisibility(true); if (mOnSearchClickListener != null) { mOnSearchClickListener.onClick(this); } @@ -1477,7 +1451,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { if (mOnSuggestionListener == null || !mOnSuggestionListener.onSuggestionClick(position)) { launchSuggestion(position, KeyEvent.KEYCODE_UNKNOWN, null); - setImeVisibility(false); + mSearchSrcTextView.setImeVisibility(false); dismissSuggestions(); return true; } @@ -1910,6 +1884,9 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { private int mThreshold; private SearchView mSearchView; + private boolean mHasPendingShowSoftInputRequest; + final Runnable mRunShowSoftInputIfNecessary = () -> showSoftInputIfNecessary(); + public SearchAutoComplete(Context context) { super(context); mThreshold = getThreshold(); @@ -1983,11 +1960,13 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { super.onWindowFocusChanged(hasWindowFocus); if (hasWindowFocus && mSearchView.hasFocus() && getVisibility() == VISIBLE) { - InputMethodManager inputManager = - getContext().getSystemService(InputMethodManager.class); - inputManager.showSoftInput(this, 0); - // If in landscape mode, then make sure that - // the ime is in front of the dropdown. + // Since InputMethodManager#onPostWindowFocus() will be called after this callback, + // it is a bit too early to call InputMethodManager#showSoftInput() here. We still + // need to wait until the system calls back onCreateInputConnection() to call + // InputMethodManager#showSoftInput(). + mHasPendingShowSoftInputRequest = true; + + // If in landscape mode, then make sure that the ime is in front of the dropdown. if (isLandscapeMode(getContext())) { ensureImeVisible(true); } @@ -2027,7 +2006,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { } if (event.isTracking() && !event.isCanceled()) { mSearchView.clearFocus(); - mSearchView.setImeVisibility(false); + setImeVisibility(false); return true; } } @@ -2051,5 +2030,51 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { }; return 160; } + + /** + * We override {@link View#onCreateInputConnection(EditorInfo)} as a signal to schedule a + * pending {@link InputMethodManager#showSoftInput(View, int)} request (if any). + */ + @Override + public InputConnection onCreateInputConnection(EditorInfo editorInfo) { + final InputConnection ic = super.onCreateInputConnection(editorInfo); + if (mHasPendingShowSoftInputRequest) { + removeCallbacks(mRunShowSoftInputIfNecessary); + post(mRunShowSoftInputIfNecessary); + } + return ic; + } + + private void showSoftInputIfNecessary() { + if (mHasPendingShowSoftInputRequest) { + final InputMethodManager imm = + getContext().getSystemService(InputMethodManager.class); + imm.showSoftInput(this, 0); + mHasPendingShowSoftInputRequest = false; + } + } + + private void setImeVisibility(final boolean visible) { + final InputMethodManager imm = getContext().getSystemService(InputMethodManager.class); + if (!visible) { + mHasPendingShowSoftInputRequest = false; + removeCallbacks(mRunShowSoftInputIfNecessary); + imm.hideSoftInputFromWindow(getWindowToken(), 0); + return; + } + + if (imm.isActive(this)) { + // This means that SearchAutoComplete is already connected to the IME. + // InputMethodManager#showSoftInput() is guaranteed to pass client-side focus check. + mHasPendingShowSoftInputRequest = false; + removeCallbacks(mRunShowSoftInputIfNecessary); + imm.showSoftInput(this, 0); + return; + } + + // Otherwise, InputMethodManager#showSoftInput() should be deferred after + // onCreateInputConnection(). + mHasPendingShowSoftInputRequest = true; + } } } diff --git a/docs/html/topic/libraries/support-library/revisions.jd b/docs/html/topic/libraries/support-library/revisions.jd index 9a24d1540e9b..adb1af5afe2a 100644 --- a/docs/html/topic/libraries/support-library/revisions.jd +++ b/docs/html/topic/libraries/support-library/revisions.jd @@ -316,14 +316,13 @@ APK size, we recommend that you just list the specific modules your app needs. implementations, as well as any calls to this method, should be removed. </li> - <li>{@link android.support.v4.media.session.MediaSessionCompat#obtain + <li>{@code MediaSessionCompat.obtain()} has been deprecated and replaced with the more appropriately-named method <a href="/reference/android/support/v4/media/session/MediaSessionCompat.html#fromMediaSession"><code>fromMediaSession()</code></a>. </li> - <li>{@link - android.support.v4.media.session.MediaSessionCompat.QueueItem#obtain + <li>{@code MediaSessionCompat.QueueItem.obtain()} has been deprecated and replaced with the more appropriately-named method <a href="/reference/android/support/v4/media/session/MediaSessionCompat.QueueItem.html#fromQueueItem"><code>fromQueueItem()</code></a>. diff --git a/media/java/android/media/tv/TvContract.java b/media/java/android/media/tv/TvContract.java index 62fd39516b85..c28aa5ec8711 100644 --- a/media/java/android/media/tv/TvContract.java +++ b/media/java/android/media/tv/TvContract.java @@ -1807,6 +1807,9 @@ public final class TvContract { * {@link #TYPE_S_DMB}, and * {@link #TYPE_T_DMB}. * + * <p>This value cannot be changed once it's set. Trying to modify it will make the update + * fail. + * * <p>This is a required field. * * <p>Type: TEXT diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java b/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java index 3fc999fb903a..f6f81682ad6f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java +++ b/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java @@ -48,7 +48,7 @@ public class DashboardCategory implements Parcelable { /** * List of the category's children */ - public List<Tile> tiles = new ArrayList<Tile>(); + public List<Tile> tiles = new ArrayList<>(); public DashboardCategory() { diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java index 457ce76d79ac..af247bdbb392 100644 --- a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java +++ b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java @@ -30,7 +30,6 @@ import android.os.Bundle; import android.provider.Settings; import android.util.ArraySet; import android.util.Log; -import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -40,10 +39,8 @@ import android.widget.FrameLayout; import android.widget.Toolbar; import com.android.settingslib.R; -import com.android.settingslib.applications.InterestingConfigChanges; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; public class SettingsDrawerActivity extends Activity { @@ -63,15 +60,6 @@ public class SettingsDrawerActivity extends Activity { private FrameLayout mContentHeaderContainer; - // Remove below after new IA - @Deprecated - private static List<DashboardCategory> sDashboardCategories; - @Deprecated - private static HashMap<Pair<String, String>, Tile> sTileCache; - @Deprecated - private static InterestingConfigChanges sConfigTracker; - // Remove above after new IA - @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -175,17 +163,6 @@ public class SettingsDrawerActivity extends Activity { getActionBar().setDisplayHomeAsUpEnabled(true); } - public List<DashboardCategory> getDashboardCategories() { - if (sDashboardCategories == null) { - sTileCache = new HashMap<>(); - sConfigTracker = new InterestingConfigChanges(); - // Apply initial current config. - sConfigTracker.applyNewConfig(getResources()); - sDashboardCategories = TileUtils.getCategories(this, sTileCache); - } - return sDashboardCategories; - } - protected void onCategoriesChanged() { final int N = mCategoryListeners.size(); for (int i = 0; i < N; i++) { diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 91a4e792bbb8..1f1c18976edf 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -248,6 +248,9 @@ public class SettingsProvider extends ContentProvider { @GuardedBy("mLock") private HandlerThread mHandlerThread; + @GuardedBy("mLock") + private Handler mHandler; + // We have to call in the user manager with no lock held, private volatile UserManager mUserManager; @@ -300,10 +303,13 @@ public class SettingsProvider extends ContentProvider { mHandlerThread = new HandlerThread(LOG_TAG, Process.THREAD_PRIORITY_BACKGROUND); mHandlerThread.start(); + mHandler = new Handler(mHandlerThread.getLooper()); mSettingsRegistry = new SettingsRegistry(); } - registerBroadcastReceivers(); - startWatchingUserRestrictionChanges(); + mHandler.post(() -> { + registerBroadcastReceivers(); + startWatchingUserRestrictionChanges(); + }); ServiceManager.addService("settings", new SettingsService(this)); return true; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java index 820638cb3c2d..c30bb9a2e6e8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java @@ -74,7 +74,7 @@ public class MultiUserSwitch extends FrameLayout implements View.OnClickListener if (mUserListener == null) { return false; } - return mUserListener.getUserCount() > 1; + return mUserListener.getUserCount() != 0; } public void setUserSwitcherController(UserSwitcherController userSwitcherController) { diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java index 100d8212eacc..df250b19beba 100644 --- a/services/core/java/com/android/server/am/ActivityManagerConstants.java +++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java @@ -105,16 +105,16 @@ final class ActivityManagerConstants extends ContentObserver { } private void updateConstants() { + final String setting = Settings.Global.getString(mResolver, + Settings.Global.ACTIVITY_MANAGER_CONSTANTS); synchronized (mService) { try { - mParser.setString(Settings.Global.getString(mResolver, - Settings.Global.ACTIVITY_MANAGER_CONSTANTS)); + mParser.setString(setting); } catch (IllegalArgumentException e) { // Failed to parse the settings string, log this and move on // with defaults. Slog.e("ActivityManagerConstants", "Bad activity manager config settings", e); } - ENFORCE_BG_CHECK = mParser.getBoolean(KEY_ENFORCE_BG_CHECK, DEFAULT_ENFORCE_BG_CHECK); MAX_CACHED_PROCESSES = mParser.getInt(KEY_MAX_CACHED_PROCESSES, DEFAULT_MAX_CACHED_PROCESSES); diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java index 36a913fb9c53..f927ccea1d5d 100644 --- a/services/core/java/com/android/server/am/AppErrors.java +++ b/services/core/java/com/android/server/am/AppErrors.java @@ -857,17 +857,26 @@ class AppErrors { ProcessCpuTracker processCpuTracker = new ProcessCpuTracker(true); - String[] nativeProcs = NATIVE_STACKS_OF_INTEREST; - // don't dump native PIDs for background ANRs - File tracesFile = null; + // don't dump native PIDs for background ANRs unless it is the process of interest + String[] nativeProcs = null; if (isSilentANR) { - tracesFile = mService.dumpStackTraces(true, firstPids, null, lastPids, - null); + for (int i = 0; i < NATIVE_STACKS_OF_INTEREST.length; i++) { + if (NATIVE_STACKS_OF_INTEREST[i].equals(app.processName)) { + nativeProcs = new String[] { app.processName }; + break; + } + } } else { - tracesFile = mService.dumpStackTraces(true, firstPids, processCpuTracker, lastPids, - nativeProcs); + nativeProcs = NATIVE_STACKS_OF_INTEREST; } + // For background ANRs, don't pass the ProcessCpuTracker to + // avoid spending 1/2 second collecting stats to rank lastPids. + File tracesFile = mService.dumpStackTraces(true, firstPids, + (isSilentANR) ? null : processCpuTracker, + (isSilentANR) ? null : lastPids, + nativeProcs); + String cpuInfo = null; if (ActivityManagerService.MONITOR_CPU_USAGE) { mService.updateCpuStatsNow(); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 1f97d7d9cf47..a31258c39341 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1493,6 +1493,10 @@ public class UserManagerService extends IUserManager.Stub { listeners[i].onUserRestrictionsChanged(userId, newRestrictionsFinal, prevRestrictionsFinal); } + + final Intent broadcast = new Intent(UserManager.ACTION_USER_RESTRICTIONS_CHANGED) + .setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); + mContext.sendBroadcastAsUser(broadcast, UserHandle.of(userId)); } }); } diff --git a/telephony/java/android/telephony/PreciseDisconnectCause.java b/telephony/java/android/telephony/PreciseDisconnectCause.java index 54ab19d0898f..2516d5129dc8 100644 --- a/telephony/java/android/telephony/PreciseDisconnectCause.java +++ b/telephony/java/android/telephony/PreciseDisconnectCause.java @@ -25,75 +25,480 @@ package android.telephony; public class PreciseDisconnectCause { /** The disconnect cause is not valid (Not received a disconnect cause)*/ - public static final int NOT_VALID = -1; + public static final int NOT_VALID = -1; /** No disconnect cause provided. Generally a local disconnect or an incoming missed call */ - public static final int NO_DISCONNECT_CAUSE_AVAILABLE = 0; + public static final int NO_DISCONNECT_CAUSE_AVAILABLE = 0; /** * The destination cannot be reached because the number, although valid, * is not currently assigned */ - public static final int UNOBTAINABLE_NUMBER = 1; + public static final int UNOBTAINABLE_NUMBER = 1; + /** The user cannot be reached because the network through which the call has been + * routed does not serve the destination desired + */ + public static final int NO_ROUTE_TO_DESTINATION = 3; + /** The channel most recently identified is not acceptable to the sending entity for + * use in this call + */ + public static final int CHANNEL_UNACCEPTABLE = 6; + /** The MS has tried to access a service that the MS's network operator or service + * provider is not prepared to allow + */ + public static final int OPERATOR_DETERMINED_BARRING = 8; /** One of the users involved in the call has requested that the call is cleared */ - public static final int NORMAL = 16; + public static final int NORMAL = 16; /** The called user is unable to accept another call */ - public static final int BUSY = 17; + public static final int BUSY = 17; + /** The user does not respond to a call establishment message with either an alerting + * or connect indication within the prescribed period of time allocated + */ + public static final int NO_USER_RESPONDING = 18; + /** The user has provided an alerting indication but has not provided a connect + * indication within a prescribed period of time + */ + public static final int NO_ANSWER_FROM_USER = 19; + /** The equipment sending this cause does not wish to accept this call */ + public static final int CALL_REJECTED = 21; /** The called number is no longer assigned */ - public static final int NUMBER_CHANGED = 22; + public static final int NUMBER_CHANGED = 22; + /** This cause is returned to the network when a mobile station clears an active + * call which is being pre-empted by another call with higher precedence + */ + public static final int PREEMPTION = 25; + /** The destination indicated by the mobile station cannot be reached because + * the interface to the destination is not functioning correctly + */ + public static final int DESTINATION_OUT_OF_ORDER = 27; + /** The called party number is not a valid format or is not complete */ + public static final int INVALID_NUMBER_FORMAT = 28; + /** The facility requested by user can not be provided by the network */ + public static final int FACILITY_REJECTED = 29; /** Provided in response to a STATUS ENQUIRY message */ - public static final int STATUS_ENQUIRY = 30; + public static final int STATUS_ENQUIRY = 30; /** Reports a normal disconnect only when no other normal cause applies */ - public static final int NORMAL_UNSPECIFIED = 31; + public static final int NORMAL_UNSPECIFIED = 31; /** There is no channel presently available to handle the call */ - public static final int NO_CIRCUIT_AVAIL = 34; + public static final int NO_CIRCUIT_AVAIL = 34; + /** The network is not functioning correctly and that the condition is likely + * to last a relatively long period of time + */ + public static final int NETWORK_OUT_OF_ORDER = 38; /** * The network is not functioning correctly and the condition is not likely to last * a long period of time */ - public static final int TEMPORARY_FAILURE = 41; + public static final int TEMPORARY_FAILURE = 41; /** The switching equipment is experiencing a period of high traffic */ - public static final int SWITCHING_CONGESTION = 42; + public static final int SWITCHING_CONGESTION = 42; + /** The network could not deliver access information to the remote user as requested */ + public static final int ACCESS_INFORMATION_DISCARDED = 43; /** The channel cannot be provided */ - public static final int CHANNEL_NOT_AVAIL = 44; + public static final int CHANNEL_NOT_AVAIL = 44; + /** This cause is used to report a resource unavailable event only when no other + * cause in the resource unavailable class applies + */ + public static final int RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 44; /** The requested quality of service (ITU-T X.213) cannot be provided */ - public static final int QOS_NOT_AVAIL = 49; + public static final int QOS_NOT_AVAIL = 49; + /** The facility could not be provided by the network because the user has no + * complete subscription + */ + public static final int REQUESTED_FACILITY_NOT_SUBSCRIBED = 50; + /** Incoming calls are not allowed within this CUG */ + public static final int INCOMING_CALLS_BARRED_WITHIN_CUG = 55; + /** The mobile station is not authorized to use bearer capability requested */ + public static final int BEARER_CAPABILITY_NOT_AUTHORIZED = 57; /** The requested bearer capability is not available at this time */ - public static final int BEARER_NOT_AVAIL = 58; + public static final int BEARER_NOT_AVAIL = 58; + /** The service option is not availble at this time */ + public static final int SERVICE_OPTION_NOT_AVAILABLE = 63; + /** The equipment sending this cause does not support the bearer capability requested */ + public static final int BEARER_SERVICE_NOT_IMPLEMENTED = 65; /** The call clearing is due to ACM being greater than or equal to ACMmax */ - public static final int ACM_LIMIT_EXCEEDED = 68; + public static final int ACM_LIMIT_EXCEEDED = 68; + /** The equipment sending this cause does not support the requested facility */ + public static final int REQUESTED_FACILITY_NOT_IMPLEMENTED = 69; + /** The equipment sending this cause only supports the restricted version of + * the requested bearer capability + */ + public static final int ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 70; + /** The service requested is not implemented at network */ + public static final int SERVICE_OR_OPTION_NOT_IMPLEMENTED = 79; + /** The equipment sending this cause has received a message with a transaction identifier + * which is not currently in use on the MS-network interface + */ + public static final int INVALID_TRANSACTION_IDENTIFIER = 81; + /** The called user for the incoming CUG call is not a member of the specified CUG */ + public static final int USER_NOT_MEMBER_OF_CUG = 87; + /** The equipment sending this cause has received a request which can't be accomodated */ + public static final int INCOMPATIBLE_DESTINATION = 88; + /** This cause is used to report receipt of a message with semantically incorrect contents */ + public static final int SEMANTICALLY_INCORRECT_MESSAGE = 95; + /** The equipment sending this cause has received a message with a non-semantical + * mandatory IE error + */ + public static final int INVALID_MANDATORY_INFORMATION = 96; + /** This is sent in response to a message which is not defined, or defined but not + * implemented by the equipment sending this cause + */ + public static final int MESSAGE_TYPE_NON_IMPLEMENTED = 97; + /** The equipment sending this cause has received a message not compatible with the + * protocol state + */ + public static final int MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98; + /** The equipment sending this cause has received a message which includes information + * elements not recognized because its identifier is not defined or it is defined but not + * implemented by the equipment sending the cause + */ + public static final int INFORMATION_ELEMENT_NON_EXISTENT = 99; + /** The equipment sending this cause has received a message with conditional IE errors */ + public static final int CONDITIONAL_IE_ERROR = 100; + /** The message has been received which is incompatible with the protocol state */ + public static final int MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101; + /** The procedure has been initiated by the expiry of a timer in association with + * 3GPP TS 24.008 error handling procedures + */ + public static final int RECOVERY_ON_TIMER_EXPIRED = 102; + /** This protocol error event is reported only when no other cause in the protocol + * error class applies + */ + public static final int PROTOCOL_ERROR_UNSPECIFIED = 111; + /** interworking with a network which does not provide causes for actions it takes + * thus, the precise cause for a message which is being sent cannot be ascertained + */ + public static final int INTERWORKING_UNSPECIFIED = 127; /** The call is restricted */ - public static final int CALL_BARRED = 240; + public static final int CALL_BARRED = 240; /** The call is blocked by the Fixed Dialing Number list */ - public static final int FDN_BLOCKED = 241; + public static final int FDN_BLOCKED = 241; /** The given IMSI is not known at the VLR */ /** TS 24.008 cause 4 */ - public static final int IMSI_UNKNOWN_IN_VLR = 242; + public static final int IMSI_UNKNOWN_IN_VLR = 242; /** * The network does not accept emergency call establishment using an IMEI or not accept attach * procedure for emergency services using an IMEI */ - public static final int IMEI_NOT_ACCEPTED = 243; + public static final int IMEI_NOT_ACCEPTED = 243; + /** The call cannot be established because RADIO is OFF */ + public static final int RADIO_OFF = 247; + /** The call cannot be established because of no cell coverage */ + public static final int OUT_OF_SRV = 248; + /** The call cannot be established because of no valid SIM */ + public static final int NO_VALID_SIM = 249; + /** The call is dropped or failed internally by modem */ + public static final int RADIO_INTERNAL_ERROR = 250; + /** Call failed because of UE timer expired while waiting for a response from network */ + public static final int NETWORK_RESP_TIMEOUT = 251; + /** Call failed because of a network reject */ + public static final int NETWORK_REJECT = 252; + /** Call failed because of radio access failure. ex. RACH failure */ + public static final int RADIO_ACCESS_FAILURE = 253; + /** Call failed/dropped because of a RLF */ + public static final int RADIO_LINK_FAILURE = 254; + /** Call failed/dropped because of radio link lost */ + public static final int RADIO_LINK_LOST = 255; + /** Call failed because of a radio uplink issue */ + public static final int RADIO_UPLINK_FAILURE = 256; + /** Call failed because of a RRC connection setup failure */ + public static final int RADIO_SETUP_FAILURE = 257; + /** Call failed/dropped because of RRC connection release from NW */ + public static final int RADIO_RELEASE_NORMAL = 258; + /** Call failed/dropped because of RRC abnormally released by modem/network */ + public static final int RADIO_RELEASE_ABNORMAL = 259; + /** Call setup failed because of access class barring */ + public static final int ACCESS_CLASS_BLOCKED = 260; + /** Call failed/dropped because of a network detach */ + public static final int NETWORK_DETACH = 261; + /** MS is locked until next power cycle */ - public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000; + public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000; /** Drop call*/ - public static final int CDMA_DROP = 1001; + public static final int CDMA_DROP = 1001; /** INTERCEPT order received, MS state idle entered */ - public static final int CDMA_INTERCEPT = 1002; + public static final int CDMA_INTERCEPT = 1002; /** MS has been redirected, call is cancelled */ - public static final int CDMA_REORDER = 1003; + public static final int CDMA_REORDER = 1003; /** Service option rejection */ - public static final int CDMA_SO_REJECT = 1004; + public static final int CDMA_SO_REJECT = 1004; /** Requested service is rejected, retry delay is set */ - public static final int CDMA_RETRY_ORDER = 1005; + public static final int CDMA_RETRY_ORDER = 1005; /** Unable to obtain access to the CDMA system */ - public static final int CDMA_ACCESS_FAILURE = 1006; + public static final int CDMA_ACCESS_FAILURE = 1006; /** Not a preempted call */ - public static final int CDMA_PREEMPTED = 1007; + public static final int CDMA_PREEMPTED = 1007; /** Not an emergency call */ - public static final int CDMA_NOT_EMERGENCY = 1008; + public static final int CDMA_NOT_EMERGENCY = 1008; /** Access Blocked by CDMA network */ - public static final int CDMA_ACCESS_BLOCKED = 1009; + public static final int CDMA_ACCESS_BLOCKED = 1009; + + /** Mapped from ImsReasonInfo */ + /* The passed argument is an invalid */ + public static final int LOCAL_ILLEGAL_ARGUMENT = 1200; + // The operation is invoked in invalid call state + public static final int LOCAL_ILLEGAL_STATE = 1201; + // IMS service internal error + public static final int LOCAL_INTERNAL_ERROR = 1202; + // IMS service goes down (service connection is lost) + public static final int LOCAL_IMS_SERVICE_DOWN = 1203; + // No pending incoming call exists + public static final int LOCAL_NO_PENDING_CALL = 1204; + // Service unavailable; by power off + public static final int LOCAL_POWER_OFF = 1205; + // Service unavailable; by low battery + public static final int LOCAL_LOW_BATTERY = 1206; + // Service unavailable; by out of service (data service state) + public static final int LOCAL_NETWORK_NO_SERVICE = 1207; + /* Service unavailable; by no LTE coverage + * (VoLTE is not supported even though IMS is registered) + */ + public static final int LOCAL_NETWORK_NO_LTE_COVERAGE = 1208; + /** Service unavailable; by located in roaming area */ + public static final int LOCAL_NETWORK_ROAMING = 1209; + /** Service unavailable; by IP changed */ + public static final int LOCAL_NETWORK_IP_CHANGED = 1210; + /** Service unavailable; other */ + public static final int LOCAL_SERVICE_UNAVAILABLE = 1211; + /* Service unavailable; IMS connection is lost (IMS is not registered) */ + public static final int LOCAL_NOT_REGISTERED = 1212; + /** Max call exceeded */ + public static final int LOCAL_MAX_CALL_EXCEEDED = 1213; + /** Call decline */ + public static final int LOCAL_CALL_DECLINE = 1214; + /** SRVCC is in progress */ + public static final int LOCAL_CALL_VCC_ON_PROGRESSING = 1215; + /** Resource reservation is failed (QoS precondition) */ + public static final int LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 1216; + /** Retry CS call; VoLTE service can't be provided by the network or remote end + * Resolve the extra code(EXTRA_CODE_CALL_RETRY_*) if the below code is set + */ + public static final int LOCAL_CALL_CS_RETRY_REQUIRED = 1217; + /** Retry VoLTE call; VoLTE service can't be provided by the network temporarily */ + public static final int LOCAL_CALL_VOLTE_RETRY_REQUIRED = 1218; + /** IMS call is already terminated (in TERMINATED state) */ + public static final int LOCAL_CALL_TERMINATED = 1219; + /** Handover not feasible */ + public static final int LOCAL_HO_NOT_FEASIBLE = 1220; + + /** 1xx waiting timer is expired after sending INVITE request (MO only) */ + public static final int TIMEOUT_1XX_WAITING = 1221; + /** User no answer during call setup operation (MO/MT) + * MO : 200 OK to INVITE request is not received, + * MT : No action from user after alerting the call + */ + public static final int TIMEOUT_NO_ANSWER = 1222; + /** User no answer during call update operation (MO/MT) + * MO : 200 OK to re-INVITE request is not received, + * MT : No action from user after alerting the call + */ + public static final int TIMEOUT_NO_ANSWER_CALL_UPDATE = 1223; + + /** + * STATUSCODE (SIP response code) (IMS -> Telephony) + */ + /** SIP request is redirected */ + public static final int SIP_REDIRECTED = 1300; + /** 4xx responses */ + /** 400 : Bad Request */ + public static final int SIP_BAD_REQUEST = 1310; + /** 403 : Forbidden */ + public static final int SIP_FORBIDDEN = 1311; + /** 404 : Not Found */ + public static final int SIP_NOT_FOUND = 1312; + /** 415 : Unsupported Media Type + * 416 : Unsupported URI Scheme + * 420 : Bad Extension + */ + public static final int SIP_NOT_SUPPORTED = 1313; + /** 408 : Request Timeout */ + public static final int SIP_REQUEST_TIMEOUT = 1314; + /** 480 : Temporarily Unavailable */ + public static final int SIP_TEMPRARILY_UNAVAILABLE = 1315; + /** 484 : Address Incomplete */ + public static final int SIP_BAD_ADDRESS = 1316; + /** 486 : Busy Here + * 600 : Busy Everywhere + */ + public static final int SIP_BUSY = 1317; + /** 487 : Request Terminated */ + public static final int SIP_REQUEST_CANCELLED = 1318; + /** 406 : Not Acceptable + * 488 : Not Acceptable Here + * 606 : Not Acceptable + */ + public static final int SIP_NOT_ACCEPTABLE = 1319; + /** 410 : Gone + * 604 : Does Not Exist Anywhere + */ + public static final int SIP_NOT_REACHABLE = 1320; + /** Others */ + public static final int SIP_CLIENT_ERROR = 1321; + /** 5xx responses + * 501 : Server Internal Error + */ + public static final int SIP_SERVER_INTERNAL_ERROR = 1330; + /** 503 : Service Unavailable */ + public static final int SIP_SERVICE_UNAVAILABLE = 1331; + /** 504 : Server Time-out */ + public static final int SIP_SERVER_TIMEOUT = 1332; + /** Others */ + public static final int SIP_SERVER_ERROR = 1333; + /** 6xx responses + * 603 : Decline + */ + public static final int SIP_USER_REJECTED = 1340; + /** Others */ + public static final int SIP_GLOBAL_ERROR = 1341; + /** Emergency failure */ + public static final int EMERGENCY_TEMP_FAILURE = 1342; + public static final int EMERGENCY_PERM_FAILURE = 1343; + /** Media resource initialization failed */ + public static final int MEDIA_INIT_FAILED = 1400; + /** RTP timeout (no audio / video traffic in the session) */ + public static final int MEDIA_NO_DATA = 1401; + /** Media is not supported; so dropped the call */ + public static final int MEDIA_NOT_ACCEPTABLE = 1402; + /** Unknown media related errors */ + public static final int MEDIA_UNSPECIFIED = 1403; + /** User triggers the call end */ + public static final int USER_TERMINATED = 1500; + /** No action while an incoming call is ringing */ + public static final int USER_NOANSWER = 1501; + /** User ignores an incoming call */ + public static final int USER_IGNORE = 1502; + /** User declines an incoming call */ + public static final int USER_DECLINE = 1503; + /** Device declines/ends a call due to low battery */ + public static final int LOW_BATTERY = 1504; + /** Device declines call due to blacklisted call ID */ + public static final int BLACKLISTED_CALL_ID = 1505; + /** The call is terminated by the network or remote user */ + public static final int USER_TERMINATED_BY_REMOTE = 1510; + + /** + * UT + */ + public static final int UT_NOT_SUPPORTED = 1800; + public static final int UT_SERVICE_UNAVAILABLE = 1801; + public static final int UT_OPERATION_NOT_ALLOWED = 1802; + public static final int UT_NETWORK_ERROR = 1803; + public static final int UT_CB_PASSWORD_MISMATCH = 1804; + + /** + * ECBM + */ + public static final int ECBM_NOT_SUPPORTED = 1900; + + /** + * Fail code used to indicate that Multi-endpoint is not supported by the Ims framework. + */ + public static final int MULTIENDPOINT_NOT_SUPPORTED = 1901; + + /** + * CALL DROP error codes (Call could drop because of many reasons like Network not available, + * handover, failed, etc) + */ + + /** + * CALL DROP error code for the case when a device is ePDG capable and when the user is on an + * active wifi call and at the edge of coverage and there is no qualified LTE network available + * to handover the call to. We get a handover NOT_TRIGERRED message from the modem. This error + * code is received as part of the handover message. + */ + public static final int CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 2000; + + /** + * MT call has ended due to a release from the network + * because the call was answered elsewhere + */ + public static final int ANSWERED_ELSEWHERE = 2100; + + /** + * For MultiEndpoint - Call Pull request has failed + */ + public static final int CALL_PULL_OUT_OF_SYNC = 2101; + + /** + * For MultiEndpoint - Call has been pulled from primary to secondary + */ + public static final int CALL_PULLED = 2102; + + /** + * Supplementary services (HOLD/RESUME) failure error codes. + * Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision. + */ + public static final int SUPP_SVC_FAILED = 2300; + public static final int SUPP_SVC_CANCELLED = 2301; + public static final int SUPP_SVC_REINVITE_COLLISION = 2302; + + /** + * DPD Procedure received no response or send failed + */ + public static final int IWLAN_DPD_FAILURE = 2400; + + /** + * Establishment of the ePDG Tunnel Failed + */ + public static final int EPDG_TUNNEL_ESTABLISH_FAILURE = 2500; + + /** + * Re-keying of the ePDG Tunnel Failed; may not always result in teardown + */ + public static final int EPDG_TUNNEL_REKEY_FAILURE = 2501; + + /** + * Connection to the packet gateway is lost + */ + public static final int EPDG_TUNNEL_LOST_CONNECTION = 2502; + + /** + * The maximum number of calls allowed has been reached. Used in a multi-endpoint scenario + * where the number of calls across all connected devices has reached the maximum. + */ + public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 2503; + + /** + * Similar to {@link #CODE_LOCAL_CALL_DECLINE}, except indicates that a remote device has + * declined the call. Used in a multi-endpoint scenario where a remote device declined an + * incoming call. + */ + public static final int REMOTE_CALL_DECLINE = 2504; + + /** + * Indicates the call was disconnected due to the user reaching their data limit. + */ + public static final int DATA_LIMIT_REACHED = 2505; + + /** + * Indicates the call was disconnected due to the user disabling cellular data. + */ + public static final int DATA_DISABLED = 2506; + + /** + * Indicates a call was disconnected due to loss of wifi signal. + */ + public static final int WIFI_LOST = 2507; + + + /* OEM specific error codes. To be used by OEMs when they don't want to + reveal error code which would be replaced by ERROR_UNSPECIFIED */ + public static final int OEM_CAUSE_1 = 0xf001; + public static final int OEM_CAUSE_2 = 0xf002; + public static final int OEM_CAUSE_3 = 0xf003; + public static final int OEM_CAUSE_4 = 0xf004; + public static final int OEM_CAUSE_5 = 0xf005; + public static final int OEM_CAUSE_6 = 0xf006; + public static final int OEM_CAUSE_7 = 0xf007; + public static final int OEM_CAUSE_8 = 0xf008; + public static final int OEM_CAUSE_9 = 0xf009; + public static final int OEM_CAUSE_10 = 0xf00a; + public static final int OEM_CAUSE_11 = 0xf00b; + public static final int OEM_CAUSE_12 = 0xf00c; + public static final int OEM_CAUSE_13 = 0xf00d; + public static final int OEM_CAUSE_14 = 0xf00e; + public static final int OEM_CAUSE_15 = 0xf00f; + /** Disconnected due to unspecified reasons */ - public static final int ERROR_UNSPECIFIED = 0xffff; + public static final int ERROR_UNSPECIFIED = 0xffff; /** Private constructor to avoid class instantiation. */ private PreciseDisconnectCause() { diff --git a/telephony/java/com/android/ims/ImsReasonInfo.java b/telephony/java/com/android/ims/ImsReasonInfo.java index e4f380f7a749..bd8492b3e9d2 100644 --- a/telephony/java/com/android/ims/ImsReasonInfo.java +++ b/telephony/java/com/android/ims/ImsReasonInfo.java @@ -318,6 +318,66 @@ public class ImsReasonInfo implements Parcelable { */ public static final int CODE_IKEV2_AUTH_FAILURE = 1408; + /** The call cannot be established because RADIO is OFF */ + public static final int CODE_RADIO_OFF = 1500; + + /** The call cannot be established because of no valid SIM */ + public static final int CODE_NO_VALID_SIM = 1501; + + /** The failure is due internal error at modem */ + public static final int CODE_RADIO_INTERNAL_ERROR = 1502; + + /** The failure is due to UE timer expired while waiting for a response from network */ + public static final int CODE_NETWORK_RESP_TIMEOUT = 1503; + + /** The failure is due to explicit reject from network */ + public static final int CODE_NETWORK_REJECT = 1504; + + /** The failure is due to radio access failure. ex. RACH failure */ + public static final int CODE_RADIO_ACCESS_FAILURE = 1505; + + /** Call/IMS registration failed/dropped because of a RLF */ + public static final int CODE_RADIO_LINK_FAILURE = 1506; + + /** Call/IMS registration failed/dropped because of radio link lost */ + public static final int CODE_RADIO_LINK_LOST = 1507; + + /** The call Call/IMS registration failed because of a radio uplink issue */ + public static final int CODE_RADIO_UPLINK_FAILURE = 1508; + + /** Call failed because of a RRC connection setup failure */ + public static final int CODE_RADIO_SETUP_FAILURE = 1509; + + /** Call failed/dropped because of RRC connection release from NW */ + public static final int CODE_RADIO_RELEASE_NORMAL = 1510; + + /** Call failed/dropped because of RRC abnormally released by modem/network */ + public static final int CODE_RADIO_RELEASE_ABNORMAL = 1511; + + /** Call failed because of access class barring */ + public static final int CODE_ACCESS_CLASS_BLOCKED = 1512; + + /** Call/IMS registration is failed/dropped because of a network detach */ + public static final int CODE_NETWORK_DETACH = 1513; + + /* OEM specific error codes. To be used by OEMs when they don't want to + reveal error code which would be replaced by ERROR_UNSPECIFIED */ + public static final int CODE_OEM_CAUSE_1 = 0xf001; + public static final int CODE_OEM_CAUSE_2 = 0xf002; + public static final int CODE_OEM_CAUSE_3 = 0xf003; + public static final int CODE_OEM_CAUSE_4 = 0xf004; + public static final int CODE_OEM_CAUSE_5 = 0xf005; + public static final int CODE_OEM_CAUSE_6 = 0xf006; + public static final int CODE_OEM_CAUSE_7 = 0xf007; + public static final int CODE_OEM_CAUSE_8 = 0xf008; + public static final int CODE_OEM_CAUSE_9 = 0xf009; + public static final int CODE_OEM_CAUSE_10 = 0xf00a; + public static final int CODE_OEM_CAUSE_11 = 0xf00b; + public static final int CODE_OEM_CAUSE_12 = 0xf00c; + public static final int CODE_OEM_CAUSE_13 = 0xf00d; + public static final int CODE_OEM_CAUSE_14 = 0xf00e; + public static final int CODE_OEM_CAUSE_15 = 0xf00f; + /** * Network string error messages. * mExtraMessage may have these values. diff --git a/tools/fonts/fontchain_lint.py b/tools/fonts/fontchain_lint.py index eb8a1ccd0d9e..008344cc9480 100755 --- a/tools/fonts/fontchain_lint.py +++ b/tools/fonts/fontchain_lint.py @@ -521,36 +521,21 @@ def compute_expected_emoji(): # add zwj sequences not in the current emoji-zwj-sequences.txt adjusted_emoji_zwj_sequences = dict(_emoji_zwj_sequences) adjusted_emoji_zwj_sequences.update(_emoji_zwj_sequences) - # single parent families + # Wrestlers with modifiers additional_emoji_zwj = ( - (0x1F468, 0x200D, 0x1F466), - (0x1F468, 0x200D, 0x1F467), - (0x1F468, 0x200D, 0x1F466, 0x200D, 0x1F466), - (0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F466), - (0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F467), - (0x1F469, 0x200D, 0x1F466), - (0x1F469, 0x200D, 0x1F467), - (0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466), - (0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466), - (0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467), - ) - # sequences formed from man and woman and optional fitzpatrick modifier - modified_extensions = ( - 0x2696, - 0x2708, - 0x1F3A8, - 0x1F680, - 0x1F692, + (0x1F93C, 0x1F3FB, 0x200D, 0x2640), + (0x1F93C, 0x1F3FB, 0x200D, 0x2642), + (0x1F93C, 0x1F3FC, 0x200D, 0x2640), + (0x1F93C, 0x1F3FC, 0x200D, 0x2642), + (0x1F93C, 0x1F3FD, 0x200D, 0x2640), + (0x1F93C, 0x1F3FD, 0x200D, 0x2642), + (0x1F93C, 0x1F3FE, 0x200D, 0x2640), + (0x1F93C, 0x1F3FE, 0x200D, 0x2642), + (0x1F93C, 0x1F3FF, 0x200D, 0x2640), + (0x1F93C, 0x1F3FF, 0x200D, 0x2642), ) for seq in additional_emoji_zwj: adjusted_emoji_zwj_sequences[seq] = 'Emoji_ZWJ_Sequence' - for ext in modified_extensions: - for base in (0x1F468, 0x1F469): - seq = (base, 0x200D, ext) - adjusted_emoji_zwj_sequences[seq] = 'Emoji_ZWJ_Sequence' - for modifier in range(0x1F3FB, 0x1F400): - seq = (base, modifier, 0x200D, ext) - adjusted_emoji_zwj_sequences[seq] = 'Emoji_ZWJ_Sequence' for sequence in _emoji_sequences.keys(): sequence = tuple(ch for ch in sequence if ch != EMOJI_VS) diff --git a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java index 7de55aa5ffb2..333a4f7dc3ce 100644 --- a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java +++ b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java @@ -28,6 +28,7 @@ import android.os.Parcel; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -329,6 +330,50 @@ public final class PasspointConfiguration implements Parcelable { mUsageLimitStartTimeInMs, mUsageLimitDataLimit, mUsageLimitTimeLimitInMinutes); } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("UpdateIdentifier: ").append(mUpdateIdentifier).append("\n"); + builder.append("CredentialPriority: ").append(mCredentialPriority).append("\n"); + builder.append("SubscriptionCreationTime: ").append( + mSubscriptionCreationTimeInMs != Long.MIN_VALUE + ? new Date(mSubscriptionCreationTimeInMs) : "Not specified").append("\n"); + builder.append("SubscriptionExpirationTime: ").append( + mSubscriptionExpirationTimeInMs != Long.MIN_VALUE + ? new Date(mSubscriptionExpirationTimeInMs) : "Not specified").append("\n"); + builder.append("UsageLimitStartTime: ").append(mUsageLimitStartTimeInMs != Long.MIN_VALUE + ? new Date(mUsageLimitStartTimeInMs) : "Not specified").append("\n"); + builder.append("UsageTimePeriod: ").append(mUsageLimitUsageTimePeriodInMinutes) + .append("\n"); + builder.append("UsageLimitDataLimit: ").append(mUsageLimitDataLimit).append("\n"); + builder.append("UsageLimitTimeLimit: ").append(mUsageLimitTimeLimitInMinutes).append("\n"); + if (mHomeSp != null) { + builder.append("HomeSP Begin ---\n"); + builder.append(mHomeSp); + builder.append("HomeSP End ---\n"); + } + if (mCredential != null) { + builder.append("Credential Begin ---\n"); + builder.append(mCredential); + builder.append("Credential End ---\n"); + } + if (mPolicy != null) { + builder.append("Policy Begin ---\n"); + builder.append(mPolicy); + builder.append("Policy End ---\n"); + } + if (mSubscriptionUpdate != null) { + builder.append("SubscriptionUpdate Begin ---\n"); + builder.append(mSubscriptionUpdate); + builder.append("SubscriptionUpdate End ---\n"); + } + if (mTrustRootCertList != null) { + builder.append("TrustRootCertServers: ").append(mTrustRootCertList.keySet()) + .append("\n"); + } + return builder.toString(); + } + /** * Validate the configuration data. * diff --git a/wifi/java/android/net/wifi/hotspot2/pps/Credential.java b/wifi/java/android/net/wifi/hotspot2/pps/Credential.java index d8da84f28df6..67fa1bbccd1e 100644 --- a/wifi/java/android/net/wifi/hotspot2/pps/Credential.java +++ b/wifi/java/android/net/wifi/hotspot2/pps/Credential.java @@ -30,6 +30,7 @@ import java.security.PrivateKey; import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; import java.util.Arrays; +import java.util.Date; import java.util.HashSet; import java.util.Objects; import java.util.Set; @@ -282,6 +283,18 @@ public final class Credential implements Parcelable { mAbleToShare, mEapType, mNonEapInnerMethod); } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Username: ").append(mUsername).append("\n"); + builder.append("MachineManaged: ").append(mMachineManaged).append("\n"); + builder.append("SoftTokenApp: ").append(mSoftTokenApp).append("\n"); + builder.append("AbleToShare: ").append(mAbleToShare).append("\n"); + builder.append("EAPType: ").append(mEapType).append("\n"); + builder.append("AuthMethod: ").append(mNonEapInnerMethod).append("\n"); + return builder.toString(); + } + /** * Validate the configuration data. * @@ -440,6 +453,11 @@ public final class Credential implements Parcelable { return Objects.hash(mCertType, mCertSha256Fingerprint); } + @Override + public String toString() { + return "CertificateType: " + mCertType + "\n"; + } + /** * Validate the configuration data. * @@ -562,6 +580,14 @@ public final class Credential implements Parcelable { } @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("IMSI: ").append(mImsi).append("\n"); + builder.append("EAPType: ").append(mEapType).append("\n"); + return builder.toString(); + } + + @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mImsi); dest.writeInt(mEapType); @@ -767,6 +793,33 @@ public final class Credential implements Parcelable { mCaCertificate, mClientCertificateChain, mClientPrivateKey); } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Realm: ").append(mRealm).append("\n"); + builder.append("CreationTime: ").append(mCreationTimeInMs != Long.MIN_VALUE + ? new Date(mCreationTimeInMs) : "Not specified").append("\n"); + builder.append("ExpirationTime: ").append(mExpirationTimeInMs != Long.MIN_VALUE + ? new Date(mExpirationTimeInMs) : "Not specified").append("\n"); + builder.append("CheckAAAServerStatus: ").append(mCheckAaaServerCertStatus).append("\n"); + if (mUserCredential != null) { + builder.append("UserCredential Begin ---\n"); + builder.append(mUserCredential); + builder.append("UserCredential End ---\n"); + } + if (mCertCredential != null) { + builder.append("CertificateCredential Begin ---\n"); + builder.append(mCertCredential); + builder.append("CertificateCredential End ---\n"); + } + if (mSimCredential != null) { + builder.append("SIMCredential Begin ---\n"); + builder.append(mSimCredential); + builder.append("SIMCredential End ---\n"); + } + return builder.toString(); + } + /** * Validate the configuration data. * diff --git a/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java b/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java index 68bdf37b1815..9192ab015e20 100644 --- a/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java +++ b/wifi/java/android/net/wifi/hotspot2/pps/HomeSp.java @@ -241,6 +241,20 @@ public final class HomeSp implements Parcelable { mMatchAnyOis, mOtherHomePartners, mRoamingConsortiumOis); } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("FQDN: ").append(mFqdn).append("\n"); + builder.append("FriendlyName: ").append(mFriendlyName).append("\n"); + builder.append("IconURL: ").append(mIconUrl).append("\n"); + builder.append("HomeNetworkIDs: ").append(mHomeNetworkIds).append("\n"); + builder.append("MatchAllOIs: ").append(mMatchAllOis).append("\n"); + builder.append("MatchAnyOIs: ").append(mMatchAnyOis).append("\n"); + builder.append("OtherHomePartners: ").append(mOtherHomePartners).append("\n"); + builder.append("RoamingConsortiumOIs: ").append(mRoamingConsortiumOis).append("\n"); + return builder.toString(); + } + /** * Validate HomeSp data. * diff --git a/wifi/java/android/net/wifi/hotspot2/pps/Policy.java b/wifi/java/android/net/wifi/hotspot2/pps/Policy.java index da36a116fbbe..1df70f8d45d0 100644 --- a/wifi/java/android/net/wifi/hotspot2/pps/Policy.java +++ b/wifi/java/android/net/wifi/hotspot2/pps/Policy.java @@ -249,6 +249,16 @@ public final class Policy implements Parcelable { return Objects.hash(mFqdn, mFqdnExactMatch, mPriority, mCountries); } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("FQDN: ").append(mFqdn).append("\n"); + builder.append("ExactMatch: ").append("mFqdnExactMatch").append("\n"); + builder.append("Priority: ").append(mPriority).append("\n"); + builder.append("Countries: ").append(mCountries).append("\n"); + return builder.toString(); + } + /** * Validate RoamingParnter data. * @@ -390,6 +400,29 @@ public final class Policy implements Parcelable { mPolicyUpdate); } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("MinHomeDownlinkBandwidth: ").append(mMinHomeDownlinkBandwidth) + .append("\n"); + builder.append("MinHomeUplinkBandwidth: ").append(mMinHomeUplinkBandwidth).append("\n"); + builder.append("MinRoamingDownlinkBandwidth: ").append(mMinRoamingDownlinkBandwidth) + .append("\n"); + builder.append("MinRoamingUplinkBandwidth: ").append(mMinRoamingUplinkBandwidth) + .append("\n"); + builder.append("ExcludedSSIDList: ").append(mExcludedSsidList).append("\n"); + builder.append("RequiredProtoPortMap: ").append(mRequiredProtoPortMap).append("\n"); + builder.append("MaximumBSSLoadValue: ").append(mMaximumBssLoadValue).append("\n"); + builder.append("PreferredRoamingPartnerList: ").append(mPreferredRoamingPartnerList) + .append("\n"); + if (mPolicyUpdate != null) { + builder.append("PolicyUpdate Begin ---\n"); + builder.append(mPolicyUpdate); + builder.append("PolicyUpdate End ---\n"); + } + return builder.toString(); + } + /** * Validate Policy data. * diff --git a/wifi/java/android/net/wifi/hotspot2/pps/UpdateParameter.java b/wifi/java/android/net/wifi/hotspot2/pps/UpdateParameter.java index ae051b0a6e3f..a7adfeb9ec0f 100644 --- a/wifi/java/android/net/wifi/hotspot2/pps/UpdateParameter.java +++ b/wifi/java/android/net/wifi/hotspot2/pps/UpdateParameter.java @@ -247,6 +247,18 @@ public final class UpdateParameter implements Parcelable { mTrustRootCertSha256Fingerprint); } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("UpdateInterval: ").append(mUpdateIntervalInMinutes).append("\n"); + builder.append("UpdateMethod: ").append(mUpdateMethod).append("\n"); + builder.append("Restriction: ").append(mRestriction).append("\n"); + builder.append("ServerURI: ").append(mServerUri).append("\n"); + builder.append("Username: ").append(mUsername).append("\n"); + builder.append("TrustRootCertURL: ").append(mTrustRootCertUrl).append("\n"); + return builder.toString(); + } + /** * Validate UpdateParameter data. * |