aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com
diff options
context:
space:
mode:
authorNaveen Kalla <nkalla@codeaurora.org>2014-08-02 00:50:29 -0700
committerWink Saville <wink@google.com>2014-08-21 10:07:14 +0000
commit03586878fb3d870373f2fdf65afb81cc5ae97067 (patch)
tree8b6f321073609b660b59356451f883cc09b6a4f1 /src/java/com
parent75e63fd850839856400ce41f5daa56819e09de39 (diff)
downloadandroid_frameworks_opt_telephony-03586878fb3d870373f2fdf65afb81cc5ae97067.tar.gz
android_frameworks_opt_telephony-03586878fb3d870373f2fdf65afb81cc5ae97067.tar.bz2
android_frameworks_opt_telephony-03586878fb3d870373f2fdf65afb81cc5ae97067.zip
Send Shutdown Request to RIL.
Send RIL_REQUEST_SHUTDOWN to RIL when device is shutting down. RIL can use this request to shutdown the SIM card and modem gracefully. Bug: 9773278 Change-Id: I6afa9e810cefc7855f7ae42e51f39cc51fa2aa6e
Diffstat (limited to 'src/java/com')
-rw-r--r--src/java/com/android/internal/telephony/BaseCommands.java4
-rw-r--r--src/java/com/android/internal/telephony/CommandsInterface.java7
-rw-r--r--src/java/com/android/internal/telephony/Phone.java10
-rw-r--r--src/java/com/android/internal/telephony/PhoneBase.java10
-rw-r--r--src/java/com/android/internal/telephony/PhoneProxy.java10
-rw-r--r--src/java/com/android/internal/telephony/RIL.java20
-rw-r--r--src/java/com/android/internal/telephony/ServiceStateTracker.java9
-rw-r--r--src/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java4
-rw-r--r--src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java3
-rw-r--r--src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java4
-rw-r--r--src/java/com/android/internal/telephony/sip/SipCommandInterface.java4
-rw-r--r--src/java/com/android/internal/telephony/test/SimulatedCommands.java5
12 files changed, 89 insertions, 1 deletions
diff --git a/src/java/com/android/internal/telephony/BaseCommands.java b/src/java/com/android/internal/telephony/BaseCommands.java
index 47dcc9944..795ecbacd 100644
--- a/src/java/com/android/internal/telephony/BaseCommands.java
+++ b/src/java/com/android/internal/telephony/BaseCommands.java
@@ -773,4 +773,8 @@ public abstract class BaseCommands implements CommandsInterface {
public void setDataAllowed(boolean allowed, Message response) {
}
+
+ @Override
+ public void requestShutdown(Message result) {
+ }
}
diff --git a/src/java/com/android/internal/telephony/CommandsInterface.java b/src/java/com/android/internal/telephony/CommandsInterface.java
index f323cbca5..cd6124937 100644
--- a/src/java/com/android/internal/telephony/CommandsInterface.java
+++ b/src/java/com/android/internal/telephony/CommandsInterface.java
@@ -1882,4 +1882,11 @@ public interface CommandsInterface {
*/
// FIXME We may need to pass AID and slotid also
public void setDataAllowed(boolean allowed, Message result);
+
+ /**
+ * Inform RIL that the device is shutting down
+ *
+ * @param result Callback message contains the information of SUCCESS/FAILURE
+ */
+ public void requestShutdown(Message result);
}
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index bbf414c30..ae6f4f5e9 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -1821,4 +1821,14 @@ public interface Phone {
* Override the service provider name and the operator name for the input ICCID.
*/
public boolean setOperatorBrandOverride(String iccId, String brand);
+
+ /**
+ * Is Radio Present on the device and is it accessible
+ */
+ public boolean isRadioAvailable();
+
+ /**
+ * shutdown Radio gracefully
+ */
+ public void shutdownRadio();
}
diff --git a/src/java/com/android/internal/telephony/PhoneBase.java b/src/java/com/android/internal/telephony/PhoneBase.java
index 0e537fad1..257906f51 100644
--- a/src/java/com/android/internal/telephony/PhoneBase.java
+++ b/src/java/com/android/internal/telephony/PhoneBase.java
@@ -1859,4 +1859,14 @@ public abstract class PhoneBase extends Handler implements Phone {
public boolean setOperatorBrandOverride(String iccId, String brand) {
return false;
}
+
+ @Override
+ public boolean isRadioAvailable() {
+ return mCi.getRadioState().isAvailable();
+ }
+
+ @Override
+ public void shutdownRadio() {
+ getServiceStateTracker().requestShutdown();
+ }
}
diff --git a/src/java/com/android/internal/telephony/PhoneProxy.java b/src/java/com/android/internal/telephony/PhoneProxy.java
index f095a7e46..a44e78478 100644
--- a/src/java/com/android/internal/telephony/PhoneProxy.java
+++ b/src/java/com/android/internal/telephony/PhoneProxy.java
@@ -1353,4 +1353,14 @@ public class PhoneProxy extends Handler implements Phone {
public boolean setOperatorBrandOverride(String iccId, String brand) {
return mActivePhone.setOperatorBrandOverride(iccId, brand);
}
+
+ @Override
+ public boolean isRadioAvailable() {
+ return mCommandsInterface.getRadioState().isAvailable();
+ }
+
+ @Override
+ public void shutdownRadio() {
+ mActivePhone.shutdownRadio();
+ }
}
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index 8b82d5ae9..8802b00f5 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -1499,6 +1499,16 @@ public final class RIL extends BaseCommands implements CommandsInterface {
}
@Override
+ public void requestShutdown(Message result) {
+ RILRequest rr = RILRequest.obtain(RIL_REQUEST_SHUTDOWN, result);
+
+ if (RILJ_LOGD)
+ riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
+
+ send(rr);
+ }
+
+ @Override
public void
setSuppServiceNotifications(boolean enable, Message result) {
RILRequest rr
@@ -2499,6 +2509,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
case RIL_REQUEST_ALLOW_DATA: ret = responseVoid(p); break;
case RIL_REQUEST_GET_HARDWARE_CONFIG: ret = responseHardwareConfig(p); break;
case RIL_REQUEST_SIM_AUTHENTICATION: ret = responseICC_IOBase64(p); break;
+ case RIL_REQUEST_SHUTDOWN: ret = responseVoid(p); break;
default:
throw new RuntimeException("Unrecognized solicited response: " + rr.mRequest);
//break;
@@ -2517,6 +2528,14 @@ public final class RIL extends BaseCommands implements CommandsInterface {
}
}
+ if (rr.mRequest == RIL_REQUEST_SHUTDOWN) {
+ // Set RADIO_STATE to RADIO_UNAVAILABLE to continue shutdown process
+ // regardless of error code to continue shutdown procedure.
+ riljLog("Response to RIL_REQUEST_SHUTDOWN received. Error is " +
+ error + " Setting Radio State to Unavailable regardless of error.");
+ setRadioState(RadioState.RADIO_UNAVAILABLE);
+ }
+
// Here and below fake RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED, see b/7255789.
// This is needed otherwise we don't automatically transition to the main lock
// screen when the pin or puk is entered incorrectly.
@@ -3926,6 +3945,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
case RIL_REQUEST_ALLOW_DATA: return "RIL_REQUEST_ALLOW_DATA";
case RIL_REQUEST_GET_HARDWARE_CONFIG: return "GET_HARDWARE_CONFIG";
case RIL_REQUEST_SIM_AUTHENTICATION: return "RIL_REQUEST_SIM_AUTHENTICATION";
+ case RIL_REQUEST_SHUTDOWN: return "RIL_REQUEST_SHUTDOWN";
default: return "<unknown request>";
}
}
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 96c45a1ef..6cf0a41db 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -210,6 +210,8 @@ public abstract class ServiceStateTracker extends Handler {
protected PendingIntent mRadioOffIntent = null;
protected static final String ACTION_RADIO_OFF = "android.intent.action.ACTION_RADIO_OFF";
protected boolean mPowerOffDelayNeed = true;
+ protected boolean mDeviceShuttingDown = false;
+
protected ServiceStateTracker(PhoneBase phoneBase, CommandsInterface ci, CellInfo cellInfo) {
mPhoneBase = phoneBase;
@@ -226,6 +228,13 @@ public abstract class ServiceStateTracker extends Handler {
ServiceState.rilRadioTechnologyToString(ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN));
}
+ void requestShutdown() {
+ if (mDeviceShuttingDown == true) return;
+ mDeviceShuttingDown = true;
+ mDesiredPowerState = false;
+ setPowerStateToDesired();
+ }
+
public void dispose() {
mCi.unSetOnSignalStrengthUpdate(this);
mUiccController.unregisterForIccChanged(this);
diff --git a/src/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/src/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index a3fc310f9..8e0fbc719 100644
--- a/src/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -534,7 +534,9 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
// If it's on and available and we want it off gracefully
powerOffRadioSafely(dcTracker);
- } // Otherwise, we're in the desired state
+ } else if (mDeviceShuttingDown && mCi.getRadioState().isAvailable()) {
+ mCi.requestShutdown(null);
+ }
}
@Override
diff --git a/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index b099a9acd..e14216e2d 100644
--- a/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -507,6 +507,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
protected void setPowerStateToDesired() {
if (DBG) {
+ log("mDeviceShuttingDown = " + mDeviceShuttingDown);
log("mDesiredPowerState = " + mDesiredPowerState);
log("getRadioState = " + mCi.getRadioState());
log("mPowerOffDelayNeed = " + mPowerOffDelayNeed);
@@ -548,6 +549,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
DcTrackerBase dcTracker = mPhone.mDcTracker;
powerOffRadioSafely(dcTracker);
}
+ } else if (mDeviceShuttingDown && mCi.getRadioState().isAvailable()) {
+ mCi.requestShutdown(null);
}
}
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java
index 28bcf6a42..849eeeef0 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCommandInterface.java
@@ -591,4 +591,8 @@ class ImsPhoneCommandInterface extends BaseCommands implements CommandsInterface
@Override
public void getHardwareConfig(Message result) {}
+
+ @Override
+ public void requestShutdown(Message result) {
+ }
}
diff --git a/src/java/com/android/internal/telephony/sip/SipCommandInterface.java b/src/java/com/android/internal/telephony/sip/SipCommandInterface.java
index 433e9f292..bc90229a2 100644
--- a/src/java/com/android/internal/telephony/sip/SipCommandInterface.java
+++ b/src/java/com/android/internal/telephony/sip/SipCommandInterface.java
@@ -602,4 +602,8 @@ class SipCommandInterface extends BaseCommands implements CommandsInterface {
@Override
public void getHardwareConfig(Message result) {
}
+
+ @Override
+ public void requestShutdown(Message result) {
+ }
}
diff --git a/src/java/com/android/internal/telephony/test/SimulatedCommands.java b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
index 11bc6ad30..1a3bab72f 100644
--- a/src/java/com/android/internal/telephony/test/SimulatedCommands.java
+++ b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
@@ -1735,4 +1735,9 @@ public final class SimulatedCommands extends BaseCommands
public void getHardwareConfig(Message result) {
unimplemented(result);
}
+
+ @Override
+ public void requestShutdown(Message result) {
+ setRadioState(RadioState.RADIO_UNAVAILABLE);
+ }
}