diff --git a/java/com/android/dialer/simulator/impl/RttChatBot.java b/java/com/android/dialer/simulator/impl/RttChatBot.java
index b2860e3..cd52343 100644
--- a/java/com/android/dialer/simulator/impl/RttChatBot.java
+++ b/java/com/android/dialer/simulator/impl/RttChatBot.java
@@ -32,7 +32,7 @@
 
 /** Chat bot to generate remote RTT chat messages. */
 @TargetApi(28)
-public class RttChatBot {
+class RttChatBot {
 
   interface Callback {
     void type(String text);
@@ -62,14 +62,14 @@
   }
 
   @MainThread
-  public void start() {
+  void start() {
     Assert.isMainThread();
     LogUtil.enterBlock("RttChatBot.start");
     messageHandler.sendEmptyMessage(START_SENDING);
   }
 
   @MainThread
-  public void stop() {
+  void stop() {
     Assert.isMainThread();
     LogUtil.enterBlock("RttChatBot.stop");
     if (handlerThread != null && handlerThread.isAlive()) {
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java b/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java
index 8e794f0..aec9398 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java
@@ -32,7 +32,7 @@
 import java.util.Locale;
 
 /** Creates a conference with a given number of participants. */
-public final class SimulatorConferenceCreator
+final class SimulatorConferenceCreator
     implements SimulatorConnectionService.Listener,
         SimulatorConnection.Listener,
         SimulatorConference.Listener {
@@ -46,7 +46,7 @@
 
   @Simulator.ConferenceType private final int conferenceType;
 
-  public SimulatorConferenceCreator(
+  SimulatorConferenceCreator(
       @NonNull Context context, @Simulator.ConferenceType int conferenceType) {
     this.context = Assert.isNotNull(context);
     this.conferenceType = conferenceType;
@@ -58,7 +58,7 @@
    *
    * @param callCount the number of calls in conference to create.
    */
-  public void start(int callCount) {
+  void start(int callCount) {
     onNewIncomingConnectionEnabled = true;
     SimulatorConnectionService.addListener(this);
     if (conferenceType == Simulator.CONFERENCE_TYPE_VOLTE) {
diff --git a/java/com/android/dialer/simulator/impl/SimulatorImpl.java b/java/com/android/dialer/simulator/impl/SimulatorImpl.java
index 44f8e11..ee910ba 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorImpl.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorImpl.java
@@ -22,7 +22,6 @@
 import com.android.dialer.buildtype.BuildType.Type;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.simulator.Simulator;
-import com.android.dialer.simulator.portal.SimulatorMainPortal;
 import javax.inject.Inject;
 
 /** The entry point for the simulator feature. */
diff --git a/java/com/android/dialer/simulator/portal/SimulatorMainPortal.java b/java/com/android/dialer/simulator/impl/SimulatorMainPortal.java
similarity index 94%
rename from java/com/android/dialer/simulator/portal/SimulatorMainPortal.java
rename to java/com/android/dialer/simulator/impl/SimulatorMainPortal.java
index fdec2a5..273826f 100644
--- a/java/com/android/dialer/simulator/portal/SimulatorMainPortal.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorMainPortal.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.dialer.simulator.portal;
+package com.android.dialer.simulator.impl;
 
 import android.content.Context;
 import android.support.v7.app.AppCompatActivity;
@@ -23,13 +23,6 @@
 import com.android.dialer.enrichedcall.simulator.EnrichedCallSimulatorActivity;
 import com.android.dialer.simulator.Simulator;
 import com.android.dialer.simulator.SimulatorComponent;
-import com.android.dialer.simulator.impl.SimulatorConferenceCreator;
-import com.android.dialer.simulator.impl.SimulatorMissedCallCreator;
-import com.android.dialer.simulator.impl.SimulatorRttCall;
-import com.android.dialer.simulator.impl.SimulatorSimCallManager;
-import com.android.dialer.simulator.impl.SimulatorUtils;
-import com.android.dialer.simulator.impl.SimulatorVideoCall;
-import com.android.dialer.simulator.impl.SimulatorVoiceCall;
 import com.google.common.collect.ImmutableMap;
 
 /** Implements the top level simulator menu. */
diff --git a/java/com/android/dialer/simulator/portal/SimulatorMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMenu.java
similarity index 97%
rename from java/com/android/dialer/simulator/portal/SimulatorMenu.java
rename to java/com/android/dialer/simulator/impl/SimulatorMenu.java
index 01fd4aa..0c8f242 100644
--- a/java/com/android/dialer/simulator/portal/SimulatorMenu.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorMenu.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.dialer.simulator.portal;
+package com.android.dialer.simulator.impl;
 
 import android.content.Context;
 import android.support.annotation.NonNull;
diff --git a/java/com/android/dialer/simulator/impl/SimulatorMissedCallCreator.java b/java/com/android/dialer/simulator/impl/SimulatorMissedCallCreator.java
index 52d7352..b855615 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorMissedCallCreator.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorMissedCallCreator.java
@@ -30,14 +30,14 @@
  * notifications instead of writing to the call log directly. This makes the simulator behave more
  * like the real application.
  */
-public final class SimulatorMissedCallCreator implements SimulatorConnectionService.Listener {
+final class SimulatorMissedCallCreator implements SimulatorConnectionService.Listener {
   private static final String EXTRA_CALL_COUNT = "call_count";
   private static final String EXTRA_IS_MISSED_CALL_CONNECTION = "is_missed_call_connection";
   private static final int DISCONNECT_DELAY_MILLIS = 1000;
 
   private final Context context;
 
-  public SimulatorMissedCallCreator(@NonNull Context context) {
+  SimulatorMissedCallCreator(@NonNull Context context) {
     this.context = Assert.isNotNull(context);
   }
 
diff --git a/java/com/android/dialer/simulator/portal/SimulatorPortalEntryGroup.java b/java/com/android/dialer/simulator/impl/SimulatorPortalEntryGroup.java
similarity index 96%
rename from java/com/android/dialer/simulator/portal/SimulatorPortalEntryGroup.java
rename to java/com/android/dialer/simulator/impl/SimulatorPortalEntryGroup.java
index 30a248c..200b10f 100644
--- a/java/com/android/dialer/simulator/portal/SimulatorPortalEntryGroup.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorPortalEntryGroup.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.dialer.simulator.portal;
+package com.android.dialer.simulator.impl;
 
 import com.google.auto.value.AutoValue;
 import com.google.common.collect.ImmutableMap;
diff --git a/java/com/android/dialer/simulator/impl/SimulatorRttCall.java b/java/com/android/dialer/simulator/impl/SimulatorRttCall.java
index afd8977..62e05a7 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorRttCall.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorRttCall.java
@@ -28,21 +28,21 @@
 import com.android.dialer.simulator.Simulator.Event;
 
 /** Entry point in the simulator to create voice calls. */
-public final class SimulatorRttCall
+final class SimulatorRttCall
     implements SimulatorConnectionService.Listener, SimulatorConnection.Listener {
 
   @NonNull private final Context context;
   @Nullable private String connectionTag;
   private RttChatBot rttChatBot;
 
-  public SimulatorRttCall(@NonNull Context context) {
+  SimulatorRttCall(@NonNull Context context) {
     this.context = Assert.isNotNull(context);
     SimulatorConnectionService.addListener(this);
     SimulatorConnectionService.addListener(
         new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_GSM));
   }
 
-  public void addNewIncomingCall(boolean isSpam) {
+  void addNewIncomingCall(boolean isSpam) {
     String callerId =
         isSpam
             ? "+1-661-778-3020" /* Blacklisted custom spam number */
@@ -52,14 +52,14 @@
             context, callerId, SimulatorSimCallManager.CALL_TYPE_RTT);
   }
 
-  public void addNewOutgoingCall() {
+  void addNewOutgoingCall() {
     String callerId = "+55-31-2128-6800"; // Brazil office.
     connectionTag =
         SimulatorSimCallManager.addNewOutgoingCall(
             context, callerId, SimulatorSimCallManager.CALL_TYPE_RTT);
   }
 
-  public void addNewEmergencyCall() {
+  void addNewEmergencyCall() {
     String callerId = "911";
     connectionTag =
         SimulatorSimCallManager.addNewIncomingCall(
diff --git a/java/com/android/dialer/simulator/impl/SimulatorVideoCall.java b/java/com/android/dialer/simulator/impl/SimulatorVideoCall.java
index c7c92e7..986ed99 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorVideoCall.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorVideoCall.java
@@ -30,14 +30,14 @@
 import com.android.dialer.simulator.Simulator.Event;
 
 /** Entry point in the simulator to create video calls. */
-public final class SimulatorVideoCall
+final class SimulatorVideoCall
     implements SimulatorConnectionService.Listener, SimulatorConnection.Listener {
   @NonNull private final Context context;
   private final int initialVideoCapability;
   private final int initialVideoState;
   @Nullable private String connectionTag;
 
-  public SimulatorVideoCall(@NonNull Context context, int initialVideoState) {
+  SimulatorVideoCall(@NonNull Context context, int initialVideoState) {
     this.context = Assert.isNotNull(context);
     this.initialVideoCapability =
         Connection.CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL
@@ -46,7 +46,7 @@
     SimulatorConnectionService.addListener(this);
   }
 
-  public void addNewIncomingCall() {
+  void addNewIncomingCall() {
     if (!isVideoAccountEnabled()) {
       showVideoAccountSettings();
       return;
@@ -57,7 +57,7 @@
             context, callerId, SimulatorSimCallManager.CALL_TYPE_VIDEO);
   }
 
-  public void addNewOutgoingCall() {
+  void addNewOutgoingCall() {
     if (!isVideoAccountEnabled()) {
       showVideoAccountSettings();
       return;
diff --git a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
index a9f332e..4b3033f 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
@@ -36,13 +36,13 @@
 import com.android.dialer.simulator.SimulatorEnrichedCall;
 
 /** Entry point in the simulator to create voice calls. */
-public final class SimulatorVoiceCall
+final class SimulatorVoiceCall
     implements SimulatorConnectionService.Listener, SimulatorConnection.Listener {
   @NonNull private final Context context;
   @Nullable private String connectionTag;
   private final SimulatorEnrichedCall simulatorEnrichedCall;
 
-  public SimulatorVoiceCall(@NonNull Context context) {
+  SimulatorVoiceCall(@NonNull Context context) {
     this.context = Assert.isNotNull(context);
     simulatorEnrichedCall = SimulatorComponent.get(context).getSimulatorEnrichedCall();
     SimulatorConnectionService.addListener(this);
@@ -50,7 +50,7 @@
         new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_GSM));
   }
 
-  public void incomingEnrichedCall() {
+  void incomingEnrichedCall() {
     simulatorEnrichedCall
         .setupIncomingEnrichedCall(Simulator.ENRICHED_CALL_INCOMING_NUMBER)
         .addListener(
@@ -67,7 +67,7 @@
             DialerExecutorComponent.get(context).uiExecutor());
   }
 
-  public void outgoingEnrichedCall() {
+  void outgoingEnrichedCall() {
     getEnrichedCallManager().registerStateChangedListener(simulatorEnrichedCall);
     simulatorEnrichedCall
         .setupOutgoingEnrichedCall(Simulator.ENRICHED_CALL_OUTGOING_NUMBER)
@@ -85,14 +85,14 @@
             DialerExecutorComponent.get(context).uiExecutor());
   }
 
-  public void addNewIncomingCall() {
+  void addNewIncomingCall() {
     String callerId = "+44 (0) 20 7031 3000" /* Google London office */;
     connectionTag =
         SimulatorSimCallManager.addNewIncomingCall(
             context, callerId, SimulatorSimCallManager.CALL_TYPE_VOICE);
   }
 
-  public void addNewIncomingCall(AppCompatActivity activity) {
+  void addNewIncomingCall(AppCompatActivity activity) {
     SimulatorDialogFragment.newInstance(
             (callerId, callerIdPresentation) -> {
               Bundle extras = new Bundle();
@@ -104,14 +104,14 @@
         .show(activity.getSupportFragmentManager(), "SimulatorDialog");
   }
 
-  public void addNewOutgoingCall() {
+  void addNewOutgoingCall() {
     String callerId = "+55-31-2128-6800"; // Brazil office.
     connectionTag =
         SimulatorSimCallManager.addNewOutgoingCall(
             context, callerId, SimulatorSimCallManager.CALL_TYPE_VOICE);
   }
 
-  public void addNewOutgoingCall(AppCompatActivity activity) {
+  void addNewOutgoingCall(AppCompatActivity activity) {
     SimulatorDialogFragment.newInstance(
             (callerId, callerIdPresentation) -> {
               Bundle extras = new Bundle();
@@ -123,14 +123,14 @@
         .show(activity.getSupportFragmentManager(), "SimulatorDialog");
   }
 
-  public void addSpamIncomingCall() {
+  void addSpamIncomingCall() {
     String callerId = "+1-661-778-3020"; /* Blacklisted custom spam number */
     connectionTag =
         SimulatorSimCallManager.addNewIncomingCall(
             context, callerId, SimulatorSimCallManager.CALL_TYPE_VOICE);
   }
 
-  public void addNewEmergencyCallBack() {
+  void addNewEmergencyCallBack() {
     String callerId = "911";
     connectionTag =
         SimulatorSimCallManager.addNewIncomingCall(
