Merge "Remove Lollipop support for InCallUI" into nyc-dev am: fd70e58784
am: b64b56dd45

* commit 'b64b56dd457d5f3bd32f4933808eb3f4629e0e83':
  Remove Lollipop support for InCallUI
diff --git a/Android.mk b/Android.mk
index 4c67293..eb6cbdc 100644
--- a/Android.mk
+++ b/Android.mk
@@ -64,9 +64,7 @@
 
 LOCAL_PROGUARD_FLAG_FILES := proguard.flags $(incallui_dir)/proguard.flags
 
-# Uncomment the following line to build against the current SDK
-# This is required for building an unbundled app.
-LOCAL_SDK_VERSION := system_current
+LOCAL_SDK_VERSION := current
 
 include $(BUILD_PACKAGE)
 
diff --git a/InCallUI/src/com/android/incallui/Call.java b/InCallUI/src/com/android/incallui/Call.java
index aec806f..54ec528 100644
--- a/InCallUI/src/com/android/incallui/Call.java
+++ b/InCallUI/src/com/android/incallui/Call.java
@@ -19,9 +19,9 @@
 import android.content.Context;
 import android.hardware.camera2.CameraCharacteristics;
 import android.net.Uri;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.Trace;
+import android.telecom.Call.Details;
 import android.telecom.Connection;
 import android.telecom.DisconnectCause;
 import android.telecom.GatewayInfo;
@@ -37,8 +37,6 @@
 import com.android.contacts.common.compat.telecom.TelecomManagerCompat;
 import com.android.contacts.common.testing.NeededForTesting;
 import com.android.dialer.util.IntentUtil;
-import com.android.incallui.compat.telecom.DetailsCompat;
-import com.android.incallui.compat.telecom.VideoProfileCompat;
 import com.android.incallui.util.TelecomCallUtil;
 
 import java.util.ArrayList;
@@ -291,18 +289,8 @@
     private static final String ID_PREFIX = Call.class.getSimpleName() + "_";
     private static int sIdCounter = 0;
 
-    private Object mTelecomCallCallback = newTelecomCallCallback();
-
-    private Object newTelecomCallCallback() {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            return newMarshmallowTelecomCallCallback();
-        }
-        return newLollipopTelecomCallCallback();
-    }
-
-    private Object newMarshmallowTelecomCallCallback() {
-        Log.i(this, "Using an android.telecom.Call$Callback");
-        return new android.telecom.Call.Callback() {
+    private final android.telecom.Call.Callback mTelecomCallCallback =
+        new android.telecom.Call.Callback() {
             @Override
             public void onStateChanged(android.telecom.Call call, int newState) {
                 Log.d(this, "TelecomCallCallback onStateChanged call=" + call + " newState="
@@ -367,81 +355,7 @@
                     List<android.telecom.Call> conferenceableCalls) {
                 update();
             }
-        };
-    }
-
-    private Object newLollipopTelecomCallCallback() {
-        // This code only runs for Google Experience phones on the pre-M sdk since only the system
-        // dialer can invoke the InCallUI code. This allows us to safely use the
-        // android.telecom.Call.Listener interface
-        Log.i(this, "Using an android.telecom.Call$Listener");
-        return new android.telecom.Call.Listener() {
-            @Override
-            public void onStateChanged(android.telecom.Call call, int newState) {
-                Log.d(this, "TelecomCallCallback onStateChanged call=" + call + " newState="
-                        + newState);
-                update();
-            }
-
-            @Override
-            public void onParentChanged(android.telecom.Call call,
-                    android.telecom.Call newParent) {
-                Log.d(this, "TelecomCallCallback onParentChanged call=" + call + " newParent="
-                        + newParent);
-                update();
-            }
-
-            @Override
-            public void onChildrenChanged(android.telecom.Call call,
-                    List<android.telecom.Call> children) {
-                update();
-            }
-
-            @Override
-            public void onDetailsChanged(android.telecom.Call call,
-                    android.telecom.Call.Details details) {
-                Log.d(this, "TelecomCallCallback onStateChanged call=" + call + " details="
-                        + details);
-                update();
-            }
-
-            @Override
-            public void onCannedTextResponsesLoaded(android.telecom.Call call,
-                    List<String> cannedTextResponses) {
-                Log.d(this, "TelecomCallCallback onStateChanged call=" + call
-                        + " cannedTextResponses=" + cannedTextResponses);
-                update();
-            }
-
-            @Override
-            public void onPostDialWait(android.telecom.Call call,
-                    String remainingPostDialSequence) {
-                Log.d(this, "TelecomCallCallback onStateChanged call=" + call
-                        + " remainingPostDialSequence=" + remainingPostDialSequence);
-                update();
-            }
-
-            @Override
-            public void onVideoCallChanged(android.telecom.Call call,
-                    VideoCall videoCall) {
-                Log.d(this, "TelecomCallCallback onStateChanged call=" + call + " videoCall="
-                        + videoCall);
-                update();
-            }
-
-            @Override
-            public void onCallDestroyed(android.telecom.Call call) {
-                Log.d(this, "TelecomCallCallback onStateChanged call=" + call);
-                call.removeListener(this);
-            }
-
-            @Override
-            public void onConferenceableCallsChanged(android.telecom.Call call,
-                    List<android.telecom.Call> conferenceableCalls) {
-                update();
-            }
-        };
-    }
+    };
 
     private android.telecom.Call mTelecomCall;
     private boolean mIsEmergencyCall;
@@ -491,11 +405,7 @@
 
         updateFromTelecomCall();
 
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            mTelecomCall.registerCallback((android.telecom.Call.Callback) mTelecomCallCallback);
-        } else {
-            mTelecomCall.addListener((android.telecom.Call.Listener) mTelecomCallCallback);
-        }
+        mTelecomCall.registerCallback(mTelecomCallCallback);
 
         mTimeAddedMs = System.currentTimeMillis();
     }
