Java 类android.content.MutableContextWrapper 实例源码
项目:AndroidHybridLib
文件:WebViewPool.java
public synchronized WrapperWebView getWebView() {
WrapperWebView webView = null;
if (sAvailable.size() > 0) {
webView = sAvailable.get(0);
sAvailable.remove(0);
} else {
// 无可用的webview时,自动扩容
webView = new WrapperWebView(new MutableContextWrapper(mContext));
ViewGroup.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
webView.setLayoutParams(layoutParams);
}
sInUse.add(webView);
webView.loadUrl("");
return webView;
}
项目:mobile-sdk-android
文件:ViewUtil.java
public static Context getTopContext(View view) {
if (view == null) {
return null;
}
ViewParent parent = view.getParent();
if ((parent == null) || !(parent instanceof View)) {
if(view.getContext() instanceof MutableContextWrapper){
return ((MutableContextWrapper)view.getContext()).getBaseContext();
}
return view.getContext();
}
//noinspection ConstantConditions
while ((parent.getParent() != null)
&& (parent.getParent() instanceof View)) {
parent = parent.getParent();
}
return ((View) parent).getContext();
}
项目:mobile-sdk-android
文件:MRAIDAdActivity.java
@Override
public void create() {
if ((AdView.mraidFullscreenContainer == null) || (AdView.mraidFullscreenImplementation == null)) {
Clog.e(Clog.baseLogTag, "Launched MRAID Fullscreen activity with invalid properties");
adActivity.finish();
return;
}
// remove from any old parents to be safe
ViewUtil.removeChildFromParent(AdView.mraidFullscreenContainer);
adActivity.setContentView(AdView.mraidFullscreenContainer);
if (AdView.mraidFullscreenContainer.getChildAt(0) instanceof AdWebView) {
webView = (AdWebView) AdView.mraidFullscreenContainer.getChildAt(0);
}
// Update the context
if(webView.getContext() instanceof MutableContextWrapper) {
((MutableContextWrapper) webView.getContext()).setBaseContext(adActivity);
}
mraidFullscreenImplementation = AdView.mraidFullscreenImplementation;
mraidFullscreenImplementation.setFullscreenActivity(adActivity);
if (AdView.mraidFullscreenListener != null) {
AdView.mraidFullscreenListener.onCreateCompleted();
}
}
项目:AndroidHybridLib
文件:WebViewPool.java
public void initWebViewPool(Context context) {
this.mContext = context;
for (int i = 0; i < mPoolSize; i++) {
ViewGroup.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
// 引入Context中间层MutableContextWrapper
WrapperWebView webView = new WrapperWebView(new MutableContextWrapper(mContext));
webView.setLayoutParams(layoutParams);
sAvailable.add(webView);
}
}
项目:AndroidHybridLib
文件:WebViewPool.java
public synchronized void resetWebView(WrapperWebView webView) {
((MutableContextWrapper) webView.getContext()).setBaseContext(mContext);
webView.reset();
sInUse.remove(webView);
if (sAvailable.size() < mPoolSize) {//保存个数不能大于池子的大小
sAvailable.add(webView);
} else { // 扩容出来的临时webview直接回收
webView.destroy();
}
}
项目:AndroidHybridLib
文件:WrapperWebView.java
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn_close) {
if (getContext() instanceof MutableContextWrapper) {
Context baseContext = ((MutableContextWrapper) getContext()).getBaseContext();
if (baseContext instanceof Activity) {
((Activity) baseContext).finish();
}
} else if (getContext() instanceof Activity) {
((Activity) getContext()).finish();
}
} else if (view.getId() == R.id.btn_refresh) {
reload();
}
}
项目:XinFramework
文件:WebViewCache.java
protected XinWebView useWebView(Context ctx) {
XinWebView view = getWebView();
if (view != null) {
((MutableContextWrapper) view.getContext()).setBaseContext(ctx);
view.setIsUsed(true);
}
return view;
}
项目:XinFramework
文件:WebViewConfig.java
private XinWebView reuseWebView(Context context) {
createWebView();
doConfig();
if (mWebView != null) {
((MutableContextWrapper) mWebView.getContext()).setBaseContext(context);
mWebView.setIsUsed(true);
}
return mWebView;
}
项目:react-native-preloader
文件:ReactPreLoader.java
/**
* Pre-load {@link ReactRootView} to local {@link Map}, you may want to
* load it in previous activity.
*/
public static void init(Activity activity, ReactInfo reactInfo) {
if (CACHE_VIEW_MAP.get(reactInfo.getMainComponentName()) != null) {
return;
}
ReactRootView rootView = new ReactRootView(new MutableContextWrapper(activity));
rootView.startReactApplication(
((ReactApplication) activity.getApplication()).getReactNativeHost().getReactInstanceManager(),
reactInfo.getMainComponentName(),
reactInfo.getLaunchOptions());
CACHE_VIEW_MAP.put(reactInfo.getMainComponentName(), rootView);
}
项目:turbolinks-android
文件:TurbolinksHelper.java
/**
* <p>Creates the shared webView used throughout the lifetime of the TurbolinksSession.</p>
*
* @param applicationContext An application context.
* @return The shared WebView.
*/
static WebView createWebView(Context applicationContext) {
MutableContextWrapper contextWrapper = new MutableContextWrapper(applicationContext);
WebView webView = new WebView(contextWrapper);
configureWebViewDefaults(webView);
setWebViewLayoutParams(webView);
return webView;
}
项目:android-web-wrapper
文件:RetainedViewFragment.java
public void setRetainedView(View view)
{
if(!(view.getContext() instanceof MutableContextWrapper)){
throw new IllegalStateException("View must be created with inflateRetainableView");
}
mRetainedView = view;
}
项目:android-web-wrapper
文件:RetainedViewFragment.java
public View getRetainedView(Context context)
{
if(mRetainedView != null){
MutableContextWrapper mutable = (MutableContextWrapper)mRetainedView.getContext();
mutable.setBaseContext(context);
}
return mRetainedView;
}
项目:mobile-sdk-android
文件:VideoWebView.java
public VideoWebView(Context context, VideoAd owner, VideoRequestManager manager) {
super(new MutableContextWrapper(context));
this.owner = owner;
this.manager = manager;
setupSettings();
setup();
}
项目:mobile-sdk-android
文件:InstreamVideoView.java
private void updateMutableContext(ViewGroup layout) {
// Update the MutableContext Wrapper. with the new activity context.
if(this.getContext() instanceof MutableContextWrapper) {
((MutableContextWrapper)this.getContext()).setBaseContext(layout.getContext());
}
// Update the MutableContext Wrapper. with the new activity context.
if(this.videoWebView.getContext() instanceof MutableContextWrapper) {
((MutableContextWrapper)this.videoWebView.getContext()).setBaseContext(layout.getContext());
}
}
项目:mobile-sdk-android
文件:InterstitialAdActivity.java
private void setIAdView(InterstitialAdView av) {
adView = av;
if (adView == null) return;
adView.setAdImplementation(this);
layout.setBackgroundColor(adView.getBackgroundColor());
layout.removeAllViews();
if (adView.getParent() != null) {
((ViewGroup) adView.getParent()).removeAllViews();
}
InterstitialAdQueueEntry iAQE = adView.getAdQueue().poll();
// To be safe, ads from the future will be considered to have expired
// if now-p.first is less than 0, the ad will be considered to be from the future
while (iAQE != null
&& (now - iAQE.getTime() > InterstitialAdView.MAX_AGE || now - iAQE.getTime() < 0)) {
Clog.w(Clog.baseLogTag, Clog.getString(R.string.too_old));
iAQE = adView.getAdQueue().poll();
}
if ((iAQE == null)
|| !(iAQE.getView() instanceof AdWebView))
return;
webView = (AdWebView) iAQE.getView();
// Update the context
if(webView.getContext() instanceof MutableContextWrapper) {
((MutableContextWrapper) webView.getContext()).setBaseContext(adActivity);
}
// lock orientation to ad request orientation
//@TODO need to change this check condition to reflect MRAID spec
if(!(webView.getCreativeWidth()==1 && webView.getCreativeHeight()==1)) {
AdActivity.lockToConfigOrientation(adActivity, webView.getOrientation());
}
layout.addView(webView);
}
项目:mobile-sdk-android
文件:AdWebView.java
public AdWebView(AdView adView) {
super(new MutableContextWrapper(adView.getContext()));
this.adView = adView;
this.initialMraidStateString = MRAIDImplementation.MRAID_INIT_STATE_STRINGS[
MRAIDImplementation.MRAID_INIT_STATE.STARTING_DEFAULT.ordinal()];
setupSettings();
setup();
}
项目:mobile-sdk-android
文件:AdView.java
protected void close(int w, int h, MRAIDImplementation caller) {
// Remove MRAID close button
ViewUtil.removeChildFromParent(close_button);
close_button = null;
if (caller.owner.isFullScreen) {
ViewUtil.removeChildFromParent(caller.owner);
if (caller.getDefaultContainer() != null) {
caller.getDefaultContainer().addView(caller.owner, 0);
}
if (caller.getFullscreenActivity() != null) {
caller.getFullscreenActivity().finish();
}
// Reset the context of MutableContext wrapper for banner expand and close case.
if (getMediaType().equals(MediaType.BANNER) && (caller.owner.getContext() instanceof MutableContextWrapper)) {
((MutableContextWrapper) caller.owner.getContext()).setBaseContext(getContext());
}
}
// null these out for safety
mraidFullscreenContainer = null;
mraidFullscreenImplementation = null;
mraidFullscreenListener = null;
MRAIDChangeSize(w, h);
mraid_is_closing = true;
isMRAIDExpanded = false;
}
项目:AndroidHybridLib
文件:WrapperWebView.java
/**
* 绑定新的Context
*
* @param context
*/
public void bindNewContext(Context context) {
if (getContext() instanceof MutableContextWrapper) {
((MutableContextWrapper) getContext()).setBaseContext(context);
}
}
项目:XinFramework
文件:WebViewCache.java
protected XinWebView initWebView() {
XinWebView view = new XinWebView(new MutableContextWrapper(getApplication()));
put(view);
return view;
}
项目:react-native-preloader
文件:MrReactActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getUseDeveloperSupport() && Build.VERSION.SDK_INT >= 23) {
// Get permission to show redbox in dev builds.
if (!Settings.canDrawOverlays(this)) {
Intent serviceIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(serviceIntent);
FLog.w(ReactConstants.TAG, REDBOX_PERMISSION_MESSAGE);
Toast.makeText(this, REDBOX_PERMISSION_MESSAGE, Toast.LENGTH_LONG).show();
}
}
mReactRootView = ReactPreLoader.getRootView(getReactInfo());
if (mReactRootView != null) {
Log.i(TAG, "use pre-load view");
MutableContextWrapper contextWrapper = (MutableContextWrapper) mReactRootView.getContext();
contextWrapper.setBaseContext(this);
try {
ViewGroup viewGroup = (ViewGroup) mReactRootView.getParent();
if (viewGroup != null) {
viewGroup.removeView(mReactRootView);
}
} catch (Exception exception) {
Log.e(TAG, "getParent error", exception);
}
} else {
Log.i(TAG, "createRootView");
mReactRootView = createRootView();
if (mReactRootView != null) {
mReactRootView.startReactApplication(
getReactNativeHost().getReactInstanceManager(),
getMainComponentName(),
getLaunchOptions());
}
}
setContentView(mReactRootView);
mDoubleTapReloadRecognizer = new DoubleTapReloadRecognizer();
}
项目:android-web-wrapper
文件:RetainedViewFragment.java
public static View inflateRetainableView(Context context, int layoutId, ViewGroup container)
{
LayoutInflater inflater = LayoutInflater.from(context)
.cloneInContext(new MutableContextWrapper(context));
return inflater.inflate(layoutId, container, false);
}
项目:mobile-sdk-android
文件:VideoWebView.java
void loadURLInCorrectBrowser(String url) {
if (!owner.getOpensNativeBrowser()) {
Clog.d(Clog.baseLogTag, Clog.getString(R.string.opening_inapp));
//If it's a direct URL to the play store, just open it.
if (checkForApp(url)) {
return;
}
try {
final WebView out;
// Unless disabled by the user, handle redirects in background
if (owner.getLoadsInBackground()) {
// Otherwise, create an invisible 1x1 webview to load the landing
// page and detect if we're redirecting to a market url
out = new RedirectWebView(this.getContext());
out.loadUrl(url);
out.setVisibility(View.GONE);
// owner.addView(out);
if (this.owner.getShowLoadingIndicator()) {
//Show a dialog box
progressDialog = new ProgressDialog(this.getContextFromMutableContext());
progressDialog.setCancelable(true);
progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
out.stopLoading();
}
});
progressDialog.setMessage(getContext().getResources().getString(R.string.loading));
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
}
} else {
// Stick the URL directly into the new activity.
out = new WebView(new MutableContextWrapper(getContext()));
WebviewUtil.setWebViewSettings(out);
out.loadUrl(url);
openInAppBrowser(out);
}
} catch (Exception e) {
// Catches PackageManager$NameNotFoundException for webview
Clog.e(Clog.baseLogTag, "Exception initializing the redirect webview: " + e.getMessage());
}
} else {
Clog.d(Clog.baseLogTag,
Clog.getString(R.string.opening_native));
openNativeIntent(url);
}
}
项目:mobile-sdk-android
文件:VideoWebView.java
protected Context getContextFromMutableContext() {
if (this.getContext() instanceof MutableContextWrapper) {
return ((MutableContextWrapper) this.getContext()).getBaseContext();
}
return this.getContext();
}
项目:mobile-sdk-android
文件:InstreamVideoView.java
InstreamVideoView(Context context, AttributeSet attrs, int defStyle) {
super(new MutableContextWrapper(context), attrs, defStyle);
setup(context);
}
项目:mobile-sdk-android
文件:AdWebView.java
void loadURLInCorrectBrowser(String url) {
if (!adView.getOpensNativeBrowser()) {
Clog.d(Clog.baseLogTag, Clog.getString(R.string.opening_inapp));
//If it's a direct URL to the play store, just open it.
if (checkForApp(url)) {
return;
}
try {
final WebView out;
// Unless disabled by the user, handle redirects in background
if (adView.getLoadsInBackground()) {
// Otherwise, create an invisible 1x1 webview to load the landing
// page and detect if we're redirecting to a market url
out = new RedirectWebView(this.getContext());
out.loadUrl(url);
out.setVisibility(View.GONE);
adView.addView(out);
if (this.adView.getShowLoadingIndicator()) {
//Show a dialog box
progressDialog = new ProgressDialog(this.getContextFromMutableContext());
progressDialog.setCancelable(true);
progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
out.stopLoading();
}
});
progressDialog.setMessage(getContext().getResources().getString(R.string.loading));
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
}
} else {
// Stick the URL directly into the new activity.
out = new WebView(new MutableContextWrapper(getContext()));
WebviewUtil.setWebViewSettings(out);
out.loadUrl(url);
openInAppBrowser(out);
}
}catch (Exception e){
// Catches PackageManager$NameNotFoundException for webview
Clog.e(Clog.baseLogTag, "Exception initializing the redirect webview: " + e.getMessage());
}
} else {
Clog.d(Clog.baseLogTag,
Clog.getString(R.string.opening_native));
openNativeIntent(url);
triggerBrowserLaunchEvent();
}
}
项目:mobile-sdk-android
文件:AdWebView.java
protected Context getContextFromMutableContext() {
if (this.getContext() instanceof MutableContextWrapper) {
return ((MutableContextWrapper) this.getContext()).getBaseContext();
}
return this.getContext();
}