Java tutorial
/** * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. * * You are hereby granted a non-exclusive, worldwide, royalty-free license to use, * copy, modify, and distribute this software in source code or binary form for use * in connection with the web services and APIs provided by Facebook. * * As with any software that integrates with the Facebook platform, your use of * this software is subject to the Facebook Developer Principles and Policies * [http://developers.facebook.com/policy/]. This copyright notice shall be * included in all copies or substantial portions of the software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.facebook; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; /* * Login from a custom tab redirects here. Pass the url on to CustomTabMainActivity so it can return * the result. */ public class CustomTabActivity extends Activity { private static final int CUSTOM_TAB_REDIRECT_REQUEST_CODE = 2; public static final String CUSTOM_TAB_REDIRECT_ACTION = CustomTabActivity.class.getSimpleName() + ".action_customTabRedirect"; public static final String DESTROY_ACTION = CustomTabActivity.class.getSimpleName() + ".action_destroy"; private BroadcastReceiver closeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, CustomTabMainActivity.class); intent.setAction(CUSTOM_TAB_REDIRECT_ACTION); intent.putExtra(CustomTabMainActivity.EXTRA_URL, getIntent().getDataString()); // these flags will open CustomTabMainActivity from the back stack as well as closing this // activity and the custom tab opened by CustomTabMainActivity. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivityForResult(intent, CUSTOM_TAB_REDIRECT_REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_CANCELED) { // We weren't able to open CustomTabMainActivity from the back stack. Send a broadcast // instead. Intent broadcast = new Intent(CUSTOM_TAB_REDIRECT_ACTION); broadcast.putExtra(CustomTabMainActivity.EXTRA_URL, getIntent().getDataString()); LocalBroadcastManager.getInstance(this).sendBroadcast(broadcast); // Wait for the custom tab to be removed from the back stack before finishing. closeReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { CustomTabActivity.this.finish(); } }; LocalBroadcastManager.getInstance(this).registerReceiver(closeReceiver, new IntentFilter(CustomTabActivity.DESTROY_ACTION)); } } @Override protected void onDestroy() { LocalBroadcastManager.getInstance(this).unregisterReceiver(closeReceiver); super.onDestroy(); } }