diff options
author | Jack Yu <jackyu@google.com> | 2019-11-12 17:23:30 -0800 |
---|---|---|
committer | Jack Yu <jackyu@google.com> | 2019-11-14 12:03:27 -0800 |
commit | 78e766ac1f37c8d17162cbf28a39d278fef1ba32 (patch) | |
tree | 50d0ec5b3d4dc4abd87cace3948c448df76b1454 | |
parent | ed7a0e8d99e5027ec0ae1dfb91be33e9b7861fb6 (diff) | |
download | android_frameworks_opt_telephony-78e766ac1f37c8d17162cbf28a39d278fef1ba32.tar.gz android_frameworks_opt_telephony-78e766ac1f37c8d17162cbf28a39d278fef1ba32.tar.bz2 android_frameworks_opt_telephony-78e766ac1f37c8d17162cbf28a39d278fef1ba32.zip |
DO NOT MERGE - Added reset geo-fencing checking after airplane mode support
The out-of-polygon cell broadcast messages will not be
considered for rebroadcasting after airplane mode turned on
or reboot.
Bug: 143614007
Test: Unit tests
Merged-In: I2d2da2f173f6ed071ad9dfdb95fb04ac9bee3f71
Change-Id: I2d2da2f173f6ed071ad9dfdb95fb04ac9bee3f71
-rw-r--r-- | src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java b/src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java index 2b3fdcd18..9367b5dcc 100644 --- a/src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java +++ b/src/java/com/android/internal/telephony/gsm/GsmCellBroadcastHandler.java @@ -18,13 +18,18 @@ package com.android.internal.telephony.gsm; import static com.android.internal.telephony.gsm.SmsCbConstants.MESSAGE_ID_CMAS_GEO_FENCING_TRIGGER; +import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.ContentUris; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; import android.os.AsyncResult; import android.os.Message; +import android.os.SystemClock; import android.provider.Telephony.CellBroadcasts; import android.telephony.CellLocation; import android.telephony.SmsCbLocation; @@ -39,6 +44,7 @@ import com.android.internal.telephony.Phone; import com.android.internal.telephony.gsm.GsmSmsCbMessage.GeoFencingTriggerMessage; import com.android.internal.telephony.gsm.GsmSmsCbMessage.GeoFencingTriggerMessage.CellBroadcastIdentity; +import java.text.DateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -57,9 +63,29 @@ public class GsmCellBroadcastHandler extends CellBroadcastHandler { private final HashMap<SmsCbConcatInfo, byte[][]> mSmsCbPageMap = new HashMap<SmsCbConcatInfo, byte[][]>(4); + private long mLastAirplaneModeTime = 0; + protected GsmCellBroadcastHandler(Context context, Phone phone) { super("GsmCellBroadcastHandler", context, phone); phone.mCi.setOnNewGsmBroadcastSms(getHandler(), EVENT_NEW_SMS_MESSAGE, null); + + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); + mContext.registerReceiver( + new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case Intent.ACTION_AIRPLANE_MODE_CHANGED: + boolean airplaneModeOn = intent.getBooleanExtra("state", false); + if (airplaneModeOn) { + mLastAirplaneModeTime = System.currentTimeMillis(); + } + break; + } + + } + }, intentFilter); } @Override @@ -92,8 +118,15 @@ public class GsmCellBroadcastHandler extends CellBroadcastHandler { final List<SmsCbMessage> cbMessages = new ArrayList<>(); final List<Uri> cbMessageUris = new ArrayList<>(); - // Only consider the cell broadcast received within 24 hours. long lastReceivedTime = System.currentTimeMillis() - DateUtils.DAY_IN_MILLIS; + Resources res = mContext.getResources(); + if (res.getBoolean(com.android.internal.R.bool.reset_geo_fencing_check_after_boot_or_apm)) { + // Check last airplane mode time + lastReceivedTime = Long.max(lastReceivedTime, mLastAirplaneModeTime); + // Check last boot up time + lastReceivedTime = Long.max(lastReceivedTime, + System.currentTimeMillis() - SystemClock.elapsedRealtime()); + } // Find the cell broadcast message identify by the message identifier and serial number // and is not broadcasted. @@ -121,6 +154,9 @@ public class GsmCellBroadcastHandler extends CellBroadcastHandler { } } + log("Found " + cbMessages.size() + " messages since " + + DateFormat.getDateTimeInstance().format(lastReceivedTime)); + List<Geometry> commonBroadcastArea = new ArrayList<>(); if (geoFencingTriggerMessage.shouldShareBroadcastArea()) { for (SmsCbMessage msg : cbMessages) { |