@@ -750,7 +660,7 @@
     }
 
     public Bundle getIntentExtras() {
-        return DetailsCompat.getIntentExtras(mTelecomCall.getDetails());
+        return mTelecomCall.getDetails().getIntentExtras();
     }
 
     public Bundle getExtras() {
@@ -824,7 +734,7 @@
     }
 
     public boolean hasProperty(int property) {
-        return DetailsCompat.hasProperty(mTelecomCall.getDetails(), property);
+        return mTelecomCall.getDetails().hasProperty(property);
     }
 
     /** Gets the time when the call first became active. */
@@ -989,11 +899,11 @@
                 "videoState:%s, mSessionModificationState:%d, VideoSettings:%s]",
                 mId,
                 State.toString(getState()),
-                DetailsCompat.capabilitiesToString(mTelecomCall.getDetails().getCallCapabilities()),
+                Details.capabilitiesToString(mTelecomCall.getDetails().getCallCapabilities()),
                 mChildCallIds,
                 getParentId(),
                 this.mTelecomCall.getConferenceableCalls(),
-                VideoProfileCompat.videoStateToString(mTelecomCall.getDetails().getVideoState()),
+                VideoProfile.videoStateToString(mTelecomCall.getDetails().getVideoState()),
                 mSessionModificationState,
                 getVideoSettings());
     }
diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
index dde6295..fd0dd76 100644
--- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
@@ -380,7 +380,7 @@
                 && call.can(android.telecom.Call.Details.CAPABILITY_HOLD);
         final boolean isCallOnHold = call.getState() == Call.State.ONHOLD;
 
-        final boolean showAddCall = TelecomAdapter.getInstance().canAddCall(call)
+        final boolean showAddCall = TelecomAdapter.getInstance().canAddCall()
                 && UserManagerCompat.isUserUnlocked(ui.getContext());
         final boolean showMerge = call.can(
                 android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE);
diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index 518e7d2..9dd0893 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -53,7 +53,6 @@
 import com.android.incallui.InCallPresenter.InCallState;
 import com.android.incallui.InCallPresenter.InCallStateListener;
 import com.android.incallui.InCallPresenter.IncomingCallListener;
-import com.android.incallui.compat.telecom.DetailsCompat;
 import com.android.incalluibind.ObjectFactory;
 
 import java.lang.ref.WeakReference;
@@ -343,7 +342,7 @@
         updatePrimaryCallState();
 
         if (call.can(Details.CAPABILITY_MANAGE_CONFERENCE) !=
-                DetailsCompat.can(details, Details.CAPABILITY_MANAGE_CONFERENCE)) {
+                details.can(Details.CAPABILITY_MANAGE_CONFERENCE)) {
             maybeShowManageConferenceCallButton();
         }
     }
@@ -1120,8 +1119,8 @@
     }
 
     private static boolean hasCallSubject(Call call) {
-        return !TextUtils.isEmpty(DetailsCompat.getIntentExtras(
-                call.getTelecomCall().getDetails()).getString(TelecomManager.EXTRA_CALL_SUBJECT));
+        return !TextUtils.isEmpty(call.getTelecomCall().getDetails().getIntentExtras()
+                .getString(TelecomManager.EXTRA_CALL_SUBJECT));
     }
 
     public interface CallCardUi extends Ui {
diff --git a/InCallUI/src/com/android/incallui/ConferenceParticipantListAdapter.java b/InCallUI/src/com/android/incallui/ConferenceParticipantListAdapter.java
index 86002b0..9d7069d 100644
--- a/InCallUI/src/com/android/incallui/ConferenceParticipantListAdapter.java
+++ b/InCallUI/src/com/android/incallui/ConferenceParticipantListAdapter.java
@@ -38,7 +38,6 @@
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.common.util.ContactDisplayUtils;
 import com.android.incallui.ContactInfoCache.ContactCacheEntry;
-import com.android.incallui.compat.telecom.DetailsCompat;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -356,10 +355,9 @@
                     new ContactLookupCallback(this));
         }
 
