#include "ussd.h"
#include "util.h"
#include "simple-popup.h"
+#include "i18n.h"
#ifdef HAVE_TIZEN
#include <appcore-efl.h>
+#ifdef HAVE_UI_GADGET
#include <ui-gadget.h>
+#endif
#include <Ecore_X.h>
#endif
static Evas_Object *history = NULL;
static Evas_Object *cs = NULL;
static Evas_Object *flip = NULL;
+static Evas_Object *current_view = NULL;
static OFono_Callback_List_Modem_Node *callback_node_modem_changed = NULL;
static OFono_Callback_List_USSD_Notify_Node *callback_node_ussd_notify = NULL;
+static AMB_Callback_List_Node *callback_node_amb_properties_changed = NULL;
+static Locale_Callback_List_Node *callback_node_locale_properties_changed = NULL;
/* XXX elm_flip should just do the right thing, but it does not */
static Eina_Bool in_call = EINA_FALSE;
static Eina_Bool in_flip_anim = EINA_FALSE;
+static Eina_Bool night_mode = EINA_FALSE;
+
Contact_Info *gui_contact_search(const char *number, const char **type)
{
return contact_search(contacts, number, type);
if (err != OFONO_ERROR_NONE) {
char buf[1024];
const char *msg = ofono_error_message_get(err);
- snprintf(buf, sizeof(buf), "Could not call %s: %s",
+ snprintf(buf, sizeof(buf), _("Could not call %s: %s"),
number, msg);
- gui_simple_popup("Error", buf);
+ gui_simple_popup(_("Error"), buf);
}
free(number);
return ofono_dial(copy, NULL, _dial_reply, copy);
}
+static void _gui_set_text(void)
+{
+ elm_object_part_text_set(cs, "label.hide-keypad", _("Hide Keypad"));
+ elm_object_part_text_set(cs, "label.answer", _("Answer"));
+ elm_object_part_text_set(cs, "label.hangup", _("Hangup"));
+ elm_object_part_text_set(cs, "label.multiparty", _("Conference"));
+ elm_object_part_text_set(cs, "label.multiparty-details-back", _("Back"));
+ elm_object_part_text_set(cs, "label.waiting", _("Waiting..."));
+ elm_object_part_text_set(cs, "elm.text.name", _("Unknown"));
+ elm_object_part_text_set(cs, "elm.text.waiting", _("Unknown"));
+
+ elm_object_part_text_set(keypad, "label.all", _("Decline"));
+ elm_object_part_text_set(keypad, "label.missed", _("Hold + Answer"));
+ elm_object_part_text_set(keypad, "label.clear", _("Hangup + Answer"));
+ elm_object_part_text_set(keypad, "label.edit,done", _("Redial"));
+
+ elm_object_part_text_set(history, "label.all", _("All"));
+ elm_object_part_text_set(history, "label.missed", _("Missed"));
+ elm_object_part_text_set(history, "label.clear", _("Clear"));
+ elm_object_part_text_set(history, "label.edit,done", _("Done"));
+}
+
static void _gui_show(Evas_Object *o)
{
+ Last_User_Mode *last;
+
+ last = util_get_last_user_mode();
if (o == keypad)
elm_object_signal_emit(main_layout, "show,keypad", "gui");
else if (o == contacts)
else if (o == history)
elm_object_signal_emit(main_layout, "show,history", "gui");
elm_object_focus_set(o, EINA_TRUE);
+ current_view = o;
+
+ if (last) {
+ if (current_view == keypad)
+ last->last_view = DIALER_LAST_VIEW_KEYPAD;
+ else if (current_view == contacts)
+ last->last_view = DIALER_LAST_VIEW_CONTACTS;
+ else if (current_view == history)
+ last->last_view = DIALER_LAST_VIEW_HISTORY;
+
+ util_set_last_user_mode(last);
+ }
}
Evas_Object *gui_simple_popup(const char *title, const char *message)
elm_win_raise(win);
elm_win_activate(win);
evas_object_show(win);
+
+ /* Automatically enable hfp modem if app is in the foreground */
+ if (!ofono_voice_is_online()) {
+ ofono_powered_set(EINA_TRUE, NULL, NULL);
+ }
}
void gui_number_set(const char *number, Eina_Bool auto_dial)
gui_dial(number);
}
+static void _gui_quit(void)
+{
+ elm_exit();
+}
+
+static void _on_del(void *data __UNUSED__, Evas *e __UNUSED__,
+ Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+ _gui_quit();
+}
+
static void _on_clicked(void *data __UNUSED__, Evas_Object *o __UNUSED__,
const char *emission, const char *source __UNUSED__)
{
_gui_show(history);
else if (strcmp(emission, "voicemail") == 0)
_gui_voicemail();
+ else if (strcmp(emission, "quit") == 0)
+ _gui_quit();
}
static void _ofono_changed(void *data __UNUSED__)
elm_object_part_text_set(main_layout, "elm.text.voicemail", buf);
}
+static void _amb_properties_changed(void *data __UNUSED__)
+{
+ Eina_Bool night_mode_changed = amb_night_mode_get();
+ if (night_mode != night_mode_changed) {
+ DBG("Night mode changed to %d", night_mode_changed);
+ night_mode = night_mode_changed;
+ util_set_night_mode(night_mode);
+
+ if (current_view)
+ _gui_show(current_view);
+ }
+}
+
+static void _locale_properties_changed(void *data __UNUSED__)
+{
+ const char *new_lang = locale_lang_get();
+ if (new_lang) {
+ if (strncmp(new_lang, "LANG=", 5) == 0)
+ new_lang += 5;
+
+ DBG("Switching UI language to %s", new_lang);
+ setenv ("LANG", new_lang, 1);
+ setlocale (LC_ALL, new_lang);
+ _gui_set_text();
+ }
+}
+
static void _ofono_ussd_notify(void *data __UNUSED__, Eina_Bool needs_reply,
const char *message)
{
gui_dial(number);
}
+static void _load_last_user_view() {
+ Last_User_Mode *last;
+
+ last = util_get_last_user_mode();
+ if (!last) {
+ DBG("Last user config file not found - create default view");
+ last = calloc(1, sizeof(Last_User_Mode));
+ last->last_view = DIALER_LAST_VIEW_KEYPAD;
+ last->last_history_view = DIALER_LAST_HISTORY_VIEW_ALL;
+ last->last_number = eina_stringshare_add("");
+ util_set_last_user_mode(last);
+ }
+
+ if(last->last_number) {
+ keypad_number_set(keypad, last->last_number, EINA_FALSE);
+ }
+ if (last->last_view == DIALER_LAST_VIEW_KEYPAD) {
+ _gui_show(keypad);
+ } else if (last->last_view == DIALER_LAST_VIEW_CONTACTS) {
+ _gui_show(contacts);
+ } else if (last->last_view == DIALER_LAST_VIEW_HISTORY) {
+ _gui_show(history);
+ if (last->last_history_view != DIALER_LAST_HISTORY_VIEW_ALL) {
+ elm_object_signal_emit(history, "show,missed", "gui");
+ }
+ }
+ eina_stringshare_del(last->last_number);
+ free(last);
+}
+
Eina_Bool gui_init(void)
{
Evas_Object *lay, *obj;
Evas_Coord w, h;
+ const char *lang;
/* dialer should never, ever quit */
- elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_NONE);
+ elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
win = elm_win_util_standard_add("ofono-dialer", "oFono Dialer");
EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
- elm_win_autodel_set(win, EINA_FALSE);
+ elm_win_autodel_set(win, EINA_TRUE);
+ evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _on_del, NULL);
#ifdef HAVE_TIZEN
- appcore_set_i18n("ofono-efl", "en-US");
+#ifdef HAVE_UI_GADGET
UG_INIT_EFL(win, UG_OPT_INDICATOR_PORTRAIT_ONLY);
#endif
+#endif
+
+ /*
+ * check LANG and LC_ALL environment variables,
+ * LC_ALL takes precedence
+ */
+ lang = getenv("LC_ALL");
+ if (!lang)
+ lang = getenv("LANG");
+
+ setlocale(LC_ALL, lang);
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
flip = elm_flip_add(win);
evas_object_size_hint_weight_set(flip,
_gui_call_sync, NULL);
evas_object_show(flip);
- main_layout = lay = layout_add(win, "main");
+ main_layout = lay = layout_add(win, "dialer");
EINA_SAFETY_ON_NULL_RETURN_VAL(lay, EINA_FALSE);
evas_object_size_hint_weight_set(lay,
EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
elm_object_part_content_set(lay, "elm.swallow.history", obj);
- _gui_show(keypad);
-
cs = obj = callscreen_add(win);
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
evas_object_size_hint_weight_set(obj,
elm_object_part_content_set(flip, "back", obj);
evas_object_show(obj);
+ _gui_set_text();
+ _load_last_user_view();
+
callback_node_modem_changed =
ofono_modem_changed_cb_add(_ofono_changed, NULL);
callback_node_ussd_notify =
ofono_ussd_notify_cb_add(_ofono_ussd_notify, NULL);
+ callback_node_amb_properties_changed =
+ amb_properties_changed_cb_add(_amb_properties_changed, NULL);
+ callback_node_locale_properties_changed =
+ locale_properties_changed_cb_add(_locale_properties_changed, NULL);
/* TODO: make it match better with Tizen: icon and other properties */
obj = elm_layout_edje_get(lay);