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