Commit 51d19641 authored by Mohamed Heikal's avatar Mohamed Heikal Committed by Commit Bot

[Android] Improve tracing in ChromeActvity

Adds more tracing calls in ChromeActivity and other related startup code. Also
fixes two presubmit warnings.

Change-Id: Ida5d6ac0024dfa42a7e9c4aa3179bd7b55c4363f
Reviewed-on: https://chromium-review.googlesource.com/1072409
Commit-Queue: Mohamed Heikal <mheikal@chromium.org>
Reviewed-by: default avatarBernhard Bauer <bauerb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#561901}
parent d00bd79c
...@@ -20,7 +20,6 @@ import android.net.Uri; ...@@ -20,7 +20,6 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.StrictMode;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.CallSuper; import android.support.annotation.CallSuper;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
...@@ -46,6 +45,7 @@ import org.chromium.base.Callback; ...@@ -46,6 +45,7 @@ import org.chromium.base.Callback;
import org.chromium.base.CommandLine; import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.base.DiscardableReferencePool; import org.chromium.base.DiscardableReferencePool;
import org.chromium.base.StrictModeContext;
import org.chromium.base.SysUtils; import org.chromium.base.SysUtils;
import org.chromium.base.TraceEvent; import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
...@@ -348,69 +348,75 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -348,69 +348,75 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@SuppressLint("NewApi") @SuppressLint("NewApi")
@Override @Override
public void postInflationStartup() { public void postInflationStartup() {
super.postInflationStartup(); try (TraceEvent te = TraceEvent.scoped("ChromeActivity.postInflationStartup")) {
super.postInflationStartup();
Intent intent = getIntent(); Intent intent = getIntent();
if (intent != null && getSavedInstanceState() == null) { if (intent != null && getSavedInstanceState() == null) {
VrShellDelegate.maybeHandleVrIntentPreNative(this, intent); VrShellDelegate.maybeHandleVrIntentPreNative(this, intent);
} }
mSnackbarManager = new SnackbarManager(this, null); mSnackbarManager = new SnackbarManager(this, null);
mDataUseSnackbarController = new DataUseSnackbarController(this, getSnackbarManager()); mDataUseSnackbarController = new DataUseSnackbarController(this, getSnackbarManager());
mAssistStatusHandler = createAssistStatusHandler(); mAssistStatusHandler = createAssistStatusHandler();
if (mAssistStatusHandler != null) { if (mAssistStatusHandler != null) {
if (mTabModelSelector != null) { if (mTabModelSelector != null) {
mAssistStatusHandler.setTabModelSelector(mTabModelSelector); mAssistStatusHandler.setTabModelSelector(mTabModelSelector);
} }
mAssistStatusHandler.updateAssistState(); mAssistStatusHandler.updateAssistState();
}
// This check is only applicable for JB since in KK svelte was supported from the start.
// See https://crbug.com/826460 for context.
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR2) {
// If a user had ALLOW_LOW_END_DEVICE_UI explicitly set to false then we manually
// override SysUtils.isLowEndDevice() with a switch so that they continue to see the
// normal UI. This is only the case for grandfathered-in svelte users. We no longer do
// so for newer users.
if (!ChromePreferenceManager.getInstance().getAllowLowEndDeviceUi()) {
CommandLine.getInstance().appendSwitch(BaseSwitches.DISABLE_LOW_END_DEVICE_MODE);
} }
}
AccessibilityManager manager = (AccessibilityManager) // This check is only applicable for JB since in KK svelte was supported from the start.
getBaseContext().getSystemService(Context.ACCESSIBILITY_SERVICE); // See https://crbug.com/826460 for context.
manager.addAccessibilityStateChangeListener(this); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR2) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // If a user had ALLOW_LOW_END_DEVICE_UI explicitly set to false then we manually
mTouchExplorationStateChangeListener = enabled -> checkAccessibility(); // override SysUtils.isLowEndDevice() with a switch so that they continue to see the
manager.addTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); // normal UI. This is only the case for grandfathered-in svelte users. We no longer
} // do
// so for newer users.
if (!ChromePreferenceManager.getInstance().getAllowLowEndDeviceUi()) {
CommandLine.getInstance().appendSwitch(
BaseSwitches.DISABLE_LOW_END_DEVICE_MODE);
}
}
// Make the activity listen to policy change events AccessibilityManager manager = (AccessibilityManager) getBaseContext().getSystemService(
CombinedPolicyProvider.get().addPolicyChangeListener(this); Context.ACCESSIBILITY_SERVICE);
mDidAddPolicyChangeListener = true; manager.addAccessibilityStateChangeListener(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mTouchExplorationStateChangeListener = enabled -> checkAccessibility();
manager.addTouchExplorationStateChangeListener(
mTouchExplorationStateChangeListener);
}
// Set up the animation placeholder to be the SurfaceView. This disables the // Make the activity listen to policy change events
// SurfaceView's 'hole' clipping during animations that are notified to the window. CombinedPolicyProvider.get().addPolicyChangeListener(this);
getWindowAndroid().setAnimationPlaceholderView(mCompositorViewHolder.getCompositorView()); mDidAddPolicyChangeListener = true;
// Set up the animation placeholder to be the SurfaceView. This disables the
// SurfaceView's 'hole' clipping during animations that are notified to the window.
getWindowAndroid().setAnimationPlaceholderView(
mCompositorViewHolder.getCompositorView());
mManualFillingController = new ManualFillingCoordinator(getWindowAndroid(),
findViewById(R.id.keyboard_accessory_stub),
findViewById(R.id.keyboard_accessory_sheet_stub));
initializeToolbar();
initializeTabModels();
if (!isFinishing() && getFullscreenManager() != null) {
getFullscreenManager().initialize(
(ControlContainer) findViewById(R.id.control_container),
getTabModelSelector(), getControlContainerHeightResource());
}
mManualFillingController = new ManualFillingCoordinator(getWindowAndroid(), ((BottomContainer) findViewById(R.id.bottom_container)).initialize(mFullscreenManager);
findViewById(R.id.keyboard_accessory_stub),
findViewById(R.id.keyboard_accessory_sheet_stub));
initializeToolbar(); mModalDialogManager = createModalDialogManager();
initializeTabModels(); mPageViewTimer = new PageViewTimer(mTabModelSelector);
if (!isFinishing() && getFullscreenManager() != null) {
getFullscreenManager().initialize(
(ControlContainer) findViewById(R.id.control_container),
getTabModelSelector(),
getControlContainerHeightResource());
} }
((BottomContainer) findViewById(R.id.bottom_container)).initialize(mFullscreenManager);
mModalDialogManager = createModalDialogManager();
mPageViewTimer = new PageViewTimer(mTabModelSelector);
} }
@Override @Override
...@@ -437,71 +443,75 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -437,71 +443,75 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@Override @Override
protected final void setContentView() { protected final void setContentView() {
final long begin = SystemClock.elapsedRealtime(); final long begin = SystemClock.elapsedRealtime();
TraceEvent.begin("onCreate->setContentView()"); try (TraceEvent te = TraceEvent.scoped("ChromeActivity.setContentView")) {
SelectionPopupController.setShouldGetReadbackViewFromWindowAndroid();
SelectionPopupController.setShouldGetReadbackViewFromWindowAndroid();
enableHardwareAcceleration();
enableHardwareAcceleration(); setLowEndTheme();
setLowEndTheme(); int controlContainerLayoutId = getControlContainerLayoutId();
int controlContainerLayoutId = getControlContainerLayoutId(); WarmupManager warmupManager = WarmupManager.getInstance();
WarmupManager warmupManager = WarmupManager.getInstance(); if (warmupManager.hasViewHierarchyWithToolbar(controlContainerLayoutId)) {
if (warmupManager.hasViewHierarchyWithToolbar(controlContainerLayoutId)) { View placeHolderView = new View(this);
View placeHolderView = new View(this); setContentView(placeHolderView);
setContentView(placeHolderView); ViewGroup contentParent = (ViewGroup) placeHolderView.getParent();
ViewGroup contentParent = (ViewGroup) placeHolderView.getParent(); warmupManager.transferViewHierarchyTo(contentParent);
warmupManager.transferViewHierarchyTo(contentParent); contentParent.removeView(placeHolderView);
contentParent.removeView(placeHolderView); } else {
} else { warmupManager.clearViewHierarchy();
warmupManager.clearViewHierarchy();
// Allow disk access for the content view and toolbar container setup.
// Allow disk access for the content view and toolbar container setup. // On certain android devices this setup sequence results in disk writes outside
// On certain android devices this setup sequence results in disk writes outside // of our control, so we have to disable StrictMode to work. See
// of our control, so we have to disable StrictMode to work. See crbug.com/639352. // https://crbug.com/639352.
StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites(); try (StrictModeContext smc = StrictModeContext.allowDiskWrites()) {
try { TraceEvent.begin("setContentView(R.layout.main)");
setContentView(R.layout.main); setContentView(R.layout.main);
if (controlContainerLayoutId != NO_CONTROL_CONTAINER) { TraceEvent.end("setContentView(R.layout.main)");
ViewStub toolbarContainerStub = if (controlContainerLayoutId != NO_CONTROL_CONTAINER) {
((ViewStub) findViewById(R.id.control_container_stub)); ViewStub toolbarContainerStub =
((ViewStub) findViewById(R.id.control_container_stub));
toolbarContainerStub.setLayoutResource(controlContainerLayoutId);
TraceEvent.begin("toolbarContainerStub.inflate");
toolbarContainerStub.inflate();
TraceEvent.end("toolbarContainerStub.inflate");
}
toolbarContainerStub.setLayoutResource(controlContainerLayoutId); // It cannot be assumed that the result of toolbarContainerStub.inflate() will
toolbarContainerStub.inflate(); // be
}
// It cannot be assumed that the result of toolbarContainerStub.inflate() will be // the control container since it may be wrapped in another view.
// the control container since it may be wrapped in another view. ControlContainer controlContainer =
ControlContainer controlContainer = (ControlContainer) findViewById(R.id.control_container);
(ControlContainer) findViewById(R.id.control_container);
// Inflate the correct toolbar layout for the device. // Inflate the correct toolbar layout for the device.
int toolbarLayoutId = getToolbarLayoutId(); int toolbarLayoutId = getToolbarLayoutId();
if (toolbarLayoutId != NO_TOOLBAR_LAYOUT && controlContainer != null) { if (toolbarLayoutId != NO_TOOLBAR_LAYOUT && controlContainer != null) {
controlContainer.initWithToolbar(toolbarLayoutId); controlContainer.initWithToolbar(toolbarLayoutId);
}
} }
} finally {
StrictMode.setThreadPolicy(oldPolicy);
} }
} mInflateInitialLayoutDurationMs = SystemClock.elapsedRealtime() - begin;
TraceEvent.end("onCreate->setContentView()"); // Set the status bar color to black by default. This is an optimization for
mInflateInitialLayoutDurationMs = SystemClock.elapsedRealtime() - begin; // Chrome not to draw under status and navigation bars when we use the default
// black status bar
// Set the status bar color to black by default. This is an optimization for setStatusBarColor(null, Color.BLACK);
// Chrome not to draw under status and navigation bars when we use the default
// black status bar
setStatusBarColor(null, Color.BLACK);
ViewGroup rootView = (ViewGroup) getWindow().getDecorView().getRootView(); ViewGroup rootView = (ViewGroup) getWindow().getDecorView().getRootView();
mCompositorViewHolder = (CompositorViewHolder) findViewById(R.id.compositor_view_holder); mCompositorViewHolder =
mCompositorViewHolder.setRootView(rootView); (CompositorViewHolder) findViewById(R.id.compositor_view_holder);
mCompositorViewHolder.setRootView(rootView);
// Setting fitsSystemWindows to false ensures that the root view doesn't consume the insets. // Setting fitsSystemWindows to false ensures that the root view doesn't consume the
rootView.setFitsSystemWindows(false); // insets.
rootView.setFitsSystemWindows(false);
// Add a custom view right after the root view that stores the insets to access later. // Add a custom view right after the root view that stores the insets to access later.
// ContentViewCore needs the insets to determine the portion of the screen obscured by // ContentViewCore needs the insets to determine the portion of the screen obscured by
// non-content displaying things such as the OSK. // non-content displaying things such as the OSK.
mInsetObserverView = InsetObserverView.create(this); mInsetObserverView = InsetObserverView.create(this);
rootView.addView(mInsetObserverView, 0); rootView.addView(mInsetObserverView, 0);
}
} }
@Override @Override
...@@ -514,41 +524,43 @@ public abstract class ChromeActivity extends AsyncInitializationActivity ...@@ -514,41 +524,43 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
* {@link Toolbar}. Extending classes can override this call to avoid creating the toolbar. * {@link Toolbar}. Extending classes can override this call to avoid creating the toolbar.
*/ */
protected void initializeToolbar() { protected void initializeToolbar() {
final View controlContainer = findViewById(R.id.control_container); try (TraceEvent te = TraceEvent.scoped("ChromeActivity.initializeToolbar")) {
assert controlContainer != null; final View controlContainer = findViewById(R.id.control_container);
ToolbarControlContainer toolbarContainer = (ToolbarControlContainer) controlContainer; assert controlContainer != null;
mAppMenuPropertiesDelegate = createAppMenuPropertiesDelegate(); ToolbarControlContainer toolbarContainer = (ToolbarControlContainer) controlContainer;
mAppMenuHandler = sAppMenuHandlerFactory.get(this, mAppMenuPropertiesDelegate, mAppMenuPropertiesDelegate = createAppMenuPropertiesDelegate();
getAppMenuLayoutId()); mAppMenuHandler = sAppMenuHandlerFactory.get(
Callback<Boolean> urlFocusChangedCallback = hasFocus -> onOmniboxFocusChanged(hasFocus); this, mAppMenuPropertiesDelegate, getAppMenuLayoutId());
mToolbarManager = new ToolbarManager(this, toolbarContainer, mAppMenuHandler, Callback<Boolean> urlFocusChangedCallback = hasFocus -> onOmniboxFocusChanged(hasFocus);
mAppMenuPropertiesDelegate, getCompositorViewHolder().getInvalidator(), mToolbarManager = new ToolbarManager(this, toolbarContainer, mAppMenuHandler,
urlFocusChangedCallback); mAppMenuPropertiesDelegate, getCompositorViewHolder().getInvalidator(),
mFindToolbarManager = new FindToolbarManager( urlFocusChangedCallback);
this, mToolbarManager.getActionModeController().getActionModeCallback()); mFindToolbarManager = new FindToolbarManager(
mAppMenuHandler.addObserver(new AppMenuObserver() { this, mToolbarManager.getActionModeController().getActionModeCallback());
@Override mAppMenuHandler.addObserver(new AppMenuObserver() {
public void onMenuVisibilityChanged(boolean isVisible) { @Override
if (isVisible && !isInOverviewMode()) { public void onMenuVisibilityChanged(boolean isVisible) {
// The app menu badge should be removed the first time the menu is opened. if (isVisible && !isInOverviewMode()) {
if (mToolbarManager.getToolbar().isShowingAppMenuUpdateBadge()) { // The app menu badge should be removed the first time the menu is opened.
mToolbarManager.getToolbar().removeAppMenuUpdateBadge(true); if (mToolbarManager.getToolbar().isShowingAppMenuUpdateBadge()) {
mCompositorViewHolder.requestRender(); mToolbarManager.getToolbar().removeAppMenuUpdateBadge(true);
mCompositorViewHolder.requestRender();
}
} }
} if (!isVisible) {
if (!isVisible) { mAppMenuPropertiesDelegate.onMenuDismissed();
mAppMenuPropertiesDelegate.onMenuDismissed(); MenuItem updateMenuItem = mAppMenuHandler.getAppMenu().getMenu().findItem(
MenuItem updateMenuItem = mAppMenuHandler.getAppMenu().getMenu().findItem( R.id.update_menu_id);
R.id.update_menu_id); if (updateMenuItem != null && updateMenuItem.isVisible()) {
if (updateMenuItem != null && updateMenuItem.isVisible()) { UpdateMenuItemHelper.getInstance().onMenuDismissed();
UpdateMenuItemHelper.getInstance().onMenuDismissed(); }
} }
} }
}
@Override @Override
public void onMenuHighlightChanged(boolean highlighting) {} public void onMenuHighlightChanged(boolean highlighting) {}
}); });
}
} }
/** /**
......
...@@ -15,6 +15,7 @@ import android.view.View; ...@@ -15,6 +15,7 @@ import android.view.View;
import android.view.ViewStub; import android.view.ViewStub;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import org.chromium.base.TraceEvent;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler; import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler;
import org.chromium.chrome.browser.compositor.resources.ResourceFactory; import org.chromium.chrome.browser.compositor.resources.ResourceFactory;
...@@ -84,24 +85,30 @@ public class ToolbarControlContainer extends FrameLayout implements ControlConta ...@@ -84,24 +85,30 @@ public class ToolbarControlContainer extends FrameLayout implements ControlConta
@Override @Override
public void initWithToolbar(int toolbarLayoutId) { public void initWithToolbar(int toolbarLayoutId) {
ViewStub toolbarStub = (ViewStub) findViewById(R.id.toolbar_stub); try (TraceEvent te = TraceEvent.scoped("ToolbarControlContainer.initWithToolbar")) {
toolbarStub.setLayoutResource(toolbarLayoutId); ViewStub toolbarStub = (ViewStub) findViewById(R.id.toolbar_stub);
toolbarStub.inflate(); toolbarStub.setLayoutResource(toolbarLayoutId);
toolbarStub.inflate();
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbarContainer = (ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container); mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbarContainer.setToolbar(mToolbar); mToolbarContainer =
mMenuBtn = findViewById(R.id.menu_button); (ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container);
mToolbarContainer.setToolbar(mToolbar);
if (mToolbar instanceof ToolbarTablet) { mMenuBtn = findViewById(R.id.menu_button);
// On tablet, draw a fake tab strip and toolbar until the compositor is ready to draw
// the real tab strip. (On phone, the toolbar is made entirely of Android views, which if (mToolbar instanceof ToolbarTablet) {
// are already initialized.) // On tablet, draw a fake tab strip and toolbar until the compositor is ready to
setBackgroundResource(R.drawable.toolbar_background); // draw
// the real tab strip. (On phone, the toolbar is made entirely of Android views,
// which
// are already initialized.)
setBackgroundResource(R.drawable.toolbar_background);
}
assert mToolbar != null;
assert mMenuBtn != null;
} }
assert mToolbar != null;
assert mMenuBtn != null;
} }
@Override @Override
......
...@@ -50,6 +50,7 @@ import android.widget.PopupWindow.OnDismissListener; ...@@ -50,6 +50,7 @@ import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView; import android.widget.TextView;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R; import org.chromium.chrome.R;
...@@ -360,32 +361,35 @@ public class ToolbarPhone extends ToolbarLayout ...@@ -360,32 +361,35 @@ public class ToolbarPhone extends ToolbarLayout
@Override @Override
public void onFinishInflate() { public void onFinishInflate() {
super.onFinishInflate(); try (TraceEvent te = TraceEvent.scoped("ToolbarPhone.onFinishInflate")) {
mLocationBar = (LocationBarPhone) findViewById(R.id.location_bar); super.onFinishInflate();
mLocationBar = (LocationBarPhone) findViewById(R.id.location_bar);
mToolbarButtonsContainer = (ViewGroup) findViewById(R.id.toolbar_buttons); mToolbarButtonsContainer = (ViewGroup) findViewById(R.id.toolbar_buttons);
mHomeButton = (TintedImageButton) findViewById(R.id.home_button); mHomeButton = (TintedImageButton) findViewById(R.id.home_button);
if (FeatureUtilities.isNewTabPageButtonEnabled()) changeIconToNTPIcon(mHomeButton); if (FeatureUtilities.isNewTabPageButtonEnabled()) changeIconToNTPIcon(mHomeButton);
mUrlBar = (TextView) findViewById(R.id.url_bar); mUrlBar = (TextView) findViewById(R.id.url_bar);
mUrlActionContainer = findViewById(R.id.url_action_container); mUrlActionContainer = findViewById(R.id.url_action_container);
mBrowsingModeViews.add(mLocationBar); mBrowsingModeViews.add(mLocationBar);
mToolbarBackground = new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL)); mToolbarBackground =
mTabSwitcherAnimationBgOverlay = new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL));
new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL)); mTabSwitcherAnimationBgOverlay =
new ColorDrawable(getToolbarColorForVisualState(VisualState.NORMAL));
initLocationBarBackground(); initLocationBarBackground();
setLayoutTransition(null); setLayoutTransition(null);
mMenuButtonWrapper.setVisibility(View.VISIBLE); mMenuButtonWrapper.setVisibility(View.VISIBLE);
inflateTabSwitchingResources(); inflateTabSwitchingResources();
setWillNotDraw(false); setWillNotDraw(false);
}
} }
/** /**
......
...@@ -31,6 +31,7 @@ import org.chromium.base.ActivityState; ...@@ -31,6 +31,7 @@ import org.chromium.base.ActivityState;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.ApplicationStatus; import org.chromium.base.ApplicationStatus;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
...@@ -585,12 +586,13 @@ public class WebappActivity extends SingleTabActivity { ...@@ -585,12 +586,13 @@ public class WebappActivity extends SingleTabActivity {
} }
private void initializeWebappData() { private void initializeWebappData() {
if (mWebappInfo.displayMode() == WebDisplayMode.FULLSCREEN) { try (TraceEvent te = TraceEvent.scoped("WebappActivity.initializeWebappData")) {
enterImmersiveMode(); if (mWebappInfo.displayMode() == WebDisplayMode.FULLSCREEN) {
enterImmersiveMode();
}
ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content);
mSplashController.showSplashScreen(getActivityType(), contentView, mWebappInfo);
} }
ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content);
mSplashController.showSplashScreen(getActivityType(), contentView, mWebappInfo);
} }
protected void updateStorage(WebappDataStorage storage) { protected void updateStorage(WebappDataStorage storage) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment