package com.halzhang.android.apps.startupnews.ui.tablet;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.MenuCompat;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.ShareActionProvider;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.halzhang.android.apps.startupnews.R;
import com.halzhang.android.apps.startupnews.analytics.Tracker;
import com.halzhang.android.apps.startupnews.ui.BaseFragmentActivity;
import com.halzhang.android.apps.startupnews.ui.phone.BrowseActivity;
import com.halzhang.android.apps.startupnews.ui.widgets.ObservableWebView;
import com.halzhang.android.apps.startupnews.ui.widgets.ObservableWebView.OnScrollChangedCallback;
import com.halzhang.android.apps.startupnews.ui.widgets.WebViewController;
import com.halzhang.android.apps.startupnews.utils.PreferenceUtils;
import com.halzhang.android.common.CDLog;
/**
* 浏览器 Created by Hal on 13-5-25.
*/
public class BrowseFragment extends Fragment implements OnScrollChangedCallback {
private static final String LOG_TAG = BrowseFragment.class.getSimpleName();
private ObservableWebView mWebView;
private WebViewController mWebViewController;
private String mTitle;
private String mOriginalUrl;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebViewController = new WebViewController(getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
final View view = inflater.inflate(R.layout.fragment_browse, null);
mWebView = (ObservableWebView) view.findViewById(R.id.webview);
Activity activity = getActivity();
mWebView.setOverScrollMode(View.OVER_SCROLL_NEVER);
mWebView.setOnScrollChangedCallback(this);
mWebViewController.initControllerView(mWebView, view);
Bundle args = getArguments();
if (args != null && args.containsKey(BrowseActivity.EXTRA_TITLE)
&& args.containsKey(BrowseActivity.EXTRA_URL)) {
mTitle = args.getString(BrowseActivity.EXTRA_TITLE);
mOriginalUrl = args.getString(BrowseActivity.EXTRA_URL);
String mHtmlProvider = PreferenceUtils.getHtmlProvider(activity);
final String url = mHtmlProvider + mOriginalUrl;
mWebViewController.loadUrl(url);
}
return view;
}
@Override
public void onDestroy() {
mWebViewController.destroy();
super.onDestroy();
}
public void setTitle(String title) {
mTitle = title;
}
public void load(String url) {
mOriginalUrl = url;
String mHtmlProvider = PreferenceUtils.getHtmlProvider(getActivity());
mWebViewController.loadUrl(mHtmlProvider + mOriginalUrl);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_browse, menu);
super.onCreateOptionsMenu(menu, inflater);
MenuItem actionItem = menu.findItem(R.id.menu_share);
ShareActionProvider actionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(actionItem);
if (actionProvider == null) {
return;
}
actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
actionProvider.setShareIntent(createShareIntent());
actionProvider.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() {
@Override
public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
/*
* 这里改变intent是没用的,intent只是一份拷贝,只能自己启动修改后的Intent
* 然而自己启动Intent并不会改变历史记录 增加setAllowPolicyChangeIntent方法解决这问题
*/
String packageName = intent.getComponent().getPackageName();
CDLog.i(LOG_TAG, packageName);
String shareContent = getShareContent();
intent.putExtra(Intent.EXTRA_SUBJECT, mTitle);
Tracker.getInstance().sendEvent("ui_action", "share", packageName, 0L);
if (getString(R.string.weibo_package_name).equals(packageName)) {
intent.putExtra(Intent.EXTRA_TEXT, shareContent + " "
+ getString(R.string.weibo_share_suffix));
} else {
intent.putExtra(Intent.EXTRA_TEXT, shareContent);
}
return false;
}
});
}
/**
* Creates a sharing {@link Intent}.
*
* @return The sharing intent.
*/
private Intent createShareIntent() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, mTitle);
intent.putExtra(Intent.EXTRA_TEXT, getShareContent());
return intent;
}
private String getShareContent() {
StringBuilder builder = new StringBuilder();
return builder.append(mTitle).append(" ").append(mOriginalUrl).toString();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_original_url:
Tracker.getInstance().sendEvent("ui_action", "options_item_selected", "browseactivity_menu_original_url", 0L);
mWebViewController.loadUrl(mOriginalUrl);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onScroll(int l, int t, int oldl, int oldt) {
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onScrollUp() {
//TODO 需要判断 Activity 的类型
BaseFragmentActivity activity = (BaseFragmentActivity) getActivity();
activity.getSupportActionBar().show();
mWebViewController.showBrowseBar();
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onScrollDown() {
BaseFragmentActivity activity = (BaseFragmentActivity) getActivity();
activity.getSupportActionBar().hide();
mWebViewController.hideBrowseBar();
}
}