Loading flags/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ aconfig_declarations { "telecom_incallservice_flags.aconfig", "telecom_default_phone_account_flags.aconfig", "telecom_callaudioroutestatemachine_flags.aconfig", "telecom_calllog_flags.aconfig", "telecom_resolve_hidden_dependencies.aconfig" ], } Loading flags/telecom_calllog_flags.aconfig 0 → 100644 +8 −0 Original line number Diff line number Diff line package: "com.android.server.telecom.flags" flag { name: "telecom_log_external_wearable_calls" namespace: "telecom" description: "log external call if current device is a wearable one" bug: "292600751" } No newline at end of file src/com/android/server/telecom/CallLogManager.java +12 −4 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.annotation.Nullable; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.location.Country; import android.location.CountryDetector; Loading @@ -50,6 +51,7 @@ import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; import com.android.server.telecom.callfiltering.CallFilteringResult; import com.android.server.telecom.flags.FeatureFlags; import java.util.Arrays; import java.util.Locale; Loading Loading @@ -117,8 +119,11 @@ public final class CallLogManager extends CallsManagerListenerBase { private Object mLock; private String mCurrentCountryIso; private final FeatureFlags mFeatureFlags; public CallLogManager(Context context, PhoneAccountRegistrar phoneAccountRegistrar, MissedCallNotifier missedCallNotifier, AnomalyReporterAdapter anomalyReporterAdapter) { MissedCallNotifier missedCallNotifier, AnomalyReporterAdapter anomalyReporterAdapter, FeatureFlags featureFlags) { mContext = context; mCarrierConfigManager = (CarrierConfigManager) mContext .getSystemService(Context.CARRIER_CONFIG_SERVICE); Loading @@ -126,6 +131,7 @@ public final class CallLogManager extends CallsManagerListenerBase { mMissedCallNotifier = missedCallNotifier; mAnomalyReporterAdapter = anomalyReporterAdapter; mLock = new Object(); mFeatureFlags = featureFlags; } @Override Loading Loading @@ -166,7 +172,7 @@ public final class CallLogManager extends CallsManagerListenerBase { * Call is NOT a child call from a conference which was remotely hosted. * Call is NOT simulating a single party conference. * Call was NOT explicitly canceled, except for disconnecting from a conference. * Call is NOT an external call * Call is NOT an external call or an external call on watch. * Call is NOT disconnected because of merging into a conference. * Call is NOT a self-managed call OR call is a self-managed call which has indicated it * should be logged in its PhoneAccount Loading Loading @@ -215,8 +221,10 @@ public final class CallLogManager extends CallsManagerListenerBase { & Connection.CAPABILITY_DISCONNECT_FROM_CONFERENCE) == Connection.CAPABILITY_DISCONNECT_FROM_CONFERENCE; } // An external call if (call.isExternalCall()) { // An external and non-watch call if (call.isExternalCall() && (!mContext.getPackageManager().hasSystemFeature( PackageManager.FEATURE_WATCH) || !mFeatureFlags.telecomLogExternalWearableCalls())) { return false; } Loading src/com/android/server/telecom/CallsManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -665,7 +665,7 @@ public class CallsManager extends Call.ListenerBase mProximitySensorManager = proximitySensorManagerFactory.create(context, this); mPhoneStateBroadcaster = new PhoneStateBroadcaster(this); mCallLogManager = new CallLogManager(context, phoneAccountRegistrar, mMissedCallNotifier, mAnomalyReporter); mAnomalyReporter, featureFlags); mConnectionServiceRepository = new ConnectionServiceRepository(mPhoneAccountRegistrar, mContext, mLock, this); mInCallWakeLockController = inCallWakeLockControllerFactory.create(context, this); Loading tests/src/com/android/server/telecom/tests/CallLogManagerTest.java +37 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.content.res.Resources; import android.location.Country; Loading Loading @@ -73,6 +74,7 @@ import com.android.server.telecom.HandoverState; import com.android.server.telecom.MissedCallNotifier; import com.android.server.telecom.PhoneAccountRegistrar; import com.android.server.telecom.TelephonyUtil; import com.android.server.telecom.flags.FeatureFlags; import org.junit.After; import org.junit.Before; Loading Loading @@ -127,13 +129,16 @@ public class CallLogManagerTest extends TelecomTestCase { @Mock AnomalyReporterAdapter mAnomalyReporterAdapter; @Mock FeatureFlags mFeatureFlags; @Override @Before public void setUp() throws Exception { super.setUp(); mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); mCallLogManager = new CallLogManager(mContext, mMockPhoneAccountRegistrar, mMissedCallNotifier, mAnomalyReporterAdapter); mMissedCallNotifier, mAnomalyReporterAdapter, mFeatureFlags); mDefaultAccountHandle = new PhoneAccountHandle( new ComponentName("com.android.server.telecom.tests", "CallLogManagerTest"), TEST_PHONE_ACCOUNT_ID, Loading Loading @@ -184,6 +189,9 @@ public class CallLogManagerTest extends TelecomTestCase { when(userManager.getUserInfo(eq(CURRENT_USER_ID))).thenReturn(userInfo); when(userManager.getUserInfo(eq(OTHER_USER_ID))).thenReturn(otherUserInfo); when(userManager.getUserInfo(eq(MANAGED_USER_ID))).thenReturn(managedProfileUserInfo); PackageManager packageManager = mContext.getPackageManager(); when(packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH)).thenReturn(false); when(mFeatureFlags.telecomLogExternalWearableCalls()).thenReturn(false); } @Override Loading Loading @@ -791,6 +799,34 @@ public class CallLogManagerTest extends TelecomTestCase { assertEquals(1, insertedValues.getAsInteger(Calls.IS_READ).intValue()); } @Test public void testLogCallWhenExternalCallOnWatch() { when(mMockPhoneAccountRegistrar.getPhoneAccountUnchecked(any(PhoneAccountHandle.class))) .thenReturn(makeFakePhoneAccount(mDefaultAccountHandle, CURRENT_USER_ID)); PackageManager packageManager = mContext.getPackageManager(); when(packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH)).thenReturn(true); when(mFeatureFlags.telecomLogExternalWearableCalls()).thenReturn(true); Call fakeMissedCall = makeFakeCall( DisconnectCause.REJECTED, // disconnectCauseCode false, // isConference true, // isIncoming 1L, // creationTimeMillis 1000L, // ageMillis TEL_PHONEHANDLE, // callHandle mDefaultAccountHandle, // phoneAccountHandle NO_VIDEO_STATE, // callVideoState POST_DIAL_STRING, // postDialDigits VIA_NUMBER_STRING, // viaNumber null ); when(fakeMissedCall.isExternalCall()).thenReturn(true); mCallLogManager.onCallStateChanged(fakeMissedCall, CallState.ACTIVE, CallState.DISCONNECTED); verifyInsertionWithCapture(CURRENT_USER_ID); } @SmallTest @Test public void testCountryIso_setCache() { Loading Loading
flags/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ aconfig_declarations { "telecom_incallservice_flags.aconfig", "telecom_default_phone_account_flags.aconfig", "telecom_callaudioroutestatemachine_flags.aconfig", "telecom_calllog_flags.aconfig", "telecom_resolve_hidden_dependencies.aconfig" ], } Loading
flags/telecom_calllog_flags.aconfig 0 → 100644 +8 −0 Original line number Diff line number Diff line package: "com.android.server.telecom.flags" flag { name: "telecom_log_external_wearable_calls" namespace: "telecom" description: "log external call if current device is a wearable one" bug: "292600751" } No newline at end of file
src/com/android/server/telecom/CallLogManager.java +12 −4 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.annotation.Nullable; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.location.Country; import android.location.CountryDetector; Loading @@ -50,6 +51,7 @@ import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; import com.android.server.telecom.callfiltering.CallFilteringResult; import com.android.server.telecom.flags.FeatureFlags; import java.util.Arrays; import java.util.Locale; Loading Loading @@ -117,8 +119,11 @@ public final class CallLogManager extends CallsManagerListenerBase { private Object mLock; private String mCurrentCountryIso; private final FeatureFlags mFeatureFlags; public CallLogManager(Context context, PhoneAccountRegistrar phoneAccountRegistrar, MissedCallNotifier missedCallNotifier, AnomalyReporterAdapter anomalyReporterAdapter) { MissedCallNotifier missedCallNotifier, AnomalyReporterAdapter anomalyReporterAdapter, FeatureFlags featureFlags) { mContext = context; mCarrierConfigManager = (CarrierConfigManager) mContext .getSystemService(Context.CARRIER_CONFIG_SERVICE); Loading @@ -126,6 +131,7 @@ public final class CallLogManager extends CallsManagerListenerBase { mMissedCallNotifier = missedCallNotifier; mAnomalyReporterAdapter = anomalyReporterAdapter; mLock = new Object(); mFeatureFlags = featureFlags; } @Override Loading Loading @@ -166,7 +172,7 @@ public final class CallLogManager extends CallsManagerListenerBase { * Call is NOT a child call from a conference which was remotely hosted. * Call is NOT simulating a single party conference. * Call was NOT explicitly canceled, except for disconnecting from a conference. * Call is NOT an external call * Call is NOT an external call or an external call on watch. * Call is NOT disconnected because of merging into a conference. * Call is NOT a self-managed call OR call is a self-managed call which has indicated it * should be logged in its PhoneAccount Loading Loading @@ -215,8 +221,10 @@ public final class CallLogManager extends CallsManagerListenerBase { & Connection.CAPABILITY_DISCONNECT_FROM_CONFERENCE) == Connection.CAPABILITY_DISCONNECT_FROM_CONFERENCE; } // An external call if (call.isExternalCall()) { // An external and non-watch call if (call.isExternalCall() && (!mContext.getPackageManager().hasSystemFeature( PackageManager.FEATURE_WATCH) || !mFeatureFlags.telecomLogExternalWearableCalls())) { return false; } Loading
src/com/android/server/telecom/CallsManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -665,7 +665,7 @@ public class CallsManager extends Call.ListenerBase mProximitySensorManager = proximitySensorManagerFactory.create(context, this); mPhoneStateBroadcaster = new PhoneStateBroadcaster(this); mCallLogManager = new CallLogManager(context, phoneAccountRegistrar, mMissedCallNotifier, mAnomalyReporter); mAnomalyReporter, featureFlags); mConnectionServiceRepository = new ConnectionServiceRepository(mPhoneAccountRegistrar, mContext, mLock, this); mInCallWakeLockController = inCallWakeLockControllerFactory.create(context, this); Loading
tests/src/com/android/server/telecom/tests/CallLogManagerTest.java +37 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.content.res.Resources; import android.location.Country; Loading Loading @@ -73,6 +74,7 @@ import com.android.server.telecom.HandoverState; import com.android.server.telecom.MissedCallNotifier; import com.android.server.telecom.PhoneAccountRegistrar; import com.android.server.telecom.TelephonyUtil; import com.android.server.telecom.flags.FeatureFlags; import org.junit.After; import org.junit.Before; Loading Loading @@ -127,13 +129,16 @@ public class CallLogManagerTest extends TelecomTestCase { @Mock AnomalyReporterAdapter mAnomalyReporterAdapter; @Mock FeatureFlags mFeatureFlags; @Override @Before public void setUp() throws Exception { super.setUp(); mContext = mComponentContextFixture.getTestDouble().getApplicationContext(); mCallLogManager = new CallLogManager(mContext, mMockPhoneAccountRegistrar, mMissedCallNotifier, mAnomalyReporterAdapter); mMissedCallNotifier, mAnomalyReporterAdapter, mFeatureFlags); mDefaultAccountHandle = new PhoneAccountHandle( new ComponentName("com.android.server.telecom.tests", "CallLogManagerTest"), TEST_PHONE_ACCOUNT_ID, Loading Loading @@ -184,6 +189,9 @@ public class CallLogManagerTest extends TelecomTestCase { when(userManager.getUserInfo(eq(CURRENT_USER_ID))).thenReturn(userInfo); when(userManager.getUserInfo(eq(OTHER_USER_ID))).thenReturn(otherUserInfo); when(userManager.getUserInfo(eq(MANAGED_USER_ID))).thenReturn(managedProfileUserInfo); PackageManager packageManager = mContext.getPackageManager(); when(packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH)).thenReturn(false); when(mFeatureFlags.telecomLogExternalWearableCalls()).thenReturn(false); } @Override Loading Loading @@ -791,6 +799,34 @@ public class CallLogManagerTest extends TelecomTestCase { assertEquals(1, insertedValues.getAsInteger(Calls.IS_READ).intValue()); } @Test public void testLogCallWhenExternalCallOnWatch() { when(mMockPhoneAccountRegistrar.getPhoneAccountUnchecked(any(PhoneAccountHandle.class))) .thenReturn(makeFakePhoneAccount(mDefaultAccountHandle, CURRENT_USER_ID)); PackageManager packageManager = mContext.getPackageManager(); when(packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH)).thenReturn(true); when(mFeatureFlags.telecomLogExternalWearableCalls()).thenReturn(true); Call fakeMissedCall = makeFakeCall( DisconnectCause.REJECTED, // disconnectCauseCode false, // isConference true, // isIncoming 1L, // creationTimeMillis 1000L, // ageMillis TEL_PHONEHANDLE, // callHandle mDefaultAccountHandle, // phoneAccountHandle NO_VIDEO_STATE, // callVideoState POST_DIAL_STRING, // postDialDigits VIA_NUMBER_STRING, // viaNumber null ); when(fakeMissedCall.isExternalCall()).thenReturn(true); mCallLogManager.onCallStateChanged(fakeMissedCall, CallState.ACTIVE, CallState.DISCONNECTED); verifyInsertionWithCapture(CURRENT_USER_ID); } @SmallTest @Test public void testCountryIso_setCache() { Loading