// Path: src/main/java/com/nextgis/maplib/map/MapBase.java
// public class MapBase
//         extends LayerGroup
// {
//     protected int mNewId;
//     protected static MapBase mInstance = null;
//     protected String mFileName;
//     private boolean mDirty;
// 
//     public MapBase(
//             Context context,
//             File path,
//             LayerFactory layerFactory)
//     {
//         super(context, path.getParentFile(), layerFactory);
//         mNewId = 0;
//         mId = NOT_FOUND;
//         mInstance = this;
//         mFileName = path.getName();
//     }
// 
// 
//     /**
//      * The identificator generator
//      *
//      * @return new id
//      */
//     public int getNewId()
//     {
//         return mNewId++;
//     }
// 
// 
//     @Override
//     protected void onLayerAdded(ILayer layer)
//     {
//         layer.setId(getNewId());
//         super.onLayerAdded(layer);
//     }
// 
// 
//     public static MapBase getInstance()
//     {
//         if (mInstance == null) {
//             throw new IllegalArgumentException(
//                     "Impossible to get the instance. This class must be initialized before");
//         }
//         return mInstance;
//     }
// 
// 
//     public ILayer getLastLayer()
//     {
//         if (mLayers.size() == 0) {
//             return null;
//         }
//         return mLayers.get(mLayers.size() - 1);
//     }
// 
// 
//     @Override
//     public boolean delete()
//     {
//         for (ILayer layer : mLayers) {
//             layer.setParent(null);
//             layer.delete();
//         }
// 
//         mLayers.clear();
// 
//         return FileUtil.deleteRecursive(getFileName());
//     }
// 
// 
//     @Override
//     protected File getFileName()
//     {
//         return new File(getPath(), mFileName);
//     }
// 
// 
//     public void moveTo(File newPath)
//     {
// 
//         if (mPath.equals(newPath)) {
//             return;
//         }
// 
//         clearLayers();
// 
//         if (FileUtil.move(mPath, newPath)) {
//             //change path
//             mPath = newPath;
//         }
//         load();
//     }
// 
//     public GeoEnvelope getFullBounds(){
//         if(null != mDisplay){
//             return mDisplay.getFullBounds();
//         }
//         return new GeoEnvelope();
//     }
// 
//     public GeoEnvelope getCurrentBounds()
//     {
//         if (mDisplay != null) {
//             return mDisplay.getBounds();
//         }
//         return null;
//     }
// 
//     @Override
//     public void clearLayers() {
//         super.clearLayers();
//         mNewId = 0;
//     }
// 
//     public void setDirty(boolean dirty) {
//         mDirty = dirty;
//     }
// 
//     public boolean isDirty() {
//         return mDirty;
//     }
// }
// 
// Path: src/main/java/com/nextgis/maplib/util/DatabaseContext.java
// public class DatabaseContext
//         extends ContextWrapper
// {
//     protected File mDatabasePath;
// 
// 
//     public DatabaseContext(
//             Context base,
//             File databasePath)
//     {
//         super(base);
//         mDatabasePath = databasePath;
//     }
// 
// 
//     @Override
//     public File getDatabasePath(String name)
//     {
//         String dbfile = mDatabasePath + File.separator + name;
//         if (!dbfile.endsWith(".db")) {
//             dbfile += ".db";
//         }
// 
//         if (!mDatabasePath.exists()) {
//             mDatabasePath.mkdirs();
//         }
// 
//         return new File(dbfile);
//     }
// 
// 
//     @Override
//     public SQLiteDatabase openOrCreateDatabase(
//             String name,
//             int mode,
//             SQLiteDatabase.CursorFactory factory,
//             DatabaseErrorHandler errorHandler)
//     {
//         return SQLiteDatabase.openOrCreateDatabase(
//                 getDatabasePath(name).getAbsolutePath(), factory, errorHandler);
//     }
// 
// 
//     @Override
//     public SQLiteDatabase openOrCreateDatabase(
//             String name,
//             int mode,
//             SQLiteDatabase.CursorFactory factory)
//     {
//         SQLiteDatabase result = null;
//         try {
//             result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
//         } catch (SQLiteException e) {
//             e.printStackTrace();
//         }
//         return result;
//     }
// 
//     public static SQLiteDatabase getDbForLayer(final VectorLayer layer){
//         MapContentProviderHelper map = (MapContentProviderHelper) MapBase.getInstance();
//         SQLiteDatabase db = map.getDatabase(false);
//         // speedup writing
//         db.rawQuery("PRAGMA synchronous=OFF", null);
//         //db.rawQuery("PRAGMA locking_mode=EXCLUSIVE", null);
//         db.rawQuery("PRAGMA journal_mode=OFF", null);
//         db.rawQuery("PRAGMA count_changes=OFF", null);
//         db.rawQuery("PRAGMA cache_size=15000", null);
// 
//         return db;
//     }
// }