-        boolean thisRowCanSeparate = mParentCanSeparate && DetailsCompat.can(
-                call.getTelecomCall().getDetails(),
+        boolean thisRowCanSeparate = mParentCanSeparate && call.getTelecomCall().getDetails().can(
                 android.telecom.Call.Details.CAPABILITY_SEPARATE_FROM_CONFERENCE);
-        boolean thisRowCanDisconnect = DetailsCompat.can(call.getTelecomCall().getDetails(),
+        boolean thisRowCanDisconnect = call.getTelecomCall().getDetails().can(
                 android.telecom.Call.Details.CAPABILITY_DISCONNECT_FROM_CONFERENCE);
 
         setCallerInfoForRow(result, contactCache.namePrimary,
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 73155a4..dec1323 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -58,7 +58,6 @@
 import com.android.dialer.logging.Logger;
 import com.android.dialer.logging.ScreenEvent;
 import com.android.incallui.Call.State;
-import com.android.incallui.compat.telecom.DetailsCompat;
 import com.android.incallui.util.AccessibilityUtil;
 import com.android.phone.common.animation.AnimUtils;
 import com.android.phone.common.animation.AnimationListenerAdapter;
@@ -573,7 +572,7 @@
 
                 Bundle extras = null;
                 if (call != null) {
-                    extras = DetailsCompat.getIntentExtras(call.getTelecomCall().getDetails());
+                    extras = call.getTelecomCall().getDetails().getIntentExtras();
                 }
                 if (extras == null) {
                     // Initialize the extras bundle to avoid NPE
@@ -610,8 +609,8 @@
             Call pendingAccountSelectionCall = CallList.getInstance().getWaitingForAccountCall();
             if (pendingAccountSelectionCall != null) {
                 showCallCardFragment(false);
-                Bundle extras = DetailsCompat.getIntentExtras(pendingAccountSelectionCall
-                        .getTelecomCall().getDetails());
+                Bundle extras =
+                        pendingAccountSelectionCall.getTelecomCall().getDetails().getIntentExtras();
 
                 final List<PhoneAccountHandle> phoneAccountHandles;
                 if (extras != null) {
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index c51a561..249071f 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -25,7 +25,6 @@
 import android.content.res.Resources;
 import android.database.ContentObserver;
 import android.graphics.Point;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.provider.CallLog;
@@ -56,7 +55,6 @@
 import com.android.dialer.logging.InteractionEvent;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.util.TelecomUtil;
-import com.android.incallui.compat.telecom.DetailsCompat;
 import com.android.incallui.util.TelecomCallUtil;
 import com.android.incalluibind.ObjectFactory;
 
@@ -139,89 +137,38 @@
      */
     private boolean mIsFullScreen = false;
 
-    private final Object mCallCallback = newTelecomCallCallback();
-
-    private Object newTelecomCallCallback() {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            return newMarshmallowTelecomCallCallback();
+    private final android.telecom.Call.Callback mCallCallback = new android.telecom.Call.Callback() {
+        @Override
+        public void onPostDialWait(android.telecom.Call telecomCall,
+                String remainingPostDialSequence) {
+            final Call call = mCallList.getCallByTelecomCall(telecomCall);
+            if (call == null) {
+                Log.w(this, "Call not found in call list: " + telecomCall);
+                return;
+            }
+            onPostDialCharWait(call.getId(), remainingPostDialSequence);
         }
-        return newLollipopTelecomCallCallback();
-    }
 
-    private Object newMarshmallowTelecomCallCallback() {
-        Log.i(this, "Using android.telecom.Call.Callback");
-        return new android.telecom.Call.Callback() {
-            @Override
-            public void onPostDialWait(android.telecom.Call telecomCall,
-                    String remainingPostDialSequence) {
-                final Call call = mCallList.getCallByTelecomCall(telecomCall);
-                if (call == null) {
-                    Log.w(this, "Call not found in call list: " + telecomCall);
-                    return;
-                }
-                onPostDialCharWait(call.getId(), remainingPostDialSequence);
+        @Override
+        public void onDetailsChanged(android.telecom.Call telecomCall,
+                android.telecom.Call.Details details) {
+            final Call call = mCallList.getCallByTelecomCall(telecomCall);
+            if (call == null) {
+                Log.w(this, "Call not found in call list: " + telecomCall);
+                return;
             }
+            for (InCallDetailsListener listener : mDetailsListeners) {
+                listener.onDetailsChanged(call, details);
+            }
+        }
 
-            @Override
-            public void onDetailsChanged(android.telecom.Call telecomCall,
-                    android.telecom.Call.Details details) {
-                final Call call = mCallList.getCallByTelecomCall(telecomCall);
-                if (call == null) {
-                    Log.w(this, "Call not found in call list: " + telecomCall);
-                    return;
-                }
-                for (InCallDetailsListener listener : mDetailsListeners) {
-                    listener.onDetailsChanged(call, details);
-                }
-            }
-
-            @Override
-            public void onConferenceableCallsChanged(android.telecom.Call telecomCall,
-                    List<android.telecom.Call> conferenceableCalls) {
-                Log.i(this, "onConferenceableCallsChanged: " + telecomCall);
-                onDetailsChanged(telecomCall, telecomCall.getDetails());
-            }
-        };
-    }
-
-    private Object newLollipopTelecomCallCallback() {
-        // This code only runs for Google Experience phones on the pre-M sdk since only the system
-        // dialer can invoke the InCallUI code. This allows us to safely use the
-        // android.telecom.Call.Listener interface
-        Log.i(this, "Using android.telecom.Call.Listener");
-        return new android.telecom.Call.Listener() {
-            @Override
-            public void onPostDialWait(android.telecom.Call telecomCall,
-                    String remainingPostDialSequence) {
-                final Call call = mCallList.getCallByTelecomCall(telecomCall);
-                if (call == null) {
-                    Log.w(this, "Call not found in call list: " + telecomCall);
-                    return;
-                }
-                onPostDialCharWait(call.getId(), remainingPostDialSequence);
-            }
-
-            @Override
-            public void onDetailsChanged(android.telecom.Call telecomCall,
-                    android.telecom.Call.Details details) {
-                final Call call = mCallList.getCallByTelecomCall(telecomCall);
-                if (call == null) {
-                    Log.w(this, "Call not found in call list: " + telecomCall);
-                    return;
-                }
-                for (InCallDetailsListener listener : mDetailsListeners) {
-                    listener.onDetailsChanged(call, details);
-                }
-            }
-
-            @Override
-            public void onConferenceableCallsChanged(android.telecom.Call telecomCall,
-                    List<android.telecom.Call> conferenceableCalls) {
-                Log.i(this, "onConferenceableCallsChanged: " + telecomCall);
-                onDetailsChanged(telecomCall, telecomCall.getDetails());
-            }
-        };
-    }
+        @Override
+        public void onConferenceableCallsChanged(android.telecom.Call telecomCall,
+                List<android.telecom.Call> conferenceableCalls) {
+            Log.i(this, "onConferenceableCallsChanged: " + telecomCall);
+            onDetailsChanged(telecomCall, telecomCall.getDetails());
+        }
+    };
 
     private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
         public void onCallStateChanged(int state, String incomingNumber) {
@@ -559,11 +506,7 @@
 
         // Since a call has been added we are no longer waiting for Telecom to send us a call.
         setBoundAndWaitingForOutgoingCall(false, null);
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            call.registerCallback((android.telecom.Call.Callback) mCallCallback);
-        } else {
-            call.addListener((android.telecom.Call.Listener) mCallCallback);
-        }
+        call.registerCallback(mCallCallback);
     }
 
     /**
@@ -632,11 +575,7 @@
 
     public void onCallRemoved(android.telecom.Call call) {
         mCallList.onCallRemoved(call);
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            call.unregisterCallback((android.telecom.Call.Callback) mCallCallback);
-        } else {
-            call.removeListener((android.telecom.Call.Listener) mCallCallback);
-        }
+        call.unregisterCallback(mCallCallback);
     }
 
     public void onCanAddCallChanged(boolean canAddCall) {
@@ -1470,7 +1409,7 @@
     private void setDisconnectCauseForMissingAccounts(Call call) {
         android.telecom.Call telecomCall = call.getTelecomCall();
 
-        Bundle extras = DetailsCompat.getIntentExtras(telecomCall.getDetails());
+        Bundle extras = telecomCall.getDetails().getIntentExtras();
         // Initialize the extras bundle to avoid NPE
         if (extras == null) {
             extras = new Bundle();
diff --git a/InCallUI/src/com/android/incallui/InCallServiceImpl.java b/InCallUI/src/com/android/incallui/InCallServiceImpl.java
index 31d6efb..8693697 100644
--- a/InCallUI/src/com/android/incallui/InCallServiceImpl.java
+++ b/InCallUI/src/com/android/incallui/InCallServiceImpl.java
@@ -18,15 +18,10 @@
 
 import android.content.Context;
 import android.content.Intent;
-import android.os.Build;
 import android.os.IBinder;
-import android.telecom.AudioState;
 import android.telecom.Call;
 import android.telecom.CallAudioState;
 import android.telecom.InCallService;
-import android.telecom.Phone;
-
-import com.android.contacts.common.compat.SdkVersionOverride;
 
 /**
  * Used to receive updates about calls from the Telecom component.  This service is bound to
@@ -100,85 +95,4 @@
         TelecomAdapter.getInstance().clearInCallService();
         InCallPresenter.getInstance().tearDown();
     }
-
-    /*
-     * Compatibility code for devices running the L sdk. In that version of the sdk, InCallService
-     * callbacks were registered via a android.telecom.Phone$Listener. These callbacks typically
-     * correspond 1:1 to callbacks now found in android.telecom.InCallService so the compatibility
-     * code forwards to those methods.
-     */
-    private Phone.Listener mPhoneListener = new Phone.Listener() {
-        @Override
-        public void onAudioStateChanged(Phone phone, AudioState audioState) {
-            /*
-             * Need to use reflection here; in M these are private fields retrieved through getters,
-             * but in L they are public fields without getters.
-             */
-            try {
-                boolean isMuted = AudioState.class.getField("isMuted").getBoolean(audioState);
-                int route = AudioState.class.getField("route").getInt(audioState);
-                int supportedRouteMask = AudioState.class.getField("supportedRouteMask")
-                        .getInt(audioState);
-                AudioModeProvider.getInstance()
-                        .onAudioStateChanged(isMuted, route, supportedRouteMask);
-            } catch (ReflectiveOperationException e) {
-                Log.e(this, "Unable to use reflection to retrieve AudioState fields", e);
-            }
-        }
-
-        @Override
-        public void onBringToForeground(Phone phone, boolean showDialpad) {
-            InCallServiceImpl.this.onBringToForeground(showDialpad);
-        }
-
-        @Override
-        public void onCallAdded(Phone phone, Call call) {
-            InCallServiceImpl.this.onCallAdded(call);
-        }
-
-        @Override
-        public void onCallRemoved(Phone phone, Call call) {
-            InCallServiceImpl.this.onCallRemoved(call);
-        }
-    };
-
-    private Phone mPhone;
-
-    @Override
-    public void onPhoneCreated(Phone phone) {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            return;
-        }
-        mPhone = phone;
-        mPhone.addListener(mPhoneListener);
-    }
-
-    @Override
-    public void onPhoneDestroyed(Phone phone) {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            return;
-        }
-        mPhone.removeListener(mPhoneListener);
-        mPhone = null;
-    }
-
-    /*
-     * setMuted and setAudioRoute are final in InCallService so compat methods are
-     * used to perform the needed branching logic based on sdk version
-     */
-    public void setMutedCompat(boolean state) {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            super.setMuted(state);
-            return;
-        }
-        mPhone.setMuted(state);
-    }
-
-    public void setAudioRouteCompat(int route) {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            super.setAudioRoute(route);
-            return;
-        }
-        mPhone.setAudioRoute(route);
-    }
 }
diff --git a/InCallUI/src/com/android/incallui/TelecomAdapter.java b/InCallUI/src/com/android/incallui/TelecomAdapter.java
index 0fc2e28..f172270 100644
--- a/InCallUI/src/com/android/incallui/TelecomAdapter.java
+++ b/InCallUI/src/com/android/incallui/TelecomAdapter.java
@@ -24,9 +24,6 @@
 import android.telecom.InCallService;
 import android.telecom.PhoneAccountHandle;
 
-import com.android.incallui.compat.telecom.DetailsCompat;
-import com.android.incallui.compat.telecom.InCallServiceCompat;
-
 import java.util.List;
 
 final class TelecomAdapter implements InCallServiceListener {
@@ -108,7 +105,7 @@
 
     void mute(boolean shouldMute) {
         if (mInCallService != null) {
-            InCallServiceCompat.setMuted(mInCallService, shouldMute);
+            mInCallService.setMuted(shouldMute);
         } else {
             Log.e(this, "error mute, mInCallService is null");
         }
@@ -116,7 +113,7 @@
 
     void setAudioRoute(int route) {
         if (mInCallService != null) {
-            InCallServiceCompat.setAudioRoute(mInCallService, route);
+            mInCallService.setAudioRoute(route);
         } else {
             Log.e(this, "error setAudioRoute, mInCallService is null");
         }
@@ -138,8 +135,7 @@
             if (!conferenceable.isEmpty()) {
                 call.conference(conferenceable.get(0));
             } else {
-                if (DetailsCompat.can(call.getDetails(),
-                        android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE)) {
+                if (call.getDetails().can(android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE)) {
                     call.mergeConference();
                 }
             }
@@ -151,8 +147,7 @@
     void swap(String callId) {
         android.telecom.Call call = getTelecomCallById(callId);
         if (call != null) {
-            if (DetailsCompat.can(call.getDetails(),
-                    android.telecom.Call.Details.CAPABILITY_SWAP_CONFERENCE)) {
+            if (call.getDetails().can(android.telecom.Call.Details.CAPABILITY_SWAP_CONFERENCE)) {
                 call.swapConference();
             }
         } else {
@@ -222,7 +217,10 @@
         }
     }
 
-    boolean canAddCall(Call call) {
-        return InCallServiceCompat.canAddCall(mInCallService, call);
+    boolean canAddCall() {
+        if (mInCallService != null) {
+            return mInCallService.canAddCall();
+        }
+        return false;
     }
 }
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index 2b6bc09..c9a3328 100644
--- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
@@ -39,7 +39,6 @@
 import com.android.incallui.InCallPresenter.IncomingCallListener;
 import com.android.incallui.InCallVideoCallCallbackNotifier.SurfaceChangeListener;
 import com.android.incallui.InCallVideoCallCallbackNotifier.VideoEventListener;
-import com.android.incallui.compat.telecom.VideoProfileCompat;
 
 import java.util.Objects;
 
@@ -485,8 +484,8 @@
         Log.d(this, "checkForVideoStateChange: isVideoCall= " + isVideoCall
                 + " hasVideoStateChanged=" + hasVideoStateChanged + " isVideoMode="
                 + isVideoMode() + " previousVideoState: " +
-                VideoProfileCompat.videoStateToString(mCurrentVideoState) + " newVideoState: "
-                + VideoProfileCompat.videoStateToString(call.getVideoState()));
+                VideoProfile.videoStateToString(mCurrentVideoState) + " newVideoState: "
+                + VideoProfile.videoStateToString(call.getVideoState()));
 
         if (!hasVideoStateChanged) {
             return;
@@ -656,8 +655,8 @@
     }
 
     private static boolean isCameraRequired(int videoState) {
-        return VideoProfileCompat.isBidirectional(videoState) ||
-                VideoProfileCompat.isTransmissionEnabled(videoState);
+        return VideoProfile.isBidirectional(videoState) ||
+                VideoProfile.isTransmissionEnabled(videoState);
     }
 
     private boolean isCameraRequired() {
@@ -758,7 +757,7 @@
         if (showIncomingVideo || showOutgoingVideo) {
             ui.showVideoViews(showOutgoingVideo, showIncomingVideo);
 
-            if (VideoProfileCompat.isReceptionEnabled(videoState)) {
+            if (VideoProfile.isReceptionEnabled(videoState)) {
                 loadProfilePhotoAsync();
             }
         } else {
@@ -766,7 +765,7 @@
         }
 
         InCallPresenter.getInstance().enableScreenTimeout(
-                VideoProfileCompat.isAudioOnly(videoState));
+                VideoProfile.isAudioOnly(videoState));
     }
 
     /**
@@ -783,10 +782,10 @@
             return false;
         }
 
-        boolean isPaused = VideoProfileCompat.isPaused(videoState);
+        boolean isPaused = VideoProfile.isPaused(videoState);
         boolean isCallActive = callState == Call.State.ACTIVE;
 
-        return !isPaused && isCallActive && VideoProfileCompat.isReceptionEnabled(videoState);
+        return !isPaused && isCallActive && VideoProfile.isReceptionEnabled(videoState);
     }
 
     /**
@@ -802,7 +801,7 @@
             return false;
         }
 
-        return VideoProfileCompat.isTransmissionEnabled(videoState);
+        return VideoProfile.isTransmissionEnabled(videoState);
     }
 
     /**
@@ -1178,8 +1177,8 @@
     }
 
     private static int toCameraDirection(int videoState) {
-        return VideoProfileCompat.isTransmissionEnabled(videoState) &&
-                !VideoProfileCompat.isBidirectional(videoState)
+        return VideoProfile.isTransmissionEnabled(videoState) &&
+                !VideoProfile.isBidirectional(videoState)
                 ? Call.VideoSettings.CAMERA_DIRECTION_BACK_FACING
                 : Call.VideoSettings.CAMERA_DIRECTION_FRONT_FACING;
     }
diff --git a/InCallUI/src/com/android/incallui/VideoUtils.java b/InCallUI/src/com/android/incallui/VideoUtils.java
index 7e0926b..8641d60 100644
--- a/InCallUI/src/com/android/incallui/VideoUtils.java
+++ b/InCallUI/src/com/android/incallui/VideoUtils.java
@@ -19,7 +19,6 @@
 import android.telecom.VideoProfile;
 
 import com.android.contacts.common.compat.CompatUtils;
-import com.android.incallui.compat.telecom.VideoProfileCompat;
 
 import com.google.common.base.Preconditions;
 
@@ -34,8 +33,8 @@
             return false;
         }
 
-        return VideoProfileCompat.isTransmissionEnabled(videoState)
-                || VideoProfileCompat.isReceptionEnabled(videoState);
+        return VideoProfile.isTransmissionEnabled(videoState)
+                || VideoProfile.isReceptionEnabled(videoState);
     }
 
     public static boolean isBidirectionalVideoCall(Call call) {
@@ -43,7 +42,7 @@
             return false;
         }
 
-        return VideoProfileCompat.isBidirectional(call.getVideoState());
+        return VideoProfile.isBidirectional(call.getVideoState());
     }
 
     public static boolean isIncomingVideoCall(Call call) {
@@ -72,7 +71,7 @@
             return true;
         }
 
-        return call != null && VideoProfileCompat.isAudioOnly(call.getVideoState());
+        return call != null && VideoProfile.isAudioOnly(call.getVideoState());
     }
 
     // TODO (ims-vt) Check if special handling is needed for CONF calls.
@@ -82,7 +81,7 @@
 
     public static VideoProfile makeVideoPauseProfile(Call call) {
         Preconditions.checkNotNull(call);
-        Preconditions.checkState(!VideoProfileCompat.isAudioOnly(call.getVideoState()));
+        Preconditions.checkState(!VideoProfile.isAudioOnly(call.getVideoState()));
         return new VideoProfile(getPausedVideoState(call.getVideoState()));
     }
 
diff --git a/InCallUI/src/com/android/incallui/compat/telecom/DetailsCompat.java b/InCallUI/src/com/android/incallui/compat/telecom/DetailsCompat.java
deleted file mode 100644
index b9f82a9..0000000
--- a/InCallUI/src/com/android/incallui/compat/telecom/DetailsCompat.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.incallui.compat.telecom;
-
-import android.os.Build;
-import android.os.Bundle;
-import android.telecom.Call.Details;
-
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.incallui.Log;
-
-/**
- * Compatibility class for {@link Details}
- */
-public class DetailsCompat {
-
-    /**
-     * Constant formerly in L as PhoneCapabilities#ADD_CALL. It was transferred to
-     * {@link Details#CAPABILITY_UNUSED_1} and hidden
-     */
-    public static final int CAPABILITY_UNUSED_1 = 0x00000010;
-
-    /**
-     * Returns the intent extras from the given {@link Details}
-     * For Sdk version L and earlier, this will return {@link Details#getExtras()}
-     *
-     * @param details The details whose intent extras should be returned
-     * @return The given details' intent extras
-     */
-    public static Bundle getIntentExtras(Details details) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return details.getIntentExtras();
-        }
-        return details.getExtras();
-    }
-
-    /**
-     * Compatibility method to check whether the supplied properties includes the
-     * specified property.
-     *
-     * @param details The details whose properties should be checked.
-     * @param property The property to check properties for.
-     * @return Whether the specified property is supported.
-     */
-    public static boolean hasProperty(Details details, int property) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return details.hasProperty(property);
-        }
-        return (details.getCallProperties() & property) != 0;
-    }
-
-    /**
-     * Compatibility method to check whether the capabilities of the given {@code Details}
-     * supports the specified capability.
-     *
-     * @param details The details whose capabilities should be checked.
-     * @param capability The capability to check capabilities for.
-     * @return Whether the specified capability is supported.
-     */
-    public static boolean can(Details details, int capability) {
-        if (CompatUtils.isLollipopMr1Compatible()) {
-            return details.can(capability);
-        }
-        return (details.getCallCapabilities() & capability) != 0;
-    }
-
-    /**
-     * Render a set of capability bits ({@code CAPABILITY_*}) as a human readable string.
-     *
-     * @param capabilities A capability bit field.
-     * @return A human readable string representation.
-     */
-    public static String capabilitiesToString(int capabilities) {
-        if (CompatUtils.isLollipopMr1Compatible()) {
-            return Details.capabilitiesToString(capabilities);
-        }
-        return capabilitiesToStringLollipop(capabilities);
-    }
-
-    /*
-     * Use reflection to call PhoneCapabilities.toString. InCallUI code is only run on Google
-     * Experience phones, so we will be the system Dialer and the method will exist
-     */
-    private static String capabilitiesToStringLollipop(int capabilities) {
-        try {
-            return (String) Class.forName("android.telecom.PhoneCapabilities")
-                    .getMethod("toString", Integer.TYPE)
-                    .invoke(null, capabilities);
-        } catch (ReflectiveOperationException e) {
-            Log.e(DetailsCompat.class, "Unable to use reflection to call "
-                    + "android.telecom.PhoneCapabilities.toString(int)", e);
-            return String.valueOf(capabilities);
-        }
-    }
-}
diff --git a/InCallUI/src/com/android/incallui/compat/telecom/InCallServiceCompat.java b/InCallUI/src/com/android/incallui/compat/telecom/InCallServiceCompat.java
deleted file mode 100644
index 0a3cb26..0000000
--- a/InCallUI/src/com/android/incallui/compat/telecom/InCallServiceCompat.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.incallui.compat.telecom;
-
-import android.support.annotation.Nullable;
-import android.telecom.InCallService;
-
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.incallui.Call;
-import com.android.incallui.InCallServiceImpl;
-
-/**
- * Compatibility class for {@link android.telecom.InCallService}
- */
-public class InCallServiceCompat {
-
-    /**
-     * Sets the microphone mute state. When this request is honored, there
-     * will be a change to the {@link android.telecom.CallAudioState}.
-     *
-     * Note: Noop for Sdk versions less than M where inCallService is not of type
-     * {@link InCallServiceImpl}
-     *
-     * @param inCallService the {@link InCallService} to act on
-     * @param shouldMute {@code true} if the microphone should be muted; {@code false} otherwise.
-     */
-    public static void setMuted(@Nullable InCallService inCallService, boolean shouldMute) {
-        if (inCallService == null) {
-            return;
-        }
-        if (CompatUtils.isMarshmallowCompatible()) {
-            inCallService.setMuted(shouldMute);
-            return;
-        }
-
-        if (inCallService instanceof InCallServiceImpl) {
-            ((InCallServiceImpl) inCallService).setMutedCompat(shouldMute);
-        }
-    }
-
-    /**
-     * Sets the audio route (speaker, bluetooth, etc...).  When this request is honored, there will
-     * be change to the {@link android.telecom.CallAudioState}.
-     *
-     * Note: Noop for Sdk versions less than M where inCallService is not of type
-     * {@link InCallServiceImpl}
-     *
-     * @param inCallService the {@link InCallService} to act on
-     * @param route The audio route to use.
-     */
-    public static void setAudioRoute(@Nullable InCallService inCallService, int route) {
-        if (inCallService == null) {
-            return;
-        }
-        if (CompatUtils.isMarshmallowCompatible()) {
-            inCallService.setAudioRoute(route);
-            return;
-        }
-
-        if (inCallService instanceof InCallServiceImpl) {
-            ((InCallServiceImpl) inCallService).setAudioRouteCompat(route);
-        }
-    }
-
-    /**
-     * Returns if the device can support additional calls.
-     *
-     * @param inCallService the {@link InCallService} to act on
-     * @param call a {@link Call} to use if needed due to compatibility reasons
-     * @return Whether the phone supports adding more calls, defaulting to true if inCallService
-     *    is null
-     */
-    public static boolean canAddCall(@Nullable InCallService inCallService, Call call) {
-        if (inCallService == null) {
-            return true;
-        }
-
-        if (CompatUtils.isMarshmallowCompatible()) {
-            // Default to true if we are not connected to telecom.
-            return inCallService.canAddCall();
-        }
-        return call.can(DetailsCompat.CAPABILITY_UNUSED_1);
-    }
-}
diff --git a/InCallUI/src/com/android/incallui/compat/telecom/VideoProfileCompat.java b/InCallUI/src/com/android/incallui/compat/telecom/VideoProfileCompat.java
deleted file mode 100644
index 6e81bd7..0000000
--- a/InCallUI/src/com/android/incallui/compat/telecom/VideoProfileCompat.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.incallui.compat.telecom;
-
-import android.telecom.VideoProfile;
-
-import com.android.contacts.common.compat.CompatUtils;
-
-/**
- * Compatibility class for {@link android.telecom.VideoProfile}
- */
-public class VideoProfileCompat {
-
-    /**
-     * Generates a string representation of a video state.
-     *
-     * @param videoState The video state.
-     * @return String representation of the video state.
-     */
-    public static String videoStateToString(int videoState) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return VideoProfile.videoStateToString(videoState);
-        }
-        return videoStateToStringLollipop(videoState);
-    }
-
-    /**
-     * Copied from {@link android.telecom.VideoProfile#videoStateToString}
-     */
-    private static String videoStateToStringLollipop(int videoState) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("Audio");
-        if (isAudioOnly(videoState)) {
-            sb.append(" Only");
-        } else {
-            if (isTransmissionEnabled(videoState)) {
-                sb.append(" Tx");
-            }
-            if (isReceptionEnabled(videoState)) {
-                sb.append(" Rx");
-            }
-            if (isPaused(videoState)) {
-                sb.append(" Pause");
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Indicates whether the video state is audio only.
-     *
-     * @param videoState The video state.
-     * @return {@code true} if the video state is audio only, {@code false} otherwise.
-     */
-    public static boolean isAudioOnly(int videoState) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return VideoProfile.isAudioOnly(videoState);
-        }
-        return !hasState(videoState, VideoProfile.STATE_TX_ENABLED)
-                && !hasState(videoState, VideoProfile.STATE_RX_ENABLED);
-    }
-
-    /**
-     * Indicates whether the video state has video transmission enabled.
-     *
-     * @param videoState The video state.
-     * @return {@code true} if video transmission is enabled, {@code false} otherwise.
-     */
-    public static boolean isTransmissionEnabled(int videoState) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return VideoProfile.isTransmissionEnabled(videoState);
-        }
-        return hasState(videoState, VideoProfile.STATE_TX_ENABLED);
-    }
-
-    /**
-     * Indicates whether the video state has video reception enabled.
-     *
-     * @param videoState The video state.
-     * @return {@code true} if video reception is enabled, {@code false} otherwise.
-     */
-    public static boolean isReceptionEnabled(int videoState) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return VideoProfile.isReceptionEnabled(videoState);
-        }
-        return hasState(videoState, VideoProfile.STATE_RX_ENABLED);
-    }
-
-    /**
-     * Indicates whether the video state is paused.
-     *
-     * @param videoState The video state.
-     * @return {@code true} if the video is paused, {@code false} otherwise.
-     */
-    public static boolean isPaused(int videoState) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return VideoProfile.isPaused(videoState);
-        }
-        return hasState(videoState, VideoProfile.STATE_PAUSED);
-    }
-
-    /**
-     * Copied from {@link android.telecom.VideoProfile}
-     *
-     * Determines if a specified state is set in a videoState bit-mask.
-     *
-     * @param videoState The video state bit-mask.
-     * @param state The state to check.
-     * @return {@code true} if the state is set.
-     */
-    private static boolean hasState(int videoState, int state) {
-        return (videoState & state) == state;
-    }
-
-    /**
-     * Indicates whether the video state is bi-directional.
-     *
-     * @param videoState The video state.
-     * @return {@code True} if the video is bi-directional, {@code false} otherwise.
-     */
-    public static boolean isBidirectional(int videoState) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return VideoProfile.isBidirectional(videoState);
-        }
-        return hasState(videoState, VideoProfile.STATE_BIDIRECTIONAL);
-    }
-}