diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
index 315c0d0..946e0eb 100644
--- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java
+++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
@@ -51,7 +51,6 @@
 import com.android.contacts.common.util.BitmapUtil;
 import com.android.contacts.common.util.ContactDisplayUtils;
 import com.android.dialer.R;
-import com.android.incallui.Call.State;
 import com.android.incallui.ContactInfoCache.ContactCacheEntry;
 import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
 import com.android.incallui.InCallPresenter.InCallState;
@@ -268,9 +267,23 @@
         }
 
         /*
-         * Nothing more to check...build and send it.
+         * This builder is used for the notification shown when the device is locked and the user
+         * has set their notification settings to 'hide sensitive content'
+         * {@see Notification.Builder#setPublicVersion}.
+         */
+        Notification.Builder publicBuilder = new Notification.Builder(mContext);
+        publicBuilder.setSmallIcon(iconResId)
+                .setColor(mContext.getResources().getColor(R.color.dialer_theme_color))
+                // Hide work call state for the lock screen notification
+                .setContentTitle(getContentString(call, ContactsUtils.USER_TYPE_CURRENT));
+        setNotificationWhen(call, callState, publicBuilder);
+
+        /*
+         * Builder for the notification shown when the device is unlocked or the user has set their
+         * notification settings to 'show all notification content'.
          */
         final Notification.Builder builder = getNotificationBuilder();
+        builder.setPublicVersion(publicBuilder.build());
 
         // Set up the main intent to send the user to the in-call screen
         final PendingIntent inCallPendingIntent = createLaunchPendingIntent();
@@ -335,12 +348,7 @@
 
     private void createIncomingCallNotification(
             Call call, int state, Notification.Builder builder) {
-        if (state == Call.State.ACTIVE) {
-            builder.setUsesChronometer(true);
-            builder.setWhen(call.getConnectTimeMillis());
-        } else {
-            builder.setUsesChronometer(false);
-        }
+        setNotificationWhen(call, state, builder);
 
         // Add hang up option for any active calls (active | onhold), outgoing calls (dialing).
         if (state == Call.State.ACTIVE ||
@@ -358,6 +366,20 @@
         }
     }
 
+    /*
+     * Sets the notification's when section as needed. For active calls, this is explicitly set as
+     * the duration of the call. For all other states, the notification will automatically show the
+     * time at which the notification was created.
+     */
+    private void setNotificationWhen(Call call, int state, Notification.Builder builder) {
+        if (state == Call.State.ACTIVE) {
+            builder.setUsesChronometer(true);
+            builder.setWhen(call.getConnectTimeMillis());
+        } else {
+            builder.setUsesChronometer(false);
+        }
+    }
+
     /**
      * Checks the new notification data and compares it against any notification that we
      * are already displaying. If the data is exactly the same, we return false so that
