/** * OpenAtlasForAndroid * The MIT License (MIT) Copyright (OpenAtlasForAndroid) 2015 Bunny Blue,achellies * <p> * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to the following conditions: * <p> * The above copyright notice and this permission notice shall be included in all copies * or substantial portions of the Software. * <p> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * @author BunnyBlue **/ package com.openatlas.bundleInfo; import android.text.TextUtils; import android.util.Log; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /******Bundle 从asset的json解析插件对象列表,存放插件信息 * * *********/ public class BundleInfoList { private static BundleInfoList singleton; private final String TAG; private List<BundleInfo> mBundleInfoList; /******Bundle对象 实际上是插件包******/ public static class BundleInfo { /******四大组件列表******/ public List<String> Components; /******Bundle依赖******/ public List<String> DependentBundles=new ArrayList<String>(); /******Bundle名称******/ public String bundleName; /******Bundle中是否包含动态库******/ public boolean hasSO; public long size; public String version; public String md5; } private BundleInfoList() { this.TAG = BundleInfoList.class.getSimpleName(); } public static synchronized BundleInfoList getInstance() { if (singleton != null) { return singleton; } synchronized (BundleInfoList.class) { if (singleton == null) { singleton = new BundleInfoList(); } } return singleton; } /***初始化Bundle列表*****/ public synchronized boolean init(ArrayList<BundleInfo> linkedList) { boolean initilized; if (this.mBundleInfoList != null || linkedList == null) { Log.i(TAG, "BundleInfoList initialization failed."); initilized = false; } else { this.mBundleInfoList = linkedList; initilized = true; } return initilized; } /*****获取当前Bundle依赖列表名称 * @param mBundleName Bundle名称 * @return mDependentBundleNames bundle依赖列表名称 * ******/ public List<String> getDependencyForBundle(String mBundleName) { if (this.mBundleInfoList == null || this.mBundleInfoList.size() == 0) { return null; } for (BundleInfo bundleInfo : this.mBundleInfoList) { if (bundleInfo.bundleName.equals(mBundleName)) { List<String> mDependentBundleNames = new ArrayList<String>(); if (!(bundleInfo == null || bundleInfo.DependentBundles == null)) { for (int i = 0; i < bundleInfo.DependentBundles.size(); i++) { if (!TextUtils.isEmpty(bundleInfo.DependentBundles.get(i))) { mDependentBundleNames.add(bundleInfo.DependentBundles.get(i)); } } } return mDependentBundleNames; } } return null; } /****检测Bundle是否含有动态库 * @param mBundleName Bundle名称 * @return boolean 是否含有动态库 * ******/ public boolean getHasSO(String mBundleName) { if (this.mBundleInfoList == null || this.mBundleInfoList.isEmpty()) { return false; } for (int index = 0; index < this.mBundleInfoList.size(); ++index) { BundleInfo bundleInfo = this.mBundleInfoList.get(index); if (bundleInfo.bundleName.equals(mBundleName)) { return bundleInfo.hasSO; } } return false; } /****获取当前组件的Bundle名称 * @param mComponentName 组件名称 *@return bundleName 当前组件对应的包名 * *******/ public String getBundleNameForComponet(String mComponentName) { if (this.mBundleInfoList == null || this.mBundleInfoList.size() == 0) { return null; } for (BundleInfo bundleInfo : this.mBundleInfoList) { for (String equals : bundleInfo.Components) { if (equals.equals(mComponentName)) { return bundleInfo.bundleName; } } } return null; } public List<BundleInfo> getBundles() { if (this.mBundleInfoList == null || this.mBundleInfoList.isEmpty()) { return null; } return mBundleInfoList; } /****获取插件列表名称 * * ******/ @Deprecated public List<String> getAllBundleNames() { if (this.mBundleInfoList == null || this.mBundleInfoList.isEmpty()) { return null; } LinkedList<String> linkedList = new LinkedList<String>(); for (int index = 0; index < this.mBundleInfoList.size(); ++index) { BundleInfo bundleInfo = this.mBundleInfoList.get(index); linkedList.add(bundleInfo.bundleName); } return linkedList; } /****** * 获取Bundle信息 * @param mBundleName Bundle名称插件的包名 * @author BunnyBlue * @return BundleInfo 插件对象 * ******/ public BundleInfo getBundleInfo(String mBundleName) { if (this.mBundleInfoList == null || this.mBundleInfoList.isEmpty()) { return null; } for (int index = 0; index < this.mBundleInfoList.size(); ++index) { BundleInfo bundleInfo = this.mBundleInfoList.get(index); if (bundleInfo.bundleName.equals(mBundleName)) { return bundleInfo; } } return null; } /****dump BundleList******/ public void dumpBundleInfos() { if (this.mBundleInfoList != null && this.mBundleInfoList.isEmpty()) { for (int index = 0; index < this.mBundleInfoList.size(); ++index) { BundleInfo bundleInfo = this.mBundleInfoList.get(index); Log.i(TAG, "BundleName: " + bundleInfo.bundleName); for (String name : bundleInfo.Components) { Log.i(TAG, "****components: " + name); } for (String name : bundleInfo.DependentBundles) { Log.i(TAG, "****dependancy: " + name); } } } } }