blob: 0f184e4930cabc144e93584e7579fd3f9e479122 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// 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.app.creator;
import static org.chromium.chrome.browser.tab.Tab.INVALID_TAB_ID;
import android.os.Bundle;
import android.view.MenuItem;
import androidx.appcompat.widget.Toolbar;
import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.base.supplier.UnownedUserDataSupplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.SnackbarActivity;
import org.chromium.chrome.browser.WebContentsFactory;
import org.chromium.chrome.browser.creator.CreatorCoordinator;
import org.chromium.chrome.browser.feed.SingleWebFeedEntryPoint;
import org.chromium.chrome.browser.feed.webfeed.CreatorIntentConstants;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
import org.chromium.chrome.browser.init.ActivityLifecycleDispatcherImpl;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.share.ShareDelegate;
import org.chromium.chrome.browser.share.ShareDelegateImpl;
import org.chromium.chrome.browser.share.ShareDelegateSupplier;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.signin.metrics.SigninAccessPoint;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.ActivityWindowAndroid;
import org.chromium.ui.base.IntentRequestTracker;
// import org.chromium.components.feed.proto.wire.FeedEntryPointSource;
/**
* Activity for the Creator Page.
*/
public class CreatorActivity extends SnackbarActivity {
private ActivityWindowAndroid mWindowAndroid;
private BottomSheetController mBottomSheetController;
private CreatorActionDelegateImpl mCreatorActionDelegate;
private ActivityTabProvider mActivityTabProvider;
private ActivityLifecycleDispatcherImpl mLifecycleDispatcher;
private UnownedUserDataSupplier<ShareDelegate> mShareDelegateSupplier;
private UnownedUserDataSupplier<ShareDelegate> mTabShareDelegateSupplier;
private ObservableSupplierImpl<Profile> mProfileSupplier;
private Profile mProfile;
private static class TabShareDelegateImpl extends ShareDelegateImpl {
public TabShareDelegateImpl(BottomSheetController controller,
ActivityLifecycleDispatcherImpl lifecycleDispatcher,
ActivityTabProvider tabProvider, ObservableSupplierImpl tabModelSelectorProvider,
ObservableSupplierImpl profileSupplier, ShareSheetDelegate delegate,
boolean isCustomTab) {
super(controller, lifecycleDispatcher, tabProvider, tabModelSelectorProvider,
profileSupplier, delegate, isCustomTab);
}
@Override
public boolean isSharingHubEnabled() {
return false;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
byte[] webFeedId =
getIntent().getByteArrayExtra(CreatorIntentConstants.CREATOR_WEB_FEED_ID);
String url = getIntent().getStringExtra(CreatorIntentConstants.CREATOR_URL);
boolean following =
getIntent().getBooleanExtra(CreatorIntentConstants.CREATOR_FOLLOWING, false);
int entryPoint = getIntent().getIntExtra(
CreatorIntentConstants.CREATOR_ENTRY_POINT, SingleWebFeedEntryPoint.OTHER);
int mParentTabId =
getIntent().getIntExtra(CreatorIntentConstants.CREATOR_TAB_ID, INVALID_TAB_ID);
mActivityTabProvider = new ActivityTabProvider();
mLifecycleDispatcher = new ActivityLifecycleDispatcherImpl(this);
mShareDelegateSupplier = new ShareDelegateSupplier();
mTabShareDelegateSupplier = new ShareDelegateSupplier();
mProfileSupplier = new ObservableSupplierImpl<>();
mProfile = Profile.getLastUsedRegularProfile();
mProfileSupplier.set(mProfile);
super.onCreate(savedInstanceState);
IntentRequestTracker intentRequestTracker = IntentRequestTracker.createFromActivity(this);
mWindowAndroid = new ActivityWindowAndroid(this, false, intentRequestTracker);
TabShareDelegateImpl tabshareDelegate = new TabShareDelegateImpl(mBottomSheetController,
mLifecycleDispatcher, mActivityTabProvider,
/* tabModelSelectProvider */ new ObservableSupplierImpl<>(), mProfileSupplier,
new ShareDelegateImpl.ShareSheetDelegate(),
/* isCustomTab */ false);
mTabShareDelegateSupplier.set(tabshareDelegate);
CreatorCoordinator coordinator = new CreatorCoordinator(this, webFeedId,
getSnackbarManager(), mWindowAndroid, mProfile, url, this::createWebContents,
this::createNewTab, mTabShareDelegateSupplier, entryPoint, following,
this::showSignInInterstitial);
mBottomSheetController = coordinator.getBottomSheetController();
ShareDelegate shareDelegate = new ShareDelegateImpl(mBottomSheetController,
mLifecycleDispatcher, mActivityTabProvider,
/* tabModelSelectProvider */ new ObservableSupplierImpl<>(), mProfileSupplier,
new ShareDelegateImpl.ShareSheetDelegate(),
/* isCustomTab */ false);
mShareDelegateSupplier.set(shareDelegate);
mCreatorActionDelegate = new CreatorActionDelegateImpl(
this, mProfile, getSnackbarManager(), coordinator, mParentTabId);
coordinator.queryFeedStream(mCreatorActionDelegate,
HelpAndFeedbackLauncherImpl.getForProfile(mProfile), mShareDelegateSupplier);
setContentView(coordinator.getView());
Toolbar actionBar = findViewById(R.id.action_bar);
setSupportActionBar(actionBar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle("");
// For this Activity, the home button in the action bar acts as the back button.
getSupportActionBar().setHomeActionContentDescription(R.string.back);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
mTabShareDelegateSupplier.destroy();
mShareDelegateSupplier.destroy();
super.onDestroy();
}
// This implements the CreatorWebContents interface.
public WebContents createWebContents() {
return WebContentsFactory.createWebContents(mProfile, true, false);
}
// This implements the CreatorOpenTab interface.
public void createNewTab(LoadUrlParams params) {
new TabDelegate(false).createNewTab(params, TabLaunchType.FROM_LINK, null);
}
// This implements the SignInInterstitialInitiator interface.
public void showSignInInterstitial() {
mCreatorActionDelegate.showSignInInterstitial(
SigninAccessPoint.CREATOR_FEED_FOLLOW, mBottomSheetController, mWindowAndroid);
}
}