/*
* Tint Browser for Android
*
* Copyright (C) 2012 - to infinity and beyond J. Devauchelle and contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 3 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
package com.seal.ui.fragments;
import java.util.UUID;
import android.app.Fragment;
import android.os.Bundle;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import com.seal.ui.components.CustomWebChromeClient;
import com.seal.ui.components.CustomWebView;
import com.seal.ui.components.CustomWebViewClient;
import com.seal.ui.managers.UIManager;
import com.seal.utils.Constants;
public abstract class BaseWebViewFragment extends Fragment {
protected UUID mUUID;
protected UIManager mUIManager;
protected ViewGroup mParentView;
protected CustomWebView mWebView;
protected boolean mPrivateBrowsing;
protected boolean mIsSubView;
private boolean mIsStartPageShown;
private boolean mWebViewAddedToParent;
private String mUrlToLoad;
protected BaseWebViewFragment() {
mUUID = UUID.randomUUID();
mPrivateBrowsing = false;
mIsSubView = false;
mIsStartPageShown = false;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public void init(UIManager uiManager, boolean privateBrowsing, String urlToLoad) {
mUIManager = uiManager;
mPrivateBrowsing = privateBrowsing;
mUrlToLoad = urlToLoad;
createWebView(false);
}
public void resetWebView() {
if (mWebViewAddedToParent) {
mParentView.removeView(mWebView);
}
createWebView(true);
}
public UUID getUUID() {
return mUUID;
}
public CustomWebView getWebView() {
return mWebView;
}
public boolean isStartPageShown() {
return mIsStartPageShown;
}
public void setStartPageShown(boolean value) {
mIsStartPageShown = value;
}
public boolean isPrivateBrowsingEnabled() {
return mPrivateBrowsing;
}
public void setPrivateBrowsing(boolean privateBrowsing) {
mPrivateBrowsing = privateBrowsing;
}
public boolean isSubView() {
return mIsSubView;
}
public void setIsSubView(boolean isSubView) {
mIsSubView = isSubView;
}
public boolean isWebViewOnUrl(String url) {
if (mWebView != null) {
String currentUrl = mWebView.getUrl();
return currentUrl != null && currentUrl.equals(url);
}
return false;
}
protected void onViewCreated() {
if (!mWebViewAddedToParent) {
mParentView.addView(mWebView);
mWebViewAddedToParent = true;
}
if (mUrlToLoad != null) {
mUIManager.loadUrl(this, mUrlToLoad);
mUrlToLoad = null;
}
}
private void createWebView(boolean addToParent) {
mWebView = new CustomWebView(mUIManager, mPrivateBrowsing);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mWebView.setLayoutParams(params);
mWebView.setParentFragment(this);
mWebView.setWebChromeClient(new CustomWebChromeClient(mUIManager));
mWebView.setWebViewClient(new CustomWebViewClient(mUIManager));
mWebView.setOnTouchListener(mUIManager);
if ((addToParent) && (mParentView != null)) {
mParentView.addView(mWebView);
mWebViewAddedToParent = true;
} else {
mWebViewAddedToParent = false;
}
// Little trick here. We must load the url here, in order to
// the background loading to work. But if we show the start page
// from here, onCreateView() from the inherited class won't be
// called (don't know why), and the WebView will never be attached.
// So the start page will be loaded when the view has been created,
// through onViewCreated().
if ((mUrlToLoad != null) && (!Constants.URL_ABOUT_START.equals(mUrlToLoad))) {
mUIManager.loadUrl(this, mUrlToLoad);
mUrlToLoad = null;
}
}
}