1 // Copyright 2017 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.chrome.browser.suggestions; 6 7 import androidx.annotation.Nullable; 8 9 import org.chromium.chrome.browser.profiles.Profile; 10 import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; 11 import org.chromium.chrome.browser.ui.native_page.NativePageHost; 12 13 import java.util.ArrayList; 14 import java.util.List; 15 16 /** 17 * {@link SuggestionsUiDelegate} implementation. 18 */ 19 public class SuggestionsUiDelegateImpl implements SuggestionsUiDelegate { 20 private final List<DestructionObserver> mDestructionObservers = new ArrayList<>(); 21 private final SuggestionsNavigationDelegate mSuggestionsNavigationDelegate; 22 private final NativePageHost mHost; 23 private final ImageFetcher mImageFetcher; 24 private final SnackbarManager mSnackbarManager; 25 26 private boolean mIsDestroyed; 27 SuggestionsUiDelegateImpl(SuggestionsNavigationDelegate navigationDelegate, Profile profile, NativePageHost host, SnackbarManager snackbarManager)28 public SuggestionsUiDelegateImpl(SuggestionsNavigationDelegate navigationDelegate, 29 Profile profile, NativePageHost host, SnackbarManager snackbarManager) { 30 mSuggestionsNavigationDelegate = navigationDelegate; 31 mImageFetcher = new ImageFetcher(profile); 32 mSnackbarManager = snackbarManager; 33 34 mHost = host; 35 } 36 37 @Nullable 38 @Override getNavigationDelegate()39 public SuggestionsNavigationDelegate getNavigationDelegate() { 40 return mSuggestionsNavigationDelegate; 41 } 42 43 @Override getSnackbarManager()44 public SnackbarManager getSnackbarManager() { 45 return mSnackbarManager; 46 } 47 48 @Override getImageFetcher()49 public ImageFetcher getImageFetcher() { 50 return mImageFetcher; 51 } 52 53 @Override addDestructionObserver(DestructionObserver destructionObserver)54 public void addDestructionObserver(DestructionObserver destructionObserver) { 55 mDestructionObservers.add(destructionObserver); 56 } 57 58 @Override isVisible()59 public boolean isVisible() { 60 return mHost.isVisible(); 61 } 62 63 /** Invalidates the delegate and calls the registered destruction observers. */ onDestroy()64 public void onDestroy() { 65 assert !mIsDestroyed; 66 67 mImageFetcher.onDestroy(); 68 69 for (DestructionObserver observer : mDestructionObservers) observer.onDestroy(); 70 71 mIsDestroyed = true; 72 } 73 } 74