diff --git a/car-lib/api/current.txt b/car-lib/api/current.txt
index 3983d3f..7bec186 100644
--- a/car-lib/api/current.txt
+++ b/car-lib/api/current.txt
@@ -20,26 +20,6 @@
     field public static final java.lang.String SENSOR_SERVICE = "sensor";
   }
 
-  public class CarAppContextManager {
-    method public int getActiveAppContexts() throws android.car.CarNotConnectedException;
-    method public boolean isOwningContext(int) throws android.car.CarNotConnectedException;
-    method public void onCarDisconnected();
-    method public void registerContextListener(android.car.CarAppContextManager.AppContextChangeListener, int) throws android.car.CarNotConnectedException;
-    method public void resetActiveContexts(int) throws android.car.CarNotConnectedException;
-    method public void setActiveContexts(android.car.CarAppContextManager.AppContextOwnershipChangeListener, int) throws android.car.CarNotConnectedException, java.lang.SecurityException;
-    method public void unregisterContextListener() throws android.car.CarNotConnectedException;
-    field public static final int APP_CONTEXT_NAVIGATION = 1; // 0x1
-    field public static final int APP_CONTEXT_VOICE_COMMAND = 2; // 0x2
-  }
-
-  public static abstract interface CarAppContextManager.AppContextChangeListener {
-    method public abstract void onAppContextChange(int);
-  }
-
-  public static abstract interface CarAppContextManager.AppContextOwnershipChangeListener {
-    method public abstract void onAppContextOwnershipLoss(int);
-  }
-
   public class CarInfoManager {
     method public java.lang.Float getFloat(java.lang.String) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
     method public java.lang.Integer getInt(java.lang.String) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt
index 7a64baa..b6fdd90 100644
--- a/car-lib/api/system-current.txt
+++ b/car-lib/api/system-current.txt
@@ -32,26 +32,6 @@
     field public static final java.lang.String TEST_SERVICE = "car-service-test";
   }
 
-  public class CarAppContextManager {
-    method public int getActiveAppContexts() throws android.car.CarNotConnectedException;
-    method public boolean isOwningContext(int) throws android.car.CarNotConnectedException;
-    method public void onCarDisconnected();
-    method public void registerContextListener(android.car.CarAppContextManager.AppContextChangeListener, int) throws android.car.CarNotConnectedException;
-    method public void resetActiveContexts(int) throws android.car.CarNotConnectedException;
-    method public void setActiveContexts(android.car.CarAppContextManager.AppContextOwnershipChangeListener, int) throws android.car.CarNotConnectedException, java.lang.SecurityException;
-    method public void unregisterContextListener() throws android.car.CarNotConnectedException;
-    field public static final int APP_CONTEXT_NAVIGATION = 1; // 0x1
-    field public static final int APP_CONTEXT_VOICE_COMMAND = 2; // 0x2
-  }
-
-  public static abstract interface CarAppContextManager.AppContextChangeListener {
-    method public abstract void onAppContextChange(int);
-  }
-
-  public static abstract interface CarAppContextManager.AppContextOwnershipChangeListener {
-    method public abstract void onAppContextOwnershipLoss(int);
-  }
-
   public class CarInfoManager {
     method public java.lang.Float getFloat(java.lang.String) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
     method public java.lang.Integer getInt(java.lang.String) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
diff --git a/car-lib/src/android/car/CarAppContextManager.java b/car-lib/src/android/car/CarAppContextManager.java
index c7657ca..5eb4c56 100644
--- a/car-lib/src/android/car/CarAppContextManager.java
+++ b/car-lib/src/android/car/CarAppContextManager.java
@@ -30,6 +30,7 @@
  * like active navigation or active voice command. Usually only one instance of such application
  * should run in the system, and other app setting the flag for the matching app should
  * lead into other app to stop.
+ * @hide
  */
 public class CarAppContextManager implements CarManagerBase {
     /**
diff --git a/car-support-lib/api/current.txt b/car-support-lib/api/current.txt
index 4361a64..1256f7f 100644
--- a/car-support-lib/api/current.txt
+++ b/car-support-lib/api/current.txt
@@ -29,26 +29,6 @@
     field public static final java.lang.String SENSOR_SERVICE = "sensor";
   }
 
-  public abstract class CarAppContextManager {
-    ctor public CarAppContextManager();
-    method public abstract int getActiveAppContexts() throws android.support.car.CarNotConnectedException;
-    method public abstract boolean isOwningContext(int) throws android.support.car.CarNotConnectedException;
-    method public abstract void registerContextListener(android.support.car.CarAppContextManager.AppContextChangeListener, int) throws android.support.car.CarNotConnectedException;
-    method public abstract void resetActiveContexts(int) throws android.support.car.CarNotConnectedException;
-    method public abstract void setActiveContexts(android.support.car.CarAppContextManager.AppContextOwnershipChangeListener, int) throws android.support.car.CarNotConnectedException, java.lang.IllegalStateException, java.lang.SecurityException;
-    method public abstract void unregisterContextListener() throws android.support.car.CarNotConnectedException;
-    field public static final int APP_CONTEXT_NAVIGATION = 1; // 0x1
-    field public static final int APP_CONTEXT_VOICE_COMMAND = 2; // 0x2
-  }
-
-  public static abstract interface CarAppContextManager.AppContextChangeListener {
-    method public abstract void onAppContextChange(int);
-  }
-
-  public static abstract interface CarAppContextManager.AppContextOwnershipChangeListener {
-    method public abstract void onAppContextOwnershipLoss(int);
-  }
-
   public abstract interface CarConnectionListener {
     method public abstract void onConnected(int);
     method public abstract void onDisconnected();
diff --git a/car-support-lib/src/android/support/car/CarAppContextManager.java b/car-support-lib/src/android/support/car/CarAppContextManager.java
index 70616b9..837dd9c 100644
--- a/car-support-lib/src/android/support/car/CarAppContextManager.java
+++ b/car-support-lib/src/android/support/car/CarAppContextManager.java
@@ -21,6 +21,7 @@
  * like active navigation or active voice command. Usually only one instance of such application
  * should run in the system, and other app setting the flag for the matching app should
  * lead into other app to stop.
+ * @hide
  */
 public abstract class CarAppContextManager implements CarManagerBase {
     /**
