std::string getOwnAppId();
void identifyApp(const std::string &client, std::string &appId, std::string &pkgLabel);
+Policy calculatePolicyForPrivacy(const std::string &appId, const Privacy &privacy);
+Policy getMinimumPolicy(const std::vector<Policy> &policies);
Policy getPrivilegePolicy(const std::string &appId, const Privilege &privilege);
Policy getPrivaciesPolicy(const std::string &appId, const std::vector<Privacy> &privacies);
return;
}
- Policy policyLevel = getPrivaciesPolicy(conn.appId, privacies);
+ std::vector<Policy> policies;
+
+ std::string removePrivacy = "removeme";
+ for (auto &privacy : privacies) {
+ std::string policy = calculatePolicyForPrivacy(conn.appId, privacy);
+ if (policy == "Allow") {
+ // Remove privacies which are already allowed - we don't need to spam user more with popups
+ privacy = removePrivacy;
+ }
+ policies.push_back(policy);
+ }
+ std::string policyLevel = getMinimumPolicy(policies);
ALOGD("Privilege policy level calculated to : " << policyLevel);
if (policyLevel == "Allow") {
return;
}
+ auto removeIt = std::remove_if(privacies.begin(), privacies.end(), [&](const Privacy &privacy) {return privacy == removePrivacy;});
+ privacies.erase(removeIt, privacies.end());
+
addEvent(fd, id, privacies);
processEvents();
}