summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt2
-rw-r--r--core/java/android/app/TaskInfo.java14
-rw-r--r--core/java/android/hardware/input/InputManager.java8
-rw-r--r--core/java/android/net/NetworkCapabilities.java26
-rw-r--r--core/java/android/telephony/TelephonyRegistryManager.java15
-rw-r--r--core/java/com/android/internal/app/ResolverActivity.java4
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java4
-rw-r--r--core/java/com/android/internal/telephony/ITelephonyRegistry.aidl1
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/letterbox/LetterboxTaskListener.java51
-rw-r--r--libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt4
-rw-r--r--libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/FlickerTestBase.kt2
-rw-r--r--libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTest.kt4
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/letterbox/LetterboxTaskListenerTest.java65
-rw-r--r--location/java/android/location/Location.java3
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java117
-rw-r--r--services/core/java/com/android/server/OWNERS1
-rw-r--r--services/core/java/com/android/server/SystemServiceManager.java12
-rw-r--r--services/core/java/com/android/server/TelephonyRegistry.java36
-rw-r--r--services/core/java/com/android/server/TestNetworkService.java4
-rw-r--r--services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java2
-rw-r--r--services/core/java/com/android/server/connectivity/DnsManager.java18
-rw-r--r--services/core/java/com/android/server/connectivity/LingerMonitor.java14
-rw-r--r--services/core/java/com/android/server/connectivity/Nat464Xlat.java2
-rw-r--r--services/core/java/com/android/server/connectivity/NetworkAgentInfo.java4
-rw-r--r--services/core/java/com/android/server/connectivity/Vpn.java4
-rw-r--r--services/core/java/com/android/server/wallpaper/IWallpaperManagerService.java2
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java20
-rw-r--r--services/core/java/com/android/server/wm/Task.java20
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java6
-rw-r--r--startop/iorap/src/com/google/android/startop/iorap/SystemServiceUserEvent.java10
-rw-r--r--tests/net/java/com/android/server/ConnectivityServiceTest.java30
31 files changed, 330 insertions, 175 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index e35888f03e02..77d927b52b97 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -24036,7 +24036,7 @@ package android.location {
method public void setBearingAccuracyDegrees(float);
method public void setElapsedRealtimeNanos(long);
method public void setElapsedRealtimeUncertaintyNanos(double);
- method @Deprecated public void setExtras(android.os.Bundle);
+ method @Deprecated public void setExtras(@Nullable android.os.Bundle);
method public void setLatitude(double);
method public void setLongitude(double);
method public void setProvider(String);
diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java
index 8367bde61403..fe382a33a8c5 100644
--- a/core/java/android/app/TaskInfo.java
+++ b/core/java/android/app/TaskInfo.java
@@ -195,6 +195,14 @@ public class TaskInfo {
public Rect letterboxActivityBounds;
/**
+ * Activity insets if this task or its top activity is presented in letterbox mode and
+ * {@code null} otherwise.
+ * @hide
+ */
+ @Nullable
+ public Rect letterboxActivityInsets;
+
+ /**
* Relative position of the task's top left corner in the parent container.
* @hide
*/
@@ -328,7 +336,8 @@ public class TaskInfo {
&& Objects.equals(
getConfiguration().windowConfiguration.getMaxBounds(),
that.getConfiguration().windowConfiguration.getMaxBounds())
- && Objects.equals(parentBounds, that.parentBounds);
+ && Objects.equals(parentBounds, that.parentBounds)
+ && Objects.equals(letterboxActivityInsets, that.letterboxActivityInsets);
}
/**
@@ -365,6 +374,7 @@ public class TaskInfo {
parentBounds = source.readTypedObject(Rect.CREATOR);
isFocused = source.readBoolean();
isVisible = source.readBoolean();
+ letterboxActivityInsets = source.readTypedObject(Rect.CREATOR);
}
/**
@@ -402,6 +412,7 @@ public class TaskInfo {
dest.writeTypedObject(parentBounds, flags);
dest.writeBoolean(isFocused);
dest.writeBoolean(isVisible);
+ dest.writeTypedObject(letterboxActivityInsets, flags);
}
@Override
@@ -428,6 +439,7 @@ public class TaskInfo {
+ " parentBounds=" + parentBounds
+ " isFocused=" + isFocused
+ " isVisible=" + isVisible
+ + " letterboxActivityInsets=" + letterboxActivityInsets
+ "}";
}
}
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index f1d60f6cec83..40c7e9a892ff 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -208,6 +208,14 @@ public final class InputManager {
public static final long BLOCK_UNTRUSTED_TOUCHES = 158002302L;
/**
+ * Check whether apps are using FLAG_SLIPPERY for their windows. We expect that this flag is
+ * only used by the system components. If so, we can lock it down.
+ * @hide
+ */
+ @ChangeId
+ public static final long BLOCK_FLAG_SLIPPERY = android.os.IInputConstants.BLOCK_FLAG_SLIPPERY;
+
+ /**
* Input Event Injection Synchronization Mode: None.
* Never blocks. Injection is asynchronous and is assumed always to be successful.
* @hide
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 8dad11ffa731..1a37fb9fb690 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -975,6 +975,10 @@ public final class NetworkCapabilities implements Parcelable {
return mOwnerUid;
}
+ private boolean equalsOwnerUid(@NonNull final NetworkCapabilities nc) {
+ return mOwnerUid == nc.mOwnerUid;
+ }
+
/**
* UIDs of packages that are administrators of this network, or empty if none.
*
@@ -1684,6 +1688,7 @@ public final class NetworkCapabilities implements Parcelable {
&& equalsTransportInfo(that)
&& equalsUids(that)
&& equalsSSID(that)
+ && equalsOwnerUid(that)
&& equalsPrivateDnsBroken(that)
&& equalsRequestor(that)
&& equalsAdministratorUids(that);
@@ -1697,17 +1702,18 @@ public final class NetworkCapabilities implements Parcelable {
+ ((int) (mUnwantedNetworkCapabilities >> 32) * 7)
+ ((int) (mTransportTypes & 0xFFFFFFFF) * 11)
+ ((int) (mTransportTypes >> 32) * 13)
- + (mLinkUpBandwidthKbps * 17)
- + (mLinkDownBandwidthKbps * 19)
+ + mLinkUpBandwidthKbps * 17
+ + mLinkDownBandwidthKbps * 19
+ Objects.hashCode(mNetworkSpecifier) * 23
- + (mSignalStrength * 29)
- + Objects.hashCode(mUids) * 31
- + Objects.hashCode(mSSID) * 37
- + Objects.hashCode(mTransportInfo) * 41
- + Objects.hashCode(mPrivateDnsBroken) * 43
- + Objects.hashCode(mRequestorUid) * 47
- + Objects.hashCode(mRequestorPackageName) * 53
- + Arrays.hashCode(mAdministratorUids) * 59;
+ + mSignalStrength * 29
+ + mOwnerUid * 31
+ + Objects.hashCode(mUids) * 37
+ + Objects.hashCode(mSSID) * 41
+ + Objects.hashCode(mTransportInfo) * 43
+ + Objects.hashCode(mPrivateDnsBroken) * 47
+ + Objects.hashCode(mRequestorUid) * 53
+ + Objects.hashCode(mRequestorPackageName) * 59
+ + Arrays.hashCode(mAdministratorUids) * 61;
}
@Override
diff --git a/core/java/android/telephony/TelephonyRegistryManager.java b/core/java/android/telephony/TelephonyRegistryManager.java
index cc3284a1f885..a9548b0a42b4 100644
--- a/core/java/android/telephony/TelephonyRegistryManager.java
+++ b/core/java/android/telephony/TelephonyRegistryManager.java
@@ -786,6 +786,21 @@ public class TelephonyRegistryManager {
}
}
+ /**
+ * Notify that the data enabled has changed.
+ *
+ * @param enabled True if data is enabled, otherwise disabled.
+ * @param reason Reason for data enabled/disabled. See {@code REASON_*} in
+ * {@link TelephonyManager}.
+ */
+ public void notifyDataEnabled(boolean enabled, @TelephonyManager.DataEnabledReason int reason) {
+ try {
+ sRegistry.notifyDataEnabled(enabled, reason);
+ } catch (RemoteException ex) {
+ // system server crash
+ }
+ }
+
public @NonNull Set<Integer> getEventsFromListener(@NonNull PhoneStateListener listener) {
Set<Integer> eventList = new ArraySet<>();
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 2dbcbb5cf3c4..1a640d3acf66 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -1085,7 +1085,7 @@ public class ResolverActivity extends Activity implements
}
}
- protected boolean onTargetSelected(TargetInfo target, boolean alwaysCheck) {
+ protected boolean onTargetSelected(TargetInfo target, boolean always) {
final ResolveInfo ri = target.getResolveInfo();
final Intent intent = target != null ? target.getResolvedIntent() : null;
@@ -1207,7 +1207,7 @@ public class ResolverActivity extends Activity implements
if (otherProfileMatch > bestMatch) bestMatch = otherProfileMatch;
}
- if (alwaysCheck) {
+ if (always) {
final int userId = getUserId();
final PackageManager pm = getPackageManager();
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 3f3b2029497b..4476e7e8e99d 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -13862,10 +13862,6 @@ public class BatteryStatsImpl extends BatteryStats {
return u;
}
- public void onCleanupUserLocked(int userId) {
- onCleanupUserLocked(userId, mClocks.elapsedRealtime());
- }
-
public void onCleanupUserLocked(int userId, long elapsedRealtimeMs) {
final int firstUidForUser = UserHandle.getUid(userId, 0);
final int lastUidForUser = UserHandle.getUid(userId, UserHandle.PER_USER_RANGE - 1);
diff --git a/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index c2cbc04fcee5..303365b4ab3b 100644
--- a/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -94,4 +94,5 @@ interface ITelephonyRegistry {
void notifyBarringInfoChanged(int slotIndex, int subId, in BarringInfo barringInfo);
void notifyPhysicalChannelConfigForSubscriber(in int subId,
in List<PhysicalChannelConfig> configs);
+ void notifyDataEnabled(boolean enabled, int reason);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/letterbox/LetterboxTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/letterbox/LetterboxTaskListener.java
index 6e87f131ed95..490ef3296be6 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/letterbox/LetterboxTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/letterbox/LetterboxTaskListener.java
@@ -164,8 +164,6 @@ public class LetterboxTaskListener implements ShellTaskOrganizer.TaskListener {
switch (gravity) {
case Gravity.TOP:
positionInParent.y += taskBoundsWithInsets.top - activityBoundsWithInsets.top;
- // Showing status bar decor view.
- crop.top -= activityBoundsWithInsets.top - activityBounds.top;
break;
case Gravity.CENTER:
positionInParent.y +=
@@ -187,8 +185,6 @@ public class LetterboxTaskListener implements ShellTaskOrganizer.TaskListener {
final int gravity = mLetterboxConfigController.getLandscapeGravity();
// Align activity to the top.
positionInParent.y += taskBoundsWithInsets.top - activityBoundsWithInsets.top;
- // Showing status bar decor view.
- crop.top -= activityBoundsWithInsets.top - activityBounds.top;
switch (gravity) {
case Gravity.LEFT:
positionInParent.x += taskBoundsWithInsets.left - activityBoundsWithInsets.left;
@@ -209,6 +205,53 @@ public class LetterboxTaskListener implements ShellTaskOrganizer.TaskListener {
+ " for task: #" + taskInfo.taskId);
}
}
+
+ // New bounds of the activity after it's repositioned with required gravity.
+ Rect newActivityBounds = new Rect(activityBounds);
+ // Task's surfce will be repositioned to positionInParent together with the activity
+ // inside it so the new activity bounds are the original activity bounds offset by
+ // the task's offset.
+ newActivityBounds.offset(
+ positionInParent.x - taskBounds.left, positionInParent.y - taskBounds.top);
+ Rect newActivityBoundsWithInsets = new Rect(newActivityBounds);
+ newActivityBoundsWithInsets.intersect(displayBoundsWithInsets);
+ // Activity handles insets on its own (e.g. under status bar or navigation bar).
+ // crop that is calculated above crops all insets from an activity and below insets that
+ // can be shown are added back to the crop bounds (e.g. if activity is still shown at the
+ // top of the display then the top inset won't be cropped).
+ // After task's surface is repositioned, intersection between an activity and insets can
+ // change but if it doesn't, the activity should be shown under insets to maximize visible
+ // area.
+ // Also, an activity can use area under insets and insets shouldn't be cropped in this case
+ // regardless of a position on the screen.
+ final Rect activityInsetsFromCore = taskInfo.letterboxActivityInsets;
+ if (newActivityBounds.top - newActivityBoundsWithInsets.top
+ == activityBounds.top - activityBoundsWithInsets.top
+ // Check whether an activity is shown under inset. If it is, then the inset from
+ // WM Core and the inset computed here will be different because local insets
+ // doesn't take into account visibility of insets requested by the activity.
+ || activityBoundsWithInsets.top - activityBounds.top
+ != activityInsetsFromCore.top) {
+ crop.top -= activityBoundsWithInsets.top - activityBounds.top;
+ }
+ if (newActivityBounds.bottom - newActivityBoundsWithInsets.bottom
+ == activityBounds.bottom - activityBoundsWithInsets.bottom
+ || activityBounds.bottom - activityBoundsWithInsets.bottom
+ != activityInsetsFromCore.bottom) {
+ crop.bottom += activityBounds.bottom - activityBoundsWithInsets.bottom;
+ }
+ if (newActivityBounds.left - newActivityBoundsWithInsets.left
+ == activityBounds.left - activityBoundsWithInsets.left
+ || activityBoundsWithInsets.left - activityBounds.left
+ != activityInsetsFromCore.left) {
+ crop.left -= activityBoundsWithInsets.left - activityBounds.left;
+ }
+ if (newActivityBounds.right - newActivityBoundsWithInsets.right
+ == activityBounds.right - activityBoundsWithInsets.right
+ || activityBounds.right - activityBoundsWithInsets.right
+ != activityInsetsFromCore.right) {
+ crop.right += activityBounds.right - activityBoundsWithInsets.right;
+ }
}
private Insets getInsets() {
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt
index 3ed53fb221a7..1638d72f9914 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt
@@ -25,7 +25,7 @@ fun LayersAssertion.appPairsDividerIsVisible(
enabled: Boolean = bugId == 0
) {
end("appPairsDividerIsVisible", bugId, enabled) {
- this.showsLayer(FlickerTestBase.APP_PAIRS_DIVIDER)
+ this.showsLayer(FlickerTestBase.SPLIT_DIVIDER)
}
}
@@ -35,7 +35,7 @@ fun LayersAssertion.appPairsDividerIsInvisible(
enabled: Boolean = bugId == 0
) {
end("appPairsDividerIsInVisible", bugId, enabled) {
- this.hasNotLayer(FlickerTestBase.APP_PAIRS_DIVIDER)
+ this.hasNotLayer(FlickerTestBase.SPLIT_DIVIDER)
}
}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/FlickerTestBase.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/FlickerTestBase.kt
index 54b8fdc83a1f..7809be04de96 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/FlickerTestBase.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/FlickerTestBase.kt
@@ -130,7 +130,7 @@ abstract class FlickerTestBase {
const val NAVIGATION_BAR_WINDOW_TITLE = "NavigationBar"
const val STATUS_BAR_WINDOW_TITLE = "StatusBar"
const val DOCKED_STACK_DIVIDER = "DockedStackDivider"
- const val APP_PAIRS_DIVIDER = "AppPairDivider"
+ const val SPLIT_DIVIDER = "SplitDivider"
const val IMAGE_WALLPAPER = "ImageWallpaper"
}
}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTest.kt
index 7ac91b065fca..0f8d30a94ec6 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTest.kt
@@ -108,7 +108,7 @@ class AppPairsTest(
end("appsEndingBounds", enabled = false) {
val entry = this.trace.entries.firstOrNull()
?: throw IllegalStateException("Trace is empty")
- val dividerRegion = entry.getVisibleBounds(APP_PAIRS_DIVIDER)
+ val dividerRegion = entry.getVisibleBounds(SPLIT_DIVIDER)
this.hasVisibleRegion(primaryApp.defaultWindowName,
appPairsHelper.getPrimaryBounds(dividerRegion))
.and()
@@ -152,7 +152,7 @@ class AppPairsTest(
start("appsStartingBounds", enabled = false) {
val entry = this.trace.entries.firstOrNull()
?: throw IllegalStateException("Trace is empty")
- val dividerRegion = entry.getVisibleBounds(APP_PAIRS_DIVIDER)
+ val dividerRegion = entry.getVisibleBounds(SPLIT_DIVIDER)
this.hasVisibleRegion(primaryApp.defaultWindowName,
appPairsHelper.getPrimaryBounds(dividerRegion))
.and()
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/letterbox/LetterboxTaskListenerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/letterbox/LetterboxTaskListenerTest.java
index fc0e20b553d3..5cbc7d927d61 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/letterbox/LetterboxTaskListenerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/letterbox/LetterboxTaskListenerTest.java
@@ -99,7 +99,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* maxBounds= */ new Rect(0, 0, 200, 100), // equal to parent bounds
/* parentBounds */ new Rect(0, 0, 200, 100),
/* activityBounds */ new Rect(75, 0, 125, 75),
- /* taskBounds */ new Rect(50, 0, 125, 100)),
+ /* taskBounds */ new Rect(50, 0, 125, 100),
+ /* activityInsets */ new Rect(0, 0, 0, 0)),
mLeash);
// Task doesn't need to repositioned
@@ -114,7 +115,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* parentBounds */ new Rect(0, 0, 200, 100),
// Activity is offset by 25 to the left
/* activityBounds */ new Rect(50, 0, 100, 75),
- /* taskBounds */ new Rect(50, 0, 125, 100)));
+ /* taskBounds */ new Rect(50, 0, 125, 100),
+ /* activityInsets */ new Rect(0, 0, 0, 0)));
// Task needs to be repositioned by 25 to the left
verifySetPosition(75, 0);
@@ -135,7 +137,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* maxBounds= */ new Rect(0, 0, 200, 100), // equal to parent bounds
/* parentBounds */ new Rect(0, 0, 200, 100),
/* activityBounds */ new Rect(150, 0, 200, 75),
- /* taskBounds */ new Rect(125, 0, 200, 100)),
+ /* taskBounds */ new Rect(125, 0, 200, 100),
+ /* activityInsets */ new Rect(0, 10, 10, 0)),
mLeash);
verifySetPosition(-15, 0);
@@ -156,7 +159,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* maxBounds= */ new Rect(0, 0, 200, 100), // equal to parent bounds
/* parentBounds */ new Rect(0, 0, 200, 100),
/* activityBounds */ new Rect(150, 0, 200, 75),
- /* taskBounds */ new Rect(125, 0, 200, 100)),
+ /* taskBounds */ new Rect(125, 0, 200, 100),
+ /* activityInsets */ new Rect(0, 10, 10, 0)),
mLeash);
verifySetPosition(55, 0);
@@ -177,7 +181,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* maxBounds= */ new Rect(0, 0, 200, 100), // equal to parent bounds
/* parentBounds */ new Rect(0, 0, 200, 100),
/* activityBounds */ new Rect(50, 0, 100, 75),
- /* taskBounds */ new Rect(25, 0, 100, 100)),
+ /* taskBounds */ new Rect(25, 0, 100, 100),
+ /* activityInsets */ new Rect(0, 10, 10, 0)),
mLeash);
verifySetPosition(115, 0);
@@ -198,7 +203,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* maxBounds= */ new Rect(0, 0, 100, 150), // equal to parent bounds
/* parentBounds */ new Rect(0, 0, 100, 150),
/* activityBounds */ new Rect(0, 75, 50, 125),
- /* taskBounds */ new Rect(0, 50, 100, 125)),
+ /* taskBounds */ new Rect(0, 50, 100, 125),
+ /* activityInsets */ new Rect(10, 0, 0, 0)),
mLeash);
verifySetPosition(20, -15);
@@ -219,7 +225,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* maxBounds= */ new Rect(0, 0, 100, 150), // equal to parent bounds
/* parentBounds */ new Rect(0, 0, 100, 150),
/* activityBounds */ new Rect(0, 75, 50, 125),
- /* taskBounds */ new Rect(0, 50, 100, 125)),
+ /* taskBounds */ new Rect(0, 50, 100, 125),
+ /* activityInsets */ new Rect(10, 0, 0, 0)),
mLeash);
verifySetPosition(20, 20);
@@ -228,6 +235,29 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
}
@Test
+ public void testOnTaskInfoAppeared_portraitWithCenterGravity_visibleLeftInset() {
+ mLetterboxConfigController.setPortraitGravity(Gravity.CENTER);
+ setWindowBoundsAndInsets(
+ /* windowBounds= */ new Rect(0, 0, 100, 150), // equal to parent bounds
+ Insets.of(/* left= */ 10, /* top= */ 10, /* right= */ 10, /* bottom= */ 20));
+
+ mLetterboxTaskListener.onTaskAppeared(
+ createTaskInfo(
+ /* taskId */ 1,
+ /* maxBounds= */ new Rect(0, 0, 100, 150), // equal to parent bounds
+ /* parentBounds */ new Rect(0, 0, 100, 150),
+ /* activityBounds */ new Rect(0, 75, 50, 125),
+ /* taskBounds */ new Rect(0, 50, 100, 125),
+ // Activity is drawn under the left inset.
+ /* activityInsets */ new Rect(0, 0, 0, 0)),
+ mLeash);
+
+ verifySetPosition(20, 20);
+ // Should return activity coordinates offset by task coordinates
+ verifySetWindowCrop(new Rect(0, 25, 50, 75));
+ }
+
+ @Test
public void testOnTaskInfoAppeared_portraitWithBottomGravity() {
mLetterboxConfigController.setPortraitGravity(Gravity.BOTTOM);
setWindowBoundsAndInsets(
@@ -240,7 +270,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* maxBounds= */ new Rect(0, 0, 100, 150), // equal to parent bounds
/* parentBounds */ new Rect(0, 0, 100, 150),
/* activityBounds */ new Rect(0, 75, 50, 125),
- /* taskBounds */ new Rect(0, 50, 100, 125)),
+ /* taskBounds */ new Rect(0, 50, 100, 125),
+ /* activityInsets */ new Rect(10, 0, 0, 0)),
mLeash);
verifySetPosition(20, 55);
@@ -261,14 +292,14 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* maxBounds= */ new Rect(0, 0, 200, 125), // equal to parent bounds
/* parentBounds */ new Rect(0, 0, 200, 125),
/* activityBounds */ new Rect(15, 0, 175, 120),
- /* taskBounds */ new Rect(0, 0, 100, 125)), // equal to parent bounds
+ /* taskBounds */ new Rect(0, 0, 200, 125),
+ /* activityInsets */ new Rect(10, 25, 10, 10)), // equal to parent bounds
mLeash);
// Activity fully covers parent bounds with insets so doesn't need to be moved.
verifySetPosition(0, 0);
- // Should return activity coordinates offset by task coordinates minus all insets
- // except top one (keep status bar decor visible).
- verifySetWindowCrop(new Rect(25, 0, 165, 110));
+ // Should return activity coordinates offset by task coordinates
+ verifySetWindowCrop(new Rect(15, 0, 175, 120));
}
@Test
@@ -284,7 +315,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
/* maxBounds= */ new Rect(0, 0, 100, 150),
/* parentBounds */ new Rect(0, 75, 100, 225),
/* activityBounds */ new Rect(25, 75, 75, 125),
- /* taskBounds */ new Rect(0, 75, 100, 125)),
+ /* taskBounds */ new Rect(0, 75, 100, 125),
+ /* activityInsets */ new Rect(10, 0, 0, 0)),
mLeash);
verifySetPosition(0, 0);
@@ -295,7 +327,8 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
public void testOnTaskAppeared_calledSecondTimeWithSameTaskId_throwsException() {
setWindowBoundsAndInsets(new Rect(), Insets.NONE);
RunningTaskInfo taskInfo =
- createTaskInfo(/* taskId */ 1, new Rect(), new Rect(), new Rect(), new Rect());
+ createTaskInfo(/* taskId */ 1, new Rect(), new Rect(), new Rect(), new Rect(),
+ new Rect());
mLetterboxTaskListener.onTaskAppeared(taskInfo, mLeash);
mLetterboxTaskListener.onTaskAppeared(taskInfo, mLeash);
}
@@ -319,13 +352,15 @@ public final class LetterboxTaskListenerTest extends ShellTestCase {
final Rect maxBounds,
final Rect parentBounds,
final Rect activityBounds,
- final Rect taskBounds) {
+ final Rect taskBounds,
+ final Rect activityInsets) {
RunningTaskInfo taskInfo = new RunningTaskInfo();
taskInfo.taskId = taskId;
taskInfo.configuration.windowConfiguration.setMaxBounds(maxBounds);
taskInfo.parentBounds = parentBounds;
taskInfo.configuration.windowConfiguration.setBounds(taskBounds);
taskInfo.letterboxActivityBounds = Rect.copyOrNull(activityBounds);
+ taskInfo.letterboxActivityInsets = Rect.copyOrNull(activityInsets);
return taskInfo;
}
diff --git a/location/java/android/location/Location.java b/location/java/android/location/Location.java
index b4392b1d29b4..47ecbd80a07f 100644
--- a/location/java/android/location/Location.java
+++ b/location/java/android/location/Location.java
@@ -19,6 +19,7 @@ package android.location;
import static java.util.concurrent.TimeUnit.NANOSECONDS;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
@@ -1066,7 +1067,7 @@ public class Location implements Parcelable {
* @deprecated Do not use.
*/
@Deprecated
- public void setExtras(Bundle extras) {
+ public void setExtras(@Nullable Bundle extras) {
mExtras = (extras == null) ? null : new Bundle(extras);
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 0d0f0dd60d0e..854f9258e2b1 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -1287,7 +1287,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (network == null) {
return null;
}
- return getNetworkAgentInfoForNetId(network.netId);
+ return getNetworkAgentInfoForNetId(network.getNetId());
}
private NetworkAgentInfo getNetworkAgentInfoForNetId(int netId) {
@@ -1378,7 +1378,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
final String action = blocked ? "BLOCKED" : "UNBLOCKED";
mNetworkInfoBlockingLogs.log(String.format(
- "%s %d(%d) on netId %d", action, nri.mUid, nri.request.requestId, net.netId));
+ "%s %d(%d) on netId %d", action, nri.mUid, nri.request.requestId, net.getNetId()));
}
/**
@@ -1890,7 +1890,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
int netId;
synchronized (nai) {
lp = nai.linkProperties;
- netId = nai.network.netId;
+ netId = nai.network.getNetId();
}
boolean ok = addLegacyRouteToHost(lp, addr, netId, uid);
if (DBG) log("requestRouteToHostAddress ok=" + ok);
@@ -2553,7 +2553,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (defaultNai == null) {
pw.println("none");
} else {
- pw.println(defaultNai.network.netId);
+ pw.println(defaultNai.network.getNetId());
}
pw.println();
@@ -2690,7 +2690,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
private NetworkAgentInfo[] networksSortedById() {
NetworkAgentInfo[] networks = new NetworkAgentInfo[0];
networks = mNetworkAgentInfos.values().toArray(networks);
- Arrays.sort(networks, Comparator.comparingInt(nai -> nai.network.netId));
+ Arrays.sort(networks, Comparator.comparingInt(nai -> nai.network.getNetId()));
return networks;
}
@@ -2831,7 +2831,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
log(nai.toShortString() + " changed underlying networks to "
+ Arrays.toString(nai.declaredUnderlyingNetworks));
}
- updateCapabilities(nai.getCurrentScore(), nai, nai.networkCapabilities);
+ updateCapabilitiesForNetwork(nai);
notifyIfacesChangedForNetworkStats();
}
}
@@ -2855,8 +2855,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (probePrivateDnsCompleted) {
if (nai.networkCapabilities.isPrivateDnsBroken() != privateDnsBroken) {
nai.networkCapabilities.setPrivateDnsBroken(privateDnsBroken);
- final int oldScore = nai.getCurrentScore();
- updateCapabilities(oldScore, nai, nai.networkCapabilities);
+ updateCapabilitiesForNetwork(nai);
}
// Only show the notification when the private DNS is broken and the
// PRIVATE_DNS_BROKEN notification hasn't shown since last valid.
@@ -2871,8 +2870,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
// done yet. In either case, the networkCapabilities should be updated to
// reflect the new status.
nai.networkCapabilities.setPrivateDnsBroken(false);
- final int oldScore = nai.getCurrentScore();
- updateCapabilities(oldScore, nai, nai.networkCapabilities);
+ updateCapabilitiesForNetwork(nai);
nai.networkAgentConfig.hasShownBroken = false;
}
break;
@@ -2893,7 +2891,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
final NetworkAgentInfo nai = getNetworkAgentInfoForNetId(netId);
// If captive portal status has changed, update capabilities or disconnect.
if (nai != null && (visible != nai.lastCaptivePortalDetected)) {
- final int oldScore = nai.getCurrentScore();
nai.lastCaptivePortalDetected = visible;
nai.everCaptivePortalDetected |= visible;
if (nai.lastCaptivePortalDetected &&
@@ -2904,7 +2901,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
teardownUnneededNetwork(nai);
break;
}
- updateCapabilities(oldScore, nai, nai.networkCapabilities);
+ updateCapabilitiesForNetwork(nai);
}
if (!visible) {
// Only clear SIGN_IN and NETWORK_SWITCH notifications here, or else other
@@ -2974,13 +2971,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
handleFreshlyValidatedNetwork(nai);
// Clear NO_INTERNET, PRIVATE_DNS_BROKEN, PARTIAL_CONNECTIVITY and
// LOST_INTERNET notifications if network becomes valid.
- mNotifier.clearNotification(nai.network.netId,
+ mNotifier.clearNotification(nai.network.getNetId(),
NotificationType.NO_INTERNET);
- mNotifier.clearNotification(nai.network.netId,
+ mNotifier.clearNotification(nai.network.getNetId(),
NotificationType.LOST_INTERNET);
- mNotifier.clearNotification(nai.network.netId,
+ mNotifier.clearNotification(nai.network.getNetId(),
NotificationType.PARTIAL_CONNECTIVITY);
- mNotifier.clearNotification(nai.network.netId,
+ mNotifier.clearNotification(nai.network.getNetId(),
NotificationType.PRIVATE_DNS_BROKEN);
// If network becomes valid, the hasShownBroken should be reset for
// that network so that the notification will be fired when the private
@@ -2988,7 +2985,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
nai.networkAgentConfig.hasShownBroken = false;
}
} else if (partialConnectivityChanged) {
- updateCapabilities(nai.getCurrentScore(), nai, nai.networkCapabilities);
+ updateCapabilitiesForNetwork(nai);
}
updateInetCondition(nai);
// Let the NetworkAgent know the state of its network
@@ -3051,7 +3048,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
private final AutodestructReference<NetworkAgentInfo> mNai;
private NetworkMonitorCallbacks(NetworkAgentInfo nai) {
- mNetId = nai.network.netId;
+ mNetId = nai.network.getNetId();
mNai = new AutodestructReference<>(nai);
}
@@ -3201,7 +3198,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
// in order to restart a validation pass from within netd.
final PrivateDnsConfig cfg = mDnsManager.getPrivateDnsConfig();
if (cfg.useTls && TextUtils.isEmpty(cfg.hostname)) {
- updateDnses(nai.linkProperties, null, nai.network.netId);
+ updateDnses(nai.linkProperties, null, nai.network.getNetId());
}
}
@@ -3234,7 +3231,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
private void updatePrivateDns(NetworkAgentInfo nai, PrivateDnsConfig newCfg) {
mDnsManager.updatePrivateDns(nai.network, newCfg);
- updateDnses(nai.linkProperties, null, nai.network.netId);
+ updateDnses(nai.linkProperties, null, nai.network.getNetId());
}
private void handlePrivateDnsValidationUpdate(PrivateDnsValidationUpdate update) {
@@ -3330,9 +3327,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (nai != null) {
final boolean wasDefault = isDefaultNetwork(nai);
synchronized (mNetworkForNetId) {
- mNetworkForNetId.remove(nai.network.netId);
+ mNetworkForNetId.remove(nai.network.getNetId());
}
- mNetIdManager.releaseNetId(nai.network.netId);
+ mNetIdManager.releaseNetId(nai.network.getNetId());
// Just in case.
mLegacyTypeTracker.remove(nai, wasDefault);
}
@@ -3362,7 +3359,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
log(nai.toShortString() + " disconnected, was satisfying " + nai.numNetworkRequests());
}
// Clear all notifications of this network.
- mNotifier.clearNotification(nai.network.netId);
+ mNotifier.clearNotification(nai.network.getNetId());
// A network agent has disconnected.
// TODO - if we move the logic to the network agent (have them disconnect
// because they lost all their requests or because their score isn't good)
@@ -3399,14 +3396,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
synchronized (mNetworkForNetId) {
// Remove the NetworkAgent, but don't mark the netId as
// available until we've told netd to delete it below.
- mNetworkForNetId.remove(nai.network.netId);
+ mNetworkForNetId.remove(nai.network.getNetId());
}
// Remove all previously satisfied requests.
for (int i = 0; i < nai.numNetworkRequests(); i++) {
NetworkRequest request = nai.requestAt(i);
final NetworkRequestInfo nri = mNetworkRequests.get(request);
final NetworkAgentInfo currentNetwork = nri.mSatisfier;
- if (currentNetwork != null && currentNetwork.network.netId == nai.network.netId) {
+ if (currentNetwork != null
+ && currentNetwork.network.getNetId() == nai.network.getNetId()) {
nri.mSatisfier = null;
sendUpdatedScoreToFactories(request, null);
}
@@ -3436,26 +3434,26 @@ public class ConnectivityService extends IConnectivityManager.Stub
destroyNativeNetwork(nai);
mDnsManager.removeNetwork(nai.network);
}
- mNetIdManager.releaseNetId(nai.network.netId);
+ mNetIdManager.releaseNetId(nai.network.getNetId());
}
private boolean createNativeNetwork(@NonNull NetworkAgentInfo networkAgent) {
try {
// This should never fail. Specifying an already in use NetID will cause failure.
if (networkAgent.isVPN()) {
- mNetd.networkCreateVpn(networkAgent.network.netId,
+ mNetd.networkCreateVpn(networkAgent.network.getNetId(),
(networkAgent.networkAgentConfig == null
|| !networkAgent.networkAgentConfig.allowBypass));
} else {
- mNetd.networkCreatePhysical(networkAgent.network.netId,
+ mNetd.networkCreatePhysical(networkAgent.network.getNetId(),
getNetworkPermission(networkAgent.networkCapabilities));
}
- mDnsResolver.createNetworkCache(networkAgent.network.netId);
- mDnsManager.updateTransportsForNetwork(networkAgent.network.netId,
+ mDnsResolver.createNetworkCache(networkAgent.network.getNetId());
+ mDnsManager.updateTransportsForNetwork(networkAgent.network.getNetId(),
networkAgent.networkCapabilities.getTransportTypes());
return true;
} catch (RemoteException | ServiceSpecificException e) {
- loge("Error creating network " + networkAgent.network.netId + ": "
+ loge("Error creating network " + networkAgent.network.getNetId() + ": "
+ e.getMessage());
return false;
}
@@ -3463,8 +3461,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
private void destroyNativeNetwork(@NonNull NetworkAgentInfo networkAgent) {
try {
- mNetd.networkDestroy(networkAgent.network.netId);
- mDnsResolver.destroyNetworkCache(networkAgent.network.netId);
+ mNetd.networkDestroy(networkAgent.network.getNetId());
+ mDnsResolver.destroyNetworkCache(networkAgent.network.getNetId());
} catch (RemoteException | ServiceSpecificException e) {
loge("Exception destroying network: " + e);
}
@@ -3656,7 +3654,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
nri.mSatisfier = null;
if (!wasBackgroundNetwork && nai.isBackgroundNetwork()) {
// Went from foreground to background.
- updateCapabilities(nai.getCurrentScore(), nai, nai.networkCapabilities);
+ updateCapabilitiesForNetwork(nai);
}
}
@@ -4026,7 +4024,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
Intent intent = new Intent(action);
if (type != NotificationType.PRIVATE_DNS_BROKEN) {
- intent.setData(Uri.fromParts("netId", Integer.toString(nai.network.netId), null));
+ intent.setData(Uri.fromParts("netId", Integer.toString(nai.network.getNetId()), null));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Some OEMs have their own Settings package. Thus, need to get the current using
// Settings package name instead of just use default name "com.android.settings".
@@ -4041,7 +4039,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
intent,
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
- mNotifier.showNotification(nai.network.netId, type, nai, null, pendingIntent, highPriority);
+ mNotifier.showNotification(
+ nai.network.getNetId(), type, nai, null, pendingIntent, highPriority);
}
private boolean shouldPromptUnvalidated(NetworkAgentInfo nai) {
@@ -4407,7 +4406,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
return;
}
if (DBG) {
- int netid = nai.network.netId;
+ int netid = nai.network.getNetId();
log("reportNetworkConnectivity(" + netid + ", " + hasConnectivity + ") by " + uid);
}
// Validating a network that has not yet connected could result in a call to
@@ -4442,7 +4441,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
return null;
}
return getLinkPropertiesProxyInfo(activeNetwork);
- } else if (mDeps.queryUserAccess(Binder.getCallingUid(), network.netId)) {
+ } else if (mDeps.queryUserAccess(Binder.getCallingUid(), network.getNetId())) {
// Don't call getLinkProperties() as it requires ACCESS_NETWORK_STATE permission, which
// caller may not have.
return getLinkPropertiesProxyInfo(network);
@@ -4820,7 +4819,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
ensureRunningOnConnectivityServiceThread();
for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
if (nai.supportsUnderlyingNetworks()) {
- updateCapabilities(nai.getCurrentScore(), nai, nai.networkCapabilities);
+ updateCapabilitiesForNetwork(nai);
}
}
}
@@ -5653,7 +5652,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
return false;
}
synchronized (mNetworkForNetId) {
- nai = mNetworkForNetId.get(network.netId);
+ nai = mNetworkForNetId.get(network.getNetId());
}
if (nai != null) {
nai.asyncChannel.sendMessage(android.net.NetworkAgent.CMD_REQUEST_BANDWIDTH_UPDATE);
@@ -6033,7 +6032,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (VDBG) log("Got NetworkAgent Messenger");
mNetworkAgentInfos.put(nai.messenger, nai);
synchronized (mNetworkForNetId) {
- mNetworkForNetId.put(nai.network.netId, nai);
+ mNetworkForNetId.put(nai.network.getNetId(), nai);
}
try {
@@ -6061,7 +6060,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
private void updateLinkProperties(NetworkAgentInfo networkAgent, LinkProperties newLp,
@NonNull LinkProperties oldLp) {
- int netId = networkAgent.network.netId;
+ int netId = networkAgent.network.getNetId();
// The NetworkAgent does not know whether clatd is running on its network or not, or whether
// a NAT64 prefix was discovered by the DNS resolver. Before we do anything else, make sure
@@ -6342,7 +6341,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
final int newPermission = getNetworkPermission(newNc);
if (oldPermission != newPermission && nai.created && !nai.isVPN()) {
try {
- mNetd.networkSetPermissionForNetwork(nai.network.netId, newPermission);
+ mNetd.networkSetPermissionForNetwork(nai.network.getNetId(), newPermission);
} catch (RemoteException | ServiceSpecificException e) {
loge("Exception in networkSetPermissionForNetwork: " + e);
}
@@ -6358,6 +6357,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
*/
private void processCapabilitiesFromAgent(NetworkAgentInfo nai, NetworkCapabilities nc) {
nai.declaredMetered = !nc.hasCapability(NET_CAPABILITY_NOT_METERED);
+ if (nai.networkCapabilities.getOwnerUid() != nc.getOwnerUid()) {
+ Log.e(TAG, nai.toShortString() + ": ignoring attempt to change owner from "
+ + nai.networkCapabilities.getOwnerUid() + " to " + nc.getOwnerUid());
+ nc.setOwnerUid(nai.networkCapabilities.getOwnerUid());
+ }
}
/** Modifies |caps| based on the capabilities of the specified underlying networks. */
@@ -6567,10 +6571,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
if (!newNc.equalsTransportTypes(prevNc)) {
- mDnsManager.updateTransportsForNetwork(nai.network.netId, newNc.getTransportTypes());
+ mDnsManager.updateTransportsForNetwork(
+ nai.network.getNetId(), newNc.getTransportTypes());
}
}
+ /** Convenience method to update the capabilities for a given network. */
+ private void updateCapabilitiesForNetwork(NetworkAgentInfo nai) {
+ updateCapabilities(nai.getCurrentScore(), nai, nai.networkCapabilities);
+ }
+
/**
* Returns whether VPN isolation (ingress interface filtering) should be applied on the given
* network.
@@ -6621,12 +6631,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (!newRanges.isEmpty()) {
final UidRange[] addedRangesArray = new UidRange[newRanges.size()];
newRanges.toArray(addedRangesArray);
- mNMS.addVpnUidRanges(nai.network.netId, addedRangesArray);
+ mNMS.addVpnUidRanges(nai.network.getNetId(), addedRangesArray);
}
if (!prevRanges.isEmpty()) {
final UidRange[] removedRangesArray = new UidRange[prevRanges.size()];
prevRanges.toArray(removedRangesArray);
- mNMS.removeVpnUidRanges(nai.network.netId, removedRangesArray);
+ mNMS.removeVpnUidRanges(nai.network.getNetId(), removedRangesArray);
}
final boolean wasFiltering = requiresVpnIsolation(nai, prevNc, nai.linkProperties);
final boolean shouldFilter = requiresVpnIsolation(nai, newNc, nai.linkProperties);
@@ -6657,7 +6667,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
public void handleUpdateLinkProperties(NetworkAgentInfo nai, LinkProperties newLp) {
ensureRunningOnConnectivityServiceThread();
- if (getNetworkAgentInfoForNetId(nai.network.netId) != nai) {
+ if (getNetworkAgentInfoForNetId(nai.network.getNetId()) != nai) {
// Ignore updates for disconnected networks
return;
}
@@ -6856,8 +6866,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
teardownUnneededNetwork(oldNetwork);
} else {
// Put the network in the background.
- updateCapabilities(oldNetwork.getCurrentScore(), oldNetwork,
- oldNetwork.networkCapabilities);
+ updateCapabilitiesForNetwork(oldNetwork);
}
}
@@ -6868,7 +6877,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
try {
if (null != newNetwork) {
- mNetd.networkSetDefault(newNetwork.network.netId);
+ mNetd.networkSetDefault(newNetwork.network.getNetId());
} else {
mNetd.networkClearDefault();
}
@@ -6931,8 +6940,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
public String toString() {
return mRequest.mRequests.get(0).requestId + " : "
- + (null != mOldNetwork ? mOldNetwork.network.netId : "null")
- + " → " + (null != mNewNetwork ? mNewNetwork.network.netId : "null");
+ + (null != mOldNetwork ? mOldNetwork.network.getNetId() : "null")
+ + " → " + (null != mNewNetwork ? mNewNetwork.network.getNetId() : "null");
}
}
@@ -7796,7 +7805,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
private void logNetworkEvent(NetworkAgentInfo nai, int evtype) {
int[] transports = nai.networkCapabilities.getTransportTypes();
- mMetricsLog.log(nai.network.netId, transports, new NetworkEvent(evtype));
+ mMetricsLog.log(nai.network.getNetId(), transports, new NetworkEvent(evtype));
}
private static boolean toBool(int encodedBoolean) {
@@ -8418,6 +8427,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS);
}
- notifyDataStallSuspected(p, network.netId);
+ notifyDataStallSuspected(p, network.getNetId());
}
}
diff --git a/services/core/java/com/android/server/OWNERS b/services/core/java/com/android/server/OWNERS
index fcf07f87aae8..733590c4f6c6 100644
--- a/services/core/java/com/android/server/OWNERS
+++ b/services/core/java/com/android/server/OWNERS
@@ -26,3 +26,4 @@ per-file NetIdManager.java = file:/services/core/java/com/android/server/net/OWN
per-file PackageWatchdog.java = file:/services/core/java/com/android/server/rollback/OWNERS
per-file TelephonyRegistry.java = file:/telephony/OWNERS
per-file UiModeManagerService.java = file:/packages/SystemUI/OWNERS
+per-file VcnManagementService.java = file:/services/core/java/com/android/server/vcn/OWNERS
diff --git a/services/core/java/com/android/server/SystemServiceManager.java b/services/core/java/com/android/server/SystemServiceManager.java
index 9d60b8438153..cb6e73af56ac 100644
--- a/services/core/java/com/android/server/SystemServiceManager.java
+++ b/services/core/java/com/android/server/SystemServiceManager.java
@@ -60,12 +60,12 @@ public final class SystemServiceManager implements Dumpable {
// Constants used on onUser(...)
// NOTE: do not change their values, as they're used on Trace calls and changes might break
// performance tests that rely on them.
- private static final String USER_STARTING = "Start";
- private static final String USER_UNLOCKING = "Unlocking";
- private static final String USER_UNLOCKED = "Unlocked";
- private static final String USER_SWITCHING = "Switch";
- private static final String USER_STOPPING = "Stop";
- private static final String USER_STOPPED = "Cleanup";
+ private static final String USER_STARTING = "Start"; // Logged as onStartUser
+ private static final String USER_UNLOCKING = "Unlocking"; // Logged as onUnlockingUser
+ private static final String USER_UNLOCKED = "Unlocked"; // Logged as onUnlockedUser
+ private static final String USER_SWITCHING = "Switch"; // Logged as onSwitchUser
+ private static final String USER_STOPPING = "Stop"; // Logged as onStopUser
+ private static final String USER_STOPPED = "Cleanup"; // Logged as onCleanupUser
private static File sSystemDir;
private final Context mContext;
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index 52eb77d7d47d..ae5c131e38ab 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -2361,6 +2361,40 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
}
+ /**
+ * Notify that the data enabled has changed.
+ *
+ * @param enabled True if data is enabled, otherwise disabled.
+ * @param reason Reason for data enabled/disabled. See {@code DATA_*} in
+ * {@link TelephonyManager}.
+ */
+ public void notifyDataEnabled(boolean enabled,
+ @TelephonyManager.DataEnabledReason int reason) {
+ if (!checkNotifyPermission("notifyDataEnabled()")) {
+ return;
+ }
+
+ if (VDBG) {
+ log("notifyDataEnabled: enabled=" + enabled + " reason=" + reason);
+ }
+
+ mIsDataEnabled = enabled;
+ mDataEnabledReason = reason;
+ synchronized (mRecords) {
+ for (Record r : mRecords) {
+ if (r.matchPhoneStateListenerEvent(
+ PhoneStateListener.EVENT_DATA_ENABLED_CHANGED)) {
+ try {
+ r.callback.onDataEnabledChanged(enabled, reason);
+ } catch (RemoteException ex) {
+ mRemoveList.add(r.binder);
+ }
+ }
+ }
+ handleRemoveListLocked();
+ }
+ }
+
@Override
public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
@@ -2413,6 +2447,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
pw.println("mDefaultPhoneId=" + mDefaultPhoneId);
pw.println("mDefaultSubId=" + mDefaultSubId);
pw.println("mPhysicalChannelConfigs=" + mPhysicalChannelConfigs);
+ pw.println("mIsDataEnabled=" + mIsDataEnabled);
+ pw.println("mDataEnabledReason=" + mDataEnabledReason);
pw.decreaseIndent();
diff --git a/services/core/java/com/android/server/TestNetworkService.java b/services/core/java/com/android/server/TestNetworkService.java
index a45466d98563..75ebe70591df 100644
--- a/services/core/java/com/android/server/TestNetworkService.java
+++ b/services/core/java/com/android/server/TestNetworkService.java
@@ -220,7 +220,7 @@ class TestNetworkService extends ITestNetworkManager.Stub {
// Has to be in TestNetworkAgent to ensure all teardown codepaths properly clean up
// resources, even for binder death or unwanted calls.
synchronized (mTestNetworkTracker) {
- mTestNetworkTracker.remove(getNetwork().netId);
+ mTestNetworkTracker.remove(getNetwork().getNetId());
}
}
}
@@ -339,7 +339,7 @@ class TestNetworkService extends ITestNetworkManager.Stub {
administratorUids,
binder);
- mTestNetworkTracker.put(agent.getNetwork().netId, agent);
+ mTestNetworkTracker.put(agent.getNetwork().getNetId(), agent);
}
} catch (SocketException e) {
throw new UncheckedIOException(e);
diff --git a/services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java b/services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java
index 4fb6607a6b08..995bb2422de2 100644
--- a/services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java
+++ b/services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java
@@ -166,7 +166,7 @@ public class DefaultNetworkMetrics {
private static void fillLinkInfo(DefaultNetworkEvent ev, NetworkAgentInfo nai) {
LinkProperties lp = nai.linkProperties;
- ev.netId = nai.network().netId;
+ ev.netId = nai.network().getNetId();
ev.transports |= BitUtils.packBits(nai.networkCapabilities.getTransportTypes());
ev.ipv4 |= lp.hasIpv4Address() && lp.hasIpv4DefaultRoute();
ev.ipv6 |= lp.hasGlobalIpv6Address() && lp.hasIpv6DefaultRoute();
diff --git a/services/core/java/com/android/server/connectivity/DnsManager.java b/services/core/java/com/android/server/connectivity/DnsManager.java
index 712ef7630933..c70bb080b0b1 100644
--- a/services/core/java/com/android/server/connectivity/DnsManager.java
+++ b/services/core/java/com/android/server/connectivity/DnsManager.java
@@ -59,7 +59,6 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
-
/**
* Encapsulate the management of DNS settings for networks.
*
@@ -266,23 +265,23 @@ public class DnsManager {
}
public void removeNetwork(Network network) {
- mPrivateDnsMap.remove(network.netId);
- mPrivateDnsValidationMap.remove(network.netId);
- mTransportsMap.remove(network.netId);
- mLinkPropertiesMap.remove(network.netId);
+ mPrivateDnsMap.remove(network.getNetId());
+ mPrivateDnsValidationMap.remove(network.getNetId());
+ mTransportsMap.remove(network.getNetId());
+ mLinkPropertiesMap.remove(network.getNetId());
}
// This is exclusively called by ConnectivityService#dumpNetworkDiagnostics() which
// is not on the ConnectivityService handler thread.
public PrivateDnsConfig getPrivateDnsConfig(@NonNull Network network) {
- return mPrivateDnsMap.getOrDefault(network.netId, PRIVATE_DNS_OFF);
+ return mPrivateDnsMap.getOrDefault(network.getNetId(), PRIVATE_DNS_OFF);
}
public PrivateDnsConfig updatePrivateDns(Network network, PrivateDnsConfig cfg) {
Log.w(TAG, "updatePrivateDns(" + network + ", " + cfg + ")");
return (cfg != null)
- ? mPrivateDnsMap.put(network.netId, cfg)
- : mPrivateDnsMap.remove(network.netId);
+ ? mPrivateDnsMap.put(network.getNetId(), cfg)
+ : mPrivateDnsMap.remove(network.getNetId());
}
public void updatePrivateDnsStatus(int netId, LinkProperties lp) {
@@ -309,8 +308,7 @@ public class DnsManager {
}
public void updatePrivateDnsValidation(PrivateDnsValidationUpdate update) {
- final PrivateDnsValidationStatuses statuses =
- mPrivateDnsValidationMap.get(update.netId);
+ final PrivateDnsValidationStatuses statuses = mPrivateDnsValidationMap.get(update.netId);
if (statuses == null) return;
statuses.updateStatus(update);
}
diff --git a/services/core/java/com/android/server/connectivity/LingerMonitor.java b/services/core/java/com/android/server/connectivity/LingerMonitor.java
index f99f4c65594b..adec7ad5c89d 100644
--- a/services/core/java/com/android/server/connectivity/LingerMonitor.java
+++ b/services/core/java/com/android/server/connectivity/LingerMonitor.java
@@ -114,7 +114,7 @@ public class LingerMonitor {
private int getNotificationSource(NetworkAgentInfo toNai) {
for (int i = 0; i < mNotifications.size(); i++) {
- if (mNotifications.valueAt(i) == toNai.network.netId) {
+ if (mNotifications.valueAt(i) == toNai.network.getNetId()) {
return mNotifications.keyAt(i);
}
}
@@ -122,7 +122,7 @@ public class LingerMonitor {
}
private boolean everNotified(NetworkAgentInfo nai) {
- return mEverNotified.get(nai.network.netId, false);
+ return mEverNotified.get(nai.network.getNetId(), false);
}
@VisibleForTesting
@@ -153,7 +153,7 @@ public class LingerMonitor {
}
private void showNotification(NetworkAgentInfo fromNai, NetworkAgentInfo toNai) {
- mNotifier.showNotification(fromNai.network.netId, NotificationType.NETWORK_SWITCH,
+ mNotifier.showNotification(fromNai.network.getNetId(), NotificationType.NETWORK_SWITCH,
fromNai, toNai, createNotificationIntent(), true);
}
@@ -208,8 +208,8 @@ public class LingerMonitor {
+ " type=" + sNotifyTypeNames.get(notifyType, "unknown(" + notifyType + ")"));
}
- mNotifications.put(fromNai.network.netId, toNai.network.netId);
- mEverNotified.put(fromNai.network.netId, true);
+ mNotifications.put(fromNai.network.getNetId(), toNai.network.getNetId());
+ mEverNotified.put(fromNai.network.getNetId(), true);
}
/**
@@ -295,8 +295,8 @@ public class LingerMonitor {
}
public void noteDisconnect(NetworkAgentInfo nai) {
- mNotifications.delete(nai.network.netId);
- mEverNotified.delete(nai.network.netId);
+ mNotifications.delete(nai.network.getNetId());
+ mEverNotified.delete(nai.network.getNetId());
maybeStopNotifying(nai);
// No need to cancel notifications on nai: NetworkMonitor does that on disconnect.
}
diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
index d9c2e80aadcd..c1b1b6a2f26c 100644
--- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java
+++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java
@@ -528,6 +528,6 @@ public class Nat464Xlat extends BaseNetworkObserver {
@VisibleForTesting
protected int getNetId() {
- return mNetwork.network.netId;
+ return mNetwork.network.getNetId();
}
}
diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
index 3270dd55218c..ccd1f3bb16f6 100644
--- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
+++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
@@ -610,7 +610,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
if (newExpiry > 0) {
mLingerMessage = new WakeupMessage(
mContext, mHandler,
- "NETWORK_LINGER_COMPLETE." + network.netId /* cmdName */,
+ "NETWORK_LINGER_COMPLETE." + network.getNetId() /* cmdName */,
EVENT_NETWORK_LINGER_COMPLETE /* cmd */,
0 /* arg1 (unused) */, 0 /* arg2 (unused) */,
this /* obj (NetworkAgentInfo) */);
@@ -701,7 +701,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
* This represents the network with something like "[100 WIFI|VPN]" or "[108 MOBILE]".
*/
public String toShortString() {
- return "[" + network.netId + " "
+ return "[" + network.getNetId() + " "
+ transportNamesOf(networkCapabilities.getTransportTypes()) + "]";
}
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 3445275b76dd..5cb0994c5cb2 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -1062,7 +1062,7 @@ public class Vpn {
if (null == agent) return NETID_UNSET;
final Network network = agent.getNetwork();
if (null == network) return NETID_UNSET;
- return network.netId;
+ return network.getNetId();
}
private LinkProperties makeLinkProperties() {
@@ -1778,7 +1778,7 @@ public class Vpn {
if (networks[i] == null) {
mConfig.underlyingNetworks[i] = null;
} else {
- mConfig.underlyingNetworks[i] = new Network(networks[i].netId);
+ mConfig.underlyingNetworks[i] = new Network(networks[i].getNetId());
}
}
}
diff --git a/services/core/java/com/android/server/wallpaper/IWallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/IWallpaperManagerService.java
index 60b08dd3093c..a4ddf1170fe6 100644
--- a/services/core/java/com/android/server/wallpaper/IWallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/IWallpaperManagerService.java
@@ -29,7 +29,7 @@ interface IWallpaperManagerService extends IWallpaperManager, IBinder {
void onBootPhase(int phase);
/**
- * @see com.android.server.SystemService#onUnlockUser(int)
+ * @see com.android.server.SystemService#onUserUnlocking
*/
void onUnlockUser(final int userId);
} \ No newline at end of file
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 743796b0aad0..113f4d856bdd 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -1366,7 +1366,19 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
} else if (mLetterbox != null) {
mLetterbox.hide();
}
- task.maybeUpdateLetterboxBounds(this, getLetterboxParams(w));
+ maybeUpdateLetterboxInTaskOrganizer(w);
+ }
+
+ private void maybeUpdateLetterboxInTaskOrganizer(WindowState w) {
+ boolean isLetterboxed = w.isLetterboxedAppWindow() && fillsParent();
+ if (!isLetterboxed) {
+ task.maybeUpdateLetterboxInTaskOrganizer(
+ this, /* activityBounds= */ null, /* activityInsets= */ null);
+ return;
+ }
+ final Rect insets = w.getInsetsStateWithVisibilityOverride().calculateInsets(
+ getBounds(), Type.systemBars(), false /* ignoreVisibility */);
+ task.maybeUpdateLetterboxInTaskOrganizer(this, getBounds(), insets);
}
void updateLetterboxSurface(WindowState winHint) {
@@ -1380,12 +1392,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
}
- @Nullable
- private Rect getLetterboxParams(WindowState w) {
- boolean isLetterboxed = w.isLetterboxedAppWindow() && fillsParent();
- return isLetterboxed ? getBounds() : null;
- }
-
Rect getLetterboxInsets() {
if (mLetterbox != null) {
return mLetterbox.getInsets();
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 00f545cfad88..8564cbc02df8 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -519,6 +519,11 @@ class Task extends WindowContainer<WindowContainer> {
@Nullable
private Rect mLetterboxActivityBounds;
+ // Activity insets if this task or its top activity is presented in letterbox mode and
+ // {@code null} otherwise.
+ @Nullable
+ private Rect mLetterboxActivityInsets;
+
// Whether the task is currently being drag-resized
private boolean mDragResizing;
private int mDragResizeMode;
@@ -4083,6 +4088,7 @@ class Task extends WindowContainer<WindowContainer> {
// bounds, e.g. fullscreen bounds instead of letterboxed bounds. To work around this,
// assigning bounds from ActivityRecord#layoutLetterbox when they are ready.
info.letterboxActivityBounds = Rect.copyOrNull(mLetterboxActivityBounds);
+ info.letterboxActivityInsets = Rect.copyOrNull(mLetterboxActivityInsets);
info.positionInParent = getRelativePosition();
info.parentBounds = getParentBounds();
@@ -4110,15 +4116,17 @@ class Task extends WindowContainer<WindowContainer> {
? null : new PictureInPictureParams(rootActivity.pictureInPictureArgs);
}
- void maybeUpdateLetterboxBounds(
- ActivityRecord activityRecord, @Nullable Rect letterboxActivityBounds) {
+ void maybeUpdateLetterboxInTaskOrganizer(
+ ActivityRecord activityRecord,
+ @Nullable Rect activityBounds,
+ @Nullable Rect activityInsets) {
if (isOrganized()
&& mReuseActivitiesReport.top == activityRecord
// Want to force update only if letterbox bounds have changed.
- && !Objects.equals(
- mLetterboxActivityBounds,
- letterboxActivityBounds)) {
- mLetterboxActivityBounds = Rect.copyOrNull(letterboxActivityBounds);
+ && (!Objects.equals(mLetterboxActivityBounds, activityBounds)
+ || !Objects.equals(mLetterboxActivityInsets, activityInsets))) {
+ mLetterboxActivityBounds = Rect.copyOrNull(activityBounds);
+ mLetterboxActivityInsets = Rect.copyOrNull(activityInsets);
// Forcing update to reduce visual jank during the transition.
dispatchTaskInfoChangedIfNeeded(true /* force */);
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java
index 22976c30a749..f2e5878e5705 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java
@@ -46,19 +46,19 @@ abstract class BaseIDevicePolicyManager extends IDevicePolicyManager.Stub {
/**
* To be called by {@link DevicePolicyManagerService#Lifecycle} when a new user starts.
*
- * @see {@link SystemService#onStartUser}
+ * @see {@link SystemService#onUserStarting}
*/
abstract void handleStartUser(int userId);
/**
* To be called by {@link DevicePolicyManagerService#Lifecycle} when a user is being unlocked.
*
- * @see {@link SystemService#onUnlockUser}
+ * @see {@link SystemService#onUserUnlocking}
*/
abstract void handleUnlockUser(int userId);
/**
* To be called by {@link DevicePolicyManagerService#Lifecycle} when a user is being stopped.
*
- * @see {@link SystemService#onStopUser}
+ * @see {@link SystemService#onUserStopping}
*/
abstract void handleStopUser(int userId);
diff --git a/startop/iorap/src/com/google/android/startop/iorap/SystemServiceUserEvent.java b/startop/iorap/src/com/google/android/startop/iorap/SystemServiceUserEvent.java
index b77c03c1584a..2e7bafe7bdbf 100644
--- a/startop/iorap/src/com/google/android/startop/iorap/SystemServiceUserEvent.java
+++ b/startop/iorap/src/com/google/android/startop/iorap/SystemServiceUserEvent.java
@@ -36,15 +36,15 @@ import java.lang.annotation.RetentionPolicy;
*/
public class SystemServiceUserEvent implements Parcelable {
- /** @see com.android.server.SystemService#onStartUser */
+ /** @see com.android.server.SystemService#onUserStarting */
public static final int TYPE_START_USER = 0;
- /** @see com.android.server.SystemService#onUnlockUser */
+ /** @see com.android.server.SystemService#onUserUnlocking */
public static final int TYPE_UNLOCK_USER = 1;
- /** @see com.android.server.SystemService#onSwitchUser*/
+ /** @see com.android.server.SystemService#onUserSwitching*/
public static final int TYPE_SWITCH_USER = 2;
- /** @see com.android.server.SystemService#onStopUser */
+ /** @see com.android.server.SystemService#onUserStopping */
public static final int TYPE_STOP_USER = 3;
- /** @see com.android.server.SystemService#onCleanupUser */
+ /** @see com.android.server.SystemService#onUserStopped */
public static final int TYPE_CLEANUP_USER = 4;
private static final int TYPE_MAX = TYPE_CLEANUP_USER;
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index b6f91c457d9e..aec2f48cccea 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -1957,7 +1957,7 @@ public class ConnectivityServiceTest {
}
@Test
- public void testOwnerUidChangeBug() throws Exception {
+ public void testOwnerUidCannotChange() throws Exception {
// Owner UIDs are not visible without location permission.
setupLocationPermissions(Build.VERSION_CODES.Q, true, AppOpsManager.OPSTR_FINE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION);
@@ -1972,39 +1972,19 @@ public class ConnectivityServiceTest {
waitForIdle();
// Send ConnectivityService an update to the mWiFiNetworkAgent's capabilities that changes
- // its owner UID.
+ // the owner UID and an unrelated capability.
NetworkCapabilities agentCapabilities = mWiFiNetworkAgent.getNetworkCapabilities();
assertEquals(originalOwnerUid, agentCapabilities.getOwnerUid());
agentCapabilities.setOwnerUid(42);
- mWiFiNetworkAgent.setNetworkCapabilities(agentCapabilities, true);
- waitForIdle();
-
- // Check that the owner UID is not updated.
- NetworkCapabilities nc = mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork());
- assertEquals(originalOwnerUid, nc.getOwnerUid());
-
- // Make an unrelated change to the capabilities.
assertFalse(agentCapabilities.hasCapability(NET_CAPABILITY_NOT_CONGESTED));
agentCapabilities.addCapability(NET_CAPABILITY_NOT_CONGESTED);
mWiFiNetworkAgent.setNetworkCapabilities(agentCapabilities, true);
waitForIdle();
- // Check that both the capability change and the owner UID have been modified.
- // The owner UID is -1 because it is visible only to the UID that owns the network.
- nc = mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork());
- assertEquals(-1, nc.getOwnerUid());
- assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_CONGESTED));
-
- // Set the owner back to originalOwnerUid, update the capabilities, and check that it is
- // visible again.
- // TODO: should this even be possible?
- agentCapabilities.setOwnerUid(originalOwnerUid);
- agentCapabilities.removeCapability(NET_CAPABILITY_NOT_CONGESTED);
- mWiFiNetworkAgent.setNetworkCapabilities(agentCapabilities, true);
- waitForIdle();
-
- nc = mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork());
+ // Check that the capability change has been applied but the owner UID is not modified.
+ NetworkCapabilities nc = mCm.getNetworkCapabilities(mWiFiNetworkAgent.getNetwork());
assertEquals(originalOwnerUid, nc.getOwnerUid());
+ assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_CONGESTED));
}
@Test