blob: caa7aeac11a0186fc69d76ae91c60d12a9dbe0ae [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.keyboard_accessory.data;
/**
* A provider notifies all registered {@link Observer}s about a changed object.
* @param <T> The object this provider provides.
*/
public interface Provider<T> {
/**
* Every observer added by this needs to be notified whenever the object changes.
* @param observer The observer to be notified.
*/
void addObserver(Observer<T> observer);
/**
* Passes the given item to all subscribed {@link Observer}s.
* @param item The item to be passed to the {@link Observer}s.
*/
void notifyObservers(T item);
/**
* An observer receives notifications from an {@link Provider} it is subscribed to.
* @param <T> Any object that this instance observes.
*/
interface Observer<T> {
int DEFAULT_TYPE = Integer.MIN_VALUE;
/**
* A provider calls this function with an item that should be available in the keyboard
* accessory.
* @param typeId Specifies which type of item this update affects.
* @param item An item to be displayed in the Accessory.
*/
void onItemAvailable(int typeId, T item);
}
}