Opening Custom WebView with "Powered By Chrome" With action menus Opening Custom WebView with "Powered By Chrome" With action menus google-chrome google-chrome

Opening Custom WebView with "Powered By Chrome" With action menus


It is Chrome Custom Tabs. You can see the sample code from Google Chrome here.

Try the following util class:

public class CustomTabs {    private static final int TOOLBAR_SHARE_ITEM_ID = 1;    public static void openTab(Context context, String url) {        CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();        enableUrlBarHiding(builder);        setToolbarColor(context, builder);        setSecondaryToolbarColor(context, builder);        setCloseButtonIcon(context, builder);        setShowTitle(builder);        setAnimations(context, builder);        setShareActionButton(context, builder, url);        addToolbarShareItem(context, builder, url);        addShareMenuItem(builder);        addCopyMenuItem(context, builder);        CustomTabsIntent customTabsIntent = builder.build();        customTabsIntent.launchUrl(context, Uri.parse(url));    }    /* Enables the url bar to hide as the user scrolls down on the page */    private static void enableUrlBarHiding(CustomTabsIntent.Builder builder) {        builder.enableUrlBarHiding();    }    /* Sets the toolbar color */    private static void setToolbarColor(Context context, CustomTabsIntent.Builder builder) {        builder.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary));    }    /* Sets the secondary toolbar color */    private static void setSecondaryToolbarColor(Context context, CustomTabsIntent.Builder builder) {        builder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary));    }        /* Sets the Close button icon for the custom tab */    private static void setCloseButtonIcon(Context context, CustomTabsIntent.Builder builder) {        builder.setCloseButtonIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_arrow_back));    }    /* Sets whether the title should be shown in the custom tab */    private static void setShowTitle(CustomTabsIntent.Builder builder) {        builder.setShowTitle(true);    }    /* Sets animations */    private static void setAnimations(Context context, CustomTabsIntent.Builder builder) {        builder.setStartAnimations(context, R.anim.slide_in_right, R.anim.slide_out_left);        builder.setExitAnimations(context, R.anim.slide_in_left, R.anim.slide_out_right);    }    /* Sets share action button that is displayed in the Toolbar */    private static void setShareActionButton(Context context, CustomTabsIntent.Builder builder, String url) {        Bitmap icon = BitmapFactory.decodeResource(context.getResources(), android.R.drawable.ic_menu_share);        String label = "Share via";        Intent shareIntent = new Intent(Intent.ACTION_SEND);        shareIntent.putExtra(Intent.EXTRA_TEXT, url);        shareIntent.setType("text/plain");        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, shareIntent, PendingIntent.FLAG_UPDATE_CURRENT);        builder.setActionButton(icon, label, pendingIntent);    }    /* Adds share item that is displayed in the secondary Toolbar */    private static void addToolbarShareItem(Context context, CustomTabsIntent.Builder builder, String url) {        Bitmap icon = BitmapFactory.decodeResource(context.getResources(), android.R.drawable.ic_menu_share);        String label = "Share via";        Intent shareIntent = new Intent(Intent.ACTION_SEND);        shareIntent.putExtra(Intent.EXTRA_TEXT, url);        shareIntent.setType("text/plain");        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, shareIntent, PendingIntent.FLAG_UPDATE_CURRENT);        builder.addToolbarItem(TOOLBAR_SHARE_ITEM_ID, icon, label, pendingIntent);    }    /* Adds a default share item to the menu */    private static void addShareMenuItem(CustomTabsIntent.Builder builder) {        builder.addDefaultShareMenuItem();    }    /* Adds a copy item to the menu */    private static void addCopyMenuItem(Context context, CustomTabsIntent.Builder builder) {        String label = "Copy";        Intent intent = new Intent(context, CopyBroadcastReceiver.class);        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);        builder.addMenuItem(label, pendingIntent);    }    public static class CopyBroadcastReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            String url = intent.getDataString();            ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);            ClipData data = ClipData.newPlainText("Link", url);            clipboardManager.setPrimaryClip(data);            Toast.makeText(context, "Copied " + url, Toast.LENGTH_SHORT).show();        }    }}

Don't forget to add the dependencies to your app/build.gradle

dependencies {    ...    compile 'com.android.support:customtabs:25.2.0'}

and register your BroadcastReceiver in your AndroidManifest.xml

<application>    ...    <receiver android:name=".CustomTabs$CopyBroadcastReceiver" /></application>

Here is the animation xml:

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:fromXDelta="100%p" android:toXDelta="0%p"    android:duration="@android:integer/config_longAnimTime"    android:interpolator="@android:anim/overshoot_interpolator" />

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:fromXDelta="-100%p" android:toXDelta="0%p"    android:duration="@android:integer/config_longAnimTime"    android:interpolator="@android:anim/overshoot_interpolator" />

slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:fromXDelta="0" android:toXDelta="-100%p"    android:duration="@android:integer/config_longAnimTime"    android:interpolator="@android:anim/overshoot_interpolator" />

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:fromXDelta="0" android:toXDelta="100%p"    android:duration="@android:integer/config_longAnimTime"    android:interpolator="@android:anim/overshoot_interpolator" />