public abstract class Notifier : Gtk.Dialog
{
- public string name { get; construct; }
+ public string notifier_name { get; construct; }
+
+ construct {
+ set_transient_for(zavai.app);
+ set_modal(true);
+ set_position(Gtk.WindowPosition.CENTER_ON_PARENT);
+ }
+
+ protected virtual bool push_aux_state()
+ {
+ return false;
+ }
+
+ protected virtual bool push_vibrator_state()
+ {
+ return false;
+ }
+
+ protected virtual bool push_ringtone_state()
+ {
+ return false;
+ }
public int run()
{
- ui.power.backlight.request(name);
- // TODO: Save aux state
- // TODO: Save vibrator state
- // TODO: Save ringtone state
- // TODO: set our state
+ ui.power.backlight.request(notifier_name);
+
+ // Setup our attention seeking strategy
+ bool has_aux = zavai.led.aux != null && push_aux_state();
+ bool has_vibrator = zavai.led.vibrator != null && push_vibrator_state();
+ bool has_ringtone = zavai.audio.soundplayer != null && push_ringtone_state();
+
+ // Run dialog
int res = base.run();
- // TODO: Restore ringtone state
- // TODO: Restore vibrator state
- // TODO: Restore aux state
- ui.power.backlight.release(name);
+
+ if (has_ringtone) zavai.audio.soundplayer.pop_state(notifier_name);
+ if (has_vibrator) zavai.led.vibrator.pop_state(notifier_name);
+ if (has_aux) zavai.led.aux.pop_state(notifier_name);
+ ui.power.backlight.release(notifier_name);
return res;
}
}
+protected class CallNotifierDialog : ui.notify.Notifier
+{
+ protected Gtk.Label message;
+ protected Gtk.Button message_button;
+
+ public CallNotifierDialog(string title, string text)
+ {
+ Object(
+ notifier_name: "call",
+ title: title
+ );
+
+ set_size_request(300, 500);
+
+ add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK);
+ add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL);
+ set_default_response(Gtk.ResponseType.OK);
+
+ weak Gtk.VBox vbox = (Gtk.VBox)get_content_area();
+
+ message = new Gtk.Label(text);
+ message_button = new Gtk.Button();
+ message_button.set_image(message);
+ message_button.clicked += (b) => { response(Gtk.ResponseType.OK); };
+ vbox.pack_start(message_button, true, true, 0);
+ message_button.show();
+ }
+
+ protected override bool push_aux_state()
+ {
+ var state = new zavai.led.LedState(notifier_name);
+ state.set_blink(255);
+ zavai.led.aux.push_state(state);
+ return true;
+ }
+
+ protected override bool push_vibrator_state()
+ {
+ var state = new zavai.led.LedState(notifier_name);
+ state.set_blink(255);
+ zavai.led.vibrator.push_state(state);
+ return true;
+ }
+
+ protected override bool push_ringtone_state()
+ {
+ var state = new zavai.audio.PlayerState(notifier_name, config.ringtone_call, true);
+ zavai.audio.soundplayer.push_state(state);
+ return true;
+ }
+}
+
+public class CallNotifier : zavai.Resource, ui.notify.Notifier
+{
+ protected int call_index = -1;
+ protected CallNotifierDialog dialog = null;
+
+ public CallNotifier()
+ {
+ zavai.registry.register(this);
+
+ zavai.gsm.gsm.new_call += trigger;
+ zavai.gsm.gsm.end_call += done;
+ }
+
+ public void trigger(int index)
+ {
+ call_index = index;
+ dialog = new CallNotifierDialog("Call", "TODO");
+
+ if (zavai.led.auxbutton != null)
+ zavai.led.auxbutton.event += on_auxbutton;
+
+ int res = dialog.run();
+ switch (res)
+ {
+ case Gtk.ResponseType.OK:
+ // TODO clock.alarm_trigger_queue.ack(current);
+ break;
+ case Gtk.ResponseType.CANCEL:
+ // TODO clock.alarm_trigger_queue.cancel(current);
+ break;
+ }
+
+ if (zavai.led.auxbutton != null)
+ zavai.led.auxbutton.event -= on_auxbutton;
+
+ dialog.destroy();
+ dialog = null;
+ call_index = -1;
+ }
+
+ protected bool on_auxbutton(ulong time, bool pressed)
+ {
+ if (dialog == null) return false;
+ dialog.response(Gtk.ResponseType.OK);
+ return true;
+ }
+
+ public void done(int index)
+ {
+ if (call_index != index || dialog == null) return;
+ dialog.response(Gtk.ResponseType.NONE);
+ }
+
+ public void shutdown()
+ {
+ if (dialog == null) return;
+ dialog.response(Gtk.ResponseType.CANCEL);
+ }
+}
+
+public CallNotifier call = null;
+
+public void sms()
+{
+ var ps = new zavai.audio.PlayerState("gsm", zavai.config.ringtone_sms, false);
+ zavai.audio.soundplayer.push_state(ps);
+}
+
public void init()
{
+ call = new CallNotifier();
+
+ zavai.gsm.gsm.new_sms += sms;
}
}