Loading src/java/com/android/internal/telephony/uicc/UiccCard.java +12 −0 Original line number Diff line number Diff line Loading @@ -674,6 +674,18 @@ public class UiccCard { } } } // Print UiccCarrierPrivilegeRules and registrants. if (mCarrierPrivilegeRules == null) { pw.println(" mCarrierPrivilegeRules: null"); } else { pw.println(" mCarrierPrivilegeRules: " + mCarrierPrivilegeRules); mCarrierPrivilegeRules.dump(fd, pw, args); } pw.println(" mCarrierPrivilegeRegistrants: size=" + mCarrierPrivilegeRegistrants.size()); for (int i = 0; i < mCarrierPrivilegeRegistrants.size(); i++) { pw.println(" mCarrierPrivilegeRegistrants[" + i + "]=" + ((Registrant)mCarrierPrivilegeRegistrants.get(i)).getHandler()); } pw.flush(); } } src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java +51 −13 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.uicc.IccUtils; import java.io.ByteArrayInputStream; import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.IllegalArgumentException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; Loading Loading @@ -131,8 +133,8 @@ public class UiccCarrierPrivilegeRules extends Handler { @Override public String toString() { return "cert: " + certificateHash + " pkg: " + packageName + " access: " + accessType; return "cert: " + IccUtils.bytesToHexString(certificateHash) + " pkg: " + packageName + " access: " + accessType; } } Loading Loading @@ -178,11 +180,13 @@ public class UiccCarrierPrivilegeRules extends Handler { private AtomicInteger mState; private List<AccessRule> mAccessRules; private Message mLoadedCallback; private String mStatusMessage; // Only used for debugging. public UiccCarrierPrivilegeRules(UiccCard uiccCard, Message loadedCallback) { Rlog.d(LOG_TAG, "Creating UiccCarrierPrivilegeRules"); mUiccCard = uiccCard; mState = new AtomicInteger(STATE_LOADING); mStatusMessage = "Not loaded."; mLoadedCallback = loadedCallback; // Start loading the rules. Loading Loading @@ -323,8 +327,7 @@ public class UiccCarrierPrivilegeRules extends Handler { mUiccCard.iccTransmitApduLogicalChannel(channelId, CLA, COMMAND, P1, P2, P3, DATA, obtainMessage(EVENT_TRANSMIT_LOGICAL_CHANNEL_DONE, new Integer(channelId))); } else { Rlog.e(LOG_TAG, "Error opening channel"); updateState(STATE_ERROR); updateState(STATE_ERROR, "Error opening channel"); } break; Loading @@ -336,19 +339,17 @@ public class UiccCarrierPrivilegeRules extends Handler { if (response.payload != null && response.sw1 == 0x90 && response.sw2 == 0x00) { try { mAccessRules = parseRules(IccUtils.bytesToHexString(response.payload)); updateState(STATE_LOADED); updateState(STATE_LOADED, "Loaded successfully"); } catch (IllegalArgumentException ex) { Rlog.e(LOG_TAG, "Error parsing rules: " + ex); updateState(STATE_ERROR); updateState(STATE_ERROR, "Error parsing rules: " + ex); } } else { Rlog.e(LOG_TAG, "Invalid response: payload=" + response.payload + " sw1=" + response.sw1 + " sw2=" + response.sw2); updateState(STATE_ERROR); String errorMsg = "Invalid response: payload=" + response.payload + " sw1=" + response.sw1 + " sw2=" + response.sw2; updateState(STATE_ERROR, errorMsg); } } else { Rlog.e(LOG_TAG, "Error reading value from SIM."); updateState(STATE_ERROR); updateState(STATE_ERROR, "Error reading value from SIM."); } int channelId = (Integer) ar.userObj; Loading Loading @@ -476,10 +477,47 @@ public class UiccCarrierPrivilegeRules extends Handler { /* * Updates the state and notifies the UiccCard that the rules have finished loading. */ private void updateState(int newState) { private void updateState(int newState, String statusMessage) { mState.set(newState); if (mLoadedCallback != null) { mLoadedCallback.sendToTarget(); } mStatusMessage = statusMessage; Rlog.e(LOG_TAG, mStatusMessage); } /** * Dumps info to Dumpsys - useful for debugging. */ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("UiccCarrierPrivilegeRules: " + this); pw.println(" mState=" + getStateString(mState.get())); pw.println(" mStatusMessage='" + mStatusMessage + "'"); if (mAccessRules != null) { pw.println(" mAccessRules: "); for (AccessRule ar : mAccessRules) { pw.println(" rule='" + ar + "'"); } } else { pw.println(" mAccessRules: null"); } pw.flush(); } /* * Converts state into human readable format. */ private String getStateString(int state) { switch (state) { case STATE_LOADING: return "STATE_LOADING"; case STATE_LOADED: return "STATE_LOADED"; case STATE_ERROR: return "STATE_ERROR"; default: return "UNKNOWN"; } } } src/java/com/android/internal/telephony/uicc/UiccController.java +9 −70 Original line number Diff line number Diff line Loading @@ -91,25 +91,9 @@ public class UiccController extends Handler { private static UiccController mInstance; private Context mContext; /* private CommandsInterface mCi; private UiccCard mUiccCard; */ protected RegistrantList mIccChangedRegistrants = new RegistrantList(); /* public static UiccController make(Context c, CommandsInterface ci) { synchronized (mLock) { if (mInstance != null) { throw new RuntimeException("UiccController.make() should only be called once"); } mInstance = new UiccController(c, ci); return mInstance; } } */ public static UiccController make(Context c, CommandsInterface[] ci) { synchronized (mLock) { if (mInstance != null) { Loading Loading @@ -169,21 +153,6 @@ public class UiccController extends Handler { return getUiccCardApplication(SubscriptionController.getInstance().getPhoneId(SubscriptionController.getInstance().getDefaultSubId()), family); } /* // Easy to use API public IccRecords getIccRecords(int family) { synchronized (mLock) { if (mUiccCard != null) { UiccCardApplication app = mUiccCard.getApplication(family); if (app != null) { return app.getIccRecords(); } } return null; } } */ // Easy to use API public IccRecords getIccRecords(int slotId, int family) { synchronized (mLock) { Loading @@ -195,21 +164,6 @@ public class UiccController extends Handler { } } /* // Easy to use API public IccFileHandler getIccFileHandler(int family) { synchronized (mLock) { if (mUiccCard != null) { UiccCardApplication app = mUiccCard.getApplication(family); if (app != null) { return app.getIccFileHandler(); } } return null; } } */ // Easy to use API public IccFileHandler getIccFileHandler(int slotId, int family) { synchronized (mLock) { Loading Loading @@ -295,17 +249,6 @@ public class UiccController extends Handler { return index; } /* private UiccController(Context c, CommandsInterface ci) { if (DBG) log("Creating UiccController"); mContext = c; mCi = ci; mCi.registerForIccStatusChanged(this, EVENT_ICC_STATUS_CHANGED, null); // This is needed so that we query for sim status in the case when we boot in APM mCi.registerForAvailable(this, EVENT_ICC_STATUS_CHANGED, null); } */ // Easy to use API public UiccCardApplication getUiccCardApplication(int slotId, int family) { synchronized (mLock) { Loading Loading @@ -336,14 +279,6 @@ public class UiccController extends Handler { if (mUiccCards[index] == null) { //Create new card mUiccCards[index] = new UiccCard(mContext, mCis[index], status, index); /* // Update the UiccCard in base class, so that if someone calls // UiccManager.getUiccCard(), it will return the default card. if (index == PhoneConstants.DEFAULT_CARD_INDEX) { mUiccCard = mUiccCards[index]; } */ } else { //Update already existing card mUiccCards[index].update(mContext, mCis[index] , status); Loading @@ -367,8 +302,6 @@ public class UiccController extends Handler { pw.println("UiccController: " + this); pw.println(" mContext=" + mContext); pw.println(" mInstance=" + mInstance); // pw.println(" mCi=" + mCi); // pw.println(" mUiccCard=" + mUiccCard); pw.println(" mIccChangedRegistrants: size=" + mIccChangedRegistrants.size()); for (int i = 0; i < mIccChangedRegistrants.size(); i++) { pw.println(" mIccChangedRegistrants[" + i + "]=" Loading @@ -376,8 +309,14 @@ public class UiccController extends Handler { } pw.println(); pw.flush(); // for (int i = 0; i < mUiccCards.length; i++) { // mUiccCards[i].dump(fd, pw, args); // } pw.println(" mUiccCards: size=" + mUiccCards.length); for (int i = 0; i < mUiccCards.length; i++) { if (mUiccCards[i] == null) { pw.println(" mUiccCards[" + i + "]=null"); } else { pw.println(" mUiccCards[" + i + "]=" + mUiccCards[i]); mUiccCards[i].dump(fd, pw, args); } } } } Loading
src/java/com/android/internal/telephony/uicc/UiccCard.java +12 −0 Original line number Diff line number Diff line Loading @@ -674,6 +674,18 @@ public class UiccCard { } } } // Print UiccCarrierPrivilegeRules and registrants. if (mCarrierPrivilegeRules == null) { pw.println(" mCarrierPrivilegeRules: null"); } else { pw.println(" mCarrierPrivilegeRules: " + mCarrierPrivilegeRules); mCarrierPrivilegeRules.dump(fd, pw, args); } pw.println(" mCarrierPrivilegeRegistrants: size=" + mCarrierPrivilegeRegistrants.size()); for (int i = 0; i < mCarrierPrivilegeRegistrants.size(); i++) { pw.println(" mCarrierPrivilegeRegistrants[" + i + "]=" + ((Registrant)mCarrierPrivilegeRegistrants.get(i)).getHandler()); } pw.flush(); } }
src/java/com/android/internal/telephony/uicc/UiccCarrierPrivilegeRules.java +51 −13 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.uicc.IccUtils; import java.io.ByteArrayInputStream; import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.IllegalArgumentException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; Loading Loading @@ -131,8 +133,8 @@ public class UiccCarrierPrivilegeRules extends Handler { @Override public String toString() { return "cert: " + certificateHash + " pkg: " + packageName + " access: " + accessType; return "cert: " + IccUtils.bytesToHexString(certificateHash) + " pkg: " + packageName + " access: " + accessType; } } Loading Loading @@ -178,11 +180,13 @@ public class UiccCarrierPrivilegeRules extends Handler { private AtomicInteger mState; private List<AccessRule> mAccessRules; private Message mLoadedCallback; private String mStatusMessage; // Only used for debugging. public UiccCarrierPrivilegeRules(UiccCard uiccCard, Message loadedCallback) { Rlog.d(LOG_TAG, "Creating UiccCarrierPrivilegeRules"); mUiccCard = uiccCard; mState = new AtomicInteger(STATE_LOADING); mStatusMessage = "Not loaded."; mLoadedCallback = loadedCallback; // Start loading the rules. Loading Loading @@ -323,8 +327,7 @@ public class UiccCarrierPrivilegeRules extends Handler { mUiccCard.iccTransmitApduLogicalChannel(channelId, CLA, COMMAND, P1, P2, P3, DATA, obtainMessage(EVENT_TRANSMIT_LOGICAL_CHANNEL_DONE, new Integer(channelId))); } else { Rlog.e(LOG_TAG, "Error opening channel"); updateState(STATE_ERROR); updateState(STATE_ERROR, "Error opening channel"); } break; Loading @@ -336,19 +339,17 @@ public class UiccCarrierPrivilegeRules extends Handler { if (response.payload != null && response.sw1 == 0x90 && response.sw2 == 0x00) { try { mAccessRules = parseRules(IccUtils.bytesToHexString(response.payload)); updateState(STATE_LOADED); updateState(STATE_LOADED, "Loaded successfully"); } catch (IllegalArgumentException ex) { Rlog.e(LOG_TAG, "Error parsing rules: " + ex); updateState(STATE_ERROR); updateState(STATE_ERROR, "Error parsing rules: " + ex); } } else { Rlog.e(LOG_TAG, "Invalid response: payload=" + response.payload + " sw1=" + response.sw1 + " sw2=" + response.sw2); updateState(STATE_ERROR); String errorMsg = "Invalid response: payload=" + response.payload + " sw1=" + response.sw1 + " sw2=" + response.sw2; updateState(STATE_ERROR, errorMsg); } } else { Rlog.e(LOG_TAG, "Error reading value from SIM."); updateState(STATE_ERROR); updateState(STATE_ERROR, "Error reading value from SIM."); } int channelId = (Integer) ar.userObj; Loading Loading @@ -476,10 +477,47 @@ public class UiccCarrierPrivilegeRules extends Handler { /* * Updates the state and notifies the UiccCard that the rules have finished loading. */ private void updateState(int newState) { private void updateState(int newState, String statusMessage) { mState.set(newState); if (mLoadedCallback != null) { mLoadedCallback.sendToTarget(); } mStatusMessage = statusMessage; Rlog.e(LOG_TAG, mStatusMessage); } /** * Dumps info to Dumpsys - useful for debugging. */ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("UiccCarrierPrivilegeRules: " + this); pw.println(" mState=" + getStateString(mState.get())); pw.println(" mStatusMessage='" + mStatusMessage + "'"); if (mAccessRules != null) { pw.println(" mAccessRules: "); for (AccessRule ar : mAccessRules) { pw.println(" rule='" + ar + "'"); } } else { pw.println(" mAccessRules: null"); } pw.flush(); } /* * Converts state into human readable format. */ private String getStateString(int state) { switch (state) { case STATE_LOADING: return "STATE_LOADING"; case STATE_LOADED: return "STATE_LOADED"; case STATE_ERROR: return "STATE_ERROR"; default: return "UNKNOWN"; } } }
src/java/com/android/internal/telephony/uicc/UiccController.java +9 −70 Original line number Diff line number Diff line Loading @@ -91,25 +91,9 @@ public class UiccController extends Handler { private static UiccController mInstance; private Context mContext; /* private CommandsInterface mCi; private UiccCard mUiccCard; */ protected RegistrantList mIccChangedRegistrants = new RegistrantList(); /* public static UiccController make(Context c, CommandsInterface ci) { synchronized (mLock) { if (mInstance != null) { throw new RuntimeException("UiccController.make() should only be called once"); } mInstance = new UiccController(c, ci); return mInstance; } } */ public static UiccController make(Context c, CommandsInterface[] ci) { synchronized (mLock) { if (mInstance != null) { Loading Loading @@ -169,21 +153,6 @@ public class UiccController extends Handler { return getUiccCardApplication(SubscriptionController.getInstance().getPhoneId(SubscriptionController.getInstance().getDefaultSubId()), family); } /* // Easy to use API public IccRecords getIccRecords(int family) { synchronized (mLock) { if (mUiccCard != null) { UiccCardApplication app = mUiccCard.getApplication(family); if (app != null) { return app.getIccRecords(); } } return null; } } */ // Easy to use API public IccRecords getIccRecords(int slotId, int family) { synchronized (mLock) { Loading @@ -195,21 +164,6 @@ public class UiccController extends Handler { } } /* // Easy to use API public IccFileHandler getIccFileHandler(int family) { synchronized (mLock) { if (mUiccCard != null) { UiccCardApplication app = mUiccCard.getApplication(family); if (app != null) { return app.getIccFileHandler(); } } return null; } } */ // Easy to use API public IccFileHandler getIccFileHandler(int slotId, int family) { synchronized (mLock) { Loading Loading @@ -295,17 +249,6 @@ public class UiccController extends Handler { return index; } /* private UiccController(Context c, CommandsInterface ci) { if (DBG) log("Creating UiccController"); mContext = c; mCi = ci; mCi.registerForIccStatusChanged(this, EVENT_ICC_STATUS_CHANGED, null); // This is needed so that we query for sim status in the case when we boot in APM mCi.registerForAvailable(this, EVENT_ICC_STATUS_CHANGED, null); } */ // Easy to use API public UiccCardApplication getUiccCardApplication(int slotId, int family) { synchronized (mLock) { Loading Loading @@ -336,14 +279,6 @@ public class UiccController extends Handler { if (mUiccCards[index] == null) { //Create new card mUiccCards[index] = new UiccCard(mContext, mCis[index], status, index); /* // Update the UiccCard in base class, so that if someone calls // UiccManager.getUiccCard(), it will return the default card. if (index == PhoneConstants.DEFAULT_CARD_INDEX) { mUiccCard = mUiccCards[index]; } */ } else { //Update already existing card mUiccCards[index].update(mContext, mCis[index] , status); Loading @@ -367,8 +302,6 @@ public class UiccController extends Handler { pw.println("UiccController: " + this); pw.println(" mContext=" + mContext); pw.println(" mInstance=" + mInstance); // pw.println(" mCi=" + mCi); // pw.println(" mUiccCard=" + mUiccCard); pw.println(" mIccChangedRegistrants: size=" + mIccChangedRegistrants.size()); for (int i = 0; i < mIccChangedRegistrants.size(); i++) { pw.println(" mIccChangedRegistrants[" + i + "]=" Loading @@ -376,8 +309,14 @@ public class UiccController extends Handler { } pw.println(); pw.flush(); // for (int i = 0; i < mUiccCards.length; i++) { // mUiccCards[i].dump(fd, pw, args); // } pw.println(" mUiccCards: size=" + mUiccCards.length); for (int i = 0; i < mUiccCards.length; i++) { if (mUiccCards[i] == null) { pw.println(" mUiccCards[" + i + "]=null"); } else { pw.println(" mUiccCards[" + i + "]=" + mUiccCards[i]); mUiccCards[i].dump(fd, pw, args); } } } }