import com.nextgis.maplib.map.MapBase;
import com.nextgis.maplib.util.DatabaseContext;
import java.io.File;
import android.annotation.TargetApi;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
            SQLiteDatabase.CursorFactory factory,
            int version,
            DatabaseErrorHandler errorHandler)
    {
        super(
                new DatabaseContext(context, dbFullName.getParentFile()), dbFullName.getName(),
                factory, version, errorHandler);
    }


    /**
     * is called whenever the app is freshly installed
     * @param sqLiteDatabase Database
     */
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase)
    {

    }


    /**
     * is called whenever the app is upgraded and launched and the database version is not the same
     * @param sqLiteDatabase Database
     * @param oldVersion The previous database version
     * @param newVersion The current database version
     */
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion)
    {
// Path: src/main/java/com/nextgis/maplib/map/MapBase.java
// public class MapBase
//         extends LayerGroup
// {
//     protected int mNewId;
//     protected static MapBase mInstance = null;
//     protected String mFileName;
//     private boolean mDirty;
// 
//     public MapBase(
//             Context context,
//             File path,
//             LayerFactory layerFactory)
//     {
//         super(context, path.getParentFile(), layerFactory);
//         mNewId = 0;
//         mId = NOT_FOUND;
//         mInstance = this;
//         mFileName = path.getName();
//     }
// 
// 
//     /**
//      * The identificator generator
//      *
//      * @return new id
//      */
//     public int getNewId()
//     {
//         return mNewId++;
//     }
// 
// 
//     @Override
//     protected void onLayerAdded(ILayer layer)
//     {
//         layer.setId(getNewId());
//         super.onLayerAdded(layer);
//     }
// 
// 
//     public static MapBase getInstance()
//     {
//         if (mInstance == null) {
//             throw new IllegalArgumentException(
//                     "Impossible to get the instance. This class must be initialized before");
//         }
//         return mInstance;
//     }
// 
// 
//     public ILayer getLastLayer()
//     {
//         if (mLayers.size() == 0) {
//             return null;
//         }
//         return mLayers.get(mLayers.size() - 1);
//     }
// 
// 
//     @Override
//     public boolean delete()
//     {
//         for (ILayer layer : mLayers) {
//             layer.setParent(null);
//             layer.delete();
//         }
// 
//         mLayers.clear();
// 
//         return FileUtil.deleteRecursive(getFileName());
//     }
// 
// 
//     @Override
//     protected File getFileName()
//     {
//         return new File(getPath(), mFileName);
//     }
// 
// 
//     public void moveTo(File newPath)
//     {
// 
//         if (mPath.equals(newPath)) {
//             return;
//         }
// 
//         clearLayers();
// 
//         if (FileUtil.move(mPath, newPath)) {
//             //change path
//             mPath = newPath;
//         }
//         load();
//     }
// 
//     public GeoEnvelope getFullBounds(){
//         if(null != mDisplay){
//             return mDisplay.getFullBounds();
//         }
//         return new GeoEnvelope();
//     }
// 
//     public GeoEnvelope getCurrentBounds()
//     {
//         if (mDisplay != null) {
//             return mDisplay.getBounds();
//         }
//         return null;
//     }
// 
//     @Override
//     public void clearLayers() {
//         super.clearLayers();
//         mNewId = 0;
//     }
// 
//     public void setDirty(boolean dirty) {
//         mDirty = dirty;
//     }
// 
//     public boolean isDirty() {
//         return mDirty;
//     }
// }
// 
// Path: src/main/java/com/nextgis/maplib/util/DatabaseContext.java
// public class DatabaseContext
//         extends ContextWrapper
// {
//     protected File mDatabasePath;
// 
// 
//     public DatabaseContext(
//             Context base,
//             File databasePath)
//     {
//         super(base);
//         mDatabasePath = databasePath;
//     }
// 
// 
//     @Override
//     public File getDatabasePath(String name)
//     {
//         String dbfile = mDatabasePath + File.separator + name;
//         if (!dbfile.endsWith(".db")) {
//             dbfile += ".db";
//         }
// 
//         if (!mDatabasePath.exists()) {
//             mDatabasePath.mkdirs();
//         }
// 
//         return new File(dbfile);
//     }
// 
// 
//     @Override
//     public SQLiteDatabase openOrCreateDatabase(
//             String name,
//             int mode,
//             SQLiteDatabase.CursorFactory factory,
//             DatabaseErrorHandler errorHandler)
//     {
//         return SQLiteDatabase.openOrCreateDatabase(
//                 getDatabasePath(name).getAbsolutePath(), factory, errorHandler);
//     }
// 
// 
//     @Override
//     public SQLiteDatabase openOrCreateDatabase(
//             String name,
//             int mode,
//             SQLiteDatabase.CursorFactory factory)
//     {
//         SQLiteDatabase result = null;
//         try {
//             result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
//         } catch (SQLiteException e) {
//             e.printStackTrace();
//         }
//         return result;
//     }
// 
//     public static SQLiteDatabase getDbForLayer(final VectorLayer layer){
//         MapContentProviderHelper map = (MapContentProviderHelper) MapBase.getInstance();
//         SQLiteDatabase db = map.getDatabase(false);
//         // speedup writing
//         db.rawQuery("PRAGMA synchronous=OFF", null);
//         //db.rawQuery("PRAGMA locking_mode=EXCLUSIVE", null);
//         db.rawQuery("PRAGMA journal_mode=OFF", null);
//         db.rawQuery("PRAGMA count_changes=OFF", null);
//         db.rawQuery("PRAGMA cache_size=15000", null);
// 
//         return db;
//     }
// }


// Path: src/main/java/com/nextgis/maplib/datasource/DatabaseHelper.java
import com.nextgis.maplib.map.MapBase;
import com.nextgis.maplib.util.DatabaseContext;
import java.io.File;
import android.annotation.TargetApi;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;

            SQLiteDatabase.CursorFactory factory,
            int version,
            DatabaseErrorHandler errorHandler)
    {
        super(
                new DatabaseContext(context, dbFullName.getParentFile()), dbFullName.getName(),
                factory, version, errorHandler);
    }


    /**
     * is called whenever the app is freshly installed
     * @param sqLiteDatabase Database
     */
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase)
    {

    }


    /**
     * is called whenever the app is upgraded and launched and the database version is not the same
     * @param sqLiteDatabase Database
     * @param oldVersion The previous database version
     * @param newVersion The current database version
     */
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion)
    {
        MapBase map = MapBase.getInstance();