Emit LockedPins after pin_type is queried
authorTommi Kenakkala <tommi.kenakkala@tieto.com>
Mon, 22 Jun 2015 13:37:01 +0000 (16:37 +0300)
committerDenis Kenzior <denkenz@gmail.com>
Thu, 18 Jun 2015 19:56:05 +0000 (14:56 -0500)
Fixes property change not being emited when hot-swapping a
PIN-enabled card.

src/sim.c

index 715f3c059905c53bbda6c8029c6a16c11600d359..8341af046378729a7e06b45947bfad0e015fb8ce 100644 (file)
--- a/src/sim.c
+++ b/src/sim.c
@@ -2740,6 +2740,10 @@ static void sim_pin_query_cb(const struct ofono_error *error,
        DBusConnection *conn = ofono_dbus_get_connection();
        const char *path = __ofono_atom_get_path(sim->atom);
        const char *pin_name;
+       char **locked_pins;
+       gboolean lock_changed;
+
+       DBG("sim->pin_type: %d, pin_type: %d", sim->pin_type, pin_type);
 
        if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
                ofono_error("Querying PIN authentication state failed");
@@ -2754,9 +2758,25 @@ static void sim_pin_query_cb(const struct ofono_error *error,
                                password_is_pin(pin_type) == FALSE)
                        pin_type = puk2pin(pin_type);
 
-               if (pin_type != OFONO_SIM_PASSWORD_INVALID)
+
+               if (pin_type != OFONO_SIM_PASSWORD_INVALID
+                               && pin_type != OFONO_SIM_PASSWORD_NONE) {
+                       lock_changed = !sim->locked_pins[pin_type];
+
                        sim->locked_pins[pin_type] = TRUE;
 
+                       if (lock_changed) {
+                               locked_pins = get_locked_pins(sim);
+
+                               ofono_dbus_signal_array_property_changed(conn,
+                                               path,
+                                               OFONO_SIM_MANAGER_INTERFACE,
+                                               "LockedPins", DBUS_TYPE_STRING,
+                                               &locked_pins);
+
+                               g_strfreev(locked_pins);
+                       }
+               }
                ofono_dbus_signal_property_changed(conn, path,
                                                OFONO_SIM_MANAGER_INTERFACE,
                                                "PinRequired", DBUS_TYPE_STRING,