// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.setui;

enum ReturnCode {
    OK = 0;
    FAILED = 1;
    UNSUPPORTED = 2;
};

struct SettingsObject {
    SettingType setting_type;
    SettingData data;
};

struct UpdateResponse {
    ReturnCode return_code;
};

struct MutationResponse {
    ReturnCode return_code;
};

// The main interface for UIs to change system settings. Currently, the
// settings are scoped to the device, but will eventually be scoped to the user
// as is applicable.
[Discoverable]
interface SetUiService {
    // Begins listening to changes to a given settings object. This may cause the
    // SetUiService to connect to any applicable device services until all listeners
    // for a given type are closed.
    // The service will call the listener with the current state immediately on
    // initialization.
    Listen(SettingType settingType, SettingListener listener);

    // Sets the value of a given settings object. Returns once operation
    // has completed.
    Update(SettingsObject value) -> (UpdateResponse response);

    Mutate(SettingType settingType, Mutation mutation) -> (MutationResponse response);

    InteractiveMutate(SettingType settingType, Mutation mutation, MutationHandles mutation_handles) -> (MutationResponse response);
};

interface SettingListener {
    Notify(SettingsObject object);
};
