Merge "Send userdata from ES response to slice purchase app" into udc-dev
diff --git a/src/com/android/services/telephony/HoldTracker.java b/src/com/android/services/telephony/HoldTracker.java
index 5032b41..2c6e56c 100644
--- a/src/com/android/services/telephony/HoldTracker.java
+++ b/src/com/android/services/telephony/HoldTracker.java
@@ -16,71 +16,55 @@
package com.android.services.telephony;
-import android.telecom.PhoneAccountHandle;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.HashSet;
+import java.util.Set;
/**
+ * Tracks and updates the hold capability of every call or conference across PhoneAccountHandles.
+ *
* @hide
*/
public class HoldTracker {
- private final Map<PhoneAccountHandle, List<Holdable>> mHoldables;
+ private final Set<Holdable> mHoldables;
public HoldTracker() {
- mHoldables = new HashMap<>();
+ mHoldables = new HashSet<>();
}
/**
- * Adds the holdable associated with the {@code phoneAccountHandle}, this method may update
- * the hold state for all holdable associated with the {@code phoneAccountHandle}.
+ * Adds the holdable, and updates the hold capability for all holdables.
*/
- public void addHoldable(PhoneAccountHandle phoneAccountHandle, Holdable holdable) {
- if (!mHoldables.containsKey(phoneAccountHandle)) {
- mHoldables.put(phoneAccountHandle, new ArrayList<>(1));
- }
- List<Holdable> holdables = mHoldables.get(phoneAccountHandle);
- if (!holdables.contains(holdable)) {
- holdables.add(holdable);
- updateHoldCapability(phoneAccountHandle);
+ public void addHoldable(Holdable holdable) {
+ if (!mHoldables.contains(holdable)) {
+ mHoldables.add(holdable);
+ updateHoldCapability();
}
}
/**
- * Removes the holdable associated with the {@code phoneAccountHandle}, this method may update
- * the hold state for all holdable associated with the {@code phoneAccountHandle}.
+ * Removes the holdable, and updates the hold capability for all holdable.
*/
- public void removeHoldable(PhoneAccountHandle phoneAccountHandle, Holdable holdable) {
- if (!mHoldables.containsKey(phoneAccountHandle)) {
- return;
- }
-
- if (mHoldables.get(phoneAccountHandle).remove(holdable)) {
- updateHoldCapability(phoneAccountHandle);
+ public void removeHoldable(Holdable holdable) {
+ if (mHoldables.remove(holdable)) {
+ updateHoldCapability();
}
}
/**
- * Updates the hold capability for all holdables associated with the {@code phoneAccountHandle}.
+ * Updates the hold capability for all tracked holdables.
*/
- public void updateHoldCapability(PhoneAccountHandle phoneAccountHandle) {
- if (!mHoldables.containsKey(phoneAccountHandle)) {
- return;
- }
-
- List<Holdable> holdables = mHoldables.get(phoneAccountHandle);
+ public void updateHoldCapability() {
int topHoldableCount = 0;
- for (Holdable holdable : holdables) {
+ for (Holdable holdable : mHoldables) {
if (!holdable.isChildHoldable()) {
++topHoldableCount;
}
}
- Log.d(this, "topHoldableCount = " + topHoldableCount);
+ Log.d(this, "updateHoldCapability(): topHoldableCount = "
+ + topHoldableCount);
boolean isHoldable = topHoldableCount < 2;
- for (Holdable holdable : holdables) {
+ for (Holdable holdable : mHoldables) {
holdable.setHoldable(holdable.isChildHoldable() ? false : isHoldable);
}
}
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 02c413e..bf7ce00 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -780,7 +780,7 @@
new TelephonyConferenceBase.TelephonyConferenceListener() {
@Override
public void onConferenceMembershipChanged(Connection connection) {
- mHoldTracker.updateHoldCapability(connection.getPhoneAccountHandle());
+ mHoldTracker.updateHoldCapability();
}
};
@@ -1904,29 +1904,28 @@
@Override
public void onConnectionAdded(Connection connection) {
if (connection instanceof Holdable && !isExternalConnection(connection)) {
- mHoldTracker.addHoldable(
- connection.getPhoneAccountHandle(), (Holdable) connection);
+ mHoldTracker.addHoldable((Holdable) connection);
}
}
@Override
public void onConnectionRemoved(Connection connection) {
if (connection instanceof Holdable && !isExternalConnection(connection)) {
- mHoldTracker.removeHoldable(connection.getPhoneAccountHandle(), (Holdable) connection);
+ mHoldTracker.removeHoldable((Holdable) connection);
}
}
@Override
public void onConferenceAdded(Conference conference) {
if (conference instanceof Holdable) {
- mHoldTracker.addHoldable(conference.getPhoneAccountHandle(), (Holdable) conference);
+ mHoldTracker.addHoldable((Holdable) conference);
}
}
@Override
public void onConferenceRemoved(Conference conference) {
if (conference instanceof Holdable) {
- mHoldTracker.removeHoldable(conference.getPhoneAccountHandle(), (Holdable) conference);
+ mHoldTracker.removeHoldable((Holdable) conference);
}
}
diff --git a/tests/src/com/android/services/telephony/HoldTrackerTest.java b/tests/src/com/android/services/telephony/HoldTrackerTest.java
index 772a1a2..83195db 100644
--- a/tests/src/com/android/services/telephony/HoldTrackerTest.java
+++ b/tests/src/com/android/services/telephony/HoldTrackerTest.java
@@ -19,9 +19,6 @@
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
-import android.content.ComponentName;
-import android.telecom.PhoneAccountHandle;
-
import androidx.test.runner.AndroidJUnit4;
import org.junit.Before;
@@ -32,72 +29,53 @@
public class HoldTrackerTest {
private HoldTracker mHoldTrackerUT;
- private PhoneAccountHandle mPhoneAccountHandle1;
- private PhoneAccountHandle mPhoneAccountHandle2;
@Before
public void setUp() throws Exception {
mHoldTrackerUT = new HoldTracker();
- mPhoneAccountHandle1 =
- new PhoneAccountHandle(new ComponentName("pkg1", "cls1"), "0");
- mPhoneAccountHandle2 =
- new PhoneAccountHandle(new ComponentName("pkg2", "cls2"), "1");
}
@Test
public void oneTopHoldableCanBeHeld() {
FakeHoldable topHoldable = createHoldable(false);
- mHoldTrackerUT.addHoldable(mPhoneAccountHandle1, topHoldable);
+ mHoldTrackerUT.addHoldable(topHoldable);
assertTrue(topHoldable.canBeHeld());
}
@Test
- public void childHoldableCanNotBeHeld() {
+ public void childHoldableCannotBeHeld() {
FakeHoldable topHoldable = createHoldable(false);
FakeHoldable childHoldable = createHoldable(true);
- mHoldTrackerUT.addHoldable(mPhoneAccountHandle1, topHoldable);
- mHoldTrackerUT.addHoldable(mPhoneAccountHandle1, childHoldable);
+ mHoldTrackerUT.addHoldable(topHoldable);
+ mHoldTrackerUT.addHoldable(childHoldable);
assertTrue(topHoldable.canBeHeld());
assertFalse(childHoldable.canBeHeld());
}
@Test
- public void twoTopHoldableWithTheSamePhoneAccountCanNotBeHeld() {
+ public void twoTopHoldablesCannotBeHeld() {
FakeHoldable topHoldable1 = createHoldable(false);
FakeHoldable topHoldable2 = createHoldable(false);
- mHoldTrackerUT.addHoldable(mPhoneAccountHandle1, topHoldable1);
- mHoldTrackerUT.addHoldable(mPhoneAccountHandle1, topHoldable2);
+ mHoldTrackerUT.addHoldable(topHoldable1);
+ mHoldTrackerUT.addHoldable(topHoldable2);
- mHoldTrackerUT.updateHoldCapability(mPhoneAccountHandle1);
+ mHoldTrackerUT.updateHoldCapability();
assertFalse(topHoldable1.canBeHeld());
assertFalse(topHoldable2.canBeHeld());
}
@Test
- public void holdableWithDifferentPhoneAccountDoesNotAffectEachOther() {
- FakeHoldable topHoldable1 = createHoldable(false);
- FakeHoldable topHoldable2 = createHoldable(false);
- mHoldTrackerUT.addHoldable(mPhoneAccountHandle1, topHoldable1);
- mHoldTrackerUT.addHoldable(mPhoneAccountHandle2, topHoldable2);
-
- // Both phones account have only one top holdable, so the holdable of each phone account can
- // be held.
- assertTrue(topHoldable1.canBeHeld());
- assertTrue(topHoldable2.canBeHeld());
- }
-
- @Test
public void removeOneTopHoldableAndUpdateHoldCapabilityCorrectly() {
FakeHoldable topHoldable1 = createHoldable(false);
FakeHoldable topHoldable2 = createHoldable(false);
- mHoldTrackerUT.addHoldable(mPhoneAccountHandle1, topHoldable1);
- mHoldTrackerUT.addHoldable(mPhoneAccountHandle1, topHoldable2);
+ mHoldTrackerUT.addHoldable(topHoldable1);
+ mHoldTrackerUT.addHoldable(topHoldable2);
assertFalse(topHoldable1.canBeHeld());
assertFalse(topHoldable2.canBeHeld());
- mHoldTrackerUT.removeHoldable(mPhoneAccountHandle1, topHoldable1);
+ mHoldTrackerUT.removeHoldable(topHoldable1);
assertTrue(topHoldable2.canBeHeld());
}