Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
react-native-motif-sdk / android / src / main / java / com / vipera / de / rn / assetmanager / RNAssetManager.java
Size: Mime:

package com.vipera.de.rn.assetmanager;

import android.app.Application;
import android.content.Context;
import android.support.annotation.IdRes;
import android.support.annotation.XmlRes;
import android.util.Log;

import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.vipera.de.rn.RNContextHelper;
import com.vipera.de.rn.assetmanager.logs.RNUpdateLog;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class RNAssetManager implements ReactPackage {
    private static final String LOG_TAG = "RNAssetManager";
    public static String DEFAULT_APP_CHECK_OP = "appcheck";
    public static String DEFAULT_ASSET_DOWNLOAD_OP = "assetdld";
    public static String DEFAULT_DOM = "Default";
    public static String DEFAULT_APP = "vipera";
    public static String DEFAULT_SRV = "appcont";

    private static RNAssetManager currentInstance;
    private final RNAssetManagerConfig configuration;
    private RNUpdateManager updateManager;
    private RNUpdateLog updateLog;

    /*public RNAssetManager(Application application){
        this(application,RNAssetManagerConfig.Builder.initFromResources(application).build());
    }*/

    public RNAssetManager(Application application, @XmlRes int xmlConfigFileId){
        this(application,RNAssetManagerConfig.Builder.initFromResources(application,xmlConfigFileId).build());
    }

    public RNAssetManager(Application application, RNAssetManagerConfig config){
        Log.i(LOG_TAG,"RNAssetManagerPackage constructor: " + config);
        configuration = config;
        updateLog = new RNUpdateLog();
        initUpdateManager(application, config);
        currentInstance = this;
    }

    private void initUpdateManager(Application application, RNAssetManagerConfig config) {
        if(config.isAssetManagerAvailable()) {
            updateManager = new RNUpdateManager(application, config);
        }
    }

    public static String getJSBundleFile() {
        if(currentInstance == null){
            throw new IllegalStateException("RNAssetManager not initialized");
        }

        if(!currentInstance.configuration.isAssetManagerAvailable()) {
            return null;
        }

        final RNAssetBundleInfo info = currentInstance.getUpdateManager().getCurrentBundleInfo();
        if(info == null || info.getType() == RNAssetBundleInfo.Type.EMBEDDED) {
            return null;
        }
        try {
            checkValidReactAppContext(RNContextHelper.getReactApp());
            return RNBundlePathResolver.resolveDeployedPath((Context) RNContextHelper.getReactApp(),info);
        }catch (Exception ex){
            Log.e(LOG_TAG,ex.getMessage(),ex);
            Log.w(LOG_TAG,"reset to legacy status");
            currentInstance.updateLog.logRollbackEvent(info.getVersion(),currentInstance.configuration.getEmbeddedAssetVersion());
            currentInstance.updateManager.invalidateCurrentInstance();
            return null;
        }
    }

    public static void checkValidReactAppContext(ReactApplication reactApplication){
        if(!(reactApplication instanceof Application)){
            throw new IllegalStateException("reactApplication context is null");
        }
    }

    public static ReactInstanceManager getReactInstanceManager() {
        ReactApplication reactApplication = RNContextHelper.getReactApp();
        if(reactApplication != null && reactApplication.getReactNativeHost() != null){
            return reactApplication.getReactNativeHost().getReactInstanceManager();
        }
        return null;
    }

    public static RNUpdateLog getUpdateLog() {
        if(currentInstance == null){
            throw new IllegalStateException("RNAssetManager not initialized");
        }
        return currentInstance.updateLog;
    }


    public RNUpdateManager getUpdateManager() {
        return updateManager;
    }

    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
      return Arrays.<NativeModule>asList(new RNAssetManagerModule(reactContext,updateManager,configuration,updateLog));
    }

    // Deprecated from RN 0.47
    public List<Class<? extends JavaScriptModule>> createJSModules() {
      return Collections.emptyList();
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
      return Collections.emptyList();
    }

}