chromium/android_webview/test/shell/src/org/chromium/android_webview/test/AwTestRunnerActivity.java

// Copyright 2012 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.android_webview.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

import org.chromium.android_webview.AwBrowserProcess;
import org.chromium.android_webview.shell.AwShellResourceProvider;
import org.chromium.base.StrictModeContext;

/** This is a lightweight activity for tests that only require WebView functionality. */
public class AwTestRunnerActivity extends Activity {
    public static final String FLAG_HIDE_ACTION_BAR = "hide_action_bar";

    private LinearLayout mLinearLayout;
    private Intent mLastSentIntent;
    private boolean mIgnoreStartActivity;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        AwShellResourceProvider.registerResources(this);
        try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
            AwBrowserProcess.loadLibrary(null);
        }

        mLinearLayout = new LinearLayout(this);
        mLinearLayout.setOrientation(LinearLayout.VERTICAL);
        mLinearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
        mLinearLayout.setLayoutParams(
                new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

        hideActionBarIfNecessary();

        setContentView(mLinearLayout);
    }

    private void hideActionBarIfNecessary() {
        Intent intent = getIntent();
        if (intent == null) return;
        Bundle extras = intent.getExtras();
        if (extras == null) return;
        Boolean hideActionBar = extras.getBoolean(FLAG_HIDE_ACTION_BAR);
        if (hideActionBar == null || !hideActionBar) return;

        // This should be called before setContentView in onCreate() to take an
        // effect.
        getActionBar().hide();
    }

    public int getRootLayoutWidth() {
        return mLinearLayout.getWidth();
    }

    /** Adds a view to the main linear layout. */
    public void addView(View view) {
        view.setLayoutParams(
                new LinearLayout.LayoutParams(
                        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1f));
        mLinearLayout.addView(view);
    }

    /** Clears the main linear layout. */
    public void removeAllViews() {
        mLinearLayout.removeAllViews();
    }

    @Override
    public void startActivity(Intent i) {
        mLastSentIntent = i;
        if (!mIgnoreStartActivity) super.startActivity(i);
    }

    public Intent getLastSentIntent() {
        return mLastSentIntent;
    }

    public void setIgnoreStartActivity(boolean ignore) {
        mIgnoreStartActivity = ignore;
    }
}