Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ea3c99a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Statsd notifies listener with pendingintent."

parents 6a00aac9 661f791a
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -30,8 +30,8 @@ package android {
    field public static final java.lang.String BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE = "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE";
    field public static final java.lang.String BIND_SETTINGS_SUGGESTIONS_SERVICE = "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE";
    field public static final java.lang.String BIND_TELEPHONY_DATA_SERVICE = "android.permission.BIND_TELEPHONY_DATA_SERVICE";
    field public static final java.lang.String BIND_TEXTCLASSIFIER_SERVICE = "android.permission.BIND_TEXTCLASSIFIER_SERVICE";
    field public static final java.lang.String BIND_TELEPHONY_NETWORK_SERVICE = "android.permission.BIND_TELEPHONY_NETWORK_SERVICE";
    field public static final java.lang.String BIND_TEXTCLASSIFIER_SERVICE = "android.permission.BIND_TEXTCLASSIFIER_SERVICE";
    field public static final java.lang.String BIND_TRUST_AGENT = "android.permission.BIND_TRUST_AGENT";
    field public static final java.lang.String BIND_TV_REMOTE_SERVICE = "android.permission.BIND_TV_REMOTE_SERVICE";
    field public static final java.lang.String BLUETOOTH_PRIVILEGED = "android.permission.BLUETOOTH_PRIVILEGED";
@@ -361,11 +361,12 @@ package android.app {
  }

  public final class StatsManager {
    method public boolean addConfiguration(long, byte[], java.lang.String, java.lang.String);
    method public boolean addConfiguration(long, byte[]);
    method public byte[] getData(long);
    method public byte[] getMetadata();
    method public boolean removeConfiguration(long);
    method public boolean setBroadcastSubscriber(long, long, android.app.PendingIntent);
    method public boolean setDataFetchOperation(long, android.app.PendingIntent);
    field public static final java.lang.String ACTION_STATSD_STARTED = "android.app.action.STATSD_STARTED";
    field public static final java.lang.String EXTRA_STATS_CONFIG_KEY = "android.app.extra.STATS_CONFIG_KEY";
    field public static final java.lang.String EXTRA_STATS_CONFIG_UID = "android.app.extra.STATS_CONFIG_UID";
+35 −10
Original line number Diff line number Diff line
@@ -84,12 +84,11 @@ StatsService::StatsService(const sp<Looper>& handlerLooper)
        auto receiver = mConfigManager->GetConfigReceiver(key);
        if (sc == nullptr) {
            VLOG("Could not find StatsCompanionService");
        } else if (receiver.first.size() == 0) {
        } else if (receiver == nullptr) {
            VLOG("Statscompanion could not find a broadcast receiver for %s",
                 key.ToString().c_str());
        } else {
            sc->sendBroadcast(String16(receiver.first.c_str()),
                              String16(receiver.second.c_str()));
            sc->sendDataBroadcast(receiver);
        }
    });

@@ -367,12 +366,14 @@ status_t StatsService::cmd_trigger_broadcast(FILE* out, Vector<String8>& args) {
    }
    auto receiver = mConfigManager->GetConfigReceiver(ConfigKey(uid, StrToInt64(name)));
    sp<IStatsCompanionService> sc = getStatsCompanionService();
    if (sc != nullptr) {
        sc->sendBroadcast(String16(receiver.first.c_str()), String16(receiver.second.c_str()));
    if (sc == nullptr) {
        VLOG("Could not access statsCompanion");
    } else if (receiver == nullptr) {
        VLOG("Could not find receiver for %s, %s", args[1].c_str(), args[2].c_str())
    } else {
        sc->sendDataBroadcast(receiver);
        VLOG("StatsService::trigger broadcast succeeded to %s, %s", args[1].c_str(),
             args[2].c_str());
    } else {
        VLOG("Could not access statsCompanion");
    }

    return NO_ERROR;
@@ -800,7 +801,6 @@ Status StatsService::getMetadata(vector<uint8_t>* output) {

Status StatsService::addConfiguration(int64_t key,
                                      const vector <uint8_t>& config,
                                      const String16& package, const String16& cls,
                                      bool* success) {
    IPCThreadState* ipc = IPCThreadState::self();
    if (checkCallingPermission(String16(kPermissionDump))) {
@@ -811,8 +811,33 @@ Status StatsService::addConfiguration(int64_t key,
            return Status::ok();
        }
        mConfigManager->UpdateConfig(configKey, cfg);
        mConfigManager->SetConfigReceiver(configKey, string(String8(package).string()),
                                          string(String8(cls).string()));
        *success = true;
        return Status::ok();
    } else {
        *success = false;
        return Status::fromExceptionCode(binder::Status::EX_SECURITY);
    }
}

Status StatsService::removeDataFetchOperation(int64_t key, bool* success) {
    IPCThreadState* ipc = IPCThreadState::self();
    if (checkCallingPermission(String16(kPermissionDump))) {
        ConfigKey configKey(ipc->getCallingUid(), key);
        mConfigManager->RemoveConfigReceiver(configKey);
        *success = true;
        return Status::ok();
    } else {
        *success = false;
        return Status::fromExceptionCode(binder::Status::EX_SECURITY);
    }
}

Status StatsService::setDataFetchOperation(int64_t key, const sp<android::IBinder>& intentSender,
                                           bool* success) {
    IPCThreadState* ipc = IPCThreadState::self();
    if (checkCallingPermission(String16(kPermissionDump))) {
        ConfigKey configKey(ipc->getCallingUid(), key);
        mConfigManager->SetConfigReceiver(configKey, intentSender);
        *success = true;
        return Status::ok();
    } else {
+13 −3
Original line number Diff line number Diff line
@@ -91,8 +91,18 @@ public:
     * should requestData for this configuration.
     */
    virtual Status addConfiguration(int64_t key, const vector<uint8_t>& config,
                                    const String16& package, const String16& cls, bool* success)
    override;
                                    bool* success) override;

    /**
     * Binder call to let clients register the data fetch operation for a configuration.
     */
    virtual Status setDataFetchOperation(int64_t key, const sp<android::IBinder>& intentSender,
                                         bool* success) override;

    /**
     * Binder call to remove the data fetch operation for the specified config key.
     */
    virtual Status removeDataFetchOperation(int64_t key, bool* success) override;

    /**
     * Binder call to allow clients to remove the specified configuration.
+5 −6
Original line number Diff line number Diff line
@@ -75,8 +75,8 @@ void ConfigManager::UpdateConfig(const ConfigKey& key, const StatsdConfig& confi
    }
}

void ConfigManager::SetConfigReceiver(const ConfigKey& key, const string& pkg, const string& cls) {
    mConfigReceivers[key] = pair<string, string>(pkg, cls);
void ConfigManager::SetConfigReceiver(const ConfigKey& key, const sp<IBinder>& intentSender) {
    mConfigReceivers[key] = intentSender;
}

void ConfigManager::RemoveConfigReceiver(const ConfigKey& key) {
@@ -159,10 +159,10 @@ vector<ConfigKey> ConfigManager::GetAllConfigKeys() const {
    return ret;
}

const pair<string, string> ConfigManager::GetConfigReceiver(const ConfigKey& key) const {
const sp<android::IBinder> ConfigManager::GetConfigReceiver(const ConfigKey& key) const {
    auto it = mConfigReceivers.find(key);
    if (it == mConfigReceivers.end()) {
        return pair<string,string>();
        return nullptr;
    } else {
        return it->second;
    }
@@ -175,8 +175,7 @@ void ConfigManager::Dump(FILE* out) {
        fprintf(out, "  %6d %lld\n", key.GetUid(), (long long)key.GetId());
        auto receiverIt = mConfigReceivers.find(key);
        if (receiverIt != mConfigReceivers.end()) {
            fprintf(out, "    -> received by %s, %s\n", receiverIt->second.first.c_str(),
                    receiverIt->second.second.c_str());
            fprintf(out, "    -> received by PendingIntent as binder\n");
        }
    }
}
+6 −5
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#pragma once

#include "binder/IBinder.h"
#include "config/ConfigKey.h"
#include "config/ConfigListener.h"

@@ -68,12 +69,12 @@ public:
    /**
     * Sets the broadcast receiver for a configuration key.
     */
    void SetConfigReceiver(const ConfigKey& key, const std::string& pkg, const std::string& cls);
    void SetConfigReceiver(const ConfigKey& key, const sp<IBinder>& intentSender);

    /**
     * Returns the package name and class name representing the broadcast receiver for this config.
     */
    const std::pair<std::string, std::string> GetConfigReceiver(const ConfigKey& key) const;
    const sp<android::IBinder> GetConfigReceiver(const ConfigKey& key) const;

    /**
     * Returns all config keys registered.
@@ -124,10 +125,10 @@ private:
    std::set<ConfigKey> mConfigs;

    /**
     * Each config key can be subscribed by up to one receiver, specified as the package name and
     * class name.
     * Each config key can be subscribed by up to one receiver, specified as IBinder from
     * PendingIntent.
     */
    std::map<ConfigKey, std::pair<std::string, std::string>> mConfigReceivers;
    std::map<ConfigKey, sp<android::IBinder>> mConfigReceivers;

    /**
     * The ConfigListeners that will be told about changes.
Loading