summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt17
-rw-r--r--api/system-current.txt17
-rw-r--r--api/test-current.txt17
-rw-r--r--docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd2
-rw-r--r--docs/html-intl/intl/zh-tw/guide/components/intents-filters.jd2
-rw-r--r--docs/html/training/tv/playback/card.jd2
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java108
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java43
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java6
-rw-r--r--telecomm/java/android/telecom/RemoteConnection.java7
-rw-r--r--telephony/java/android/telephony/CarrierConfigManager.java8
11 files changed, 169 insertions, 60 deletions
diff --git a/api/current.txt b/api/current.txt
index 25c6ab379bfd..7b8930c0cd8e 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -52213,7 +52213,9 @@ package java.lang.reflect {
method public abstract java.lang.annotation.Annotation[][] getParameterAnnotations();
method public int getParameterCount();
method public abstract java.lang.Class<?>[] getParameterTypes();
+ method public java.lang.reflect.Parameter[] getParameters();
method public abstract java.lang.reflect.TypeVariable<?>[] getTypeParameters();
+ method public final boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
method public boolean isSynthetic();
method public boolean isVarArgs();
method public abstract java.lang.String toGenericString();
@@ -52336,6 +52338,21 @@ package java.lang.reflect {
field public static final int VOLATILE = 64; // 0x40
}
+ public final class Parameter implements java.lang.reflect.AnnotatedElement {
+ method public T getAnnotation(java.lang.Class<T>);
+ method public java.lang.annotation.Annotation[] getAnnotations();
+ method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+ method public java.lang.reflect.Executable getDeclaringExecutable();
+ method public int getModifiers();
+ method public java.lang.String getName();
+ method public java.lang.reflect.Type getParameterizedType();
+ method public java.lang.Class<?> getType();
+ method public boolean isImplicit();
+ method public boolean isNamePresent();
+ method public boolean isSynthetic();
+ method public boolean isVarArgs();
+ }
+
public abstract interface ParameterizedType implements java.lang.reflect.Type {
method public abstract java.lang.reflect.Type[] getActualTypeArguments();
method public abstract java.lang.reflect.Type getOwnerType();
diff --git a/api/system-current.txt b/api/system-current.txt
index 49a976edb36f..ca1c61d433a1 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -55750,7 +55750,9 @@ package java.lang.reflect {
method public abstract java.lang.annotation.Annotation[][] getParameterAnnotations();
method public int getParameterCount();
method public abstract java.lang.Class<?>[] getParameterTypes();
+ method public java.lang.reflect.Parameter[] getParameters();
method public abstract java.lang.reflect.TypeVariable<?>[] getTypeParameters();
+ method public final boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
method public boolean isSynthetic();
method public boolean isVarArgs();
method public abstract java.lang.String toGenericString();
@@ -55873,6 +55875,21 @@ package java.lang.reflect {
field public static final int VOLATILE = 64; // 0x40
}
+ public final class Parameter implements java.lang.reflect.AnnotatedElement {
+ method public T getAnnotation(java.lang.Class<T>);
+ method public java.lang.annotation.Annotation[] getAnnotations();
+ method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+ method public java.lang.reflect.Executable getDeclaringExecutable();
+ method public int getModifiers();
+ method public java.lang.String getName();
+ method public java.lang.reflect.Type getParameterizedType();
+ method public java.lang.Class<?> getType();
+ method public boolean isImplicit();
+ method public boolean isNamePresent();
+ method public boolean isSynthetic();
+ method public boolean isVarArgs();
+ }
+
public abstract interface ParameterizedType implements java.lang.reflect.Type {
method public abstract java.lang.reflect.Type[] getActualTypeArguments();
method public abstract java.lang.reflect.Type getOwnerType();
diff --git a/api/test-current.txt b/api/test-current.txt
index 8b0b0e80f0c0..eda4019fe592 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -52307,7 +52307,9 @@ package java.lang.reflect {
method public abstract java.lang.annotation.Annotation[][] getParameterAnnotations();
method public int getParameterCount();
method public abstract java.lang.Class<?>[] getParameterTypes();
+ method public java.lang.reflect.Parameter[] getParameters();
method public abstract java.lang.reflect.TypeVariable<?>[] getTypeParameters();
+ method public final boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
method public boolean isSynthetic();
method public boolean isVarArgs();
method public abstract java.lang.String toGenericString();
@@ -52430,6 +52432,21 @@ package java.lang.reflect {
field public static final int VOLATILE = 64; // 0x40
}
+ public final class Parameter implements java.lang.reflect.AnnotatedElement {
+ method public T getAnnotation(java.lang.Class<T>);
+ method public java.lang.annotation.Annotation[] getAnnotations();
+ method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+ method public java.lang.reflect.Executable getDeclaringExecutable();
+ method public int getModifiers();
+ method public java.lang.String getName();
+ method public java.lang.reflect.Type getParameterizedType();
+ method public java.lang.Class<?> getType();
+ method public boolean isImplicit();
+ method public boolean isNamePresent();
+ method public boolean isSynthetic();
+ method public boolean isVarArgs();
+ }
+
public abstract interface ParameterizedType implements java.lang.reflect.Type {
method public abstract java.lang.reflect.Type[] getActualTypeArguments();
method public abstract java.lang.reflect.Type getOwnerType();
diff --git a/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd
index 68ed5683d731..0f58b792a24f 100644
--- a/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd
+++ b/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd
@@ -891,7 +891,7 @@ mRowsDeleted = getContentResolver().delete(
사용자 사전 제공자의 데이터 유형은 제공자의 계약 클래스
{@link android.provider.UserDictionary.Words}의 참조 문서에 나열되어 있습니다(계약 클래스는
<a href="#ContractClasses">계약 클래스</a> 섹션에 설명되어 있습니다).
- @link android.database.Cursor#getType
+ {@link android.database.Cursor#getType
Cursor.getType()}을 호출해서도 데이터 유형을 결정할 수 있습니다.
</p>
<p>
diff --git a/docs/html-intl/intl/zh-tw/guide/components/intents-filters.jd b/docs/html-intl/intl/zh-tw/guide/components/intents-filters.jd
index d3edac3f817a..7e61f5e01ad3 100644
--- a/docs/html-intl/intl/zh-tw/guide/components/intents-filters.jd
+++ b/docs/html-intl/intl/zh-tw/guide/components/intents-filters.jd
@@ -76,7 +76,7 @@ android.content.Context#bindService bindService()} 來繫結至另一個元件
<li><b>如何傳送廣播:</b>
<p>廣播是指任何應用程式都可接收的訊息。系統會傳送各種系統事件廣播,例如系統開機或裝置開始充電。
您可以將 {@link android.content.Intent} 傳送至 {@link android.content.Context#sendBroadcast(Intent) sendBroadcast()}、
-{@link android.content.Context#sendOrderedBroadcast(Intent, String) 或{@link
+{@link android.content.Context#sendOrderedBroadcast(Intent, String)} 或{@link
android.content.Context#sendStickyBroadcast sendStickyBroadcast()},以向其他應用程式傳送廣播。
diff --git a/docs/html/training/tv/playback/card.jd b/docs/html/training/tv/playback/card.jd
index a3a987252a8a..239118543c20 100644
--- a/docs/html/training/tv/playback/card.jd
+++ b/docs/html/training/tv/playback/card.jd
@@ -43,7 +43,7 @@ Leanback sample app</a> image card view when selected.</p>
on demand. In the browse fragment where your app presents its content to the user, you create a
{@link android.support.v17.leanback.widget.Presenter} for the content cards and pass it to the adapter
that adds the content to the screen. In the following code, the <code>CardPresenter</code> is created
-in the {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished(android.support.v4.content.Loader, java.lang.Object) onLoadFinished()}
+in the {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}
callback of the {@link android.support.v4.app.LoaderManager}.</p>
<pre>
diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
index 0f305f3cff3d..dcca431ea754 100644
--- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
@@ -65,19 +65,36 @@ import java.lang.ref.WeakReference;
import java.util.ArrayList;
/**
- * This class uses {@link android.animation.ObjectAnimator} and
- * {@link android.animation.AnimatorSet} to animate the properties of a
- * {@link android.graphics.drawable.VectorDrawable} to create an animated drawable.
+ * This class animates properties of a {@link android.graphics.drawable.VectorDrawable} with
+ * animations defined using {@link android.animation.ObjectAnimator} or
+ * {@link android.animation.AnimatorSet}.
* <p>
- * AnimatedVectorDrawable are normally defined as 3 separate XML files.
+ * Starting from API 25, AnimatedVectorDrawable runs on RenderThread (as opposed to on UI thread for
+ * earlier APIs). This means animations in AnimatedVectorDrawable can remain smooth even when there
+ * is heavy workload on the UI thread. Note: If the UI thread is unresponsive, RenderThread may
+ * continue animating until the UI thread is capable of pushing another frame. Therefore, it is not
+ * possible to precisely coordinate a RenderThread-enabled AnimatedVectorDrawable with UI thread
+ * animations. Additionally,
+ * {@link android.graphics.drawable.Animatable2.AnimationCallback#onAnimationEnd(Drawable)} will be
+ * called the frame after the AnimatedVectorDrawable finishes on the RenderThread.
* </p>
* <p>
- * First is the XML file for {@link android.graphics.drawable.VectorDrawable}.
- * Note that we allow the animation to happen on the group's attributes and path's
- * attributes, which requires they are uniquely named in this XML file. Groups
- * and paths without animations do not need names.
+ * AnimatedVectorDrawable can be defined in either <a href="#ThreeXML">three separate XML files</a>,
+ * or <a href="#OneXML">one XML</a>.
* </p>
- * <li>Here is a simple VectorDrawable in this vectordrawable.xml file.
+ * <a name="ThreeXML"></a>
+ * <h3>Define an AnimatedVectorDrawable in three separate XML files</h3>
+ * <ul>
+ * <a name="VDExample"></a>
+ * <li><h4>XML for the VectorDrawable containing properties to be animated</h4>
+ * <p>
+ * Animations can be performed on both group and path attributes, which requires groups and paths to
+ * have unique names in the same VectorDrawable. Groups and paths without animations do not need to
+ * be named.
+ * </p>
+ * Below is an example of a VectorDrawable defined in vectordrawable.xml. This VectorDrawable is
+ * referred to by its file name (not including file suffix) in the
+ * <a href="AVDExample">AnimatedVectorDrawable XML example</a>.
* <pre>
* &lt;vector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
* android:height=&quot;64dp&quot;
@@ -96,17 +113,20 @@ import java.util.ArrayList;
* &lt;/group&gt;
* &lt;/vector&gt;
* </pre></li>
+ *
+ * <a name="AVDExample"></a>
+ * <li><h4>XML for AnimatedVectorDrawable</h4>
* <p>
- * Second is the AnimatedVectorDrawable's XML file, which defines the target
- * VectorDrawable, the target paths and groups to animate, the properties of the
- * path and group to animate and the animations defined as the ObjectAnimators
- * or AnimatorSets.
+ * An AnimatedVectorDrawable element has a VectorDrawable attribute, and one or more target
+ * element(s). The target elements can be the path or group to be animated. Each target element
+ * contains a name attribute that references a property (of a path or a group) to animate, and an
+ * animation attribute that points to an ObjectAnimator or an AnimatorSet.
* </p>
- * <li>Here is a simple AnimatedVectorDrawable defined in this avd.xml file.
- * Note how we use the names to refer to the groups and paths in the vectordrawable.xml.
+ * The following code sample defines an AnimatedVectorDrawable. Note that the names refer to the
+ * groups and paths in the <a href="#VDExample">VectorDrawable XML above</a>.
* <pre>
* &lt;animated-vector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
- * android:drawable=&quot;@drawable/vectordrawable&quot; &gt;
+ * android:drawable=&quot;@drawable/vectordrawable&quot; &gt;
* &lt;target
* android:name=&quot;rotationGroup&quot;
* android:animation=&quot;@anim/rotation&quot; /&gt;
@@ -114,39 +134,43 @@ import java.util.ArrayList;
* android:name=&quot;v&quot;
* android:animation=&quot;@anim/path_morph&quot; /&gt;
* &lt;/animated-vector&gt;
- * </pre></li>
+ * </pre>
+ * </li>
+ *
+ * <li><h4>XML for Animations defined using ObjectAnimator or AnimatorSet</h4>
* <p>
- * Last is the Animator XML file, which is the same as a normal ObjectAnimator
- * or AnimatorSet.
- * To complete this example, here are the 2 animator files used in avd.xml:
- * rotation.xml and path_morph.xml.
+ * From the previous <a href="#AVDExample">example of AnimatedVectorDrawable</a>, two animations
+ * were used: rotation.xml and path_morph.xml.
* </p>
- * <li>Here is the rotation.xml, which will rotate the target group for 360 degrees.
+ * rotation.xml rotates the target group from 0 degree to 360 degrees over 6000ms:
* <pre>
* &lt;objectAnimator
* android:duration=&quot;6000&quot;
* android:propertyName=&quot;rotation&quot;
* android:valueFrom=&quot;0&quot;
* android:valueTo=&quot;360&quot; /&gt;
- * </pre></li>
- * <li>Here is the path_morph.xml, which will morph the path from one shape to
- * the other. Note that the paths must be compatible for morphing.
- * In more details, the paths should have exact same length of commands , and
- * exact same length of parameters for each commands.
- * Note that the path strings are better stored in strings.xml for reusing.
+ * </pre>
+ *
+ * path_morph.xml morphs the path from one shape into the other. Note that the paths must be
+ * compatible for morphing. Specifically, the paths must have the same commands, in the same order,
+ * and must have the same number of parameters for each command. It is recommended to store path
+ * strings as string resources for reuse.
* <pre>
* &lt;set xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;
* &lt;objectAnimator
* android:duration=&quot;3000&quot;
* android:propertyName=&quot;pathData&quot;
- * android:valueFrom=&quot;M300,70 l 0,-70 70,70 0,0 -70,70z&quot;
+ * android:valueFrom=&quot;M300,70 l 0,-70 70,70 0,0 -70,70z&quot;
* android:valueTo=&quot;M300,70 l 0,-70 70,0 0,140 -70,0 z&quot;
* android:valueType=&quot;pathType&quot;/&gt;
* &lt;/set&gt;
- * </pre></li>
+ * </pre>
+ * </ul>
+ * <a name="OneXML"></a>
+ * <h3>Define an AnimatedVectorDrawable all in one XML file</h3>
* <p>
- * Since AAPT tool is now supporting a new format which can bundle several related XML files into
- * one, we can merge the previous example into one XML file, like this:
+ * Since the AAPT tool supports a new format that bundles several related XML files together, we can
+ * merge the XML files from the previous examples into one XML file:
* </p>
* <pre>
* &lt;animated-vector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; &gt;
@@ -185,7 +209,7 @@ import java.util.ArrayList;
* &lt;objectAnimator
* android:duration=&quot;3000&quot;
* android:propertyName=&quot;pathData&quot;
- * android:valueFrom=&quot;M300,70 l 0,-70 70,70 0,0 -70,70z&quot;
+ * android:valueFrom=&quot;M300,70 l 0,-70 70,70 0,0 -70,70z&quot;
* android:valueTo=&quot;M300,70 l 0,-70 70,0 0,140 -70,0 z&quot;
* android:valueType=&quot;pathType&quot;/&gt;
* &lt;/set&gt;
@@ -286,6 +310,17 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 {
return super.getChangingConfigurations() | mAnimatedVectorState.getChangingConfigurations();
}
+ /**
+ * Draws the AnimatedVectorDrawable into the given canvas.
+ * <p>
+ * <strong>Note:</strong> Calling this method with a software canvas when the
+ * AnimatedVectorDrawable is being animated on RenderThread (for API 25 and later) may yield
+ * outdated result, as the UI thread is not guaranteed to be in sync with RenderThread on
+ * VectorDrawable's property changes during RenderThread animations.
+ * </p>
+ *
+ * @param canvas The canvas to draw into
+ */
@Override
public void draw(Canvas canvas) {
if (!canvas.isHardwareAccelerated() && mAnimatorSet instanceof VectorDrawableAnimatorRT) {
@@ -321,9 +356,9 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 {
}
/**
- * AnimatedVectorDrawable is running on render thread now. Therefore, if the root alpha is being
- * animated, then the root alpha value we get from this call could be out of sync with alpha
- * value used in the render thread. Otherwise, the root alpha should be always the same value.
+ * For API 25 and later, AnimatedVectorDrawable runs on RenderThread. Therefore, when the
+ * root alpha is being animated, this getter does not guarantee to return an up-to-date alpha
+ * value.
*
* @return the containing vector drawable's root alpha value.
*/
@@ -1495,7 +1530,6 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 {
} else {
addPendingAction(START_ANIMATION);
}
-
}
@Override
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 0775f15289b9..61c1fe2d399f 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -377,17 +377,18 @@ public class AccessPoint implements Comparable<AccessPoint> {
}
public String getSavedNetworkSummary() {
- if (mConfig != null) {
+ WifiConfiguration config = mConfig;
+ if (config != null) {
PackageManager pm = mContext.getPackageManager();
String systemName = pm.getNameForUid(android.os.Process.SYSTEM_UID);
- int userId = UserHandle.getUserId(mConfig.creatorUid);
+ int userId = UserHandle.getUserId(config.creatorUid);
ApplicationInfo appInfo = null;
- if (mConfig.creatorName != null && mConfig.creatorName.equals(systemName)) {
+ if (config.creatorName != null && config.creatorName.equals(systemName)) {
appInfo = mContext.getApplicationInfo();
} else {
try {
IPackageManager ipm = AppGlobals.getPackageManager();
- appInfo = ipm.getApplicationInfo(mConfig.creatorName, 0 /* flags */, userId);
+ appInfo = ipm.getApplicationInfo(config.creatorName, 0 /* flags */, userId);
} catch (RemoteException rex) {
}
}
@@ -402,29 +403,33 @@ public class AccessPoint implements Comparable<AccessPoint> {
}
public String getSummary() {
- return getSettingsSummary();
+ return getSettingsSummary(mConfig);
}
public String getSettingsSummary() {
+ return getSettingsSummary(mConfig);
+ }
+
+ private String getSettingsSummary(WifiConfiguration config) {
// Update to new summary
StringBuilder summary = new StringBuilder();
- if (isActive() && mConfig != null && mConfig.isPasspoint()) {
+ if (isActive() && config != null && config.isPasspoint()) {
// This is the active connection on passpoint
summary.append(getSummary(mContext, getDetailedState(),
- false, mConfig.providerFriendlyName));
+ false, config.providerFriendlyName));
} else if (isActive()) {
// This is the active connection on non-passpoint network
summary.append(getSummary(mContext, getDetailedState(),
mInfo != null && mInfo.isEphemeral()));
- } else if (mConfig != null && mConfig.isPasspoint()) {
+ } else if (config != null && config.isPasspoint()) {
String format = mContext.getString(R.string.available_via_passpoint);
- summary.append(String.format(format, mConfig.providerFriendlyName));
- } else if (mConfig != null && mConfig.hasNoInternetAccess()) {
+ summary.append(String.format(format, config.providerFriendlyName));
+ } else if (config != null && config.hasNoInternetAccess()) {
summary.append(mContext.getString(R.string.wifi_no_internet));
- } else if (mConfig != null && !mConfig.getNetworkSelectionStatus().isNetworkEnabled()) {
+ } else if (config != null && !config.getNetworkSelectionStatus().isNetworkEnabled()) {
WifiConfiguration.NetworkSelectionStatus networkStatus =
- mConfig.getNetworkSelectionStatus();
+ config.getNetworkSelectionStatus();
switch (networkStatus.getNetworkSelectionDisableReason()) {
case WifiConfiguration.NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE:
summary.append(mContext.getString(R.string.wifi_disabled_password_failure));
@@ -440,7 +445,7 @@ public class AccessPoint implements Comparable<AccessPoint> {
} else if (mRssi == Integer.MAX_VALUE) { // Wifi out of range
summary.append(mContext.getString(R.string.wifi_not_in_range));
} else { // In range, not disabled.
- if (mConfig != null) { // Is saved network
+ if (config != null) { // Is saved network
summary.append(mContext.getString(R.string.wifi_remembered));
}
}
@@ -452,11 +457,11 @@ public class AccessPoint implements Comparable<AccessPoint> {
summary.append(" f=" + Integer.toString(mInfo.getFrequency()));
}
summary.append(" " + getVisibilityStatus());
- if (mConfig != null && !mConfig.getNetworkSelectionStatus().isNetworkEnabled()) {
- summary.append(" (" + mConfig.getNetworkSelectionStatus().getNetworkStatusString());
- if (mConfig.getNetworkSelectionStatus().getDisableTime() > 0) {
+ if (config != null && !config.getNetworkSelectionStatus().isNetworkEnabled()) {
+ summary.append(" (" + config.getNetworkSelectionStatus().getNetworkStatusString());
+ if (config.getNetworkSelectionStatus().getDisableTime() > 0) {
long now = System.currentTimeMillis();
- long diff = (now - mConfig.getNetworkSelectionStatus().getDisableTime()) / 1000;
+ long diff = (now - config.getNetworkSelectionStatus().getDisableTime()) / 1000;
long sec = diff%60; //seconds
long min = (diff/60)%60; //minutes
long hour = (min/60)%60; //hours
@@ -468,9 +473,9 @@ public class AccessPoint implements Comparable<AccessPoint> {
summary.append(")");
}
- if (mConfig != null) {
+ if (config != null) {
WifiConfiguration.NetworkSelectionStatus networkStatus =
- mConfig.getNetworkSelectionStatus();
+ config.getNetworkSelectionStatus();
for (int index = WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLE;
index < WifiConfiguration.NetworkSelectionStatus
.NETWORK_SELECTION_DISABLED_MAX; index++) {
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 4111d21e6112..0100bff675bb 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -3005,6 +3005,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
case EVENT_CONFIGURE_NETWORK_AVOID_BAD_WIFI: {
if (updateAvoidBadWifi()) {
rematchAllNetworksAndRequests(null, 0);
+ for (NetworkAgentInfo nai: mNetworkAgentInfos.values()) {
+ if (nai.networkCapabilities.hasTransport(
+ NetworkCapabilities.TRANSPORT_WIFI)) {
+ sendUpdatedScoreToFactories(nai);
+ }
+ }
}
break;
}
diff --git a/telecomm/java/android/telecom/RemoteConnection.java b/telecomm/java/android/telecom/RemoteConnection.java
index dc8eaf640537..f0301155a322 100644
--- a/telecomm/java/android/telecom/RemoteConnection.java
+++ b/telecomm/java/android/telecom/RemoteConnection.java
@@ -638,7 +638,12 @@ public final class RemoteConnection {
mConnectionCapabilities = connection.getConnectionCapabilities();
mConnectionProperties = connection.getConnectionProperties();
mVideoState = connection.getVideoState();
- mVideoProvider = new RemoteConnection.VideoProvider(connection.getVideoProvider());
+ IVideoProvider videoProvider = connection.getVideoProvider();
+ if (videoProvider != null) {
+ mVideoProvider = new RemoteConnection.VideoProvider(videoProvider);
+ } else {
+ mVideoProvider = null;
+ }
mIsVoipAudioMode = connection.getIsVoipAudioMode();
mStatusHints = connection.getStatusHints();
mAddress = connection.getHandle();
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index bdc9c45840b8..411d881c2dde 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -709,6 +709,13 @@ public class CarrierConfigManager {
"read_only_apn_types_string_array";
/**
+ * APN fields that user is not allowed to modify
+ * @hide
+ */
+ public static final String KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY =
+ "read_only_apn_fields_string_array";
+
+ /**
* Boolean indicating if intent for emergency call state changes should be broadcast
* @hide
*/
@@ -1076,6 +1083,7 @@ public class CarrierConfigManager {
sDefaults.putBoolean(KEY_CSP_ENABLED_BOOL, false);
sDefaults.putBoolean(KEY_ALLOW_ADDING_APNS_BOOL, true);
sDefaults.putStringArray(KEY_READ_ONLY_APN_TYPES_STRING_ARRAY, null);
+ sDefaults.putStringArray(KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY, null);
sDefaults.putBoolean(KEY_BROADCAST_EMERGENCY_CALL_STATE_CHANGES_BOOL, false);
sDefaults.putBoolean(KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL, false);
sDefaults.putBoolean(KEY_DISABLE_SEVERE_WHEN_EXTREME_DISABLED_BOOL, true);