From e15e87e92a149da8223c426cc92061258855a033 Mon Sep 17 00:00:00 2001 From: Beverly Date: Tue, 15 Sep 2020 09:23:54 -0400 Subject: Add telecom to priorityOnlyDndExemptPackages telecom plays dialer's ringtone, so we allow them to play sounds when DND is on in priority mode. We trust that telecom will abide by the DND rules and exceptions (ie: checking for starred contacts) Test: manual Bug: 163525045 Change-Id: I798f1d968821e7d1b0a97b9b034c1ef0726f8242 Merged-In: I798f1d968821e7d1b0a97b9b034c1ef0726f8242 (cherry picked from commit c384c930fd64e8c8e02b7bc28314b7f692ef8c9f) --- core/res/res/values/config.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 89ef8047107c..d21930f31df4 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -3478,6 +3478,7 @@ mode --> com.android.dialer + com.android.server.telecom com.android.systemui android -- cgit v1.2.3 From a06fbd2397621615eabbe5a11337f82d4dc30af2 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Tue, 22 Sep 2020 16:37:47 +0800 Subject: RESTRICT AUTOMERGE Make task visible if activity launched behind Activities were unable to be started while dream started and keyguard locked because the started activities were not on the top-most focused tasks (it was the dream task on top). Even the activities were set as launched behind, the visibilities of the belonging tasks were still invisible and aborted the launches. Making the task visible if the top activity is launched behind and also starting activities on all visible tasks for attached application. Bug: 168326273 Test: making phone call on Auto while Dream started on Phone Test: atest DreamManagerServiceTests Test: atest ActivityRecordTests Change-Id: I199435bcfc7593e6c58488cd6de7c2289d5d0e20 (cherry picked from commit 0f26f573f5f79970a99b46c0b55b8c1d4e106ae5) --- .../com/android/server/wm/RootWindowContainer.java | 38 +++++++++++++--------- services/core/java/com/android/server/wm/Task.java | 12 +++++++ .../com/android/server/wm/ActivityRecordTests.java | 2 +- 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 4700864c03bc..edb1984aea92 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -48,6 +48,7 @@ import static com.android.server.wm.ActivityStack.ActivityState.PAUSED; import static com.android.server.wm.ActivityStack.ActivityState.RESUMED; import static com.android.server.wm.ActivityStack.ActivityState.STOPPED; import static com.android.server.wm.ActivityStack.ActivityState.STOPPING; +import static com.android.server.wm.ActivityStack.STACK_VISIBILITY_INVISIBLE; import static com.android.server.wm.ActivityStackSupervisor.DEFER_RESUME; import static com.android.server.wm.ActivityStackSupervisor.ON_TOP; import static com.android.server.wm.ActivityStackSupervisor.dumpHistoryList; @@ -1927,24 +1928,29 @@ class RootWindowContainer extends WindowContainer } boolean attachApplication(WindowProcessController app) throws RemoteException { - final String processName = app.mName; boolean didSomething = false; for (int displayNdx = getChildCount() - 1; displayNdx >= 0; --displayNdx) { - final DisplayContent display = getChildAt(displayNdx); - final ActivityStack stack = display.getFocusedStack(); - if (stack == null) { - continue; - } - mTmpRemoteException = null; mTmpBoolean = false; // Set to true if an activity was started. - final PooledFunction c = PooledLambda.obtainFunction( - RootWindowContainer::startActivityForAttachedApplicationIfNeeded, this, - PooledLambda.__(ActivityRecord.class), app, stack.topRunningActivity()); - stack.forAllActivities(c); - c.recycle(); - if (mTmpRemoteException != null) { - throw mTmpRemoteException; + + final DisplayContent display = getChildAt(displayNdx); + for (int areaNdx = display.getTaskDisplayAreaCount() - 1; areaNdx >= 0; --areaNdx) { + final TaskDisplayArea taskDisplayArea = display.getTaskDisplayAreaAt(areaNdx); + for (int taskNdx = taskDisplayArea.getStackCount() - 1; taskNdx >= 0; --taskNdx) { + final ActivityStack rootTask = taskDisplayArea.getStackAt(taskNdx); + if (rootTask.getVisibility(null /*starting*/) == STACK_VISIBILITY_INVISIBLE) { + break; + } + final PooledFunction c = PooledLambda.obtainFunction( + RootWindowContainer::startActivityForAttachedApplicationIfNeeded, this, + PooledLambda.__(ActivityRecord.class), app, + rootTask.topRunningActivity()); + rootTask.forAllActivities(c); + c.recycle(); + if (mTmpRemoteException != null) { + throw mTmpRemoteException; + } + } } didSomething |= mTmpBoolean; } @@ -1962,8 +1968,8 @@ class RootWindowContainer extends WindowContainer } try { - if (mStackSupervisor.realStartActivityLocked(r, app, top == r /*andResume*/, - true /*checkConfig*/)) { + if (mStackSupervisor.realStartActivityLocked(r, app, + top == r && r.isFocusable() /*andResume*/, true /*checkConfig*/)) { mTmpBoolean = true; } } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 6785127d5953..32230cdbdca6 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3649,6 +3649,10 @@ class Task extends WindowContainer { return STACK_VISIBILITY_INVISIBLE; } + if (isTopActivityLaunchedBehind()) { + return STACK_VISIBILITY_VISIBLE; + } + boolean gotSplitScreenStack = false; boolean gotOpaqueSplitScreenPrimary = false; boolean gotOpaqueSplitScreenSecondary = false; @@ -3766,6 +3770,14 @@ class Task extends WindowContainer { : STACK_VISIBILITY_VISIBLE; } + private boolean isTopActivityLaunchedBehind() { + final ActivityRecord top = topRunningActivity(); + if (top != null && top.mLaunchTaskBehind) { + return true; + } + return false; + } + ActivityRecord isInTask(ActivityRecord r) { if (r == null) { return null; diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index 6ab0697206e3..c6d788b10056 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -543,7 +543,7 @@ public class ActivityRecordTests extends ActivityTestsBase { final ActivityStack stack = new StackBuilder(mRootWindowContainer).build(); try { doReturn(false).when(stack).isTranslucent(any()); - assertFalse(mStack.shouldBeVisible(null /* starting */)); + assertTrue(mStack.shouldBeVisible(null /* starting */)); mActivity.setLastReportedConfiguration(new MergedConfiguration(new Configuration(), mActivity.getConfiguration())); -- cgit v1.2.3 From d88d1c7820e02db380134611ede2c2f937dbf0c5 Mon Sep 17 00:00:00 2001 From: Sarah Chin Date: Wed, 23 Sep 2020 01:54:01 -0700 Subject: Add read/write logic for SubscriptionPlan network types field Add permissions for Phone process to access SubscriptionPlans for meteredness Test: manual verification Bug: 169187737 Change-Id: Ib821590a573db87b22619cfe7ebe64c0230c5031 (cherry picked from commit 8fce85a6f8682fe61f773e6e31b5c1246001ba65) --- data/etc/privapp-permissions-platform.xml | 1 + .../server/net/NetworkPolicyManagerService.java | 34 ++++++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml index e6f4e27100de..810a8682ad32 100644 --- a/data/etc/privapp-permissions-platform.xml +++ b/data/etc/privapp-permissions-platform.xml @@ -164,6 +164,7 @@ applications that come with the platform + diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index d6557f6410ec..b3eb53116d49 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -96,7 +96,9 @@ import static com.android.internal.util.XmlUtils.readBooleanAttribute; import static com.android.internal.util.XmlUtils.readIntAttribute; import static com.android.internal.util.XmlUtils.readLongAttribute; import static com.android.internal.util.XmlUtils.readStringAttribute; +import static com.android.internal.util.XmlUtils.readThisIntArrayXml; import static com.android.internal.util.XmlUtils.writeBooleanAttribute; +import static com.android.internal.util.XmlUtils.writeIntArrayXml; import static com.android.internal.util.XmlUtils.writeIntAttribute; import static com.android.internal.util.XmlUtils.writeLongAttribute; import static com.android.internal.util.XmlUtils.writeStringAttribute; @@ -229,6 +231,7 @@ import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.StatLogger; +import com.android.internal.util.XmlUtils; import com.android.server.EventLogTags; import com.android.server.LocalServices; import com.android.server.ServiceThread; @@ -239,6 +242,7 @@ import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener; import libcore.io.IoUtils; import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import java.io.File; @@ -313,7 +317,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final int VERSION_ADDED_NETWORK_ID = 9; private static final int VERSION_SWITCH_UID = 10; private static final int VERSION_ADDED_CYCLE = 11; - private static final int VERSION_LATEST = VERSION_ADDED_CYCLE; + private static final int VERSION_ADDED_NETWORK_TYPES = 12; + private static final int VERSION_LATEST = VERSION_ADDED_NETWORK_TYPES; @VisibleForTesting public static final int TYPE_WARNING = SystemMessage.NOTE_NET_WARNING; @@ -332,6 +337,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final String TAG_WHITELIST = "whitelist"; private static final String TAG_RESTRICT_BACKGROUND = "restrict-background"; private static final String TAG_REVOKED_RESTRICT_BACKGROUND = "revoked-restrict-background"; + private static final String TAG_XML_UTILS_INT_ARRAY = "int-array"; private static final String ATTR_VERSION = "version"; private static final String ATTR_RESTRICT_BACKGROUND = "restrictBackground"; @@ -360,6 +366,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final String ATTR_USAGE_BYTES = "usageBytes"; private static final String ATTR_USAGE_TIME = "usageTime"; private static final String ATTR_OWNER_PACKAGE = "ownerPackage"; + private static final String ATTR_NETWORK_TYPES = "networkTypes"; + private static final String ATTR_XML_UTILS_NAME = "name"; private static final String ACTION_ALLOW_BACKGROUND = "com.android.server.net.action.ALLOW_BACKGROUND"; @@ -2311,13 +2319,25 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } final int subId = readIntAttribute(in, ATTR_SUB_ID); + final String ownerPackage = readStringAttribute(in, ATTR_OWNER_PACKAGE); + + if (version >= VERSION_ADDED_NETWORK_TYPES) { + final int depth = in.getDepth(); + while (XmlUtils.nextElementWithin(in, depth)) { + if (TAG_XML_UTILS_INT_ARRAY.equals(in.getName()) + && ATTR_NETWORK_TYPES.equals( + readStringAttribute(in, ATTR_XML_UTILS_NAME))) { + final int[] networkTypes = + readThisIntArrayXml(in, TAG_XML_UTILS_INT_ARRAY, null); + builder.setNetworkTypes(networkTypes); + } + } + } + final SubscriptionPlan plan = builder.build(); mSubscriptionPlans.put(subId, ArrayUtils.appendElement( SubscriptionPlan.class, mSubscriptionPlans.get(subId), plan)); - - final String ownerPackage = readStringAttribute(in, ATTR_OWNER_PACKAGE); mSubscriptionPlansOwner.put(subId, ownerPackage); - } else if (TAG_UID_POLICY.equals(tag)) { final int uid = readIntAttribute(in, ATTR_UID); final int policy = readIntAttribute(in, ATTR_POLICY); @@ -2513,6 +2533,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { writeIntAttribute(out, ATTR_LIMIT_BEHAVIOR, plan.getDataLimitBehavior()); writeLongAttribute(out, ATTR_USAGE_BYTES, plan.getDataUsageBytes()); writeLongAttribute(out, ATTR_USAGE_TIME, plan.getDataUsageTime()); + try { + writeIntArrayXml(plan.getNetworkTypes(), ATTR_NETWORK_TYPES, out); + } catch (XmlPullParserException ignored) { } out.endTag(null, TAG_SUBSCRIPTION_PLAN); } } @@ -3310,7 +3333,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { // let in core system components (like the Settings app). final String ownerPackage = mSubscriptionPlansOwner.get(subId); if (Objects.equals(ownerPackage, callingPackage) - || (UserHandle.getCallingAppId() == android.os.Process.SYSTEM_UID)) { + || (UserHandle.getCallingAppId() == android.os.Process.SYSTEM_UID) + || (UserHandle.getCallingAppId() == android.os.Process.PHONE_UID)) { return mSubscriptionPlans.get(subId); } else { Log.w(TAG, "Not returning plans because caller " + callingPackage -- cgit v1.2.3