Loading src/java/com/android/internal/telephony/DeviceStateMonitor.java +97 −9 Original line number Diff line number Diff line Loading @@ -32,7 +32,9 @@ import android.os.Handler; import android.os.Message; import android.os.PowerManager; import android.telephony.Rlog; import android.telephony.TelephonyManager; import android.util.LocalLog; import android.util.SparseIntArray; import android.view.Display; import com.android.internal.util.IndentingPrintWriter; Loading @@ -55,10 +57,11 @@ public class DeviceStateMonitor extends Handler { protected static final String TAG = DeviceStateMonitor.class.getSimpleName(); private static final int EVENT_RIL_CONNECTED = 0; private static final int EVENT_SCREEN_STATE_CHANGED = 1; private static final int EVENT_POWER_SAVE_MODE_CHANGED = 2; private static final int EVENT_CHARGING_STATE_CHANGED = 3; private static final int EVENT_TETHERING_STATE_CHANGED = 4; private static final int EVENT_UPDATE_MODE_CHANGED = 1; private static final int EVENT_SCREEN_STATE_CHANGED = 2; private static final int EVENT_POWER_SAVE_MODE_CHANGED = 3; private static final int EVENT_CHARGING_STATE_CHANGED = 4; private static final int EVENT_TETHERING_STATE_CHANGED = 5; private final Phone mPhone; Loading Loading @@ -96,6 +99,8 @@ public class DeviceStateMonitor extends Handler { */ private boolean mIsLowDataExpected; private SparseIntArray mUpdateModes = new SparseIntArray(); /** * The unsolicited response filter. See IndicationFilter defined in types.hal for the definition * of each bit. Loading Loading @@ -203,7 +208,25 @@ public class DeviceStateMonitor extends Handler { * @return True if signal strength update should be turned off. */ private boolean shouldTurnOffSignalStrength() { return mIsPowerSaveOn || (!mIsCharging && !mIsScreenOn); // We don't want to get signal strength update when the device is in power save mode. if (mIsPowerSaveOn) { return true; } // We should not turn off signal strength update if one of the following condition is true. // 1. The device is charging. // 2. When the screen is on. // 3. When the update mode is IGNORE_SCREEN_OFF. This mode is used in some corner cases like // when Bluetooth carkit is connected, we still want to update signal strength even // when screen is off. if (mIsCharging || mIsScreenOn || mUpdateModes.get(TelephonyManager.INDICATION_FILTER_SIGNAL_STRENGTH) == TelephonyManager.INDICATION_UPDATE_MODE_IGNORE_SCREEN_OFF) { return false; } // In all other cases, we turn off signal strength update. return true; } /** Loading @@ -211,14 +234,70 @@ public class DeviceStateMonitor extends Handler { * trigger the network update unsolicited response. */ private boolean shouldTurnOffFullNetworkUpdate() { return mIsPowerSaveOn || (!mIsCharging && !mIsScreenOn && !mIsTetheringOn); // We don't want to get full network update when the device is in power save mode. if (mIsPowerSaveOn) { return true; } // We should not turn off full network update if one of the following condition is true. // 1. The device is charging. // 2. When the screen is on. // 3. When data tethering is on. // 4. When the update mode is IGNORE_SCREEN_OFF. if (mIsCharging || mIsScreenOn || mIsTetheringOn || mUpdateModes.get(TelephonyManager.INDICATION_FILTER_FULL_NETWORK_STATE) == TelephonyManager.INDICATION_UPDATE_MODE_IGNORE_SCREEN_OFF) { return false; } // In all other cases, we turn off full network state update. return true; } /** * @return True if data dormancy status update should be turned off. */ private boolean shouldTurnOffDormancyUpdate() { return mIsPowerSaveOn || (!mIsCharging && !mIsTetheringOn && !mIsScreenOn); // We don't want to get dormancy status update when the device is in power save mode. if (mIsPowerSaveOn) { return true; } // We should not turn off data dormancy update if one of the following condition is true. // 1. The device is charging. // 2. When the screen is on. // 3. When data tethering is on. // 4. When the update mode is IGNORE_SCREEN_OFF. if (mIsCharging || mIsScreenOn || mIsTetheringOn || mUpdateModes.get(TelephonyManager.INDICATION_FILTER_DATA_CALL_DORMANCY_CHANGED) == TelephonyManager.INDICATION_UPDATE_MODE_IGNORE_SCREEN_OFF) { return false; } // In all other cases, we turn off data dormancy update. return true; } /** * Set indication update mode * * @param filters Indication filters. Should be a bitmask of INDICATION_FILTER_XXX. * @param mode The voice activation state */ public void setIndicationUpdateMode(int filters, int mode) { sendMessage(obtainMessage(EVENT_UPDATE_MODE_CHANGED, filters, mode)); } private void onSetIndicationUpdateMode(int filters, int mode) { if ((filters & TelephonyManager.INDICATION_FILTER_SIGNAL_STRENGTH) != 0) { mUpdateModes.put(TelephonyManager.INDICATION_FILTER_SIGNAL_STRENGTH, mode); } if ((filters & TelephonyManager.INDICATION_FILTER_FULL_NETWORK_STATE) != 0) { mUpdateModes.put(TelephonyManager.INDICATION_FILTER_FULL_NETWORK_STATE, mode); } if ((filters & TelephonyManager.INDICATION_FILTER_DATA_CALL_DORMANCY_CHANGED) != 0) { mUpdateModes.put(TelephonyManager.INDICATION_FILTER_DATA_CALL_DORMANCY_CHANGED, mode); } } /** Loading @@ -233,8 +312,17 @@ public class DeviceStateMonitor extends Handler { case EVENT_RIL_CONNECTED: onRilConnected(); break; case EVENT_UPDATE_MODE_CHANGED: onSetIndicationUpdateMode(msg.arg1, msg.arg2); break; case EVENT_SCREEN_STATE_CHANGED: case EVENT_POWER_SAVE_MODE_CHANGED: case EVENT_CHARGING_STATE_CHANGED: case EVENT_TETHERING_STATE_CHANGED: onUpdateDeviceState(msg.what, msg.arg1 != 0); break; default: updateDeviceState(msg.what, msg.arg1 != 0); throw new IllegalStateException("Unexpected message arrives. msg = " + msg.what); } } Loading @@ -244,7 +332,7 @@ public class DeviceStateMonitor extends Handler { * @param eventType Device state event type * @param state True if enabled/on, otherwise disabled/off. */ private void updateDeviceState(int eventType, boolean state) { private void onUpdateDeviceState(int eventType, boolean state) { switch (eventType) { case EVENT_SCREEN_STATE_CHANGED: if (mIsScreenOn == state) return; Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +0 −5 Original line number Diff line number Diff line Loading @@ -158,7 +158,6 @@ public class GsmCdmaPhone extends Phone { public ServiceStateTracker mSST; private ArrayList <MmiCode> mPendingMMIs = new ArrayList<MmiCode>(); private IccPhoneBookInterfaceManager mIccPhoneBookIntManager; private DeviceStateMonitor mDeviceStateMonitor; // Used for identify the carrier of current subscription private CarrierIdentifier mCarrerIdentifier; Loading Loading @@ -3406,10 +3405,6 @@ public class GsmCdmaPhone extends Phone { } pw.println(" isCspPlmnEnabled()=" + isCspPlmnEnabled()); pw.flush(); pw.println("++++++++++++++++++++++++++++++++"); pw.println("DeviceStateMonitor:"); mDeviceStateMonitor.dump(fd, pw, args); pw.println("++++++++++++++++++++++++++++++++"); } @Override Loading src/java/com/android/internal/telephony/Phone.java +13 −0 Original line number Diff line number Diff line Loading @@ -277,6 +277,7 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { private String mName; private final String mActionDetached; private final String mActionAttached; protected DeviceStateMonitor mDeviceStateMonitor; protected int mPhoneId; Loading Loading @@ -3571,6 +3572,12 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { mCi.setSimCardPower(state, null); } public void setRadioIndicationUpdateMode(int filters, int mode) { if (mDeviceStateMonitor != null) { mDeviceStateMonitor.setIndicationUpdateMode(filters, mode); } } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("Phone: subId=" + getSubId()); pw.println(" mPhoneId=" + mPhoneId); Loading Loading @@ -3686,6 +3693,12 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { pw.println("++++++++++++++++++++++++++++++++"); } if (mDeviceStateMonitor != null) { pw.println("DeviceStateMonitor:"); mDeviceStateMonitor.dump(fd, pw, args); pw.println("++++++++++++++++++++++++++++++++"); } if (mCi != null && mCi instanceof RIL) { try { ((RIL)mCi).dump(fd, pw, args); Loading Loading
src/java/com/android/internal/telephony/DeviceStateMonitor.java +97 −9 Original line number Diff line number Diff line Loading @@ -32,7 +32,9 @@ import android.os.Handler; import android.os.Message; import android.os.PowerManager; import android.telephony.Rlog; import android.telephony.TelephonyManager; import android.util.LocalLog; import android.util.SparseIntArray; import android.view.Display; import com.android.internal.util.IndentingPrintWriter; Loading @@ -55,10 +57,11 @@ public class DeviceStateMonitor extends Handler { protected static final String TAG = DeviceStateMonitor.class.getSimpleName(); private static final int EVENT_RIL_CONNECTED = 0; private static final int EVENT_SCREEN_STATE_CHANGED = 1; private static final int EVENT_POWER_SAVE_MODE_CHANGED = 2; private static final int EVENT_CHARGING_STATE_CHANGED = 3; private static final int EVENT_TETHERING_STATE_CHANGED = 4; private static final int EVENT_UPDATE_MODE_CHANGED = 1; private static final int EVENT_SCREEN_STATE_CHANGED = 2; private static final int EVENT_POWER_SAVE_MODE_CHANGED = 3; private static final int EVENT_CHARGING_STATE_CHANGED = 4; private static final int EVENT_TETHERING_STATE_CHANGED = 5; private final Phone mPhone; Loading Loading @@ -96,6 +99,8 @@ public class DeviceStateMonitor extends Handler { */ private boolean mIsLowDataExpected; private SparseIntArray mUpdateModes = new SparseIntArray(); /** * The unsolicited response filter. See IndicationFilter defined in types.hal for the definition * of each bit. Loading Loading @@ -203,7 +208,25 @@ public class DeviceStateMonitor extends Handler { * @return True if signal strength update should be turned off. */ private boolean shouldTurnOffSignalStrength() { return mIsPowerSaveOn || (!mIsCharging && !mIsScreenOn); // We don't want to get signal strength update when the device is in power save mode. if (mIsPowerSaveOn) { return true; } // We should not turn off signal strength update if one of the following condition is true. // 1. The device is charging. // 2. When the screen is on. // 3. When the update mode is IGNORE_SCREEN_OFF. This mode is used in some corner cases like // when Bluetooth carkit is connected, we still want to update signal strength even // when screen is off. if (mIsCharging || mIsScreenOn || mUpdateModes.get(TelephonyManager.INDICATION_FILTER_SIGNAL_STRENGTH) == TelephonyManager.INDICATION_UPDATE_MODE_IGNORE_SCREEN_OFF) { return false; } // In all other cases, we turn off signal strength update. return true; } /** Loading @@ -211,14 +234,70 @@ public class DeviceStateMonitor extends Handler { * trigger the network update unsolicited response. */ private boolean shouldTurnOffFullNetworkUpdate() { return mIsPowerSaveOn || (!mIsCharging && !mIsScreenOn && !mIsTetheringOn); // We don't want to get full network update when the device is in power save mode. if (mIsPowerSaveOn) { return true; } // We should not turn off full network update if one of the following condition is true. // 1. The device is charging. // 2. When the screen is on. // 3. When data tethering is on. // 4. When the update mode is IGNORE_SCREEN_OFF. if (mIsCharging || mIsScreenOn || mIsTetheringOn || mUpdateModes.get(TelephonyManager.INDICATION_FILTER_FULL_NETWORK_STATE) == TelephonyManager.INDICATION_UPDATE_MODE_IGNORE_SCREEN_OFF) { return false; } // In all other cases, we turn off full network state update. return true; } /** * @return True if data dormancy status update should be turned off. */ private boolean shouldTurnOffDormancyUpdate() { return mIsPowerSaveOn || (!mIsCharging && !mIsTetheringOn && !mIsScreenOn); // We don't want to get dormancy status update when the device is in power save mode. if (mIsPowerSaveOn) { return true; } // We should not turn off data dormancy update if one of the following condition is true. // 1. The device is charging. // 2. When the screen is on. // 3. When data tethering is on. // 4. When the update mode is IGNORE_SCREEN_OFF. if (mIsCharging || mIsScreenOn || mIsTetheringOn || mUpdateModes.get(TelephonyManager.INDICATION_FILTER_DATA_CALL_DORMANCY_CHANGED) == TelephonyManager.INDICATION_UPDATE_MODE_IGNORE_SCREEN_OFF) { return false; } // In all other cases, we turn off data dormancy update. return true; } /** * Set indication update mode * * @param filters Indication filters. Should be a bitmask of INDICATION_FILTER_XXX. * @param mode The voice activation state */ public void setIndicationUpdateMode(int filters, int mode) { sendMessage(obtainMessage(EVENT_UPDATE_MODE_CHANGED, filters, mode)); } private void onSetIndicationUpdateMode(int filters, int mode) { if ((filters & TelephonyManager.INDICATION_FILTER_SIGNAL_STRENGTH) != 0) { mUpdateModes.put(TelephonyManager.INDICATION_FILTER_SIGNAL_STRENGTH, mode); } if ((filters & TelephonyManager.INDICATION_FILTER_FULL_NETWORK_STATE) != 0) { mUpdateModes.put(TelephonyManager.INDICATION_FILTER_FULL_NETWORK_STATE, mode); } if ((filters & TelephonyManager.INDICATION_FILTER_DATA_CALL_DORMANCY_CHANGED) != 0) { mUpdateModes.put(TelephonyManager.INDICATION_FILTER_DATA_CALL_DORMANCY_CHANGED, mode); } } /** Loading @@ -233,8 +312,17 @@ public class DeviceStateMonitor extends Handler { case EVENT_RIL_CONNECTED: onRilConnected(); break; case EVENT_UPDATE_MODE_CHANGED: onSetIndicationUpdateMode(msg.arg1, msg.arg2); break; case EVENT_SCREEN_STATE_CHANGED: case EVENT_POWER_SAVE_MODE_CHANGED: case EVENT_CHARGING_STATE_CHANGED: case EVENT_TETHERING_STATE_CHANGED: onUpdateDeviceState(msg.what, msg.arg1 != 0); break; default: updateDeviceState(msg.what, msg.arg1 != 0); throw new IllegalStateException("Unexpected message arrives. msg = " + msg.what); } } Loading @@ -244,7 +332,7 @@ public class DeviceStateMonitor extends Handler { * @param eventType Device state event type * @param state True if enabled/on, otherwise disabled/off. */ private void updateDeviceState(int eventType, boolean state) { private void onUpdateDeviceState(int eventType, boolean state) { switch (eventType) { case EVENT_SCREEN_STATE_CHANGED: if (mIsScreenOn == state) return; Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +0 −5 Original line number Diff line number Diff line Loading @@ -158,7 +158,6 @@ public class GsmCdmaPhone extends Phone { public ServiceStateTracker mSST; private ArrayList <MmiCode> mPendingMMIs = new ArrayList<MmiCode>(); private IccPhoneBookInterfaceManager mIccPhoneBookIntManager; private DeviceStateMonitor mDeviceStateMonitor; // Used for identify the carrier of current subscription private CarrierIdentifier mCarrerIdentifier; Loading Loading @@ -3406,10 +3405,6 @@ public class GsmCdmaPhone extends Phone { } pw.println(" isCspPlmnEnabled()=" + isCspPlmnEnabled()); pw.flush(); pw.println("++++++++++++++++++++++++++++++++"); pw.println("DeviceStateMonitor:"); mDeviceStateMonitor.dump(fd, pw, args); pw.println("++++++++++++++++++++++++++++++++"); } @Override Loading
src/java/com/android/internal/telephony/Phone.java +13 −0 Original line number Diff line number Diff line Loading @@ -277,6 +277,7 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { private String mName; private final String mActionDetached; private final String mActionAttached; protected DeviceStateMonitor mDeviceStateMonitor; protected int mPhoneId; Loading Loading @@ -3571,6 +3572,12 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { mCi.setSimCardPower(state, null); } public void setRadioIndicationUpdateMode(int filters, int mode) { if (mDeviceStateMonitor != null) { mDeviceStateMonitor.setIndicationUpdateMode(filters, mode); } } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("Phone: subId=" + getSubId()); pw.println(" mPhoneId=" + mPhoneId); Loading Loading @@ -3686,6 +3693,12 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { pw.println("++++++++++++++++++++++++++++++++"); } if (mDeviceStateMonitor != null) { pw.println("DeviceStateMonitor:"); mDeviceStateMonitor.dump(fd, pw, args); pw.println("++++++++++++++++++++++++++++++++"); } if (mCi != null && mCi instanceof RIL) { try { ((RIL)mCi).dump(fd, pw, args); Loading