package com.dozuki.ifixit.ui.guide;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.dozuki.ifixit.App;
import com.dozuki.ifixit.R;
import com.dozuki.ifixit.model.Embed;
import com.dozuki.ifixit.ui.BaseFragment;
import com.dozuki.ifixit.ui.guide.view.EmbedViewActivity;
public class StepEmbedFragment extends BaseFragment {
private static final String GUIDE_EMBED_KEY = "GUIDE_EMBED_KEY";
private static final String IS_OFFLINE_GUIDE = "IS_OFFLINE_GUIDE";
private Activity mContext;
private Resources mResources;
private DisplayMetrics mMetrics;
private WebView mMainWebView;
private Embed mEmbed;
private boolean mIsOfflineGuide;
public static StepEmbedFragment newInstance(Embed embed, boolean isOfflineGuide) {
Bundle args = new Bundle();
args.putSerializable(GUIDE_EMBED_KEY, embed);
args.putBoolean(IS_OFFLINE_GUIDE, isOfflineGuide);
StepEmbedFragment frag = new StepEmbedFragment();
frag.setArguments(args);
return frag;
}
/////////////////////////////////////////////////////
// LIFECYCLE
/////////////////////////////////////////////////////
@Override
public void onCreate(Bundle savedInstanceState) {
mContext = getActivity();
super.onCreate(savedInstanceState);
mResources = mContext.getResources();
mMetrics = new DisplayMetrics();
mContext.getWindowManager().getDefaultDisplay().getMetrics(mMetrics);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mEmbed = (Embed)getArguments().getSerializable(GUIDE_EMBED_KEY);
// Inflate the layout for this fragment
View v = ((LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.guide_step_embed, container, false);
mMainWebView = (WebView)v.findViewById(R.id.embed_web_view);
if (savedInstanceState != null) {
mMainWebView.restoreState(savedInstanceState);
}
WebSettings settings = mMainWebView.getSettings();
settings.setUseWideViewPort(true);
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(false);
settings.setLoadWithOverviewMode(true);
settings.setAppCacheEnabled(true);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
mMainWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
mMainWebView.setVisibility(View.VISIBLE);
super.onPageFinished(view, url);
}
});
mMainWebView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
String url = (String) v.getTag();
if (url.equals("") || url.indexOf(".") == 0) {
return true;
}
Intent i = new Intent(mContext, EmbedViewActivity.class);
i.putExtra(EmbedViewActivity.HTML, url);
startActivity(i);
}
return true;
}
});
if (mEmbed != null) {
mMainWebView.loadData("<html><body>" + mEmbed.mHtml + "</body></html>", "text/html; charset=UTF-8", null);
mMainWebView.setTag(mEmbed.mSourceUrl);
mMainWebView.setLayoutParams(
fitToSpace(mMainWebView, mEmbed.mWidth, mEmbed.mHeight));
}
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mMainWebView != null) {
mMainWebView.saveState(outState);
}
}
@Override
public void onDestroyView() {
mMainWebView.stopLoading();
super.onDestroyView();
}
@Override
public void onDestroy() {
if (mMainWebView != null) {
mMainWebView.destroy();
mMainWebView = null;
}
super.onDestroy();
}
/////////////////////////////////////////////////////
// NOTIFICATION LISTENERS
/////////////////////////////////////////////////////
private ViewGroup.LayoutParams fitToSpace(View view, float width, float height) {
float newWidth;
float newHeight;
float padding = 0f;
if (App.get().inPortraitMode()) {
padding = viewPadding(R.dimen.page_padding);
newWidth = mMetrics.widthPixels - padding;
newHeight = newWidth * (height / width);
} else {
padding += navigationHeight();
newHeight = ((mMetrics.heightPixels - padding) * 3f) / 5f;
newWidth = (newHeight * (width / height));
// Correct height to match ratio of image
newHeight = newWidth * (height / width);
}
//fitProgressIndicator(newWidth, newHeight);
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = (int) (newWidth - .5f);
layoutParams.height = (int) (newHeight - .5f);
return layoutParams;
}
private float navigationHeight() {
int indicatorHeight = 50;
int actionBarHeight = mResources.getDimensionPixelSize(
com.actionbarsherlock.R.dimen.abs__action_bar_default_height);
float pagePadding = viewPadding(R.dimen.page_padding);
return actionBarHeight + indicatorHeight + pagePadding;
}
private float viewPadding(int view) {
return mResources.getDimensionPixelSize(view) * 2f;
}
}