15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)package org.chromium.chrome.browser.profiles;
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import android.graphics.Bitmap;
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import org.chromium.base.CalledByNative;
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import org.chromium.base.ObserverList;
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import org.chromium.base.ThreadUtils;
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Android wrapper of the ProfileDownloader which provides access from the Java layer.
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * The native ProfileDownloader requires its access to be in the UI thread.
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * See chrome/browser/profiles/profile_downloader.h/cc for more details.
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)public class ProfileDownloader {
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private static final ObserverList<Observer> sObservers = new ObserverList<Observer>();
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Interface for receiving notifications on account information updates.
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    public interface Observer {
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        /**
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)         * Notifies that an account data in the profile has been updated.
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)         * @param accountId An account ID.
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)         * @param fullName A full name.
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)         * @param bitmap A user picture.
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)         */
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        void onProfileDownloaded(String accountId, String fullName, Bitmap bitmap);
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Add an observer.
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param observer An observer.
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    public static void addObserver(Observer observer) {
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        sObservers.addObserver(observer);
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Remove an observer.
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param observer An observer.
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    public static void removeObserver(Observer observer) {
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        sObservers.removeObserver(observer);
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Starts fetching the account information for a given account.
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param profile Profile associated with the request
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param accountId Account name to fetch the information for
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param imageSidePixels Request image side (in pixels)
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    public static void startFetchingAccountInfoFor(
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            Profile profile, String accountId, int imageSidePixels) {
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        ThreadUtils.assertOnUiThread();
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        nativeStartFetchingAccountInfoFor(profile, accountId, imageSidePixels);
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    @CalledByNative
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private static void onProfileDownloadSuccess(String accountId, String fullName, Bitmap bitmap) {
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        ThreadUtils.assertOnUiThread();
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        for (Observer observer : sObservers) {
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            observer.onProfileDownloaded(accountId, fullName, bitmap);
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    /**
71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch     * @param profile Profile
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch     * @return The profile name if cached, or null.
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch     */
74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    public static String getCachedName(Profile profile) {
75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        return nativeGetCachedNameForPrimaryAccount(profile);
76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    /**
79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch     * @param profile Profile
80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch     * @return The profile avatar if cached, or null.
81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch     */
82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    public static Bitmap getCachedAvatar(Profile profile) {
83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        return nativeGetCachedAvatarForPrimaryAccount(profile);
84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Native methods.
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private static native void nativeStartFetchingAccountInfoFor(
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            Profile profile, String accountId, int imageSidePixels);
89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    private static native String nativeGetCachedNameForPrimaryAccount(Profile profile);
90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    private static native Bitmap nativeGetCachedAvatarForPrimaryAccount(Profile profile);
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
92