Loading src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java +19 −10 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.database.Cursor; import android.database.SQLException; import android.net.Uri; import android.os.UserHandle; import android.os.UserManager; import android.provider.Telephony; import android.telephony.Rlog; Loading Loading @@ -83,16 +84,17 @@ public class SmsBroadcastUndelivered { public void onReceive(Context context, Intent intent) { Rlog.d(TAG, "Received broadcast " + intent.getAction()); if (Intent.ACTION_USER_UNLOCKED.equals(intent.getAction())) { Thread t = new Thread() { new ScanRawTableThread().start(); } } }; private class ScanRawTableThread extends Thread { @Override public void run() { scanRawTable(); } }; t.start(); } } }; public static void initialize(Context context, GsmInboundSmsHandler gsmInboundSmsHandler, CdmaInboundSmsHandler cdmaInboundSmsHandler) { Loading @@ -118,9 +120,16 @@ public class SmsBroadcastUndelivered { mGsmInboundSmsHandler = gsmInboundSmsHandler; mCdmaInboundSmsHandler = cdmaInboundSmsHandler; UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); if (userManager.isUserUnlocked()) { new ScanRawTableThread().start(); } else { IntentFilter userFilter = new IntentFilter(); userFilter.addAction(Intent.ACTION_USER_UNLOCKED); context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, userFilter, null, null); context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, userFilter, null, null); } } /** Loading tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java +35 −5 Original line number Diff line number Diff line Loading @@ -630,9 +630,8 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { @Test @MediumTest public void testBroadcastUndelivered() throws Exception { public void testBroadcastUndeliveredUserLocked() throws Exception { replaceInstance(SmsBroadcastUndelivered.class, "instance", null, null); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); doReturn(0).when(mInboundSmsTracker).getDestPort(); // add a fake entry to db Loading @@ -642,13 +641,44 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { // make it a single-part message doReturn(1).when(mInboundSmsTracker).getMessageCount(); // user locked UserManager userManager = (UserManager)mContext.getSystemService(Context.USER_SERVICE); doReturn(false).when(userManager).isUserUnlocked(); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); waitForMs(100); // verify no broadcasts sent because due to !isUserUnlocked verify(mContext, never()).sendBroadcast(any(Intent.class)); // when user unlocks the device, the message in db should be broadcast doReturn(true).when(userManager).isUserUnlocked(); mContext.sendBroadcast(new Intent(Intent.ACTION_USER_UNLOCKED)); waitForMs(100); verifyDataSmsIntentBroadcasts(1); } @Test @MediumTest public void testBroadcastUndeliveredUserUnlocked() throws Exception { replaceInstance(SmsBroadcastUndelivered.class, "instance", null, null); doReturn(0).when(mInboundSmsTracker).getDestPort(); // add a fake entry to db ContentValues rawSms = new ContentValues(); mContentProvider.insert(sRawUri, rawSms); // make it a single-part message doReturn(1).when(mInboundSmsTracker).getMessageCount(); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); waitForMs(100); // user is unlocked; intent should be broadcast right away verifyDataSmsIntentBroadcasts(0); } @Test @MediumTest public void testBroadcastUndeliveredDeleted() throws Exception { Loading Loading
src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java +19 −10 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.database.Cursor; import android.database.SQLException; import android.net.Uri; import android.os.UserHandle; import android.os.UserManager; import android.provider.Telephony; import android.telephony.Rlog; Loading Loading @@ -83,16 +84,17 @@ public class SmsBroadcastUndelivered { public void onReceive(Context context, Intent intent) { Rlog.d(TAG, "Received broadcast " + intent.getAction()); if (Intent.ACTION_USER_UNLOCKED.equals(intent.getAction())) { Thread t = new Thread() { new ScanRawTableThread().start(); } } }; private class ScanRawTableThread extends Thread { @Override public void run() { scanRawTable(); } }; t.start(); } } }; public static void initialize(Context context, GsmInboundSmsHandler gsmInboundSmsHandler, CdmaInboundSmsHandler cdmaInboundSmsHandler) { Loading @@ -118,9 +120,16 @@ public class SmsBroadcastUndelivered { mGsmInboundSmsHandler = gsmInboundSmsHandler; mCdmaInboundSmsHandler = cdmaInboundSmsHandler; UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); if (userManager.isUserUnlocked()) { new ScanRawTableThread().start(); } else { IntentFilter userFilter = new IntentFilter(); userFilter.addAction(Intent.ACTION_USER_UNLOCKED); context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, userFilter, null, null); context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, userFilter, null, null); } } /** Loading
tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java +35 −5 Original line number Diff line number Diff line Loading @@ -630,9 +630,8 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { @Test @MediumTest public void testBroadcastUndelivered() throws Exception { public void testBroadcastUndeliveredUserLocked() throws Exception { replaceInstance(SmsBroadcastUndelivered.class, "instance", null, null); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); doReturn(0).when(mInboundSmsTracker).getDestPort(); // add a fake entry to db Loading @@ -642,13 +641,44 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { // make it a single-part message doReturn(1).when(mInboundSmsTracker).getMessageCount(); // user locked UserManager userManager = (UserManager)mContext.getSystemService(Context.USER_SERVICE); doReturn(false).when(userManager).isUserUnlocked(); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); waitForMs(100); // verify no broadcasts sent because due to !isUserUnlocked verify(mContext, never()).sendBroadcast(any(Intent.class)); // when user unlocks the device, the message in db should be broadcast doReturn(true).when(userManager).isUserUnlocked(); mContext.sendBroadcast(new Intent(Intent.ACTION_USER_UNLOCKED)); waitForMs(100); verifyDataSmsIntentBroadcasts(1); } @Test @MediumTest public void testBroadcastUndeliveredUserUnlocked() throws Exception { replaceInstance(SmsBroadcastUndelivered.class, "instance", null, null); doReturn(0).when(mInboundSmsTracker).getDestPort(); // add a fake entry to db ContentValues rawSms = new ContentValues(); mContentProvider.insert(sRawUri, rawSms); // make it a single-part message doReturn(1).when(mInboundSmsTracker).getMessageCount(); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); waitForMs(100); // user is unlocked; intent should be broadcast right away verifyDataSmsIntentBroadcasts(0); } @Test @MediumTest public void testBroadcastUndeliveredDeleted() throws Exception { Loading