diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 61bf860..9a90f5b 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -50,7 +50,6 @@
 import android.util.Log;
 import android.widget.Toast;
 
-import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.TelephonyCapabilities;
@@ -544,8 +543,7 @@
      * appears when you lose data connectivity because you're roaming and
      * you have the "data roaming" feature turned off.
      */
-    @VisibleForTesting
-    public void showDataDisconnectedRoaming() {
+    void showDataDisconnectedRoaming() {
         if (DBG) log("showDataDisconnectedRoaming()...");
 
         // "Mobile network settings" screen / dialog
diff --git a/tests/src/com/android/phone/PhoneGlobalsTest.java b/tests/src/com/android/phone/PhoneGlobalsTest.java
index b6d216e..b862ee3 100644
--- a/tests/src/com/android/phone/PhoneGlobalsTest.java
+++ b/tests/src/com/android/phone/PhoneGlobalsTest.java
@@ -16,6 +16,8 @@
 package com.android.phone;
 
 import android.content.Intent;
+import android.os.Handler;
+import android.os.Message;
 import android.support.test.runner.AndroidJUnit4;
 
 import com.android.TelephonyTestBase;
@@ -27,11 +29,15 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 
 import java.lang.reflect.Field;
 
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 @RunWith(AndroidJUnit4.class)
@@ -41,14 +47,16 @@
 
     private PhoneGlobals mPhoneGlobals = PhoneGlobals.getInstance();
 
-    private NotificationMgr mNotificationMgr = mock(NotificationMgr.class);
+    private Handler mHandler = mock(Handler.class);
+
+    private static final int EVENT_DATA_ROAMING_DISCONNECTED = 10;
 
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        Field notificationMgr = PhoneGlobals.class.getDeclaredField("notificationMgr");
-        notificationMgr.setAccessible(true);
-        notificationMgr.set(mPhoneGlobals, mNotificationMgr);
+        Field handler = PhoneGlobals.class.getDeclaredField("mHandler");
+        handler.setAccessible(true);
+        handler.set(mPhoneGlobals, mHandler);
     }
 
     @Test
@@ -64,17 +72,34 @@
         intent.putExtra(PhoneConstants.STATE_CHANGE_REASON_KEY, Phone.REASON_ROAMING_ON);
         mContext.sendBroadcast(intent);
 
-        waitForMs(200);
+        waitForMs(300);
 
-        verify(mNotificationMgr, times(0)).showDataDisconnectedRoaming();
+        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
+        verify(mHandler, atLeast(0)).sendMessageAtTime(any(Message.class), anyLong());
+        boolean flag = true;
+        for (Message msg : messageArgumentCaptor.getAllValues()) {
+            if (msg.what == EVENT_DATA_ROAMING_DISCONNECTED) {
+                flag = false;
+            }
+        }
+        assertTrue(flag);
+
 
         // Test notification sent out when data is enabled, data raoming enabled and data
         // disconnected because of roaming.
         mPhone.setDataEnabled(true);
         mContext.sendBroadcast(intent);
 
-        waitForMs(200);
+        waitForMs(300);
 
-        verify(mNotificationMgr, times(1)).showDataDisconnectedRoaming();
+
+        verify(mHandler, atLeast(1)).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong());
+        flag = false;
+        for (Message msg : messageArgumentCaptor.getAllValues()) {
+            if (msg.what == EVENT_DATA_ROAMING_DISCONNECTED) {
+                flag = true;
+            }
+        }
+        assertTrue(flag);
     }
 }
