Askuser-notification is no longer a part of askuser agent.
Change-Id: Ib01f37ae9875f4ac034bac52aeeb115c36c7e50c
SET(TARGET_ASKUSER_NOTIFICATION "askuser-notification")
SET(TARGET_ASKUSER_NOTIFICATION_LIB "askuser-notification-ipc")
SET(TARGET_ASKUSER_NOTIFICATION_TEST "askuser-notification-test")
- ADD_SUBDIRECTORY(src/agent/notification-daemon)
+ ADD_SUBDIRECTORY(src/notification-daemon)
ADD_SUBDIRECTORY(src/common/protocol)
ENDIF (BUILD_ASKUSER_NOTIFICATION)
+++ /dev/null
-SET(NOTIF_PATH ${PROJECT_SOURCE_DIR}/src/agent/notification-daemon/)
-
-PROJECT("askuser-notification")
-# Pass project name to sources
-ADD_DEFINITIONS("-DPROJECT_NAME=\"${PROJECT_NAME}\"")
-
-PKG_CHECK_MODULES(ASKUSER_NOTIFICATION_DEP
- REQUIRED
- elementary
- libsystemd
- notification
- vconf
- pkgmgr-info
- glib-2.0
- capi-ui-efl-util
- capi-system-info
- security-privilege-manager
-)
-
-INCLUDE_DIRECTORIES(SYSTEM
- ${ASKUSER_NOTIFICATION_DEP_INCLUDE_DIRS}
-)
-INCLUDE_DIRECTORIES(
- ${ASKUSER_PATH}
- ${ASKUSER_PATH}/common
- ${ASKUSER_PATH}/common/protocol
- ${ASKUSER_PATH}/agent/notification-daemon
-)
-
-SET(ASKUSER_NOTIFICATION_SOURCES
- ${NOTIF_PATH}/main.cpp
- ${NOTIF_PATH}/Logic.cpp
- ${NOTIF_PATH}/ServerCallbacks.cpp
- ${NOTIF_PATH}/ui/Po.cpp
- ${ASKUSER_PATH}/common/log/alog.cpp
- ${ASKUSER_PATH}/common/policy/PrivilegeInfo.cpp
- ${NOTIF_PATH}/ui/Popupper.cpp
- )
-
-ADD_EXECUTABLE(${TARGET_ASKUSER_NOTIFICATION} ${ASKUSER_NOTIFICATION_SOURCES})
-
-SET_TARGET_PROPERTIES(${TARGET_ASKUSER_NOTIFICATION} PROPERTIES
- COMPILE_FLAGS
- -fpie
-)
-
-TARGET_LINK_LIBRARIES(${TARGET_ASKUSER_NOTIFICATION}
- ${ASKUSER_NOTIFICATION_DEP_LIBRARIES}
- ${TARGET_ASKUSER_COMMON}
- ${TARGET_ASKUSER_NOTIFICATION_LIB}
- -pie
-)
-
-ADD_CUSTOM_TARGET(popup_custom.edj
- COMMAND edje_cc -no-save res/popup_custom.edc res/popup_custom.edj
- DEPENDS res/popup_custom.edc
- )
-ADD_DEPENDENCIES(${TARGET_ASKUSER_NOTIFICATION} popup_custom.edj)
-
-INSTALL(TARGETS ${TARGET_ASKUSER_NOTIFICATION} DESTINATION ${BIN_INSTALL_DIR})
-INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/ DESTINATION ${RES_DIR} FILES_MATCHING PATTERN "*.png")
-INSTALL(FILES res/popup_custom.edj DESTINATION ${RES_DIR})
-
-ADD_SUBDIRECTORY(po)
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/Service.cpp
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of Popupper class
- */
-
-#include "Logic.h"
-
-#include <algorithm>
-#include <signal.h>
-#include <string>
-#include <sys/signalfd.h>
-#include <vconf.h>
-#include <Elementary.h>
-
-#include <exception/Exception.h>
-#include <exception/ErrnoException.h>
-#include "ServerCallbacks.h"
-
-namespace AskUser {
-
-namespace Notification {
-
-void Logic::addChannelFd(Protocol::ConnectionFd fd, const Protocol::Credentials &creds) {
- // TODO check if doesn't already exist
- // TODO translate to appId, pkgId and appIds from package
- auto it = m_connToInfo.find(fd);
- if (it != m_connToInfo.end()) {
- ALOGE("Connection with fd : " << fd << " already exists. Closing connection");
- m_clientChannel->process(fd, 0);
- return;
- }
- (void)creds;
- ConnectionInfo connInfo;
- m_connToInfo.insert(it, std::make_pair(fd, connInfo));
-}
-
-void Logic::updateChannelFd(Protocol::ConnectionFd fd, Ecore_Fd_Handler_Flags flags) {
- auto it = m_fdInfo.find(fd);
- if (it != m_fdInfo.end()) {
- m_fdInfo[fd].status = FdChange::CHANGE;
- ecore_main_fd_handler_del(m_fdInfo[fd].handler);
- }
-
- auto handler = ecore_main_fd_handler_add(fd, flags, &Logic::clientChHandler, this, nullptr, nullptr);
- if (handler == nullptr) {
- ALOGE("Couldn't set fd handler");
- return;
- }
- m_fdInfo[fd].handler = handler;
- m_fdInfo[fd].status = FdChange::NONE;
-}
-
-void Logic::removeChannelFd(Protocol::ConnectionFd fd) {
- m_connToInfo.erase(fd);
- auto it = m_fdInfo.find(fd);
- if (it == m_fdInfo.end()) {
- return;
- }
- it->second.status = FdChange::DEL;
- ecore_main_fd_handler_del(it->second.handler);
-}
-
-Eina_Bool Logic::clientChHandler(void *data, Ecore_Fd_Handler *handler) {
- Logic *service = static_cast<Logic *>(data);
- int fd = ecore_main_fd_handler_fd_get(handler);
- if (fd == -1) {
- ALOGE("Failed to fetch fd from handler");
- return ECORE_CALLBACK_CANCEL;
- }
- int mask = 0;
- if (ecore_main_fd_handler_active_get(handler, ECORE_FD_READ)) {
- mask = AskUser::Protocol::READ;
- } else if (ecore_main_fd_handler_active_get(handler, ECORE_FD_WRITE)) {
- mask = AskUser::Protocol::WRITE;
- }
- return service->processChannel(fd, mask);
-}
-
-Eina_Bool Logic::processChannel(int fd, int mask) {
- m_fdInfo[fd].status = FdChange::NONE;
- updateChannel(fd, mask);
-
- switch (m_fdInfo[fd].status) {
- case FdChange::NONE:
- return ECORE_CALLBACK_RENEW;
- case FdChange::DEL: {
- // Remove all pending events from this fd
- auto queueIt = std::remove_if(m_pendingEvents.begin(), m_pendingEvents.end(), [fd](const FdEvent &fdEvent) {return fdEvent.fd == fd;});
- m_pendingEvents.erase(queueIt, m_pendingEvents.end());
-
- // Handle next event if removed active fd
- if (fd == m_currentFd) {
- finishCurrentEvent();
- processEvents();
- }
- m_fdInfo.erase(fd);
- return ECORE_CALLBACK_CANCEL;
- }
- case FdChange::CHANGE:
- return ECORE_CALLBACK_CANCEL;
- default:
- ALOGE("Unexpected fd change value : " << static_cast<int>(m_fdInfo[fd].status));
- return ECORE_CALLBACK_CANCEL;
- }
-}
-
-void Logic::addEvent(IUIEvent *event) {
- FdEvent fdEvent{m_currentFd, std::unique_ptr<IUIEvent>(event)};
- m_pendingEvents.emplace_back(std::move(fdEvent));
- processEvents();
-}
-
-void Logic::popup(Protocol::ConnectionFd fd, Protocol::RequestId id, std::string &&privilege) {
- (void)fd;
- (void)id;
- (void)privilege;
-}
-
-bool Logic::isEventProcessed() {
- return m_currentEventId != -1;
-}
-
-void Logic::finishCurrentEvent() {
- m_popupper.popupClose(m_currentEventId);
- m_currentEventId = -1;
- m_currentFd = -1;
-}
-
-void Logic::processEvents() {
- // Active event processing
- if (isEventProcessed())
- return;
-
- // No pending events
- if (m_pendingEvents.empty())
- return;
-
- FdEvent fdEvent = std::move(m_pendingEvents.front());
- m_currentFd = fdEvent.fd;
- m_currentEventId = fdEvent.event->getId();
- m_pendingEvents.pop_front();
-
- fdEvent.event->process();
-}
-
-void Logic::registerSignalFd() {
- // TODO use ecore event EXIT?
- sigset_t mask;
- sigemptyset(&mask);
- sigaddset(&mask, SIGTERM);
-
- if (pthread_sigmask(SIG_BLOCK, &mask, NULL) < 0) {
- throw ErrnoException("Couldn't set signal mask");
- }
-
- int signalFd = signalfd(-1, &mask, 0);
- if (signalFd < 0) {
- throw ErrnoException("Couldn't create signalfd");
- }
- auto handler = ecore_main_fd_handler_add(signalFd, ECORE_FD_READ, &Logic::signalHandler, this, nullptr, nullptr);
- if (handler == nullptr) {
- throw Exception("Couldn't set fd handler");
- }
-}
-
-void Logic::stop() {
- if (isEventProcessed())
- finishCurrentEvent();
- m_popupper.stop();
-}
-
-Eina_Bool Logic::signalHandler(void *data, Ecore_Fd_Handler *) {
- Logic *logic = static_cast<Logic*>(data);
- logic->stop();
- return ECORE_CALLBACK_CANCEL;
-}
-
-void Logic::prepareChannel() {
- m_clientChannel = AskUser::Protocol::createChannel(
- std::unique_ptr<AskUser::Protocol::IServerCallbacks>(new AskUser::Protocol::ServerCallbacks(this, &m_popupper)));
-}
-
-void Logic::updateChannel(int fd, int mask) {
- // TODO errors?
- m_clientChannel->process(fd, mask);
-}
-
-void Logic::init() {
- init_agent_log();
- m_popupper.setLocale();
- m_popupper.initialize();
- m_popupper.registerPopupResponseHandler([&](int popupId, NResponseType response) { popupResponse(popupId, response);});
-
- registerSignalFd();
-
- prepareChannel();
-}
-
-void Logic::run() {
- // TODO ensure we won't throw inside ecore loop
- m_popupper.start();
- m_popupper.shutdown();
-}
-
-void Logic::popupResponse(int popupId, NResponseType response) {
- if (popupId != m_currentEventId) {
- ALOGD("Got different popup id than is being processed");
- return;
- }
- int clientResponse;
- // TODO translate ui response to policy result
- switch (response) {
- case NResponseType::Deny:
- clientResponse = ASKUSER_DENY_ONCE;
- break;
- case NResponseType::DenyAlways:
- clientResponse = ASKUSER_DENY_FOREVER;
- break;
- case NResponseType::Allow:
- clientResponse = ASKUSER_ALLOW_ONCE;
- break;
- case NResponseType::AllowAlways:
- clientResponse = ASKUSER_ALLOW_FOREVER;
- break;
- case NResponseType::None:
- clientResponse = ASKUSER_NONE;
- break;
- case NResponseType::Error:
- clientResponse = -255;
- break;
- default:
- clientResponse = -255; // error
- }
- // TODO create popup ids containing fd and request id
- m_clientChannel->popupResponse(-1, popupId, clientResponse);
- finishCurrentEvent();
- processEvents();
-}
-
-} // namespace Notification
-
-} // namepsace AskUser
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/Service.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of Popupper class
- */
-
-#pragma once
-
-#include <map>
-#include <deque>
-#include <askuser-notification/ask-user-service.h>
-#include <event/Event.h>
-
-namespace AskUser {
-
-namespace Notification {
-
-class Logic {
-public:
- class Exception : public std::exception {
- public:
- Exception(std::string &&s) : m_msg(std::move(s)) {}
- const char *what() const throw () {
- return m_msg.c_str();
- }
- private:
- std::string m_msg;
- };
- Logic() : m_currentFd(-1), m_currentEventId(-1), m_isFdDeleted(false) {}
- void init();
- void run();
- void stop();
-
- void addChannelFd(Protocol::ConnectionFd fd, const Protocol::Credentials &creds);
- void updateChannelFd(Protocol::ConnectionFd fd, Ecore_Fd_Handler_Flags flags);
- void removeChannelFd(Protocol::ConnectionFd fd);
-
- void addEvent(IUIEvent *event);
- void popup(Protocol::ConnectionFd fd, Protocol::RequestId id, std::string &&privilege);
-
- ~Logic() {}
-private:
- //Initialization
- void registerSignalFd();
- void prepareChannel();
- void updateChannel(int fd, int mask);
-
- // Descriptor handlers
- static Eina_Bool clientChHandler(void *data, Ecore_Fd_Handler *handler);
- static Eina_Bool signalHandler(void *data, Ecore_Fd_Handler *handler);
- //static Eina_Bool signalHandler(void *data, int type, void *event);
-
- Eina_Bool processChannel(int fd, int mask);
- void processEvents();
- bool isEventProcessed();
- void finishCurrentEvent();
- void popupResponse(int popupId, NResponseType response);
-
- AskUser::Protocol::ChannelPtr m_clientChannel;
- Popupper m_popupper;
-
- struct FdEvent {
- int fd;
- std::unique_ptr<IUIEvent> event;
- };
-
- // Workaround for no information about to which fd event belongs to
- int m_currentFd;
- int m_currentEventId;
- int m_isFdDeleted;
- std::deque<FdEvent> m_pendingEvents;
-
- enum class FdChange {
- NONE,
- ADD,
- CHANGE,
- DEL
- };
- struct FdInfo {
- Ecore_Fd_Handler* handler;
- FdChange status;
- };
-
- std::map<int, FdInfo> m_fdInfo;
-
- struct ConnectionInfo {
- std::string appId;
- std::string pkgId;
- std::vector<std::string> apps;
- };
-
- std::map<Protocol::ConnectionFd, ConnectionInfo> m_connToInfo;
-};
-
-} // namespace Notification
-
-} // namespace AskUser
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/ServerCallbacks.cpp
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Implementation ServerCallbacks classes
- */
-#include <unistd.h>
-
-#include "ServerCallbacks.h"
-#include "event/Event.h"
-
-namespace {
-Ecore_Fd_Handler_Flags maskToFlags(int mask) {
- int flags = ECORE_FD_ERROR;
- if (mask & AskUser::Protocol::READ)
- flags |= static_cast<int>(ECORE_FD_READ);
- if (mask & AskUser::Protocol::WRITE)
- flags |= static_cast<int>(ECORE_FD_WRITE);
- return static_cast<Ecore_Fd_Handler_Flags>(flags);
-}
-}
-
-namespace AskUser {
-namespace Protocol {
-
-void ServerCallbacks::newConnection(ConnectionFd fd, const Credentials &creds) {
- m_service->addChannelFd(fd, creds);
-}
-
-void ServerCallbacks::updateConnection(ConnectionFd fd, int mask) {
- if (mask == 0)
- m_service->removeChannelFd(fd);
- else
- m_service->updateChannelFd(fd, maskToFlags(mask));
-}
-
-void ServerCallbacks::popup(ConnectionFd fd, RequestId id, std::string &&privilege) {
- m_service->popup(fd, id, std::move(privilege));
-}
-
-} /* namespace Notification */
-} /* namespace Askuser */
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/ServerCallbacks.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of ServerCallbacks classes
- */
-#pragma once
-
-#include <memory>
-
-#include <askuser-notification/ask-user-service.h>
-
-#include "Logic.h"
-#include "ui/Popupper.h"
-
-namespace AskUser {
-namespace Protocol {
-
-class ServerCallbacks : public IServerCallbacks {
-public:
- ServerCallbacks(AskUser::Notification::Logic *logic, AskUser::Notification::Popupper *popupper)
- : m_service(logic), m_popupper(popupper)
- {}
- virtual void newConnection(ConnectionFd fd, const Credentials &creds);
- virtual void updateConnection(ConnectionFd fd, int mask);
- virtual void popup(ConnectionFd fd, RequestId id, std::string &&privilege);
-
- virtual ~ServerCallbacks() {}
-private:
- AskUser::Notification::Logic *m_service;
- AskUser::Notification::Popupper *m_popupper;
-};
-
-} /* namespace Notification */
-} /* namespace Askuser */
-
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/event/Event.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of main loop Event classes
- */
-
-#pragma once
-
-#include <string>
-#include <vector>
-
-#include <ui/Popupper.h>
-
-namespace AskUser {
-namespace Notification {
-
-class IUIEvent {
-public:
- IUIEvent(Popupper *popupper) : m_popupper(popupper), m_eventId(-1) {}
- virtual void process() = 0;
- void setId(int id) { m_eventId = id; }
- int getId() { return m_eventId; }
- virtual ~IUIEvent() {}
-protected:
- Popupper *m_popupper;
- int m_eventId;
-};
-
-class EventPopupCheck : public IUIEvent {
-public:
- EventPopupCheck(Popupper *popupper, int popupId, const std::string &appName,
- const std::string &pkgName, const std::string &privilege)
- : IUIEvent(popupper), m_popupId(popupId), m_appName(appName),
- m_pkgName(pkgName), m_privilege(privilege)
- {
- setId(popupId);
- }
-
- virtual void process() {
- m_popupper->popupCheck(m_popupId, m_appName, m_pkgName, m_privilege);
- }
-private:
- int m_popupId;
- std::string m_appName;
- std::string m_pkgName;
- std::string m_privilege;
-};
-
-} //namespace AskUser
-} //namespace Notification
-
-
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/notification-daemon/main.cpp
- * @author Oskar Świtalski <o.switalski@samsung.com>
- * @brief Main askuser notification daemon file
- */
-
-#ifdef BUILD_WITH_SYSTEMD_DAEMON
-#include <systemd/sd-daemon.h>
-#endif
-
-#include <exception>
-#include <exception/Exception.h>
-#include <log/alog.h>
-
-#include "Logic.h"
-
-int main()
-{
- using namespace AskUser::Notification;
- try {
- Logic logic;
- logic.init();
-
-#ifdef BUILD_WITH_SYSTEMD_DAEMON
- int ret = sd_notify(0, "READY=1");
- if (ret == 0) {
- ALOGW("Agent was not configured to notify its status");
- } else if (ret < 0) {
- ALOGE("sd_notify failed: [" << ret << "]");
- }
-#endif
-
- logic.run();
- } catch (std::exception &e) {
- ALOGE("Askuser-notification stopped because of: <" << e.what() << ">.");
- } catch (...) {
- ALOGE("Askuser-notification stopped because of unknown unhandled exception.");
- }
-
- return 0;
-}
+++ /dev/null
-# Copyright (c) 2015-2017 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Adam Malinowski <a.malinowsk2@partner.samsung.com>
-#
-
-SET(POFILES
- ar.po
- az.po
- bg.po
- ca.po
- cs.po
- da.po
- de.po
- el_GR.po
- en.po
- en_PH.po
- en_US.po
- es_ES.po
- es_US.po
- et.po
- eu.po
- fi.po
- fr.po
- fr_CA.po
- ga.po
- gl.po
- hi.po
- hr.po
- hu.po
- hy.po
- is.po
- it_IT.po
- ja_JP.po
- ka.po
- kk.po
- ko_KR.po
- lt.po
- lv.po
- mk.po
- nb.po
- nl.po
- pl.po
- pt_BR.po
- pt_PT.po
- ro.po
- ru_RU.po
- sk.po
- sl.po
- sr.po
- sv.po
- tr_TR.po
- uk.po
- uz.po
- zh_CN.po
- zh_HK.po
- zh_TW.po
-)
-
-SET(PREFIX ${CMAKE_INSTALL_PREFIX})
-SET(SHAREDIR "${PREFIX}/share")
-SET(LOCALEDIR "${SHAREDIR}/locale")
-SET(MSGFMT "/usr/bin/msgfmt")
-
-FOREACH(pofile ${POFILES})
- SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
- MESSAGE("PO: ${pofile}")
- GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
- GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
- SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
- ADD_CUSTOM_COMMAND(
- OUTPUT ${moFile}
- COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
- DEPENDS ${absPofile}
- )
- INSTALL(FILES ${moFile}
- DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${TARGET_ASKUSER_NOTIFICATION}.mo)
- SET(moFiles ${moFiles} ${moFile})
-ENDFOREACH(pofile)
-
-ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "عدم الإظهار مجدداً"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "غير مسموح لـ %1$s باستخدام %2$s. حدد ضبط الخصوصية في الضبط > الخصوصية والحماية."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "طلب الخصوصية"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "هل تريد السماح لـ %1$s بالوصول إلى %2$s؟"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "السماح"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "رفض"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "ثمة طلب من %s للحصول على إذن للوصول إلى العناصر التالية:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "اسمح بكل الأذونات ذات الصلة لاستخدام التطبيق."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Bir daha göstərmə"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s-yə %2$s-dən istifadə icazəsi verilməmişdir. Parametrlər > Məxfilik və təhlükəsilikdən Məxfilik parametrlərini seçin."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Məxfilik sorğusu"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "%1$s-a %2$s-ya çıxış icazəsi verilsin?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "İcazə ver"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Rədd et"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s aşağıdakı elementlərə çıxış icazəsi istəyir:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Proqramdan istifadə etmək üçün bütün müvafiq icazələri verin."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Да не се показва повече"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s няма право да използва %2$s. Изберете „Настройки за поверителност“ в Настройки > Поверителност и защита."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Заявка за поверителна информация"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Разрешавате ли на %1$s достъп до %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Позволяв."
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Отказ"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s иска разрешение за достъп до следните елементи:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "За да използвате приложението, позволете всички свързани разрешения."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "No tornar a mostrar"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s no té permís per utilitzar %2$s. Seleccioni Ajustaments de privadesa a Ajustaments > Privadesa i seguretat."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Sol·licitud de privadesa"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Vol permetre que %1$s accedeixi a %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Permetre"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Denegar"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s està demanant permís per accedir als elements següents:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Per utilitzar l'aplicació, concedeixi tots els permisos corresponents."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Znovu nezobrazovat"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s nesmí používat %2$s. Vyberte Nastavení soukromí v Nastavení > Ochrana osobních údajů a zabezpečení."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Požadavek na ochranu osobních údajů"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Povolit %1$s přístup k %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Povolit"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Odmítnout"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s vyžaduje přístup k následujícím položkám:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Chcete-li použít aplikaci, povolte všechna příslušná oprávnění."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Vis ikke igen"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s må ikke bruge %2$s. Vælg Fortrolighedsindstillinger under Indstillinger > Fortrolighed og sikkerhed."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Fortrolighedsanmodning"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Vil du give %1$s adgang til %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Tillad"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Afvis"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s anmoder om tilladelse til at få adgang til følgende elementer:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Hvis du vil bruge appen, skal du aktivere alle relevante tilladelser."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Nicht erneut anzeigen"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s darf %2$s nicht nutzen. Wählen Sie unter „Einstellungen > Gerätesicherheit“ die Option „Datenschutz“ aus."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Datenschutzanfrage"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "%1$s Zugriff auf %2$s erlauben?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Zulassen"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Ablehnen"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s benötigt eine Berechtigung, um auf die folgenden Elemente zuzugreifen:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Erteilen Sie alle relevanten Genehmigungen, um die App zu verwenden."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Να μην εμφανιστεί ξανά"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "Η εφαρμογή %1$s δεν επιτρέπεται να χρησιμοποιήσει τη λειτουργία %2$s. Μεταβείτε στις Ρυθμίσεις > Απόρρητο και ασφάλεια και επιλέξτε «Ρυθμίσεις απόρρητου»."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Αίτηση απορρήτου"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Να επιτραπεί στην εφαρμογή %1$s η πρόσβαση σε %2$s;"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Να επιτρέπ."
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Απόρριψη"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "Η εφαρμογή %s ζητάει πρόσβαση στα παρακάτω στοιχεία:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Για να χρησιμοποιήσετε την εφαρμογή, παραχωρήστε όλα τα σχετικά δικαιώματα."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Don't show again"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s not allowed to use %2$s. Select Privacy settings in Settings > Privacy and security."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Privacy request"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Allow %1$s to access your %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Allow"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Deny"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s is requesting permission to access the following items:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "To use app, allow all relevant permissions."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Don't show again"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s not allowed to use %2$s. Select Privacy settings in Settings > Privacy and security."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Privacy request"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Allow %1$s to access your %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Allow"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Deny"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s is requesting permission to access the following items:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "To use app, allow all relevant permissions."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Don't show again"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s not allowed to use %2$s. Select Privacy settings in Settings > Privacy and security."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Privacy request"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Allow %1$s to access your %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Allow"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Deny"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s is requesting permission to access the following items:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "To use app, allow all relevant permissions."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "No volver a mostrar"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s no está autorizado para utilizar %2$s. Seleccione Ajustes de privacidad en Ajustes > Privacidad y seguridad."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Solicitud de privacidad"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "¿Quiere permitir a %1$s acceder a su(s) %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Permitir"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Rechazar"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s está solicitando permiso para acceder a los siguientes elementos:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Para usar la aplicación, conceda todos los permisos correspondientes."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "No mostrar de nuevo"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s no tiene permiso para usar %2$s. Seleccione Ajustes de privacidad en Ajustes > Privacidad y seguridad."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Solicitud de privacidad"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "¿Desea permitir que %1$s acceda a su(s) %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Permitir"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Rechazar"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s está solicitando permiso para acceder a los siguientes elementos:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Para usar la aplicación, otorgue todos los permisos necesarios."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ära näita enam"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "Üksusel %1$s pole lubatud rakendust %2$s kasutada. Valige privaatsuse seaded menüüs Seaded > Privaatsus ja turvalisus."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Privaatsustaotlus"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Kas anda rakendusele %1$s luba juurdepääsuks üksusele %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Luba"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Keela"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s taotleb luba järgmistele üksustele juurdepääsemiseks:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Kinnitage rakenduse kasutamiseks kõik vajalikud õigused."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ez erakutsi berriz"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s aplikazioak ez du %2$s erabiltzeko baimenik. Ezarpenak > Pribatutasuna eta segurtasuna atalean, hautatu Pribatutasun ezarpenak."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Pribatutasun eskaera"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "%1$s aplikazioari hona sartzen utzi: %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Baimendu"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Ukatu"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "Hauetan sartzeko baimena eskatzen ari zaizu %s:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Aplikazioa erabiltzeko, eman beharrezko baimenak."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Älä näytä uudelleen"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s ei salli resurssien %2$s käyttöä. Valitse Asetukset > Yksityisyys ja tietoturva ja sitten Tietosuoja-asetukset."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Tietosuojapyyntö"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Saako %1$s käyttää kohdetta %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Salli"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Estä"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s pyytää lupaa seuraavien kohteiden käyttöön:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Jos haluat käyttää sovellusta, myönnä kaikki tarvittavat käyttöoikeudet."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ne plus afficher"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "L'application %1$s n'est pas autorisée à utiliser %2$s. Sélectionnez Paramètres de confidentialité dans Paramètres > Confidentialité et sécurité."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Demande de confidentialité"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Autoriser %1$s à accéder à votre/vos %2$s ?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Autoriser"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Refuser"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s demande l'autorisation d'accéder aux éléments suivants :"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Pour utiliser l'application, accordez toutes les autorisations appropriées."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ne plus afficher"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "L'application %1$s n'est pas autorisée à utiliser %2$s. Sélectionnez Paramètres de confidentialité dans Paramètres > Confidentialité et sécurité."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Demande de confidentialité"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Autoriser %1$s à accéder à votre/vos %2$s ?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Autoriser"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Refuser"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s demande l'autorisation d'accéder aux éléments suivants :"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Pour utiliser l'application, accordez toutes les autorisations appropriées."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ná taispeáin arís"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "Ní cheadaítear do %1$s %2$s a úsáid. Roghnaigh Socruithe príobháide i Socruithe > Príobháid agus slándáil."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Iarratas príobháide"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Ceadaigh do %1$s do %2$s a rochtain?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Ceadaigh"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Diúltaigh"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "Tá %s ag iarraidh ceada leis na míreanna seo a leanas a rochtain:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Leis an bhfeidhmchlár a úsáid, ceadaigh na ceadanna ábhartha uile."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Non mostrar de novo"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s non pode utilizar %2$s. Selecciona Axustes de privacidade en Axustes > Privacidade e seguridade."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Solicitude de privacidade"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Queres permitir a %1$s acceder ao teu %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Permitir"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Denegar"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s está solicitando permiso para acceder aos seguintes elementos:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Para usar a aplicación, concede todos os permisos correspondentes."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "फिर से न दिखाएँ"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s को %2$s का उपयोग करने की अनुमति नहीं है। सेटिंग्स > गोपनीयता और सुरक्षा में गोपनीयता सेटिंग्स चुनें।"
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "गोपनीयता अनुरोध"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "%1$s को आपका %2$s एक्सेस करने की अनुमति दें?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "अनुमति दें"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "अस्वीकारें"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s निम्न मदें एक्सेस करने की अनुमति का अनुरोध कर रहा है:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "एप का उपयोग करने के लिए, सभी संबंधित अनुमतियों की अनुमति दें।"
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ne prikazuj više"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "Aplikaciji %1$s nije dopuštena uporaba %2$s. Odaberite Postavke privatnosti u izborniku Postavke > Privatnost i sigurnost."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Zahtjev za pristup privatnim podacima"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Dopustiti aplikaciji %1$s pristup stavci %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Dopusti"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Odbij"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s traži dopuštenje za pristup sljedećim stavkama:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Da biste upotrebljavali aplikaciju, odobrite sva odgovarajuća dopuštenja."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ne jelenjen meg újra"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "A(z) %1$s nem rendelkezik engedéllyel a(z) %2$s használatához. Lépjen be a Beállítások > Adatvédelem és biztonság menüpontba, és válassza az Adatvédelmi beállítások lehetőséget."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Adatvédelmi kérés"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Hozzáférést ad a(z) %1$s számára a következőhöz: %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Enged"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Tilt"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "A(z) %s hozzá szeretne férni a következő elemekhez:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Az alkalmazás használatához adja meg az összes megfelelő engedélyt."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Այլևս ցույց չտալ"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s-ին չի թույլատրվում օգտագործել %2$s: Ընտրեք Գաղտնիության դրվածքներ՝ գնալով Դրվածքներ > Գաղտնիություն և անվտանգություն:"
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Գաղտնիության պահանջ"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Թույլ տա՞լ, որ %1$s-ը մուտք գործի %2$s:"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Թույլ տալ"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Մերժել"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s-ը հարցնում է հետևյալ տարրերը մուտք գործելու թույլտվություն՝"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Ծրագիրն օգտագործելու համար տվեք բոլոր համապատասխան թույլտվությունները:"
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ekki sýna aftur"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s hefur ekki leyfi til að nota %2$s. Veldu „Persónuverndarstillingar“ í „Stillingar > Persónuvernd og öryggi“."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Persónuverndarbeiðni"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Viltu veita %1$s aðgang að „%2$s“?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Leyfa"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Hafna"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s biður um leyfi til að fá aðgang að eftirfarandi hlutum:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Til að nota forritið skaltu gefa allar viðeigandi heimildir."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Non mostrare più"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "L'applicazione %1$s non è autorizzata a utilizzare %2$s. Selezionate le impostazioni sulla privacy in Impostazioni > Privacy e protezione."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Richiesta sulla privacy"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Consentire a %1$s di accedere a %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Consenti"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Nega"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s sta chiedendo l'autorizzazione per accedere a questi elementi:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Per utilizzare l'applicazione, concedete tutte le autorizzazioni pertinenti."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "今後表示しない"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$sは、%2$sを使用できません。[設定] > [プライバシーとセキュリティ]で[プライバシー設定]を選択してください。"
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "プライバシーの要求"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "%2$sへのアクセスを%1$sに許可しますか?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "許可"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "拒否"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%sが以下のアイテムにアクセスする権限を要求しています。"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "アプリを使用するには、関連する全ての権限を許可してください。"
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "აღარ მაჩვენო"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s-ს არ აქვს უფლება, გამოიყენოს %2$s. გახსენით „პარამეტრები“ > „კონფიდენციალურობა და უსაფრთხოება“ და აირჩიეთ „პირადი პარამეტრები“."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "კონფიდენციალურობის მოთხოვნა"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "ჰქონდეს %1$s-ს უფლება, რომ გახსნას თქვენი %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "ნებართვა"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "უარყოფა"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s ითხოვს წვდომის ნებართვას შემდეგზე:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "აპლიკაცია რომ გამოიყენოთ, მიეცით სათანადო ნებართვები."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Қайта көрсетпеу"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s үшін %2$s пайдалануға рұқсат берілмеген. Параметрлер > Құпиялылық және қауіпсіздік тармағында Құпиялылық параметрлерін таңдаңыз."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Құпиялылық сұрауы"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "%1$s %2$s қолданбасына қатынасуға рұқсат ету керек пе?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Рұқсат ету"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Бас тарту"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s келесі элементтерге қатынасу рұқсатын сұрауда:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Қолданбаны пайдалану үшін, барлық тиісті рұқсаттарды беріңіз."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "다시 보지 않기"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s 앱은 %2$s 항목을 사용할 수 없습니다. [설정 > 개인정보 보호]에서 [개인정보 설정]을 선택하세요."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "개인정보 요청"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "%1$s 앱에서 %2$s에 접근합니다."
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "허용"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "허용 안 함"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s 앱에서 다음 항목에 접근을 요청합니다."
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "앱을 사용하려면 모든 관련 권한을 허용하세요."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Neberodyti"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s neleido naudoti %2$s. Pasirinkite privatumo nustatymus eidami į Nustatymai > Privatumas ir sauga."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Privatumo užklausa"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Leisti %1$s pasiekti jūsų %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Leisti"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Atmesti"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s prašo leidimo pasiekti šiuos elementus:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Jei norite naudoti programą, suteikite visus reikiamus leidimus."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Vairs nerādīt"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "Programmai %1$s nav atļauts lietot %2$s. Izvēlnē Iestatījumi izvēlieties Konfidencialitātes iestatījumi > Konfidencialitāte un drošība."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Konfidencialitātes pieprasījums"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Vai atļaut %1$s piekļūt jūsu %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Atļaut"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Noraidīt"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s pieprasa atļauju piekļūt šādiem objektiem:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Lai izmantotu programmu, piešķiriet visas nepieciešamās atļaujas."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Не прикажувај повторно"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s не смее да користи %2$s. Изберете Поставувања за приватност во Поставувања > Приватност и безбедност."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Барање за приватност"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Да се дозволи %1$s да пристапи до %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Дозволи"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Отфрли"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s бара дозвола да пристапи до следниве записи:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "За да ја користите апликацијата, овозможете ги сите релевантни дозволи."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ikke vis igjen"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s er ikke tillatt å bruke %2$s. Velg Personverninnstillinger i Innstillinger > Personvern og sikkerhet."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Personvernforespørsel"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Vil du gi %1$s tilgang til %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Tillat"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Avslå"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s ber om tillatelse til å få tilgang til følgende elementer:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "For å bruke appen må du gi alle de relevante tillatelsene."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Niet opnieuw weergeven"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s mag %2$s niet gebruiken. Selecteer Privacy-instellingen in Instellingen > Privacy en beveiliging."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Verzoek om privacy"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Mag %1$s uw %2$s openen?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Toestaan"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Weigeren"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s vraagt toestemming om de volgende items te openen:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Als u de app wilt gebruiken, staat u alle relevante machtigingen toe."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Nie pokazuj ponownie"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "Aplikacja %1$s nie ma uprawnień do używania zasobów %2$s. Przejdź do opcji Ustawienia prywatności w menu Ustawienia > Prywatność i bezpieczeństwo."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Żądanie związane z prywatnością"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Zezwolić %1$s na dostęp do %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Zezwól"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Odmów"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "Urządzenie %s żąda uprawnienia dostępu następujących elementów:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "W celu używania aplikacji zezwól na wszystkie odpowiednie uprawnienia."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Não exibir novamente"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s não permitiu usar %2$s. Selecione Configurações de privacidade em Configurações > Privacidade e segurança."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Solicitação de privacidade"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Permitir que %1$s acesse %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Permitir"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Negar"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s está solicitando permissão para acessar os seguintes itens:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Para usar o aplicativo, conceda todas as permissões relevantes."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Não voltar a mostrar"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s não está autorizado a utilizar %2$s. Seleccione Definições de privacidade em Definições > Privacidade e segurança."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Pedido de privacidade"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Permitir que %1$s aceda a %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Permitir"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Recusar"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s está a pedir permissão para aceder aos seguintes itens:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Para utilizar a aplicação, autorize todas as permissões relevantes."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Nu se mai afișează"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s nu are permisiunea să utilizeze %2$s. Selectați Setări confidențialitate din meniul Setări > Confidențialitate și securitate."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Solicitare confidențialitate"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Permiteți ca %1$s să acceseze %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Permitere"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Refuz"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s solicită permisiunea de a accesa următoarele elemente:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Pentru a utiliza aplicația, acordați toate permisiunile corespunzătoare."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Больше не показывать"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "Пользователю %1$s не разрешено использовать %2$s. Задайте параметры конфиденциальности в меню “Настройки” > “Конфиденциальность и безопасность”."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Запрос на предоставление конфиденциальных данных"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Разрешить %1$s получать доступ к %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Разрешить"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Запретить"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s запрашивает разрешение на доступ к следующим элементам:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Для использования приложения предоставьте все необходимые разрешения."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Už nezobrazovať"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s nemá povolené používať %2$s. Vyberte položku Nastavenia súkromia v menu Nastavenia > Ochrana osobných údajov a zabezpečenie."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Žiadosť o ochranu osobných údajov"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Povoliť aplikácii %1$s prístup k: %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Povoliť"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Zamietnuť"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s žiada o povolenie na prístup k nasledujúcim položkám:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Ak chcete používať túto aplikáciu, udeľte všetky príslušné povolenia."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ne pokaži znova"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s ne sme uporabljati %2$s. V meniju nastavitve > Zasebnost in varnost izberite Nastavitve zasebnosti."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Zahteva za zasebnost"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Dovolite aplikaciji %1$s, da dostopa do podatkov %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Dovoli"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Zavrni"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "Aplikacija %s zahteva dovoljenje za dostop do naslednjih elementov:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Če želite uporabljati aplikacijo, omogočite vsa ustrezna dovoljenja."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Ne prikazuj ponovo"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s ne sme da koristi %2$s. Izaberite opciju Podešavanja privatnosti u okviru Podešavanja > Privatnost i bezbednost."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Zahtev za privatnim informacijama"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Dozvoliti da %1$s pristupi funkciji %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Dozvoli"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Odbij"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "Aplikacija %s traži dozvolu da pristupi sledećim stavkama:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Da biste koristili aplikaciju, dozvolite sve odgovarajuće dozvole."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Visa inte igen"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s har inte tillåtelse att använda %2$s. Öppna Sekretessinställningar i Inställningar > Sekretess och säkerhet."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Sekretessbegäran"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Tillåt att %1$s får tillgång till %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Tillåt"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Neka"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s begär att få komma åt dessa objekt:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Tillåt alla relevanta behörigheter om du vill använda programmet."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Tekrar gösterme"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s için %2$s öğesini kullanma izni yok. Ayarlar > Gizlilik ve güvenlik bölümünde Gizlilik ayarlarını seçin."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Gizlilik isteği"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "%1$s öğesinin %2$s erişimine izin verilsin mi?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "İzin ver"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Reddet"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s, aşağıdaki öğelere erişim izni istiyor:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Uygulamayı kullanmak için ilgili izinlerin tümünü verin."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Більше не показувати"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "Користувач %1$s не має дозволу на використання %2$s. Змініть параметри у розділі «Налаштування» > «Конфіденційність та безпека»."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Запит на надання конфіденційних даних"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "Дозволити %1$s отримувати доступ до %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Дозволити"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Заборонити"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "Програма %s запитує дозвіл на отримання доступу до наступних об’єктів:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Для використання програми надайте всі відповідні дозволи."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "Qayta ko‘rsatilmasin"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s’ga %2$s’dan foydalanish uchun ruxsat berilmagan. Parametrlar > Maxfiylik va xavfsizlik menyusida Maxfiylik parametrlarini tanlang."
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "Maxfiylik so‘rovi"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "%1$s’ga %2$s’ga kirish uchun ruxsat berilsinmi?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "Ruxsat ber"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "Rad etish"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s quyidagi elementlarga kirish uchun ruxsat so‘ramoqda:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "Ilovadan foydalanish uchun barcha tegishli ruxsatlarga ijozat bering."
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "不再显示"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s 不允许使用 %2$s。请进入【设置】>【隐私和安全】并选择【隐私设置】。"
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "隐私请求"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "是否允许 %1$s 访问您的 %2$s?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "允许"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "拒绝"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s正在请求访问以下内容的许可:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "若要使用应用程序,请允许全部相关权限。"
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "不再顯示"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "%1$s 不允許使用 %2$s。請在 [設定] > [隱私與安全] 中選擇 [隱私設定]。"
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "私隱請求"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "允許 %1$s 存取您的 %2$s 嗎?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "允許"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "拒絕"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s 正在請求存取以下項目的權限:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "若要使用應用程式,請允許相關權限。"
-
+++ /dev/null
-msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
-msgstr "不要再顯示"
-
-msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
-msgstr "不允許 %1$s 使用 %2$s。請前往 [設定] > [隱私與安全性],然後選擇 [隱私設定]。"
-
-msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
-msgstr "隱私權要求"
-
-msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
-msgstr "允許 %1$s 存取您的 %2$s 嗎?"
-
-msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
-msgstr "允許"
-
-msgid "IDS_IDLE_BUTTON_DENY"
-msgstr "拒絕"
-
-msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
-msgstr "%s 正在要求存取下列項目的權限:"
-
-msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
-msgstr "若要使用應用程式,請允許相關權限。"
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-collections {
- base_scale: 1.3;
-//Height = 480 - (2 + 83 + 68)
-group { name: "popup_checkview_internal";
- parts {
- part { name: "label";
- scale: 1;
- type: SWALLOW;
- description { state: "default" 0.0;
- fixed: 1 0;
- rel2 {
- relative: 1.0 0.0;
- to_y: "end_field";
- }
- }
- }
- part { name: "bottom_pad";
- type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- align: 0.0 1.0;
- min: 0 4;
- fixed: 0 1;
- rel1.relative: 0.0 1.0;
- }
- }
- part { name: "pad_b";
- type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- align: 0.0 1.0;
- min: 0 90;
- fixed: 0 1;
- rel1 {
- relative: 0.0 0.0;
- to: "bottom_pad";
- }
- rel2 {
- relative: 1.0 0.0;
- to: "bottom_pad";
- }
- }
- }
- part { name: "left_pad";
- type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 0;
- min: 16 0;
- rel1 {
- relative: 0.0 0.0;
- }
- rel2 {
- relative: 0.0 1.0;
- }
- }
- }
- part { name: "right_pad";
- type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 0;
- min: 16 0;
- rel1 {
- relative: 1.0 0.0;
- }
- rel2 {
- relative: 1.0 1.0;
- }
- }
- }
- part { name: "end_field";
- type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- align: 0.0 1.0;
- min: 0 90;
- max: 244 -1;
- fixed: 0 1;
- rel1 {
- relative: 1.0 1.0;
- to_x: "left_pad";
- to_y: "pad_b";
- }
- rel2 {
- relative: 0.0 1.0;
- to_x: "right_pad";
- to_y: "pad_b";
- }
- }
- }
- part { name: "elm.swallow.end";
- type: SWALLOW;
- scale: 1;
- description { state: "default" 0.0;
- rel1.to: "end_field";
- rel2.to: "end_field";
- rel1 {
- relative: 0.0 0.0;
- }
- rel2 {
- relative: 1.0 1.0;
- }
- }
- }
- }
-}
-group { "popup_checkview_layout_mobile";
- parts {
- spacer { "spacer_t";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 0 1;
- rel1.relative: 0.00 0.00;
- rel2.relative: 1.00 0.04;
- }
- }
- spacer { "spacer_b";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 0 1;
- rel1.relative: 0.00 0.94;
- rel2.relative: 1.00 1.00;
- }
- }
- spacer { "spacer_l";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 1 0;
- rel1.to_y: "spacer_t";
- rel2.to_y: "spacer_b";
- rel1.relative: 0.91 1.00;
- rel2.relative: 1.00 0.00;
- }
- }
- spacer { "spacer_r";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 1 0;
- rel1.to_y: "spacer_t";
- rel2.to_y: "spacer_b";
- rel1.relative: 0.00 1.00;
- rel2.relative: 0.09 0.00;
- }
- }
- swallow { "elm.swallow.content";
- scale: 1;
- desc { "default";
- visible: 1;
- align: 0.5 0.5;
- rel1.to_x: "spacer_rr";
- rel1.to_y: "spacer_t";
- rel2.to_x: "spacer_ll";
- rel1.relative: 1.00 1.00;
- rel2.relative: 0.00 0.64;
- }
- }
- swallow { "elm.swallow.end";
- scale: 1;
- desc { "default";
- visible: 1;
- align: 0.5 0.5;
- fixed: 0 1;
- rel1.to_x: "spacer_r";
- rel1.to_y: "elm.swallow.content";
- rel2.to_x: "spacer_l";
- rel2.to_y: "spacer_b";
- rel1.relative: 1.00 1.00;
- rel2.relative: 0.00 0.00;
- }
- }
- spacer { "spacer_rr";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 1 0;
- rel1.to_y: "spacer_t";
- rel2.to_y: "spacer_b";
- rel1.relative: 0.00 1.00;
- rel2.relative: 0.05 0.00;
- }
- }
- spacer { "spacer_ll";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 1 0;
- rel1.to_y: "spacer_t";
- rel2.to_y: "spacer_b";
- rel1.relative: 0.95 1.00;
- rel2.relative: 1.00 0.00;
- }
- }
- }
-}
-
-group { "popup_layout_mobile";
- parts {
- spacer { "spacer_t";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 0 1;
- rel1.relative: 0.00 0.00;
- rel2.relative: 1.00 0.04;
- }
- }
- spacer { "spacer_b";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 0 1;
- rel1.relative: 0.00 0.94;
- rel2.relative: 1.00 1.00;
- }
- }
- spacer { "spacer_l";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 1 0;
- rel1.to_y: "spacer_t";
- rel2.to_y: "spacer_b";
- rel1.relative: 0.91 1.00;
- rel2.relative: 1.00 0.00;
- }
- }
- spacer { "spacer_r";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 1 0;
- rel1.to_y: "spacer_t";
- rel2.to_y: "spacer_b";
- rel1.relative: 0.00 1.00;
- rel2.relative: 0.09 0.00;
- }
- }
- swallow { "elm.swallow.content";
- scale: 1;
- desc { "default";
- visible: 1;
- align: 0.5 0.5;
- rel1.to_x: "spacer_rr";
- rel1.to_y: "spacer_t";
- rel2.to_x: "spacer_ll";
- rel2.to_y: "spacer_b";
- rel1.relative: 1.00 1.00;
- rel2.relative: 0.00 0.64;
- }
- }
- spacer { "spacer_rr";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 1 0;
- rel1.to_y: "spacer_t";
- rel2.to_y: "spacer_b";
- rel1.relative: 0.00 1.00;
- rel2.relative: 0.05 0.00;
- }
- }
- spacer { "spacer_ll";
- scale: 1;
- desc { "default";
- align: 0.5 0.5;
- fixed: 1 0;
- rel1.to_y: "spacer_t";
- rel2.to_y: "spacer_b";
- rel1.relative: 0.95 1.00;
- rel2.relative: 1.00 0.00;
- }
- }
- }
-}
-}
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/ui/Answerable.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Implementation Answerable button pressed events classes
- */
-#pragma once
-
-#include "PopupCheck.h"
-#include "Popup.h"
-
-#include <types/NotificationResponse.h>
-
-namespace AskUser {
-namespace Notification {
-
-class IAnswerable {
-public:
- enum class Button {
- ALLOW,
- DENY
- };
- typedef std::function<void(int, NResponseType)> AnswerHandler;
-
- IAnswerable(AnswerHandler handler) : m_handler(handler) {}
- virtual void process(enum Button) const = 0;
- virtual ~IAnswerable() {}
-protected:
- AnswerHandler m_handler;
-};
-
-class AnswerablePopupCheck : public IAnswerable {
-public:
- AnswerablePopupCheck(PopupCheck *popup, AnswerHandler handler)
- : IAnswerable(handler), m_popup(popup) {}
- virtual void process(enum Button button) const {
- NResponseType answer;
- switch (button) {
- case IAnswerable::Button::ALLOW:
- if (m_popup->getCheckboxState())
- answer = NResponseType::AllowAlways;
- else
- answer = NResponseType::Allow;
- break;
- case IAnswerable::Button::DENY:
- if (m_popup->getCheckboxState())
- answer = NResponseType::DenyAlways;
- else
- answer = NResponseType::Deny;
- break;
- default:
- answer = NResponseType::Error;
- }
- m_handler(m_popup->getId(), answer);
- }
-private:
- PopupCheck *m_popup;
-};
-
-} // namespace AskUser
-} // namespace Notification
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/ui/Po.cpp
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of Po message generation class
- */
-
-#include <cstdio>
-#include <cstdlib>
-#include <libintl.h>
-#include <map>
-#include <memory>
-#include <string>
-#include <unistd.h>
-#include <vconf.h>
-#include <Elementary.h>
-
-#include "Po.h"
-
-#include <exception/ErrnoException.h>
-#include <policy/PkgInfo.h>
-#include <policy/PrivilegeInfo.h>
-
-namespace AskUser {
-
-namespace {
-enum class MsgType {
- MSG_POPUP_TITLE,
-
- MSG_POPUP_TEXT,
- MSG_POPUP_LAUNCH_TEXT,
-
- MSG_POPUP_CHECKBOX,
- MSG_POPUP_ALLOW_BTN,
- MSG_POPUP_DENY_BTN,
-
- MSG_TOAST_DENY_TEXT,
- MSG_TOAST_FAIL_TEXT,
-};
-
-std::map<MsgType, const char*> MSG_PO = {
- {MsgType::MSG_POPUP_TITLE, "IDS_IDLE_HEADER_PRIVACY_REQUEST"},
- {MsgType::MSG_POPUP_TEXT, "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"},
- {MsgType::MSG_POPUP_LAUNCH_TEXT, "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"},
- {MsgType::MSG_POPUP_CHECKBOX, "IDS_ST_OPT_DONT_SHOW_AGAIN"},
- {MsgType::MSG_POPUP_ALLOW_BTN,"IDS_IDLE_BUTTON_ALLOW_ABB7"},
- {MsgType::MSG_POPUP_DENY_BTN, "IDS_IDLE_BUTTON_DENY"},
- {MsgType::MSG_TOAST_DENY_TEXT, "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"},
- {MsgType::MSG_TOAST_FAIL_TEXT, "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"}
-};
-
-void setLocale() {
- char *lang = vconf_get_str(VCONFKEY_LANGSET);
- if (lang)
- {
- elm_language_set(lang);
- free(lang);
- } else {
- ALOGE("Couldn't fetch language from vconf failed.");
- }
-}
-
-template <typename ...Args>
-std::string makeFromFormat(const char *format, Args... args) {
- char *buf;
- int ret = asprintf(&buf, format, args...);
- if (ret == -1) {
- throw ErrnoException("asprintf failed");
- }
- std::unique_ptr<char, decltype(std::free) *> bufPtr(buf, std::free);
- return std::string(buf);
-}
-
-const char *getFormat(enum MsgType type) {
- setLocale();
- return dgettext(PROJECT_NAME, MSG_PO[type]);
-}
-
-std::string getPkgLabel(const std::string &pkgName) {
- PkgInfo pkgInfo(pkgName, geteuid());
- return pkgInfo.pkgLabel();
-}
-
-} // namespace anonymous
-
-namespace Notification {
-namespace Po {
-std::string createPopupCheckMsg(const std::string &, const std::string &pkgName, const std::string &priv) {
- return makeFromFormat(getFormat(MsgType::MSG_POPUP_TEXT), getPkgLabel(pkgName).c_str(),
- PrivilegeInfo::getPrivacyDisplayName(priv).c_str());
-}
-
-std::string getPopupTitleMsg() {
- return makeFromFormat("%s", getFormat(MsgType::MSG_POPUP_TITLE));
-}
-std::string getAllowButtonMsg() {
- return makeFromFormat("%s", getFormat(MsgType::MSG_POPUP_ALLOW_BTN));
-}
-std::string getDenyButtonMsg() {
- return makeFromFormat("%s", getFormat(MsgType::MSG_POPUP_DENY_BTN));
-}
-std::string getCheckBoxMsg() {
- return makeFromFormat("%s", getFormat(MsgType::MSG_POPUP_CHECKBOX));
-}
-
-} //namespace Po
-} //namepace Notification
-} //namespace AskUser
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/ui/Po.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of Po message generation class
- */
-
-#include <string>
-#include <vector>
-
-namespace AskUser {
-namespace Notification {
-namespace Po {
-
-std::string createPopupCheckMsg(const std::string &appName, const std::string &pkgName, const std::string &priv);
-std::string createPrivilegeDescr(const std::string &priv);
-
-std::string getPopupTitleMsg();
-std::string getAllowButtonMsg();
-std::string getDenyButtonMsg();
-std::string getCheckBoxMsg();
-
-} // namespace Po
-} // namespace Notification
-} // namespace AskUser
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/ui/Popup.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of Popup class
- */
-
-#pragma once
-
-#include <string>
-
-#include <log/alog.h>
-#include <exception/Exception.h>
-#include <Elementary.h>
-
-#include "UIElement.h"
-
-namespace AskUser {
-namespace Notification {
-
-class Popup : public UIElement {
-public:
- Popup(Evas_Object *parent, const std::string &msg)
- : UIElement(parent), m_msg(msg)
- {
- m_popup = elm_popup_add(m_parent);
- if (m_popup == nullptr) {
- ALOGE("Failed to add popup");
- throw Exception("Enlightenment failed");
- }
- }
-
- Popup(const Popup &other) = delete;
- Popup& operator=(const Popup &other) = delete;
-
- Evas_Object *getAllowButton() const { return m_allowButton; }
- Evas_Object *getDenyButton() const { return m_denyButton; }
-
- virtual ~Popup() {
- evas_object_del(m_popup);
- }
-protected:
- Evas_Object *m_popup = nullptr;
- Evas_Object *m_allowButton = nullptr;
- Evas_Object *m_denyButton = nullptr;
-
- std::string m_msg;
-};
-
-} /* namespace Notification */
-} /* namespace Askuser */
-
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/ui/PopupCheck.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of PopupCheck class
- */
-
-#pragma once
-
-#include <string>
-
-#include <Elementary.h>
-
-#include "Popup.h"
-
-namespace AskUser {
-namespace Notification {
-
-class PopupCheck : public Popup {
-public:
- PopupCheck(Evas_Object *parent, const std::string &msg)
- : Popup(parent, msg)
- {}
-
- Evas_Object *getCheckBox() const { return m_checkBox; }
- bool getCheckboxState() const {
- if (m_checkBox == nullptr)
- return false;
- return elm_check_state_get(m_checkBox);
- }
-
- virtual ~PopupCheck() {}
-
-protected:
- Evas_Object *m_checkBox = nullptr;
-};
-
-} /* namespace Notification */
-} /* namespace Askuser */
-
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/ui/PopupCheckMobile.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of PopupCheckMobile class
- */
-
-#pragma once
-
-#include <Elementary.h>
-
-#include <exception/Exception.h>
-#include "Po.h"
-#include "PopupCheck.h"
-
-namespace AskUser {
-namespace Notification {
-
-class PopupCheckMobile : public PopupCheck {
-public:
- PopupCheckMobile(Evas_Object *parent, int popupId, const std::string &msg)
- : PopupCheck(parent, msg)
- {
- setId(popupId);
- }
- virtual void create() {
- // popup
- elm_popup_align_set(m_popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
- elm_object_part_text_set(m_popup, "title,text", Po::getPopupTitleMsg().c_str());
- evas_object_size_hint_weight_set(m_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
- // layout
- m_layout = elm_layout_add(m_popup);
- if (m_layout == nullptr) {
- ALOGE("EFL : Failed to add layout");
- throw Exception("Enlightenment failed");
- }
- elm_layout_file_set(m_layout, RES_DIR"/popup_custom.edj", "popup_checkview_layout_mobile");
- evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
- // content
- m_content = elm_label_add(m_layout);
- if (!m_content) {
- ALOGE("EFL : Failed to add content");
- throw Exception("Enlightenment failed");
- }
- elm_object_text_set(m_content, m_msg.c_str());
- elm_object_style_set(m_content, "popup/default");
- elm_label_line_wrap_set(m_content, ELM_WRAP_MIXED);
- evas_object_size_hint_weight_set(m_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(m_content, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_object_part_content_set(m_layout, "elm.swallow.content", m_content);
-
- // checkbox
- m_checkBox = elm_check_add(m_layout);
- if (!m_checkBox) {
- ALOGE("EFL : Failed to add checkbox");
- throw Exception("Enlightenment failed");
- }
- elm_object_part_content_set(m_layout, "elm.swallow.end", m_checkBox);
- elm_object_text_set(m_checkBox, Po::getCheckBoxMsg().c_str());
- elm_check_state_set(m_checkBox, EINA_FALSE);
- evas_object_show(m_checkBox);
-
- // buttons
- m_denyButton = elm_button_add(m_popup);
- if (!m_denyButton) {
- ALOGE("EFL : Failed to add deny button");
- throw Exception("Enlightenment failed");
- }
- elm_object_part_content_set(m_popup, "button1", m_denyButton);
- elm_object_text_set(m_denyButton, Po::getDenyButtonMsg().c_str());
-
- m_allowButton = elm_button_add(m_popup);
- if (!m_allowButton) {
- ALOGE("EFL : Failed to add allow button");
- throw Exception("Enlightenment failed");
- }
- elm_object_part_content_set(m_popup, "button2", m_allowButton);
- elm_object_text_set(m_allowButton, Po::getAllowButtonMsg().c_str());
- elm_object_content_set(m_popup, m_layout);
- evas_object_show(m_popup);
- }
- virtual ~PopupCheckMobile() {
-
- }
-private:
- Evas_Object *m_content = nullptr;
- Evas_Object *m_layout = nullptr;
- Evas_Object *m_layoutInner = nullptr;
-};
-
-} /* namespace Notification */
-} /* namespace Askuser */
-
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/ui/PopupCheckWearable.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of PopupCheckWearable class
- */
-
-#pragma once
-
-#include <Elementary.h>
-
-#include <exception/Exception.h>
-#include "Po.h"
-#include "PopupCheck.h"
-
-namespace AskUser {
-namespace Notification {
-
-class PopupCheckWearable : public PopupCheck {
-public:
- PopupCheckWearable(Evas_Object *parent, int popupId, const std::string msg)
- : PopupCheck(parent, msg)
- {
- setId(popupId);
- }
- ~PopupCheckWearable() {}
-
- virtual void create() {
- elm_object_style_set(m_popup, "circle");
-
- m_layout = elm_layout_add(m_popup);
- if (m_layout == nullptr) {
- ALOGE("EFL : Failed to add layout");
- throw Exception("Enlightenment failed");
- }
- elm_layout_theme_set(m_layout, "layout", "popup", "content/circle/buttons2");
- elm_object_part_text_set(m_layout, "elm.text.title", Po::getPopupTitleMsg().c_str());
- elm_object_content_set(m_popup, m_layout);
-
- m_layoutInner = elm_layout_add(m_layout);
- if (m_layoutInner == nullptr) {
- ALOGE("EFL : Failed to add layout");
- throw Exception("Enlightenment failed");
- }
- elm_layout_file_set(m_layoutInner, RES_DIR"/popup_custom.edj", "popup_checkview_internal");
- evas_object_size_hint_weight_set(m_layoutInner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_part_content_set(m_layout, "elm.swallow.content", m_layoutInner);
-
- m_content = elm_label_add(m_layoutInner);
- if (m_content == nullptr) {
- ALOGE("EFL : Failed to add content");
- throw Exception("Enlightenment failed");
- }
- elm_object_text_set(m_content, m_msg.c_str());
- elm_object_style_set(m_content, "popup/default");
- elm_label_line_wrap_set(m_content, ELM_WRAP_MIXED);
- evas_object_size_hint_weight_set(m_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(m_content, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_object_part_content_set(m_layoutInner, "label", m_content);
-
- m_checkBox = elm_check_add(m_popup);
- if (m_checkBox == nullptr) {
- ALOGE("EFL : Failed to add checkbox");
- throw Exception("Enlightenment failed");
- }
- elm_object_style_set(m_checkBox, "popup");
- elm_object_text_set(m_checkBox, Po::getCheckBoxMsg().c_str());
- elm_check_state_set(m_checkBox, EINA_FALSE);
- evas_object_size_hint_align_set(m_checkBox, EVAS_HINT_FILL, 0.0);
- elm_object_part_content_set(m_layoutInner, "elm.swallow.end", m_checkBox);
- evas_object_show(m_checkBox);
-
- m_allowButton = elm_button_add(m_popup);
- if (m_allowButton == nullptr) {
- ALOGE("EFL : Failed to add allow button");
- throw Exception("Enlightenment failed");
- }
- elm_object_style_set(m_allowButton, "popup/circle/right");
- elm_object_part_content_set(m_popup, "button2", m_allowButton);
-
- Evas_Object *icon;
- icon = elm_image_add(m_allowButton);
- if (icon == nullptr) {
- ALOGE("EFL : Failed to add allow button icon");
- throw Exception("Enlightenment failed");
- }
- elm_image_file_set(icon, RES_DIR"/tw_ic_popup_btn_check.png", NULL);
- evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_part_content_set(m_allowButton, "elm.swallow.content", icon);
- evas_object_show(icon);
-
- m_denyButton = elm_button_add(m_popup);
- if (m_denyButton == nullptr) {
- ALOGE("EFL : Failed to add deny button");
- throw Exception("Enlightenment failed");
- }
- elm_object_style_set(m_denyButton, "popup/circle/left");
- elm_object_part_content_set(m_popup, "button1", m_denyButton);
-
- icon = elm_image_add(m_denyButton);
- if (icon == nullptr) {
- ALOGE("EFL : Failed to add deny button icon");
- throw Exception("Enlightenment failed");
- }
- elm_image_file_set(icon, RES_DIR"/tw_ic_popup_btn_delete.png", NULL);
- elm_object_part_content_set(m_denyButton, "elm.swallow.content", icon);
- evas_object_show(icon);
-
- evas_object_show(m_popup);
- }
-private:
- Evas_Object *m_content = nullptr;
- Evas_Object *m_layout = nullptr;
- Evas_Object *m_layoutInner = nullptr;
-};
-
-} /* namespace Notification */
-} /* namespace Askuser */
-
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/Popupper.cpp
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Definition of Popupper class
- */
-
-#include "Popupper.h"
-
-#include "Answerable.h"
-#include "Po.h"
-#include "PopupCheckMobile.h"
-#include "PopupCheckWearable.h"
-
-#include <exception/ErrnoException.h>
-#include <exception/Exception.h>
-#include <log/alog.h>
-#include <libintl.h>
-#include <vconf.h>
-#include <efl_util.h>
-#include <system_info.h>
-
-#include <unistd.h>
-
-namespace AskUser {
-
-namespace Notification {
-
-namespace {
- std::string getProfileName() {
- char *profileName = nullptr;
- system_info_get_platform_string("http://tizen.org/feature/profile", &profileName);
- if (!profileName) {
- ALOGE("profileName is NULL");
- throw Exception("get profileName failed");
- }
- std::unique_ptr<char, decltype(free)*> profileNamePtr(profileName, free);
- return std::string(profileName);
- }
-}
-
-
-void Popupper::registerPopupResponseHandler(PopupHandler handler) {
- m_popupResponseHandler = handler;
-}
-
-void Popupper::unfocusedCb(void *data, Evas_Object *, void *)
-{
- ALOGD("Unfocused");
- Popupper *popupper = static_cast<Popupper*>(data);
-
- if (popupper->m_shouldRaise) {
- evas_object_show(popupper->m_win);
- }
-}
-
-void Popupper::popupClose(int popupId)
-{
- ALOGD("Window close");
- m_shouldRaise = false;
-
- if (!m_elementPtr || popupId == -1 || popupId != m_elementPtr->getId())
- ALOGD("Closing non-existing popup");
-
- m_elementPtr.reset(nullptr);
- m_answerablePtr.reset(nullptr);
- evas_object_hide(m_win);
-}
-
-
-void Popupper::allowPressedCb(void *data, Evas_Object *, void *)
-{
- IAnswerable *answerable = static_cast<IAnswerable *>(data);
- answerable->process(IAnswerable::Button::ALLOW);
-}
-
-void Popupper::denyPressedCb(void *data, Evas_Object *, void *)
-{
- IAnswerable *answerable = static_cast<IAnswerable *>(data);
- answerable->process(IAnswerable::Button::DENY);
-}
-
-Eina_Bool Popupper::hwKeyClickedCb(void *data, int type, void *event)
-{
- Ecore_Event_Key *ev = static_cast<Ecore_Event_Key*>(event);
- Popupper* runner = static_cast<Popupper*>(data);
- ALOGD("HW button pressed. type <" << type << "> pressed key is <" << ev->key << ">");
- if ((!strcmp("XF86Home", ev->key) || !strcmp("XF86Back", ev->key)) && runner->m_elementPtr) {
- ALOGD("Respond as deny once.");
- runner->m_popupResponseHandler(runner->m_elementPtr->getId(), NResponseType::None);
- }
- return EINA_TRUE;
-}
-
-Popupper::~Popupper()
-{}
-
-void Popupper::initialize()
-{
- elm_init(0, NULL);
- m_win = elm_win_add(NULL, Po::getPopupTitleMsg().c_str(), ELM_WIN_NOTIFICATION);
- if (!m_win) {
- ALOGE("EFL : Failed to add window");
- throw Exception("Elementary failed");
- }
- efl_util_set_notification_window_level(m_win, EFL_UTIL_NOTIFICATION_LEVEL_TOP);
-
- if (elm_win_wm_rotation_supported_get(m_win)) {
- int rots[4] = { 0, 90, 180, 270 };
- elm_win_wm_rotation_available_rotations_set(m_win, (const int *)(&rots), 4);
- }
-
- elm_win_autodel_set(m_win, EINA_TRUE);
- elm_win_override_set(m_win, EINA_TRUE);
- elm_win_alpha_set(m_win, EINA_TRUE);
-
- // callbacks
- elm_win_indicator_opacity_set(m_win, ELM_WIN_INDICATOR_OPAQUE);
- elm_win_indicator_mode_set(m_win, ELM_WIN_INDICATOR_SHOW);
- evas_object_smart_callback_add(m_win, "unfocused", &Popupper::unfocusedCb, this);
-
- elm_win_keygrab_set(m_win, "XF86Home", 0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
- elm_win_keygrab_set(m_win, "XF86Back", 0, 0, 0, ELM_WIN_KEYGRAB_TOPMOST);
- ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, &Popupper::hwKeyClickedCb, this);
-}
-
-void Popupper::setLocale()
-{
- char *lang = vconf_get_str(VCONFKEY_LANGSET);
- if (lang)
- {
- elm_language_set(lang);
- free(lang);
- } else {
- ALOGE("Couldn't fetch language from vconf failed.");
- }
-}
-
-void Popupper::show() {
- evas_object_show(m_win);
-}
-
-void Popupper::popupCheck(int popupId, const std::string &appId, const std::string &pkgId, const std::string &priv) {
- std::string profileName = getProfileName();
- PopupCheck *popup;
- try {
- if (profileName[0] != 'w' && profileName[0] != 'W') {
- // Not wearable
- popup = new PopupCheckMobile(m_win, popupId, Po::createPopupCheckMsg(appId, pkgId, priv));
- } else {
- // Wearable
- popup = new PopupCheckWearable(m_win, popupId, Po::createPopupCheckMsg(appId, pkgId, priv));
- }
- popup->create();
- } catch (const std::exception &e) {
- ALOGE("Failed to create popup check : " << e.what());
- m_popupResponseHandler(popupId, NResponseType::Error);
- return;
- }
-
- m_answerablePtr.reset(new AnswerablePopupCheck(popup, m_popupResponseHandler));
- evas_object_smart_callback_add(popup->getAllowButton(), "clicked", &Popupper::allowPressedCb,
- m_answerablePtr.get());
- evas_object_smart_callback_add(popup->getDenyButton(), "clicked", &Popupper::denyPressedCb,
- m_answerablePtr.get());
-
- m_elementPtr.reset(popup);
- show();
-
-}
-
-void Popupper::start()
-{
- elm_run();
-}
-
-void Popupper::stop()
-{
- m_shouldRaise = false;
- elm_win_keygrab_unset(m_win, "XF86Home", 0, 0);
- elm_win_keygrab_unset(m_win, "XF86Back", 0, 0);
- m_elementPtr.reset(nullptr);
- m_answerablePtr.reset(nullptr);
- evas_object_del(m_win);
- m_win = nullptr;
- elm_exit();
-}
-
-void Popupper::shutdown() {
- elm_shutdown();
-}
-
-} /* namespace Notification */
-
-} /* namespace AskUser */
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/Popupper.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of Popupper class
- */
-
-#pragma once
-
-#include <Elementary.h>
-#include <functional>
-#include <map>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "Answerable.h"
-#include "Popup.h"
-#include <types/NotificationResponse.h>
-#include <log/alog.h>
-
-namespace AskUser {
-
-namespace Notification {
-
-class Popupper {
-public:
- typedef std::function<void(int, NResponseType)> PopupHandler;
-
- Popupper() = default;
- void initialize();
- void setLocale();
- void registerPopupResponseHandler(PopupHandler handler);
- void start();
-
- void popupCheck(int popupId, const std::string &appId, const std::string &pkgId, const std::string &priv);
-
- void popupClose(int popupId);
- void stop();
- void shutdown();
-
- ~Popupper();
-private:
- static void unfocusedCb(void *data, Evas_Object *, void *);
- static void allowPressedCb(void *data, Evas_Object *, void *);
- static void denyPressedCb(void *data, Evas_Object *, void *);
- static Eina_Bool hwKeyClickedCb(void *data, int type, void *event);
-
- void show();
-
- PopupHandler m_popupResponseHandler;
-
- Evas_Object *m_win = nullptr;
- std::unique_ptr<UIElement> m_elementPtr;
- std::unique_ptr<IAnswerable> m_answerablePtr;
-
- bool m_shouldRaise = false;
-};
-
-} /* namespace Notification */
-
-} /* namespace AskUser */
+++ /dev/null
-/*
- * Copyright (c) 2017 Samsung Electronics Co.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-/**
- * @file src/agent/notification-daemon/UIElement.h
- * @author Zofia Abramowska <z.abramowska@samsung.com>
- * @brief Declaration of UIElement class
- */
-
-#pragma once
-
-#include <Elementary.h>
-
-namespace AskUser {
-namespace Notification {
-
-class UIElement {
-public:
- explicit UIElement(Evas_Object *parent) : m_parent(parent), m_elementId(-1) {}
- void setId(int id) { m_elementId = id;}
- int getId() { return m_elementId; }
- virtual void create() = 0;
- virtual ~UIElement() {}
-protected:
- Evas_Object *m_parent;
- int m_elementId;
-};
-
-} /* namespace Notification */
-} /* namespace Askuser */
-
--- /dev/null
+SET(NOTIF_PATH ${PROJECT_SOURCE_DIR}/src/notification-daemon/)
+
+PROJECT("askuser-notification")
+# Pass project name to sources
+ADD_DEFINITIONS("-DPROJECT_NAME=\"${PROJECT_NAME}\"")
+
+PKG_CHECK_MODULES(ASKUSER_NOTIFICATION_DEP
+ REQUIRED
+ elementary
+ libsystemd
+ notification
+ vconf
+ pkgmgr-info
+ glib-2.0
+ capi-ui-efl-util
+ capi-system-info
+ security-privilege-manager
+)
+
+INCLUDE_DIRECTORIES(SYSTEM
+ ${ASKUSER_NOTIFICATION_DEP_INCLUDE_DIRS}
+)
+INCLUDE_DIRECTORIES(
+ ${ASKUSER_PATH}
+ ${ASKUSER_PATH}/common
+ ${ASKUSER_PATH}/common/protocol
+ ${NOTIF_PATH}
+)
+
+SET(ASKUSER_NOTIFICATION_SOURCES
+ ${NOTIF_PATH}/main.cpp
+ ${NOTIF_PATH}/Logic.cpp
+ ${NOTIF_PATH}/ServerCallbacks.cpp
+ ${NOTIF_PATH}/ui/Po.cpp
+ ${ASKUSER_PATH}/common/log/alog.cpp
+ ${ASKUSER_PATH}/common/policy/PrivilegeInfo.cpp
+ ${NOTIF_PATH}/ui/Popupper.cpp
+ )
+
+ADD_EXECUTABLE(${TARGET_ASKUSER_NOTIFICATION} ${ASKUSER_NOTIFICATION_SOURCES})
+
+SET_TARGET_PROPERTIES(${TARGET_ASKUSER_NOTIFICATION} PROPERTIES
+ COMPILE_FLAGS
+ -fpie
+)
+
+TARGET_LINK_LIBRARIES(${TARGET_ASKUSER_NOTIFICATION}
+ ${ASKUSER_NOTIFICATION_DEP_LIBRARIES}
+ ${TARGET_ASKUSER_COMMON}
+ ${TARGET_ASKUSER_NOTIFICATION_LIB}
+ -pie
+)
+
+ADD_CUSTOM_TARGET(popup_custom.edj
+ COMMAND edje_cc -no-save res/popup_custom.edc res/popup_custom.edj
+ DEPENDS res/popup_custom.edc
+ )
+ADD_DEPENDENCIES(${TARGET_ASKUSER_NOTIFICATION} popup_custom.edj)
+
+INSTALL(TARGETS ${TARGET_ASKUSER_NOTIFICATION} DESTINATION ${BIN_INSTALL_DIR})
+INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/ DESTINATION ${RES_DIR} FILES_MATCHING PATTERN "*.png")
+INSTALL(FILES res/popup_custom.edj DESTINATION ${RES_DIR})
+
+ADD_SUBDIRECTORY(po)
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/Service.cpp
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of Popupper class
+ */
+
+#include "Logic.h"
+
+#include <algorithm>
+#include <signal.h>
+#include <string>
+#include <sys/signalfd.h>
+#include <vconf.h>
+#include <Elementary.h>
+
+#include <exception/Exception.h>
+#include <exception/ErrnoException.h>
+#include "ServerCallbacks.h"
+
+namespace AskUser {
+
+namespace Notification {
+
+void Logic::addChannelFd(Protocol::ConnectionFd fd, const Protocol::Credentials &creds) {
+ // TODO check if doesn't already exist
+ // TODO translate to appId, pkgId and appIds from package
+ auto it = m_connToInfo.find(fd);
+ if (it != m_connToInfo.end()) {
+ ALOGE("Connection with fd : " << fd << " already exists. Closing connection");
+ m_clientChannel->process(fd, 0);
+ return;
+ }
+ (void)creds;
+ ConnectionInfo connInfo;
+ m_connToInfo.insert(it, std::make_pair(fd, connInfo));
+}
+
+void Logic::updateChannelFd(Protocol::ConnectionFd fd, Ecore_Fd_Handler_Flags flags) {
+ auto it = m_fdInfo.find(fd);
+ if (it != m_fdInfo.end()) {
+ m_fdInfo[fd].status = FdChange::CHANGE;
+ ecore_main_fd_handler_del(m_fdInfo[fd].handler);
+ }
+
+ auto handler = ecore_main_fd_handler_add(fd, flags, &Logic::clientChHandler, this, nullptr, nullptr);
+ if (handler == nullptr) {
+ ALOGE("Couldn't set fd handler");
+ return;
+ }
+ m_fdInfo[fd].handler = handler;
+ m_fdInfo[fd].status = FdChange::NONE;
+}
+
+void Logic::removeChannelFd(Protocol::ConnectionFd fd) {
+ m_connToInfo.erase(fd);
+ auto it = m_fdInfo.find(fd);
+ if (it == m_fdInfo.end()) {
+ return;
+ }
+ it->second.status = FdChange::DEL;
+ ecore_main_fd_handler_del(it->second.handler);
+}
+
+Eina_Bool Logic::clientChHandler(void *data, Ecore_Fd_Handler *handler) {
+ Logic *service = static_cast<Logic *>(data);
+ int fd = ecore_main_fd_handler_fd_get(handler);
+ if (fd == -1) {
+ ALOGE("Failed to fetch fd from handler");
+ return ECORE_CALLBACK_CANCEL;
+ }
+ int mask = 0;
+ if (ecore_main_fd_handler_active_get(handler, ECORE_FD_READ)) {
+ mask = AskUser::Protocol::READ;
+ } else if (ecore_main_fd_handler_active_get(handler, ECORE_FD_WRITE)) {
+ mask = AskUser::Protocol::WRITE;
+ }
+ return service->processChannel(fd, mask);
+}
+
+Eina_Bool Logic::processChannel(int fd, int mask) {
+ m_fdInfo[fd].status = FdChange::NONE;
+ updateChannel(fd, mask);
+
+ switch (m_fdInfo[fd].status) {
+ case FdChange::NONE:
+ return ECORE_CALLBACK_RENEW;
+ case FdChange::DEL: {
+ // Remove all pending events from this fd
+ auto queueIt = std::remove_if(m_pendingEvents.begin(), m_pendingEvents.end(), [fd](const FdEvent &fdEvent) {return fdEvent.fd == fd;});
+ m_pendingEvents.erase(queueIt, m_pendingEvents.end());
+
+ // Handle next event if removed active fd
+ if (fd == m_currentFd) {
+ finishCurrentEvent();
+ processEvents();
+ }
+ m_fdInfo.erase(fd);
+ return ECORE_CALLBACK_CANCEL;
+ }
+ case FdChange::CHANGE:
+ return ECORE_CALLBACK_CANCEL;
+ default:
+ ALOGE("Unexpected fd change value : " << static_cast<int>(m_fdInfo[fd].status));
+ return ECORE_CALLBACK_CANCEL;
+ }
+}
+
+void Logic::addEvent(IUIEvent *event) {
+ FdEvent fdEvent{m_currentFd, std::unique_ptr<IUIEvent>(event)};
+ m_pendingEvents.emplace_back(std::move(fdEvent));
+ processEvents();
+}
+
+void Logic::popup(Protocol::ConnectionFd fd, Protocol::RequestId id, std::string &&privilege) {
+ (void)fd;
+ (void)id;
+ (void)privilege;
+}
+
+bool Logic::isEventProcessed() {
+ return m_currentEventId != -1;
+}
+
+void Logic::finishCurrentEvent() {
+ m_popupper.popupClose(m_currentEventId);
+ m_currentEventId = -1;
+ m_currentFd = -1;
+}
+
+void Logic::processEvents() {
+ // Active event processing
+ if (isEventProcessed())
+ return;
+
+ // No pending events
+ if (m_pendingEvents.empty())
+ return;
+
+ FdEvent fdEvent = std::move(m_pendingEvents.front());
+ m_currentFd = fdEvent.fd;
+ m_currentEventId = fdEvent.event->getId();
+ m_pendingEvents.pop_front();
+
+ fdEvent.event->process();
+}
+
+void Logic::registerSignalFd() {
+ // TODO use ecore event EXIT?
+ sigset_t mask;
+ sigemptyset(&mask);
+ sigaddset(&mask, SIGTERM);
+
+ if (pthread_sigmask(SIG_BLOCK, &mask, NULL) < 0) {
+ throw ErrnoException("Couldn't set signal mask");
+ }
+
+ int signalFd = signalfd(-1, &mask, 0);
+ if (signalFd < 0) {
+ throw ErrnoException("Couldn't create signalfd");
+ }
+ auto handler = ecore_main_fd_handler_add(signalFd, ECORE_FD_READ, &Logic::signalHandler, this, nullptr, nullptr);
+ if (handler == nullptr) {
+ throw Exception("Couldn't set fd handler");
+ }
+}
+
+void Logic::stop() {
+ if (isEventProcessed())
+ finishCurrentEvent();
+ m_popupper.stop();
+}
+
+Eina_Bool Logic::signalHandler(void *data, Ecore_Fd_Handler *) {
+ Logic *logic = static_cast<Logic*>(data);
+ logic->stop();
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void Logic::prepareChannel() {
+ m_clientChannel = AskUser::Protocol::createChannel(
+ std::unique_ptr<AskUser::Protocol::IServerCallbacks>(new AskUser::Protocol::ServerCallbacks(this, &m_popupper)));
+}
+
+void Logic::updateChannel(int fd, int mask) {
+ // TODO errors?
+ m_clientChannel->process(fd, mask);
+}
+
+void Logic::init() {
+ init_agent_log();
+ m_popupper.setLocale();
+ m_popupper.initialize();
+ m_popupper.registerPopupResponseHandler([&](int popupId, NResponseType response) { popupResponse(popupId, response);});
+
+ registerSignalFd();
+
+ prepareChannel();
+}
+
+void Logic::run() {
+ // TODO ensure we won't throw inside ecore loop
+ m_popupper.start();
+ m_popupper.shutdown();
+}
+
+void Logic::popupResponse(int popupId, NResponseType response) {
+ if (popupId != m_currentEventId) {
+ ALOGD("Got different popup id than is being processed");
+ return;
+ }
+ int clientResponse;
+ // TODO translate ui response to policy result
+ switch (response) {
+ case NResponseType::Deny:
+ clientResponse = ASKUSER_DENY_ONCE;
+ break;
+ case NResponseType::DenyAlways:
+ clientResponse = ASKUSER_DENY_FOREVER;
+ break;
+ case NResponseType::Allow:
+ clientResponse = ASKUSER_ALLOW_ONCE;
+ break;
+ case NResponseType::AllowAlways:
+ clientResponse = ASKUSER_ALLOW_FOREVER;
+ break;
+ case NResponseType::None:
+ clientResponse = ASKUSER_NONE;
+ break;
+ case NResponseType::Error:
+ clientResponse = -255;
+ break;
+ default:
+ clientResponse = -255; // error
+ }
+ // TODO create popup ids containing fd and request id
+ m_clientChannel->popupResponse(-1, popupId, clientResponse);
+ finishCurrentEvent();
+ processEvents();
+}
+
+} // namespace Notification
+
+} // namepsace AskUser
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/Service.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of Popupper class
+ */
+
+#pragma once
+
+#include <map>
+#include <deque>
+#include <askuser-notification/ask-user-service.h>
+#include <event/Event.h>
+
+namespace AskUser {
+
+namespace Notification {
+
+class Logic {
+public:
+ class Exception : public std::exception {
+ public:
+ Exception(std::string &&s) : m_msg(std::move(s)) {}
+ const char *what() const throw () {
+ return m_msg.c_str();
+ }
+ private:
+ std::string m_msg;
+ };
+ Logic() : m_currentFd(-1), m_currentEventId(-1), m_isFdDeleted(false) {}
+ void init();
+ void run();
+ void stop();
+
+ void addChannelFd(Protocol::ConnectionFd fd, const Protocol::Credentials &creds);
+ void updateChannelFd(Protocol::ConnectionFd fd, Ecore_Fd_Handler_Flags flags);
+ void removeChannelFd(Protocol::ConnectionFd fd);
+
+ void addEvent(IUIEvent *event);
+ void popup(Protocol::ConnectionFd fd, Protocol::RequestId id, std::string &&privilege);
+
+ ~Logic() {}
+private:
+ //Initialization
+ void registerSignalFd();
+ void prepareChannel();
+ void updateChannel(int fd, int mask);
+
+ // Descriptor handlers
+ static Eina_Bool clientChHandler(void *data, Ecore_Fd_Handler *handler);
+ static Eina_Bool signalHandler(void *data, Ecore_Fd_Handler *handler);
+ //static Eina_Bool signalHandler(void *data, int type, void *event);
+
+ Eina_Bool processChannel(int fd, int mask);
+ void processEvents();
+ bool isEventProcessed();
+ void finishCurrentEvent();
+ void popupResponse(int popupId, NResponseType response);
+
+ AskUser::Protocol::ChannelPtr m_clientChannel;
+ Popupper m_popupper;
+
+ struct FdEvent {
+ int fd;
+ std::unique_ptr<IUIEvent> event;
+ };
+
+ // Workaround for no information about to which fd event belongs to
+ int m_currentFd;
+ int m_currentEventId;
+ int m_isFdDeleted;
+ std::deque<FdEvent> m_pendingEvents;
+
+ enum class FdChange {
+ NONE,
+ ADD,
+ CHANGE,
+ DEL
+ };
+ struct FdInfo {
+ Ecore_Fd_Handler* handler;
+ FdChange status;
+ };
+
+ std::map<int, FdInfo> m_fdInfo;
+
+ struct ConnectionInfo {
+ std::string appId;
+ std::string pkgId;
+ std::vector<std::string> apps;
+ };
+
+ std::map<Protocol::ConnectionFd, ConnectionInfo> m_connToInfo;
+};
+
+} // namespace Notification
+
+} // namespace AskUser
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/ServerCallbacks.cpp
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Implementation ServerCallbacks classes
+ */
+#include <unistd.h>
+
+#include "ServerCallbacks.h"
+#include "event/Event.h"
+
+namespace {
+Ecore_Fd_Handler_Flags maskToFlags(int mask) {
+ int flags = ECORE_FD_ERROR;
+ if (mask & AskUser::Protocol::READ)
+ flags |= static_cast<int>(ECORE_FD_READ);
+ if (mask & AskUser::Protocol::WRITE)
+ flags |= static_cast<int>(ECORE_FD_WRITE);
+ return static_cast<Ecore_Fd_Handler_Flags>(flags);
+}
+}
+
+namespace AskUser {
+namespace Protocol {
+
+void ServerCallbacks::newConnection(ConnectionFd fd, const Credentials &creds) {
+ m_service->addChannelFd(fd, creds);
+}
+
+void ServerCallbacks::updateConnection(ConnectionFd fd, int mask) {
+ if (mask == 0)
+ m_service->removeChannelFd(fd);
+ else
+ m_service->updateChannelFd(fd, maskToFlags(mask));
+}
+
+void ServerCallbacks::popup(ConnectionFd fd, RequestId id, std::string &&privilege) {
+ m_service->popup(fd, id, std::move(privilege));
+}
+
+} /* namespace Notification */
+} /* namespace Askuser */
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/ServerCallbacks.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of ServerCallbacks classes
+ */
+#pragma once
+
+#include <memory>
+
+#include <askuser-notification/ask-user-service.h>
+
+#include "Logic.h"
+#include "ui/Popupper.h"
+
+namespace AskUser {
+namespace Protocol {
+
+class ServerCallbacks : public IServerCallbacks {
+public:
+ ServerCallbacks(AskUser::Notification::Logic *logic, AskUser::Notification::Popupper *popupper)
+ : m_service(logic), m_popupper(popupper)
+ {}
+ virtual void newConnection(ConnectionFd fd, const Credentials &creds);
+ virtual void updateConnection(ConnectionFd fd, int mask);
+ virtual void popup(ConnectionFd fd, RequestId id, std::string &&privilege);
+
+ virtual ~ServerCallbacks() {}
+private:
+ AskUser::Notification::Logic *m_service;
+ AskUser::Notification::Popupper *m_popupper;
+};
+
+} /* namespace Notification */
+} /* namespace Askuser */
+
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/event/Event.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of main loop Event classes
+ */
+
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include <ui/Popupper.h>
+
+namespace AskUser {
+namespace Notification {
+
+class IUIEvent {
+public:
+ IUIEvent(Popupper *popupper) : m_popupper(popupper), m_eventId(-1) {}
+ virtual void process() = 0;
+ void setId(int id) { m_eventId = id; }
+ int getId() { return m_eventId; }
+ virtual ~IUIEvent() {}
+protected:
+ Popupper *m_popupper;
+ int m_eventId;
+};
+
+class EventPopupCheck : public IUIEvent {
+public:
+ EventPopupCheck(Popupper *popupper, int popupId, const std::string &appName,
+ const std::string &pkgName, const std::string &privilege)
+ : IUIEvent(popupper), m_popupId(popupId), m_appName(appName),
+ m_pkgName(pkgName), m_privilege(privilege)
+ {
+ setId(popupId);
+ }
+
+ virtual void process() {
+ m_popupper->popupCheck(m_popupId, m_appName, m_pkgName, m_privilege);
+ }
+private:
+ int m_popupId;
+ std::string m_appName;
+ std::string m_pkgName;
+ std::string m_privilege;
+};
+
+} //namespace AskUser
+} //namespace Notification
+
+
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/notification-daemon/main.cpp
+ * @author Oskar Świtalski <o.switalski@samsung.com>
+ * @brief Main askuser notification daemon file
+ */
+
+#ifdef BUILD_WITH_SYSTEMD_DAEMON
+#include <systemd/sd-daemon.h>
+#endif
+
+#include <exception>
+#include <exception/Exception.h>
+#include <log/alog.h>
+
+#include "Logic.h"
+
+int main()
+{
+ using namespace AskUser::Notification;
+ try {
+ Logic logic;
+ logic.init();
+
+#ifdef BUILD_WITH_SYSTEMD_DAEMON
+ int ret = sd_notify(0, "READY=1");
+ if (ret == 0) {
+ ALOGW("Agent was not configured to notify its status");
+ } else if (ret < 0) {
+ ALOGE("sd_notify failed: [" << ret << "]");
+ }
+#endif
+
+ logic.run();
+ } catch (std::exception &e) {
+ ALOGE("Askuser-notification stopped because of: <" << e.what() << ">.");
+ } catch (...) {
+ ALOGE("Askuser-notification stopped because of unknown unhandled exception.");
+ }
+
+ return 0;
+}
--- /dev/null
+# Copyright (c) 2015-2017 Samsung Electronics Co., Ltd All Rights Reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# @file CMakeLists.txt
+# @author Adam Malinowski <a.malinowsk2@partner.samsung.com>
+#
+
+SET(POFILES
+ ar.po
+ az.po
+ bg.po
+ ca.po
+ cs.po
+ da.po
+ de.po
+ el_GR.po
+ en.po
+ en_PH.po
+ en_US.po
+ es_ES.po
+ es_US.po
+ et.po
+ eu.po
+ fi.po
+ fr.po
+ fr_CA.po
+ ga.po
+ gl.po
+ hi.po
+ hr.po
+ hu.po
+ hy.po
+ is.po
+ it_IT.po
+ ja_JP.po
+ ka.po
+ kk.po
+ ko_KR.po
+ lt.po
+ lv.po
+ mk.po
+ nb.po
+ nl.po
+ pl.po
+ pt_BR.po
+ pt_PT.po
+ ro.po
+ ru_RU.po
+ sk.po
+ sl.po
+ sr.po
+ sv.po
+ tr_TR.po
+ uk.po
+ uz.po
+ zh_CN.po
+ zh_HK.po
+ zh_TW.po
+)
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(SHAREDIR "${PREFIX}/share")
+SET(LOCALEDIR "${SHAREDIR}/locale")
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+ SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+ MESSAGE("PO: ${pofile}")
+ GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+ GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+ SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${moFile}
+ COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+ DEPENDS ${absPofile}
+ )
+ INSTALL(FILES ${moFile}
+ DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${TARGET_ASKUSER_NOTIFICATION}.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "عدم الإظهار مجدداً"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "غير مسموح لـ %1$s باستخدام %2$s. حدد ضبط الخصوصية في الضبط > الخصوصية والحماية."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "طلب الخصوصية"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "هل تريد السماح لـ %1$s بالوصول إلى %2$s؟"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "السماح"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "رفض"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "ثمة طلب من %s للحصول على إذن للوصول إلى العناصر التالية:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "اسمح بكل الأذونات ذات الصلة لاستخدام التطبيق."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Bir daha göstərmə"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s-yə %2$s-dən istifadə icazəsi verilməmişdir. Parametrlər > Məxfilik və təhlükəsilikdən Məxfilik parametrlərini seçin."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Məxfilik sorğusu"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "%1$s-a %2$s-ya çıxış icazəsi verilsin?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "İcazə ver"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Rədd et"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s aşağıdakı elementlərə çıxış icazəsi istəyir:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Proqramdan istifadə etmək üçün bütün müvafiq icazələri verin."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Да не се показва повече"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s няма право да използва %2$s. Изберете „Настройки за поверителност“ в Настройки > Поверителност и защита."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Заявка за поверителна информация"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Разрешавате ли на %1$s достъп до %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Позволяв."
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Отказ"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s иска разрешение за достъп до следните елементи:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "За да използвате приложението, позволете всички свързани разрешения."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "No tornar a mostrar"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s no té permís per utilitzar %2$s. Seleccioni Ajustaments de privadesa a Ajustaments > Privadesa i seguretat."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Sol·licitud de privadesa"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Vol permetre que %1$s accedeixi a %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Permetre"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Denegar"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s està demanant permís per accedir als elements següents:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Per utilitzar l'aplicació, concedeixi tots els permisos corresponents."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Znovu nezobrazovat"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s nesmí používat %2$s. Vyberte Nastavení soukromí v Nastavení > Ochrana osobních údajů a zabezpečení."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Požadavek na ochranu osobních údajů"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Povolit %1$s přístup k %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Povolit"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Odmítnout"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s vyžaduje přístup k následujícím položkám:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Chcete-li použít aplikaci, povolte všechna příslušná oprávnění."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Vis ikke igen"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s må ikke bruge %2$s. Vælg Fortrolighedsindstillinger under Indstillinger > Fortrolighed og sikkerhed."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Fortrolighedsanmodning"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Vil du give %1$s adgang til %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Tillad"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Afvis"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s anmoder om tilladelse til at få adgang til følgende elementer:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Hvis du vil bruge appen, skal du aktivere alle relevante tilladelser."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Nicht erneut anzeigen"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s darf %2$s nicht nutzen. Wählen Sie unter „Einstellungen > Gerätesicherheit“ die Option „Datenschutz“ aus."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Datenschutzanfrage"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "%1$s Zugriff auf %2$s erlauben?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Zulassen"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Ablehnen"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s benötigt eine Berechtigung, um auf die folgenden Elemente zuzugreifen:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Erteilen Sie alle relevanten Genehmigungen, um die App zu verwenden."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Να μην εμφανιστεί ξανά"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "Η εφαρμογή %1$s δεν επιτρέπεται να χρησιμοποιήσει τη λειτουργία %2$s. Μεταβείτε στις Ρυθμίσεις > Απόρρητο και ασφάλεια και επιλέξτε «Ρυθμίσεις απόρρητου»."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Αίτηση απορρήτου"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Να επιτραπεί στην εφαρμογή %1$s η πρόσβαση σε %2$s;"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Να επιτρέπ."
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Απόρριψη"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "Η εφαρμογή %s ζητάει πρόσβαση στα παρακάτω στοιχεία:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Για να χρησιμοποιήσετε την εφαρμογή, παραχωρήστε όλα τα σχετικά δικαιώματα."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Don't show again"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s not allowed to use %2$s. Select Privacy settings in Settings > Privacy and security."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Privacy request"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Allow %1$s to access your %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Allow"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Deny"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s is requesting permission to access the following items:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "To use app, allow all relevant permissions."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Don't show again"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s not allowed to use %2$s. Select Privacy settings in Settings > Privacy and security."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Privacy request"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Allow %1$s to access your %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Allow"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Deny"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s is requesting permission to access the following items:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "To use app, allow all relevant permissions."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Don't show again"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s not allowed to use %2$s. Select Privacy settings in Settings > Privacy and security."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Privacy request"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Allow %1$s to access your %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Allow"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Deny"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s is requesting permission to access the following items:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "To use app, allow all relevant permissions."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "No volver a mostrar"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s no está autorizado para utilizar %2$s. Seleccione Ajustes de privacidad en Ajustes > Privacidad y seguridad."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Solicitud de privacidad"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "¿Quiere permitir a %1$s acceder a su(s) %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Permitir"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Rechazar"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s está solicitando permiso para acceder a los siguientes elementos:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Para usar la aplicación, conceda todos los permisos correspondientes."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "No mostrar de nuevo"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s no tiene permiso para usar %2$s. Seleccione Ajustes de privacidad en Ajustes > Privacidad y seguridad."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Solicitud de privacidad"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "¿Desea permitir que %1$s acceda a su(s) %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Permitir"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Rechazar"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s está solicitando permiso para acceder a los siguientes elementos:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Para usar la aplicación, otorgue todos los permisos necesarios."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ära näita enam"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "Üksusel %1$s pole lubatud rakendust %2$s kasutada. Valige privaatsuse seaded menüüs Seaded > Privaatsus ja turvalisus."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Privaatsustaotlus"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Kas anda rakendusele %1$s luba juurdepääsuks üksusele %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Luba"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Keela"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s taotleb luba järgmistele üksustele juurdepääsemiseks:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Kinnitage rakenduse kasutamiseks kõik vajalikud õigused."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ez erakutsi berriz"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s aplikazioak ez du %2$s erabiltzeko baimenik. Ezarpenak > Pribatutasuna eta segurtasuna atalean, hautatu Pribatutasun ezarpenak."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Pribatutasun eskaera"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "%1$s aplikazioari hona sartzen utzi: %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Baimendu"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Ukatu"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "Hauetan sartzeko baimena eskatzen ari zaizu %s:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Aplikazioa erabiltzeko, eman beharrezko baimenak."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Älä näytä uudelleen"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s ei salli resurssien %2$s käyttöä. Valitse Asetukset > Yksityisyys ja tietoturva ja sitten Tietosuoja-asetukset."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Tietosuojapyyntö"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Saako %1$s käyttää kohdetta %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Salli"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Estä"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s pyytää lupaa seuraavien kohteiden käyttöön:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Jos haluat käyttää sovellusta, myönnä kaikki tarvittavat käyttöoikeudet."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ne plus afficher"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "L'application %1$s n'est pas autorisée à utiliser %2$s. Sélectionnez Paramètres de confidentialité dans Paramètres > Confidentialité et sécurité."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Demande de confidentialité"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Autoriser %1$s à accéder à votre/vos %2$s ?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Autoriser"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Refuser"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s demande l'autorisation d'accéder aux éléments suivants :"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Pour utiliser l'application, accordez toutes les autorisations appropriées."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ne plus afficher"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "L'application %1$s n'est pas autorisée à utiliser %2$s. Sélectionnez Paramètres de confidentialité dans Paramètres > Confidentialité et sécurité."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Demande de confidentialité"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Autoriser %1$s à accéder à votre/vos %2$s ?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Autoriser"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Refuser"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s demande l'autorisation d'accéder aux éléments suivants :"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Pour utiliser l'application, accordez toutes les autorisations appropriées."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ná taispeáin arís"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "Ní cheadaítear do %1$s %2$s a úsáid. Roghnaigh Socruithe príobháide i Socruithe > Príobháid agus slándáil."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Iarratas príobháide"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Ceadaigh do %1$s do %2$s a rochtain?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Ceadaigh"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Diúltaigh"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "Tá %s ag iarraidh ceada leis na míreanna seo a leanas a rochtain:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Leis an bhfeidhmchlár a úsáid, ceadaigh na ceadanna ábhartha uile."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Non mostrar de novo"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s non pode utilizar %2$s. Selecciona Axustes de privacidade en Axustes > Privacidade e seguridade."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Solicitude de privacidade"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Queres permitir a %1$s acceder ao teu %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Permitir"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Denegar"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s está solicitando permiso para acceder aos seguintes elementos:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Para usar a aplicación, concede todos os permisos correspondentes."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "फिर से न दिखाएँ"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s को %2$s का उपयोग करने की अनुमति नहीं है। सेटिंग्स > गोपनीयता और सुरक्षा में गोपनीयता सेटिंग्स चुनें।"
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "गोपनीयता अनुरोध"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "%1$s को आपका %2$s एक्सेस करने की अनुमति दें?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "अनुमति दें"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "अस्वीकारें"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s निम्न मदें एक्सेस करने की अनुमति का अनुरोध कर रहा है:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "एप का उपयोग करने के लिए, सभी संबंधित अनुमतियों की अनुमति दें।"
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ne prikazuj više"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "Aplikaciji %1$s nije dopuštena uporaba %2$s. Odaberite Postavke privatnosti u izborniku Postavke > Privatnost i sigurnost."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Zahtjev za pristup privatnim podacima"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Dopustiti aplikaciji %1$s pristup stavci %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Dopusti"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Odbij"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s traži dopuštenje za pristup sljedećim stavkama:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Da biste upotrebljavali aplikaciju, odobrite sva odgovarajuća dopuštenja."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ne jelenjen meg újra"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "A(z) %1$s nem rendelkezik engedéllyel a(z) %2$s használatához. Lépjen be a Beállítások > Adatvédelem és biztonság menüpontba, és válassza az Adatvédelmi beállítások lehetőséget."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Adatvédelmi kérés"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Hozzáférést ad a(z) %1$s számára a következőhöz: %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Enged"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Tilt"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "A(z) %s hozzá szeretne férni a következő elemekhez:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Az alkalmazás használatához adja meg az összes megfelelő engedélyt."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Այլևս ցույց չտալ"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s-ին չի թույլատրվում օգտագործել %2$s: Ընտրեք Գաղտնիության դրվածքներ՝ գնալով Դրվածքներ > Գաղտնիություն և անվտանգություն:"
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Գաղտնիության պահանջ"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Թույլ տա՞լ, որ %1$s-ը մուտք գործի %2$s:"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Թույլ տալ"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Մերժել"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s-ը հարցնում է հետևյալ տարրերը մուտք գործելու թույլտվություն՝"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Ծրագիրն օգտագործելու համար տվեք բոլոր համապատասխան թույլտվությունները:"
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ekki sýna aftur"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s hefur ekki leyfi til að nota %2$s. Veldu „Persónuverndarstillingar“ í „Stillingar > Persónuvernd og öryggi“."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Persónuverndarbeiðni"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Viltu veita %1$s aðgang að „%2$s“?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Leyfa"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Hafna"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s biður um leyfi til að fá aðgang að eftirfarandi hlutum:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Til að nota forritið skaltu gefa allar viðeigandi heimildir."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Non mostrare più"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "L'applicazione %1$s non è autorizzata a utilizzare %2$s. Selezionate le impostazioni sulla privacy in Impostazioni > Privacy e protezione."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Richiesta sulla privacy"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Consentire a %1$s di accedere a %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Consenti"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Nega"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s sta chiedendo l'autorizzazione per accedere a questi elementi:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Per utilizzare l'applicazione, concedete tutte le autorizzazioni pertinenti."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "今後表示しない"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$sは、%2$sを使用できません。[設定] > [プライバシーとセキュリティ]で[プライバシー設定]を選択してください。"
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "プライバシーの要求"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "%2$sへのアクセスを%1$sに許可しますか?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "許可"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "拒否"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%sが以下のアイテムにアクセスする権限を要求しています。"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "アプリを使用するには、関連する全ての権限を許可してください。"
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "აღარ მაჩვენო"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s-ს არ აქვს უფლება, გამოიყენოს %2$s. გახსენით „პარამეტრები“ > „კონფიდენციალურობა და უსაფრთხოება“ და აირჩიეთ „პირადი პარამეტრები“."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "კონფიდენციალურობის მოთხოვნა"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "ჰქონდეს %1$s-ს უფლება, რომ გახსნას თქვენი %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "ნებართვა"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "უარყოფა"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s ითხოვს წვდომის ნებართვას შემდეგზე:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "აპლიკაცია რომ გამოიყენოთ, მიეცით სათანადო ნებართვები."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Қайта көрсетпеу"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s үшін %2$s пайдалануға рұқсат берілмеген. Параметрлер > Құпиялылық және қауіпсіздік тармағында Құпиялылық параметрлерін таңдаңыз."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Құпиялылық сұрауы"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "%1$s %2$s қолданбасына қатынасуға рұқсат ету керек пе?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Рұқсат ету"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Бас тарту"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s келесі элементтерге қатынасу рұқсатын сұрауда:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Қолданбаны пайдалану үшін, барлық тиісті рұқсаттарды беріңіз."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "다시 보지 않기"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s 앱은 %2$s 항목을 사용할 수 없습니다. [설정 > 개인정보 보호]에서 [개인정보 설정]을 선택하세요."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "개인정보 요청"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "%1$s 앱에서 %2$s에 접근합니다."
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "허용"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "허용 안 함"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s 앱에서 다음 항목에 접근을 요청합니다."
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "앱을 사용하려면 모든 관련 권한을 허용하세요."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Neberodyti"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s neleido naudoti %2$s. Pasirinkite privatumo nustatymus eidami į Nustatymai > Privatumas ir sauga."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Privatumo užklausa"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Leisti %1$s pasiekti jūsų %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Leisti"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Atmesti"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s prašo leidimo pasiekti šiuos elementus:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Jei norite naudoti programą, suteikite visus reikiamus leidimus."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Vairs nerādīt"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "Programmai %1$s nav atļauts lietot %2$s. Izvēlnē Iestatījumi izvēlieties Konfidencialitātes iestatījumi > Konfidencialitāte un drošība."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Konfidencialitātes pieprasījums"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Vai atļaut %1$s piekļūt jūsu %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Atļaut"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Noraidīt"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s pieprasa atļauju piekļūt šādiem objektiem:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Lai izmantotu programmu, piešķiriet visas nepieciešamās atļaujas."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Не прикажувај повторно"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s не смее да користи %2$s. Изберете Поставувања за приватност во Поставувања > Приватност и безбедност."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Барање за приватност"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Да се дозволи %1$s да пристапи до %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Дозволи"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Отфрли"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s бара дозвола да пристапи до следниве записи:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "За да ја користите апликацијата, овозможете ги сите релевантни дозволи."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ikke vis igjen"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s er ikke tillatt å bruke %2$s. Velg Personverninnstillinger i Innstillinger > Personvern og sikkerhet."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Personvernforespørsel"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Vil du gi %1$s tilgang til %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Tillat"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Avslå"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s ber om tillatelse til å få tilgang til følgende elementer:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "For å bruke appen må du gi alle de relevante tillatelsene."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Niet opnieuw weergeven"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s mag %2$s niet gebruiken. Selecteer Privacy-instellingen in Instellingen > Privacy en beveiliging."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Verzoek om privacy"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Mag %1$s uw %2$s openen?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Toestaan"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Weigeren"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s vraagt toestemming om de volgende items te openen:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Als u de app wilt gebruiken, staat u alle relevante machtigingen toe."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Nie pokazuj ponownie"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "Aplikacja %1$s nie ma uprawnień do używania zasobów %2$s. Przejdź do opcji Ustawienia prywatności w menu Ustawienia > Prywatność i bezpieczeństwo."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Żądanie związane z prywatnością"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Zezwolić %1$s na dostęp do %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Zezwól"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Odmów"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "Urządzenie %s żąda uprawnienia dostępu następujących elementów:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "W celu używania aplikacji zezwól na wszystkie odpowiednie uprawnienia."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Não exibir novamente"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s não permitiu usar %2$s. Selecione Configurações de privacidade em Configurações > Privacidade e segurança."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Solicitação de privacidade"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Permitir que %1$s acesse %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Permitir"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Negar"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s está solicitando permissão para acessar os seguintes itens:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Para usar o aplicativo, conceda todas as permissões relevantes."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Não voltar a mostrar"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s não está autorizado a utilizar %2$s. Seleccione Definições de privacidade em Definições > Privacidade e segurança."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Pedido de privacidade"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Permitir que %1$s aceda a %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Permitir"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Recusar"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s está a pedir permissão para aceder aos seguintes itens:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Para utilizar a aplicação, autorize todas as permissões relevantes."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Nu se mai afișează"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s nu are permisiunea să utilizeze %2$s. Selectați Setări confidențialitate din meniul Setări > Confidențialitate și securitate."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Solicitare confidențialitate"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Permiteți ca %1$s să acceseze %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Permitere"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Refuz"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s solicită permisiunea de a accesa următoarele elemente:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Pentru a utiliza aplicația, acordați toate permisiunile corespunzătoare."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Больше не показывать"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "Пользователю %1$s не разрешено использовать %2$s. Задайте параметры конфиденциальности в меню “Настройки” > “Конфиденциальность и безопасность”."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Запрос на предоставление конфиденциальных данных"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Разрешить %1$s получать доступ к %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Разрешить"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Запретить"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s запрашивает разрешение на доступ к следующим элементам:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Для использования приложения предоставьте все необходимые разрешения."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Už nezobrazovať"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s nemá povolené používať %2$s. Vyberte položku Nastavenia súkromia v menu Nastavenia > Ochrana osobných údajov a zabezpečenie."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Žiadosť o ochranu osobných údajov"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Povoliť aplikácii %1$s prístup k: %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Povoliť"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Zamietnuť"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s žiada o povolenie na prístup k nasledujúcim položkám:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Ak chcete používať túto aplikáciu, udeľte všetky príslušné povolenia."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ne pokaži znova"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s ne sme uporabljati %2$s. V meniju nastavitve > Zasebnost in varnost izberite Nastavitve zasebnosti."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Zahteva za zasebnost"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Dovolite aplikaciji %1$s, da dostopa do podatkov %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Dovoli"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Zavrni"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "Aplikacija %s zahteva dovoljenje za dostop do naslednjih elementov:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Če želite uporabljati aplikacijo, omogočite vsa ustrezna dovoljenja."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Ne prikazuj ponovo"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s ne sme da koristi %2$s. Izaberite opciju Podešavanja privatnosti u okviru Podešavanja > Privatnost i bezbednost."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Zahtev za privatnim informacijama"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Dozvoliti da %1$s pristupi funkciji %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Dozvoli"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Odbij"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "Aplikacija %s traži dozvolu da pristupi sledećim stavkama:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Da biste koristili aplikaciju, dozvolite sve odgovarajuće dozvole."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Visa inte igen"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s har inte tillåtelse att använda %2$s. Öppna Sekretessinställningar i Inställningar > Sekretess och säkerhet."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Sekretessbegäran"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Tillåt att %1$s får tillgång till %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Tillåt"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Neka"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s begär att få komma åt dessa objekt:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Tillåt alla relevanta behörigheter om du vill använda programmet."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Tekrar gösterme"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s için %2$s öğesini kullanma izni yok. Ayarlar > Gizlilik ve güvenlik bölümünde Gizlilik ayarlarını seçin."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Gizlilik isteği"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "%1$s öğesinin %2$s erişimine izin verilsin mi?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "İzin ver"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Reddet"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s, aşağıdaki öğelere erişim izni istiyor:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Uygulamayı kullanmak için ilgili izinlerin tümünü verin."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Більше не показувати"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "Користувач %1$s не має дозволу на використання %2$s. Змініть параметри у розділі «Налаштування» > «Конфіденційність та безпека»."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Запит на надання конфіденційних даних"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "Дозволити %1$s отримувати доступ до %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Дозволити"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Заборонити"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "Програма %s запитує дозвіл на отримання доступу до наступних об’єктів:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Для використання програми надайте всі відповідні дозволи."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "Qayta ko‘rsatilmasin"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s’ga %2$s’dan foydalanish uchun ruxsat berilmagan. Parametrlar > Maxfiylik va xavfsizlik menyusida Maxfiylik parametrlarini tanlang."
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "Maxfiylik so‘rovi"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "%1$s’ga %2$s’ga kirish uchun ruxsat berilsinmi?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "Ruxsat ber"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "Rad etish"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s quyidagi elementlarga kirish uchun ruxsat so‘ramoqda:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "Ilovadan foydalanish uchun barcha tegishli ruxsatlarga ijozat bering."
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "不再显示"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s 不允许使用 %2$s。请进入【设置】>【隐私和安全】并选择【隐私设置】。"
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "隐私请求"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "是否允许 %1$s 访问您的 %2$s?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "允许"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "拒绝"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s正在请求访问以下内容的许可:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "若要使用应用程序,请允许全部相关权限。"
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "不再顯示"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "%1$s 不允許使用 %2$s。請在 [設定] > [隱私與安全] 中選擇 [隱私設定]。"
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "私隱請求"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "允許 %1$s 存取您的 %2$s 嗎?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "允許"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "拒絕"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s 正在請求存取以下項目的權限:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "若要使用應用程式,請允許相關權限。"
+
--- /dev/null
+msgid "IDS_ST_OPT_DONT_SHOW_AGAIN"
+msgstr "不要再顯示"
+
+msgid "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"
+msgstr "不允許 %1$s 使用 %2$s。請前往 [設定] > [隱私與安全性],然後選擇 [隱私設定]。"
+
+msgid "IDS_IDLE_HEADER_PRIVACY_REQUEST"
+msgstr "隱私權要求"
+
+msgid "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"
+msgstr "允許 %1$s 存取您的 %2$s 嗎?"
+
+msgid "IDS_IDLE_BUTTON_ALLOW_ABB7"
+msgstr "允許"
+
+msgid "IDS_IDLE_BUTTON_DENY"
+msgstr "拒絕"
+
+msgid "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"
+msgstr "%s 正在要求存取下列項目的權限:"
+
+msgid "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"
+msgstr "若要使用應用程式,請允許相關權限。"
+
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+collections {
+ base_scale: 1.3;
+//Height = 480 - (2 + 83 + 68)
+group { name: "popup_checkview_internal";
+ parts {
+ part { name: "label";
+ scale: 1;
+ type: SWALLOW;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ rel2 {
+ relative: 1.0 0.0;
+ to_y: "end_field";
+ }
+ }
+ }
+ part { name: "bottom_pad";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ align: 0.0 1.0;
+ min: 0 4;
+ fixed: 0 1;
+ rel1.relative: 0.0 1.0;
+ }
+ }
+ part { name: "pad_b";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ align: 0.0 1.0;
+ min: 0 90;
+ fixed: 0 1;
+ rel1 {
+ relative: 0.0 0.0;
+ to: "bottom_pad";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to: "bottom_pad";
+ }
+ }
+ }
+ part { name: "left_pad";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ min: 16 0;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ }
+ }
+ }
+ part { name: "right_pad";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ min: 16 0;
+ rel1 {
+ relative: 1.0 0.0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ }
+ }
+ part { name: "end_field";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ align: 0.0 1.0;
+ min: 0 90;
+ max: 244 -1;
+ fixed: 0 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "left_pad";
+ to_y: "pad_b";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "right_pad";
+ to_y: "pad_b";
+ }
+ }
+ }
+ part { name: "elm.swallow.end";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "end_field";
+ rel2.to: "end_field";
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ }
+ }
+ }
+}
+group { "popup_checkview_layout_mobile";
+ parts {
+ spacer { "spacer_t";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 0 1;
+ rel1.relative: 0.00 0.00;
+ rel2.relative: 1.00 0.04;
+ }
+ }
+ spacer { "spacer_b";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 0 1;
+ rel1.relative: 0.00 0.94;
+ rel2.relative: 1.00 1.00;
+ }
+ }
+ spacer { "spacer_l";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 1 0;
+ rel1.to_y: "spacer_t";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 0.91 1.00;
+ rel2.relative: 1.00 0.00;
+ }
+ }
+ spacer { "spacer_r";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 1 0;
+ rel1.to_y: "spacer_t";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 0.00 1.00;
+ rel2.relative: 0.09 0.00;
+ }
+ }
+ swallow { "elm.swallow.content";
+ scale: 1;
+ desc { "default";
+ visible: 1;
+ align: 0.5 0.5;
+ rel1.to_x: "spacer_rr";
+ rel1.to_y: "spacer_t";
+ rel2.to_x: "spacer_ll";
+ rel1.relative: 1.00 1.00;
+ rel2.relative: 0.00 0.64;
+ }
+ }
+ swallow { "elm.swallow.end";
+ scale: 1;
+ desc { "default";
+ visible: 1;
+ align: 0.5 0.5;
+ fixed: 0 1;
+ rel1.to_x: "spacer_r";
+ rel1.to_y: "elm.swallow.content";
+ rel2.to_x: "spacer_l";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 1.00 1.00;
+ rel2.relative: 0.00 0.00;
+ }
+ }
+ spacer { "spacer_rr";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 1 0;
+ rel1.to_y: "spacer_t";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 0.00 1.00;
+ rel2.relative: 0.05 0.00;
+ }
+ }
+ spacer { "spacer_ll";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 1 0;
+ rel1.to_y: "spacer_t";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 0.95 1.00;
+ rel2.relative: 1.00 0.00;
+ }
+ }
+ }
+}
+
+group { "popup_layout_mobile";
+ parts {
+ spacer { "spacer_t";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 0 1;
+ rel1.relative: 0.00 0.00;
+ rel2.relative: 1.00 0.04;
+ }
+ }
+ spacer { "spacer_b";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 0 1;
+ rel1.relative: 0.00 0.94;
+ rel2.relative: 1.00 1.00;
+ }
+ }
+ spacer { "spacer_l";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 1 0;
+ rel1.to_y: "spacer_t";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 0.91 1.00;
+ rel2.relative: 1.00 0.00;
+ }
+ }
+ spacer { "spacer_r";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 1 0;
+ rel1.to_y: "spacer_t";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 0.00 1.00;
+ rel2.relative: 0.09 0.00;
+ }
+ }
+ swallow { "elm.swallow.content";
+ scale: 1;
+ desc { "default";
+ visible: 1;
+ align: 0.5 0.5;
+ rel1.to_x: "spacer_rr";
+ rel1.to_y: "spacer_t";
+ rel2.to_x: "spacer_ll";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 1.00 1.00;
+ rel2.relative: 0.00 0.64;
+ }
+ }
+ spacer { "spacer_rr";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 1 0;
+ rel1.to_y: "spacer_t";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 0.00 1.00;
+ rel2.relative: 0.05 0.00;
+ }
+ }
+ spacer { "spacer_ll";
+ scale: 1;
+ desc { "default";
+ align: 0.5 0.5;
+ fixed: 1 0;
+ rel1.to_y: "spacer_t";
+ rel2.to_y: "spacer_b";
+ rel1.relative: 0.95 1.00;
+ rel2.relative: 1.00 0.00;
+ }
+ }
+ }
+}
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/ui/Answerable.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Implementation Answerable button pressed events classes
+ */
+#pragma once
+
+#include "PopupCheck.h"
+#include "Popup.h"
+
+#include <types/NotificationResponse.h>
+
+namespace AskUser {
+namespace Notification {
+
+class IAnswerable {
+public:
+ enum class Button {
+ ALLOW,
+ DENY
+ };
+ typedef std::function<void(int, NResponseType)> AnswerHandler;
+
+ IAnswerable(AnswerHandler handler) : m_handler(handler) {}
+ virtual void process(enum Button) const = 0;
+ virtual ~IAnswerable() {}
+protected:
+ AnswerHandler m_handler;
+};
+
+class AnswerablePopupCheck : public IAnswerable {
+public:
+ AnswerablePopupCheck(PopupCheck *popup, AnswerHandler handler)
+ : IAnswerable(handler), m_popup(popup) {}
+ virtual void process(enum Button button) const {
+ NResponseType answer;
+ switch (button) {
+ case IAnswerable::Button::ALLOW:
+ if (m_popup->getCheckboxState())
+ answer = NResponseType::AllowAlways;
+ else
+ answer = NResponseType::Allow;
+ break;
+ case IAnswerable::Button::DENY:
+ if (m_popup->getCheckboxState())
+ answer = NResponseType::DenyAlways;
+ else
+ answer = NResponseType::Deny;
+ break;
+ default:
+ answer = NResponseType::Error;
+ }
+ m_handler(m_popup->getId(), answer);
+ }
+private:
+ PopupCheck *m_popup;
+};
+
+} // namespace AskUser
+} // namespace Notification
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/ui/Po.cpp
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of Po message generation class
+ */
+
+#include <cstdio>
+#include <cstdlib>
+#include <libintl.h>
+#include <map>
+#include <memory>
+#include <string>
+#include <unistd.h>
+#include <vconf.h>
+#include <Elementary.h>
+
+#include "Po.h"
+
+#include <exception/ErrnoException.h>
+#include <policy/PkgInfo.h>
+#include <policy/PrivilegeInfo.h>
+
+namespace AskUser {
+
+namespace {
+enum class MsgType {
+ MSG_POPUP_TITLE,
+
+ MSG_POPUP_TEXT,
+ MSG_POPUP_LAUNCH_TEXT,
+
+ MSG_POPUP_CHECKBOX,
+ MSG_POPUP_ALLOW_BTN,
+ MSG_POPUP_DENY_BTN,
+
+ MSG_TOAST_DENY_TEXT,
+ MSG_TOAST_FAIL_TEXT,
+};
+
+std::map<MsgType, const char*> MSG_PO = {
+ {MsgType::MSG_POPUP_TITLE, "IDS_IDLE_HEADER_PRIVACY_REQUEST"},
+ {MsgType::MSG_POPUP_TEXT, "IDS_IDLE_POP_ALLOW_P1SS_TO_ACCESS_YOUR_P2SS_Q"},
+ {MsgType::MSG_POPUP_LAUNCH_TEXT, "IDS_IDLE_POP_PS_IS_REQUESTING_PERMISSION_TO_ACCESS_THE_FOLLOWING_ITEMS_C"},
+ {MsgType::MSG_POPUP_CHECKBOX, "IDS_ST_OPT_DONT_SHOW_AGAIN"},
+ {MsgType::MSG_POPUP_ALLOW_BTN,"IDS_IDLE_BUTTON_ALLOW_ABB7"},
+ {MsgType::MSG_POPUP_DENY_BTN, "IDS_IDLE_BUTTON_DENY"},
+ {MsgType::MSG_TOAST_DENY_TEXT, "IDS_ST_TPOP_P1SS_NOT_ALLOWED_TO_USE_P2SS_SELECT_PRIVACY_SETTINGS_IN_SETTINGS_PRIVACY_AND_SECURITY"},
+ {MsgType::MSG_TOAST_FAIL_TEXT, "IDS_IDLE_TPOP_TO_USE_APP_ALLOW_ALL_RELEVANT_PERMISSIONS"}
+};
+
+void setLocale() {
+ char *lang = vconf_get_str(VCONFKEY_LANGSET);
+ if (lang)
+ {
+ elm_language_set(lang);
+ free(lang);
+ } else {
+ ALOGE("Couldn't fetch language from vconf failed.");
+ }
+}
+
+template <typename ...Args>
+std::string makeFromFormat(const char *format, Args... args) {
+ char *buf;
+ int ret = asprintf(&buf, format, args...);
+ if (ret == -1) {
+ throw ErrnoException("asprintf failed");
+ }
+ std::unique_ptr<char, decltype(std::free) *> bufPtr(buf, std::free);
+ return std::string(buf);
+}
+
+const char *getFormat(enum MsgType type) {
+ setLocale();
+ return dgettext(PROJECT_NAME, MSG_PO[type]);
+}
+
+std::string getPkgLabel(const std::string &pkgName) {
+ PkgInfo pkgInfo(pkgName, geteuid());
+ return pkgInfo.pkgLabel();
+}
+
+} // namespace anonymous
+
+namespace Notification {
+namespace Po {
+std::string createPopupCheckMsg(const std::string &, const std::string &pkgName, const std::string &priv) {
+ return makeFromFormat(getFormat(MsgType::MSG_POPUP_TEXT), getPkgLabel(pkgName).c_str(),
+ PrivilegeInfo::getPrivacyDisplayName(priv).c_str());
+}
+
+std::string getPopupTitleMsg() {
+ return makeFromFormat("%s", getFormat(MsgType::MSG_POPUP_TITLE));
+}
+std::string getAllowButtonMsg() {
+ return makeFromFormat("%s", getFormat(MsgType::MSG_POPUP_ALLOW_BTN));
+}
+std::string getDenyButtonMsg() {
+ return makeFromFormat("%s", getFormat(MsgType::MSG_POPUP_DENY_BTN));
+}
+std::string getCheckBoxMsg() {
+ return makeFromFormat("%s", getFormat(MsgType::MSG_POPUP_CHECKBOX));
+}
+
+} //namespace Po
+} //namepace Notification
+} //namespace AskUser
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/ui/Po.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of Po message generation class
+ */
+
+#include <string>
+#include <vector>
+
+namespace AskUser {
+namespace Notification {
+namespace Po {
+
+std::string createPopupCheckMsg(const std::string &appName, const std::string &pkgName, const std::string &priv);
+std::string createPrivilegeDescr(const std::string &priv);
+
+std::string getPopupTitleMsg();
+std::string getAllowButtonMsg();
+std::string getDenyButtonMsg();
+std::string getCheckBoxMsg();
+
+} // namespace Po
+} // namespace Notification
+} // namespace AskUser
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/ui/Popup.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of Popup class
+ */
+
+#pragma once
+
+#include <string>
+
+#include <log/alog.h>
+#include <exception/Exception.h>
+#include <Elementary.h>
+
+#include "UIElement.h"
+
+namespace AskUser {
+namespace Notification {
+
+class Popup : public UIElement {
+public:
+ Popup(Evas_Object *parent, const std::string &msg)
+ : UIElement(parent), m_msg(msg)
+ {
+ m_popup = elm_popup_add(m_parent);
+ if (m_popup == nullptr) {
+ ALOGE("Failed to add popup");
+ throw Exception("Enlightenment failed");
+ }
+ }
+
+ Popup(const Popup &other) = delete;
+ Popup& operator=(const Popup &other) = delete;
+
+ Evas_Object *getAllowButton() const { return m_allowButton; }
+ Evas_Object *getDenyButton() const { return m_denyButton; }
+
+ virtual ~Popup() {
+ evas_object_del(m_popup);
+ }
+protected:
+ Evas_Object *m_popup = nullptr;
+ Evas_Object *m_allowButton = nullptr;
+ Evas_Object *m_denyButton = nullptr;
+
+ std::string m_msg;
+};
+
+} /* namespace Notification */
+} /* namespace Askuser */
+
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/ui/PopupCheck.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of PopupCheck class
+ */
+
+#pragma once
+
+#include <string>
+
+#include <Elementary.h>
+
+#include "Popup.h"
+
+namespace AskUser {
+namespace Notification {
+
+class PopupCheck : public Popup {
+public:
+ PopupCheck(Evas_Object *parent, const std::string &msg)
+ : Popup(parent, msg)
+ {}
+
+ Evas_Object *getCheckBox() const { return m_checkBox; }
+ bool getCheckboxState() const {
+ if (m_checkBox == nullptr)
+ return false;
+ return elm_check_state_get(m_checkBox);
+ }
+
+ virtual ~PopupCheck() {}
+
+protected:
+ Evas_Object *m_checkBox = nullptr;
+};
+
+} /* namespace Notification */
+} /* namespace Askuser */
+
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/ui/PopupCheckMobile.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of PopupCheckMobile class
+ */
+
+#pragma once
+
+#include <Elementary.h>
+
+#include <exception/Exception.h>
+#include "Po.h"
+#include "PopupCheck.h"
+
+namespace AskUser {
+namespace Notification {
+
+class PopupCheckMobile : public PopupCheck {
+public:
+ PopupCheckMobile(Evas_Object *parent, int popupId, const std::string &msg)
+ : PopupCheck(parent, msg)
+ {
+ setId(popupId);
+ }
+ virtual void create() {
+ // popup
+ elm_popup_align_set(m_popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
+ elm_object_part_text_set(m_popup, "title,text", Po::getPopupTitleMsg().c_str());
+ evas_object_size_hint_weight_set(m_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ // layout
+ m_layout = elm_layout_add(m_popup);
+ if (m_layout == nullptr) {
+ ALOGE("EFL : Failed to add layout");
+ throw Exception("Enlightenment failed");
+ }
+ elm_layout_file_set(m_layout, RES_DIR"/popup_custom.edj", "popup_checkview_layout_mobile");
+ evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ // content
+ m_content = elm_label_add(m_layout);
+ if (!m_content) {
+ ALOGE("EFL : Failed to add content");
+ throw Exception("Enlightenment failed");
+ }
+ elm_object_text_set(m_content, m_msg.c_str());
+ elm_object_style_set(m_content, "popup/default");
+ elm_label_line_wrap_set(m_content, ELM_WRAP_MIXED);
+ evas_object_size_hint_weight_set(m_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(m_content, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_part_content_set(m_layout, "elm.swallow.content", m_content);
+
+ // checkbox
+ m_checkBox = elm_check_add(m_layout);
+ if (!m_checkBox) {
+ ALOGE("EFL : Failed to add checkbox");
+ throw Exception("Enlightenment failed");
+ }
+ elm_object_part_content_set(m_layout, "elm.swallow.end", m_checkBox);
+ elm_object_text_set(m_checkBox, Po::getCheckBoxMsg().c_str());
+ elm_check_state_set(m_checkBox, EINA_FALSE);
+ evas_object_show(m_checkBox);
+
+ // buttons
+ m_denyButton = elm_button_add(m_popup);
+ if (!m_denyButton) {
+ ALOGE("EFL : Failed to add deny button");
+ throw Exception("Enlightenment failed");
+ }
+ elm_object_part_content_set(m_popup, "button1", m_denyButton);
+ elm_object_text_set(m_denyButton, Po::getDenyButtonMsg().c_str());
+
+ m_allowButton = elm_button_add(m_popup);
+ if (!m_allowButton) {
+ ALOGE("EFL : Failed to add allow button");
+ throw Exception("Enlightenment failed");
+ }
+ elm_object_part_content_set(m_popup, "button2", m_allowButton);
+ elm_object_text_set(m_allowButton, Po::getAllowButtonMsg().c_str());
+ elm_object_content_set(m_popup, m_layout);
+ evas_object_show(m_popup);
+ }
+ virtual ~PopupCheckMobile() {
+
+ }
+private:
+ Evas_Object *m_content = nullptr;
+ Evas_Object *m_layout = nullptr;
+ Evas_Object *m_layoutInner = nullptr;
+};
+
+} /* namespace Notification */
+} /* namespace Askuser */
+
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/ui/PopupCheckWearable.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of PopupCheckWearable class
+ */
+
+#pragma once
+
+#include <Elementary.h>
+
+#include <exception/Exception.h>
+#include "Po.h"
+#include "PopupCheck.h"
+
+namespace AskUser {
+namespace Notification {
+
+class PopupCheckWearable : public PopupCheck {
+public:
+ PopupCheckWearable(Evas_Object *parent, int popupId, const std::string msg)
+ : PopupCheck(parent, msg)
+ {
+ setId(popupId);
+ }
+ ~PopupCheckWearable() {}
+
+ virtual void create() {
+ elm_object_style_set(m_popup, "circle");
+
+ m_layout = elm_layout_add(m_popup);
+ if (m_layout == nullptr) {
+ ALOGE("EFL : Failed to add layout");
+ throw Exception("Enlightenment failed");
+ }
+ elm_layout_theme_set(m_layout, "layout", "popup", "content/circle/buttons2");
+ elm_object_part_text_set(m_layout, "elm.text.title", Po::getPopupTitleMsg().c_str());
+ elm_object_content_set(m_popup, m_layout);
+
+ m_layoutInner = elm_layout_add(m_layout);
+ if (m_layoutInner == nullptr) {
+ ALOGE("EFL : Failed to add layout");
+ throw Exception("Enlightenment failed");
+ }
+ elm_layout_file_set(m_layoutInner, RES_DIR"/popup_custom.edj", "popup_checkview_internal");
+ evas_object_size_hint_weight_set(m_layoutInner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_part_content_set(m_layout, "elm.swallow.content", m_layoutInner);
+
+ m_content = elm_label_add(m_layoutInner);
+ if (m_content == nullptr) {
+ ALOGE("EFL : Failed to add content");
+ throw Exception("Enlightenment failed");
+ }
+ elm_object_text_set(m_content, m_msg.c_str());
+ elm_object_style_set(m_content, "popup/default");
+ elm_label_line_wrap_set(m_content, ELM_WRAP_MIXED);
+ evas_object_size_hint_weight_set(m_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(m_content, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_part_content_set(m_layoutInner, "label", m_content);
+
+ m_checkBox = elm_check_add(m_popup);
+ if (m_checkBox == nullptr) {
+ ALOGE("EFL : Failed to add checkbox");
+ throw Exception("Enlightenment failed");
+ }
+ elm_object_style_set(m_checkBox, "popup");
+ elm_object_text_set(m_checkBox, Po::getCheckBoxMsg().c_str());
+ elm_check_state_set(m_checkBox, EINA_FALSE);
+ evas_object_size_hint_align_set(m_checkBox, EVAS_HINT_FILL, 0.0);
+ elm_object_part_content_set(m_layoutInner, "elm.swallow.end", m_checkBox);
+ evas_object_show(m_checkBox);
+
+ m_allowButton = elm_button_add(m_popup);
+ if (m_allowButton == nullptr) {
+ ALOGE("EFL : Failed to add allow button");
+ throw Exception("Enlightenment failed");
+ }
+ elm_object_style_set(m_allowButton, "popup/circle/right");
+ elm_object_part_content_set(m_popup, "button2", m_allowButton);
+
+ Evas_Object *icon;
+ icon = elm_image_add(m_allowButton);
+ if (icon == nullptr) {
+ ALOGE("EFL : Failed to add allow button icon");
+ throw Exception("Enlightenment failed");
+ }
+ elm_image_file_set(icon, RES_DIR"/tw_ic_popup_btn_check.png", NULL);
+ evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_part_content_set(m_allowButton, "elm.swallow.content", icon);
+ evas_object_show(icon);
+
+ m_denyButton = elm_button_add(m_popup);
+ if (m_denyButton == nullptr) {
+ ALOGE("EFL : Failed to add deny button");
+ throw Exception("Enlightenment failed");
+ }
+ elm_object_style_set(m_denyButton, "popup/circle/left");
+ elm_object_part_content_set(m_popup, "button1", m_denyButton);
+
+ icon = elm_image_add(m_denyButton);
+ if (icon == nullptr) {
+ ALOGE("EFL : Failed to add deny button icon");
+ throw Exception("Enlightenment failed");
+ }
+ elm_image_file_set(icon, RES_DIR"/tw_ic_popup_btn_delete.png", NULL);
+ elm_object_part_content_set(m_denyButton, "elm.swallow.content", icon);
+ evas_object_show(icon);
+
+ evas_object_show(m_popup);
+ }
+private:
+ Evas_Object *m_content = nullptr;
+ Evas_Object *m_layout = nullptr;
+ Evas_Object *m_layoutInner = nullptr;
+};
+
+} /* namespace Notification */
+} /* namespace Askuser */
+
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/Popupper.cpp
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Definition of Popupper class
+ */
+
+#include "Popupper.h"
+
+#include "Answerable.h"
+#include "Po.h"
+#include "PopupCheckMobile.h"
+#include "PopupCheckWearable.h"
+
+#include <exception/ErrnoException.h>
+#include <exception/Exception.h>
+#include <log/alog.h>
+#include <libintl.h>
+#include <vconf.h>
+#include <efl_util.h>
+#include <system_info.h>
+
+#include <unistd.h>
+
+namespace AskUser {
+
+namespace Notification {
+
+namespace {
+ std::string getProfileName() {
+ char *profileName = nullptr;
+ system_info_get_platform_string("http://tizen.org/feature/profile", &profileName);
+ if (!profileName) {
+ ALOGE("profileName is NULL");
+ throw Exception("get profileName failed");
+ }
+ std::unique_ptr<char, decltype(free)*> profileNamePtr(profileName, free);
+ return std::string(profileName);
+ }
+}
+
+
+void Popupper::registerPopupResponseHandler(PopupHandler handler) {
+ m_popupResponseHandler = handler;
+}
+
+void Popupper::unfocusedCb(void *data, Evas_Object *, void *)
+{
+ ALOGD("Unfocused");
+ Popupper *popupper = static_cast<Popupper*>(data);
+
+ if (popupper->m_shouldRaise) {
+ evas_object_show(popupper->m_win);
+ }
+}
+
+void Popupper::popupClose(int popupId)
+{
+ ALOGD("Window close");
+ m_shouldRaise = false;
+
+ if (!m_elementPtr || popupId == -1 || popupId != m_elementPtr->getId())
+ ALOGD("Closing non-existing popup");
+
+ m_elementPtr.reset(nullptr);
+ m_answerablePtr.reset(nullptr);
+ evas_object_hide(m_win);
+}
+
+
+void Popupper::allowPressedCb(void *data, Evas_Object *, void *)
+{
+ IAnswerable *answerable = static_cast<IAnswerable *>(data);
+ answerable->process(IAnswerable::Button::ALLOW);
+}
+
+void Popupper::denyPressedCb(void *data, Evas_Object *, void *)
+{
+ IAnswerable *answerable = static_cast<IAnswerable *>(data);
+ answerable->process(IAnswerable::Button::DENY);
+}
+
+Eina_Bool Popupper::hwKeyClickedCb(void *data, int type, void *event)
+{
+ Ecore_Event_Key *ev = static_cast<Ecore_Event_Key*>(event);
+ Popupper* runner = static_cast<Popupper*>(data);
+ ALOGD("HW button pressed. type <" << type << "> pressed key is <" << ev->key << ">");
+ if ((!strcmp("XF86Home", ev->key) || !strcmp("XF86Back", ev->key)) && runner->m_elementPtr) {
+ ALOGD("Respond as deny once.");
+ runner->m_popupResponseHandler(runner->m_elementPtr->getId(), NResponseType::None);
+ }
+ return EINA_TRUE;
+}
+
+Popupper::~Popupper()
+{}
+
+void Popupper::initialize()
+{
+ elm_init(0, NULL);
+ m_win = elm_win_add(NULL, Po::getPopupTitleMsg().c_str(), ELM_WIN_NOTIFICATION);
+ if (!m_win) {
+ ALOGE("EFL : Failed to add window");
+ throw Exception("Elementary failed");
+ }
+ efl_util_set_notification_window_level(m_win, EFL_UTIL_NOTIFICATION_LEVEL_TOP);
+
+ if (elm_win_wm_rotation_supported_get(m_win)) {
+ int rots[4] = { 0, 90, 180, 270 };
+ elm_win_wm_rotation_available_rotations_set(m_win, (const int *)(&rots), 4);
+ }
+
+ elm_win_autodel_set(m_win, EINA_TRUE);
+ elm_win_override_set(m_win, EINA_TRUE);
+ elm_win_alpha_set(m_win, EINA_TRUE);
+
+ // callbacks
+ elm_win_indicator_opacity_set(m_win, ELM_WIN_INDICATOR_OPAQUE);
+ elm_win_indicator_mode_set(m_win, ELM_WIN_INDICATOR_SHOW);
+ evas_object_smart_callback_add(m_win, "unfocused", &Popupper::unfocusedCb, this);
+
+ elm_win_keygrab_set(m_win, "XF86Home", 0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
+ elm_win_keygrab_set(m_win, "XF86Back", 0, 0, 0, ELM_WIN_KEYGRAB_TOPMOST);
+ ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, &Popupper::hwKeyClickedCb, this);
+}
+
+void Popupper::setLocale()
+{
+ char *lang = vconf_get_str(VCONFKEY_LANGSET);
+ if (lang)
+ {
+ elm_language_set(lang);
+ free(lang);
+ } else {
+ ALOGE("Couldn't fetch language from vconf failed.");
+ }
+}
+
+void Popupper::show() {
+ evas_object_show(m_win);
+}
+
+void Popupper::popupCheck(int popupId, const std::string &appId, const std::string &pkgId, const std::string &priv) {
+ std::string profileName = getProfileName();
+ PopupCheck *popup;
+ try {
+ if (profileName[0] != 'w' && profileName[0] != 'W') {
+ // Not wearable
+ popup = new PopupCheckMobile(m_win, popupId, Po::createPopupCheckMsg(appId, pkgId, priv));
+ } else {
+ // Wearable
+ popup = new PopupCheckWearable(m_win, popupId, Po::createPopupCheckMsg(appId, pkgId, priv));
+ }
+ popup->create();
+ } catch (const std::exception &e) {
+ ALOGE("Failed to create popup check : " << e.what());
+ m_popupResponseHandler(popupId, NResponseType::Error);
+ return;
+ }
+
+ m_answerablePtr.reset(new AnswerablePopupCheck(popup, m_popupResponseHandler));
+ evas_object_smart_callback_add(popup->getAllowButton(), "clicked", &Popupper::allowPressedCb,
+ m_answerablePtr.get());
+ evas_object_smart_callback_add(popup->getDenyButton(), "clicked", &Popupper::denyPressedCb,
+ m_answerablePtr.get());
+
+ m_elementPtr.reset(popup);
+ show();
+
+}
+
+void Popupper::start()
+{
+ elm_run();
+}
+
+void Popupper::stop()
+{
+ m_shouldRaise = false;
+ elm_win_keygrab_unset(m_win, "XF86Home", 0, 0);
+ elm_win_keygrab_unset(m_win, "XF86Back", 0, 0);
+ m_elementPtr.reset(nullptr);
+ m_answerablePtr.reset(nullptr);
+ evas_object_del(m_win);
+ m_win = nullptr;
+ elm_exit();
+}
+
+void Popupper::shutdown() {
+ elm_shutdown();
+}
+
+} /* namespace Notification */
+
+} /* namespace AskUser */
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/Popupper.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of Popupper class
+ */
+
+#pragma once
+
+#include <Elementary.h>
+#include <functional>
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "Answerable.h"
+#include "Popup.h"
+#include <types/NotificationResponse.h>
+#include <log/alog.h>
+
+namespace AskUser {
+
+namespace Notification {
+
+class Popupper {
+public:
+ typedef std::function<void(int, NResponseType)> PopupHandler;
+
+ Popupper() = default;
+ void initialize();
+ void setLocale();
+ void registerPopupResponseHandler(PopupHandler handler);
+ void start();
+
+ void popupCheck(int popupId, const std::string &appId, const std::string &pkgId, const std::string &priv);
+
+ void popupClose(int popupId);
+ void stop();
+ void shutdown();
+
+ ~Popupper();
+private:
+ static void unfocusedCb(void *data, Evas_Object *, void *);
+ static void allowPressedCb(void *data, Evas_Object *, void *);
+ static void denyPressedCb(void *data, Evas_Object *, void *);
+ static Eina_Bool hwKeyClickedCb(void *data, int type, void *event);
+
+ void show();
+
+ PopupHandler m_popupResponseHandler;
+
+ Evas_Object *m_win = nullptr;
+ std::unique_ptr<UIElement> m_elementPtr;
+ std::unique_ptr<IAnswerable> m_answerablePtr;
+
+ bool m_shouldRaise = false;
+};
+
+} /* namespace Notification */
+
+} /* namespace AskUser */
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file src/agent/notification-daemon/UIElement.h
+ * @author Zofia Abramowska <z.abramowska@samsung.com>
+ * @brief Declaration of UIElement class
+ */
+
+#pragma once
+
+#include <Elementary.h>
+
+namespace AskUser {
+namespace Notification {
+
+class UIElement {
+public:
+ explicit UIElement(Evas_Object *parent) : m_parent(parent), m_elementId(-1) {}
+ void setId(int id) { m_elementId = id;}
+ int getId() { return m_elementId; }
+ virtual void create() = 0;
+ virtual ~UIElement() {}
+protected:
+ Evas_Object *m_parent;
+ int m_elementId;
+};
+
+} /* namespace Notification */
+} /* namespace Askuser */
+