// Path: AndroidStub/src/main/java/android/content/ContentResolver.java
// public abstract class ContentResolver {
//     
//     public ContentResolver(Context context) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public final @Nullable
//     Bundle call(@NonNull Uri uri, @NonNull String method,
//                 @Nullable String arg, @Nullable Bundle extras) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     protected abstract IContentProvider acquireProvider(Context c, String name);
//     
//     protected IContentProvider acquireExistingProvider(Context c, String name) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public abstract boolean releaseProvider(IContentProvider icp);
//     
//     protected abstract IContentProvider acquireUnstableProvider(Context c, String name);
//     
//     public abstract boolean releaseUnstableProvider(IContentProvider icp);
//     
//     public abstract void unstableProviderDied(IContentProvider icp);
//     
//     public void appNotRespondingViaProvider(IContentProvider icp) {
//         throw new RuntimeException("Stub!");
//     }
// }
// 
// Path: AndroidStub/src/main/java/android/content/res/Resources.java
// public class Resources {
//     
//     public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public final AssetManager getAssets() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public int getColor(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public Configuration getConfiguration() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public DisplayMetrics getDisplayMetrics() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public Drawable getDrawable(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public String getString(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public CharSequence getText(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public XmlResourceParser getXml(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public ResourcesImpl getImpl() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public final Theme newTheme() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public void updateConfiguration(Configuration config, DisplayMetrics metrics) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public final class Theme {
//     
//         public void applyStyle(int resId, boolean force) {
//             throw new RuntimeException("Stub!");
//         }
//     
//         public TypedArray obtainStyledAttributes(int[] attrs) {
//             throw new RuntimeException("Stub!");
//         }
//     
//         public void setTo(Theme other) {
//             throw new RuntimeException("Stub!");
//         }
//         
//     }
//     
//     public static class NotFoundException extends RuntimeException {
//     
//     }
//     
// }


import android.content.ContentResolver;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.Resources;
/*
 * Copyright (C) 2017 Beijing Didi Infinity Technology and Development Co.,Ltd. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.didi.virtualapk.internal;


/**
 * Created by renyugang on 16/8/12.
 */
class PluginContext extends ContextWrapper {

    private final LoadedPlugin mPlugin;

    public PluginContext(LoadedPlugin plugin) {
        super(plugin.getPluginManager().getHostContext());
        this.mPlugin = plugin;
    }
    
    public PluginContext(LoadedPlugin plugin, Context base) {
        super(base);
        this.mPlugin = plugin;
    }

    @Override
    public Context getApplicationContext() {
        return this.mPlugin.getApplication();
    }

//    @Override
//    public ApplicationInfo getApplicationInfo() {
//        return this.mPlugin.getApplicationInfo();
//    }

    private Context getHostContext() {
        return getBaseContext();
    }

    @Override
// Path: AndroidStub/src/main/java/android/content/ContentResolver.java
// public abstract class ContentResolver {
//     
//     public ContentResolver(Context context) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public final @Nullable
//     Bundle call(@NonNull Uri uri, @NonNull String method,
//                 @Nullable String arg, @Nullable Bundle extras) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     protected abstract IContentProvider acquireProvider(Context c, String name);
//     
//     protected IContentProvider acquireExistingProvider(Context c, String name) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public abstract boolean releaseProvider(IContentProvider icp);
//     
//     protected abstract IContentProvider acquireUnstableProvider(Context c, String name);
//     
//     public abstract boolean releaseUnstableProvider(IContentProvider icp);
//     
//     public abstract void unstableProviderDied(IContentProvider icp);
//     
//     public void appNotRespondingViaProvider(IContentProvider icp) {
//         throw new RuntimeException("Stub!");
//     }
// }
// 
// Path: AndroidStub/src/main/java/android/content/res/Resources.java
// public class Resources {
//     
//     public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public final AssetManager getAssets() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public int getColor(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public Configuration getConfiguration() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public DisplayMetrics getDisplayMetrics() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public Drawable getDrawable(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public String getString(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public CharSequence getText(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public XmlResourceParser getXml(int id) throws NotFoundException {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public ResourcesImpl getImpl() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public final Theme newTheme() {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public void updateConfiguration(Configuration config, DisplayMetrics metrics) {
//         throw new RuntimeException("Stub!");
//     }
//     
//     public final class Theme {
//     
//         public void applyStyle(int resId, boolean force) {
//             throw new RuntimeException("Stub!");
//         }
//     
//         public TypedArray obtainStyledAttributes(int[] attrs) {
//             throw new RuntimeException("Stub!");
//         }
//     
//         public void setTo(Theme other) {
//             throw new RuntimeException("Stub!");
//         }
//         
//     }
//     
//     public static class NotFoundException extends RuntimeException {
//     
//     }
//     
// }


// Path: CoreLibrary/src/main/java/com/didi/virtualapk/internal/PluginContext.java
import android.content.ContentResolver;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.Resources;

/*
 * Copyright (C) 2017 Beijing Didi Infinity Technology and Development Co.,Ltd. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.didi.virtualapk.internal;


/**
 * Created by renyugang on 16/8/12.
 */
class PluginContext extends ContextWrapper {

    private final LoadedPlugin mPlugin;

    public PluginContext(LoadedPlugin plugin) {
        super(plugin.getPluginManager().getHostContext());
        this.mPlugin = plugin;
    }
    
    public PluginContext(LoadedPlugin plugin, Context base) {
        super(base);
        this.mPlugin = plugin;
    }

    @Override
    public Context getApplicationContext() {
        return this.mPlugin.getApplication();
    }

//    @Override
//    public ApplicationInfo getApplicationInfo() {
//        return this.mPlugin.getApplicationInfo();
//    }

    private Context getHostContext() {
        return getBaseContext();
    }

    @Override
    public ContentResolver getContentResolver() {