*/
AppControl EXPORT_API requestMessageComposer(const char *scheme, const char *to,
const char *subject = nullptr, const char *text = nullptr);
+
+ /**
+ * @brief Request camera image capture
+ * @return AppControl wrapper
+ */
+ AppControl EXPORT_API requestCameraImage();
+
+ /**
+ * @brief Request pick image from gallery
+ * @return AppControl wrapper
+ */
+ AppControl EXPORT_API requestGalleryImage();
}
#endif /* APP_APP_CONTROL_REQUEST_H */
request.addExtra(APP_CONTROL_DATA_TEXT, text);
return request;
}
+
+AppControl App::requestCameraImage()
+{
+ return AppControl(APP_CONTROL_OPERATION_CREATE_CONTENT, "image/*");
+}
+
+AppControl App::requestGalleryImage()
+{
+ return AppControl(APP_CONTROL_OPERATION_PICK, "image/*");
+}
#ifndef CONTACTS_INPUT_CONTACT_IMAGE_FIELD_CONTROL_H
#define CONTACTS_INPUT_CONTACT_IMAGE_FIELD_CONTROL_H
+#include "App/AppControl.h"
#include "Ui/Thumbnail.h"
namespace Contacts
private:
virtual void onCreated() override;
+
+ void updateImage();
+ void onImageResult(app_control_h request, app_control_h reply,
+ app_control_result_e result);
void onImagePressed(Evas_Object *image, void *eventInfo);
Model::ContactTextField *m_Field;
+ App::AppControl m_AppControl;
};
}
}
#define ITEM_RIGHT_X1 2
#define ITEM_RIGHT_X2 10
-#define IMAGE_H 166
-#define IMAGE_ITEM_H 182
-#define IMAGE_ITEM_PADDING_Y (IMAGE_ITEM_H-IMAGE_H)/2
+#define IMAGE_SIZE 240
+#define IMAGE_ITEM_PADDING_Y 44
+#define IMAGE_ITEM_H (IMAGE_SIZE+IMAGE_ITEM_PADDING_Y*2)
#define BUTTONS_ITEM_H 247
#define BUTTONS_ITEM_PADDING_Y 22
alias: "elm/genlist/tree/"INPUT_IMAGE_ITEM_STYLE"/default";
alias: "elm/genlist/tree_compress/"INPUT_IMAGE_ITEM_STYLE"/default";
- data.item: "banded_bg_area" "swallow.bg";
data.item: "contents" "swallow.content";
parts {
- swallow { "swallow.bg"; }
spacer { "spacer.base"; scale;
desc { "default";
min: 0 IMAGE_ITEM_H;
}
}
- swallow { "swallow.content";
+ swallow { "swallow.content"; scale;
desc { "default";
- rel1.relative: 0.0 IMAGE_ITEM_PADDING_Y/IMAGE_ITEM_H;
- rel2.relative: 1.0 1.0-IMAGE_ITEM_PADDING_Y/IMAGE_ITEM_H;
+ max: IMAGE_SIZE IMAGE_SIZE;
}
}
}
#include "Contacts/Input/ContactImageFieldControl.h"
#include "Contacts/Model/ContactTextField.h"
+
+#include "App/AppControlRequest.h"
+#include "Ui/ListPopup.h"
#include "Utils/Callback.h"
+#include "Utils/Logger.h"
using namespace Contacts::Input;
using namespace Contacts::Model;
ContactImageFieldControl::ContactImageFieldControl(ContactTextField *field)
- : Thumbnail(Thumbnail::SizeMedium), m_Field(field)
+ : Thumbnail(Thumbnail::SizeLarge), m_Field(field)
{
}
void ContactImageFieldControl::onCreated()
{
- setImagePath(m_Field->getValue());
+ setSizeHint(true);
+ updateImage();
evas_object_smart_callback_add(getImage(), "clicked",
makeCallback(&ContactImageFieldControl::onImagePressed), this);
}
+void ContactImageFieldControl::updateImage()
+{
+ setImagePath(m_Field->getValue());
+}
+
+void ContactImageFieldControl::onImageResult(app_control_h request, app_control_h reply,
+ app_control_result_e result)
+{
+ char **imagePath = nullptr;
+ int count = 0;
+
+ int err = app_control_get_extra_data_array(reply, APP_CONTROL_DATA_SELECTED, &imagePath, &count);
+ RETM_IF_ERR(err, "app_control_get_extra_data_array() failed.")
+
+ if (count > 0) {
+ m_Field->setValue(imagePath[0]);
+ updateImage();
+ }
+
+ for (int i = 0; i < count; ++i) {
+ free(imagePath[i]);
+ }
+ free(imagePath);
+}
+
void ContactImageFieldControl::onImagePressed(Evas_Object *image, void *eventInfo)
{
- //TODO: Show popup
+ Ui::ListPopup *popup = new Ui::ListPopup();
+ popup->create(getEvasObject());
+ popup->setTitle("IDS_PB_HEADER_SET_CONTACT_PICTURE_ABB");
+ popup->addItem("IDS_PB_OPT_FROM_GALLERY_ABB2", [this] {
+ m_AppControl = App::requestGalleryImage();
+ m_AppControl.launch(makeCallbackWithLastParam(&ContactImageFieldControl::onImageResult), this);
+ });
+ popup->addItem("IDS_PB_OPT_TAKE_PICTURE_ABB", [this] {
+ m_AppControl = App::requestCameraImage();
+ m_AppControl.launch(makeCallbackWithLastParam(&ContactImageFieldControl::onImageResult), this);
+ });
+
+ if (!m_Field->isEmpty()) {
+ popup->addItem("IDS_PB_OPT_REMOVE", [this] {
+ m_Field->reset();
+ updateImage();
+ });
+ }
}
int err = m_Contact.initialize(m_RecordId);
RETM_IF_ERR(err, "Contact::initialize() failed.");
+ addFieldItem(addField(FieldImage));
+ addFieldItem(addField(FieldName));
+
if (m_Contact.isNew()) {
- addFieldItem(addField(FieldImage));
- addFieldItem(addField(FieldName));
addFieldItem(addField(FieldNumber));
return;
}
}
break;
case TypeObject:
- if (!field->isEmpty()) {
+ if (!m_Items[field->getId()] && !field->isEmpty()) {
m_AddFieldsItem->setAddFieldState(ContactFieldId(field->getId()), false);
addFieldItem(std::move(field));
}
<privilege>http://tizen.org/privilege/callhistory.read</privilege>
<privilege>http://tizen.org/privilege/contact.read</privilege>
<privilege>http://tizen.org/privilege/contact.write</privilege>
+ <privilege>http://tizen.org/privilege/mediastorage</privilege>
<privilege>http://tizen.org/privilege/notification</privilege>
</privileges>
</manifest>
<privilege>http://tizen.org/privilege/callhistory.read</privilege>
<privilege>http://tizen.org/privilege/contact.read</privilege>
<privilege>http://tizen.org/privilege/contact.write</privilege>
+ <privilege>http://tizen.org/privilege/mediastorage</privilege>
<privilege>http://tizen.org/privilege/notification</privilege>
</privileges>
</manifest>