Android Open Source - mobilepower-android Database Connection Manager






From Project

Back to project page mobilepower-android.

License

The source code is released under:

Apache License

If you think the Android project mobilepower-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2014 Dario Scoppelletti, <http://www.scoppelletti.it/>.
 * //www. jav a2 s.  c  o  m
 * 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 it.scoppelletti.mobilepower.app.data;

import java.util.*;
import android.app.*;
import android.content.*;
import android.database.sqlite.*;
import android.os.*;
import android.support.v4.app.*;
import org.apache.commons.lang3.*;
import it.scoppelletti.mobilepower.app.*;
import it.scoppelletti.mobilepower.data.*;
import it.scoppelletti.mobilepower.os.*;
import it.scoppelletti.mobilepower.ui.resources.R;

/**
 * Gestione della connessione al database.
 * 
 * @since 1.0
 */
public final class DatabaseConnectionManager implements Runnable,
    DialogInterface.OnCancelListener, AsyncTaskHost {
    private final ActivitySupport myActivity;
    private final String myDbName;
    private final int myVersion;    
    private final DatabaseUpgrader myUpgrader;    
    private final Handler myHandler;
    private final List<OnDatabaseConnectionListener> myOnDbListeners;    
    private SQLiteDatabase myDb;
    private DatabaseUpgradeTask myUpgradeTask;
    private boolean myUpgraded;
    
    /**
     * Costruttore.
     * 
     * @param activity Attivit&agrave;.
     * @param dbName   Nome del database.
     * @param version  Numero di versione del database.
     * @param upgrader Procedura di aggiornamento.
     */
    public DatabaseConnectionManager(ActivitySupport activity, String dbName,
            int version, DatabaseUpgrader upgrader) {
        if (activity == null) {
            throw new NullPointerException("Argument activity is null.");
        }
        if (StringUtils.isBlank(dbName)) {
            throw new NullPointerException("Argument dbName is null.");
        }
        if (version < 1) {
            throw new IllegalArgumentException("Argument versione < 1.");
        }
        if (upgrader == null) {
            throw new NullPointerException("Argument upgrader is null.");
        }
        
        myActivity = activity;
        myDbName = dbName;
        myVersion = version;
        myUpgrader = upgrader;
        myHandler = new Handler();
        myOnDbListeners =
                new ArrayList<OnDatabaseConnectionListener>(1);    
        myUpgraded = false;
    }
    
    /**
     * Aggiunge un gestore degli eventi di connessione al database.
     * 
     * @param obj Oggetto.
     */
    public void addOnDatabaseConnectionListener(
            OnDatabaseConnectionListener obj) {
        if (obj == null) {
            throw new NullPointerException("Argument obj is null.");
        }
        
        myOnDbListeners.add(obj);
        if (myDb != null) {
            // La connessione e' gia' aperta:
            // Lo comunico immediatamente al nuovo gestore.
            obj.onDatabaseOpen(myDb);
        }
    }
    
    /**
     * Rimuove un gestore degli eventi di connessione al database.
     * 
     * @param obj Oggetto.
     */    
    public void removeOnDatabaseConnectionListener(
            OnDatabaseConnectionListener obj) {
        myOnDbListeners.remove(obj);
    }
    
    /**
     * Schedula l&rsquo;eventuale aggiornamento del database.
     */
    public void upgrade() {
        myHandler.post(this);
    }
    
    /**
     * Esegue l&rsquo;eventuale aggiornamento del database.
     */    
    public void run() {
        int ver, stepCount;
        Bundle params;
        ProgressDialogFragment dlg;
        FragmentManager fragmentMgr;
        
        if (myDb != null) {
            throw new IllegalStateException("Database already open.");
        }
        
        myDb = myActivity.asActivity().openOrCreateDatabase(myDbName,
                Context.MODE_PRIVATE, null);
        ver = myDb.getVersion();
        if (ver >= myVersion) {
            onPostExecute(0, null, false);
            return;
        }
        
        stepCount = myVersion - ver;
        fragmentMgr = myActivity.getSupportFragmentManager();
        dlg = ProgressDialogFragment.newInstance(R.string.lbl_databaseUpgrading,
                stepCount, true);
        dlg.setOnCancelListener(this);
        dlg.show(fragmentMgr, ProgressDialogFragment.TAG);
        
        myUpgradeTask = new DatabaseUpgradeTask(myDb, myUpgrader, stepCount,
                this);
        params = new Bundle();
        params.putInt(DatabaseUpgradeTask.PARAM_CURRENTVERSION, ver);
        params.putInt(DatabaseUpgradeTask.PARAM_TARGETVERSION, myVersion);
        myUpgradeTask.execute(params);        
    }
    
    /**
     * Ripristino dell&rsquo;attivit&agrave;.
     */
    public void onResume() {
        if (!myUpgraded) {
            return;
        }
        
        myDb = myActivity.asActivity().openOrCreateDatabase(myDbName,
                Context.MODE_PRIVATE, null);
        for (OnDatabaseConnectionListener listener : myOnDbListeners) {
            listener.onDatabaseOpen(myDb);            
        }
    }
    
    /**
     * Pausa dell&rsquo;attivit&agrave;.
     */
    public void onPause() {
        if (myUpgradeTask != null) {
            myUpgradeTask.cancel(true);
            myUpgradeTask = null;
        }
        
        if (myDb != null) {
            myDb.close();
            myDb = null;
            for (OnDatabaseConnectionListener listener : myOnDbListeners) {
                listener.onDatabaseClosed();            
            }            
        }
    }
    
    /**
     * Gestisce l&rsquo;interruzione dell&rsquo;aggiornamento del database. 
     */
    public void onCancel(DialogInterface dialog) {
        Activity activity;
        
        if (myUpgradeTask != null) {
            myUpgradeTask.cancel(true);
            myUpgradeTask = null;
        }
        
        if (myDb != null) {
            myDb.close();
            myDb = null;
        }
        
        activity = myActivity.asActivity();        
        if (!activity.isFinishing()) {
            activity.finish();
        }
    }
    
    public void onPostExecute(int requestCode, Bundle result,
            boolean cancelled) {
        if (result != null) {
            myUpgradeTask = null;
            ProgressDialogFragment.dismiss(
                    myActivity.getSupportFragmentManager(),
                    ProgressDialogFragment.TAG);
        }
        
        if (cancelled) {
            onCancel(null);
            return;
        }

        for (OnDatabaseConnectionListener listener : myOnDbListeners) {
            listener.onDatabaseOpen(myDb);            
        }
        
        myUpgraded = true;
    }
    
    public void onProgressUpdate(int requestCode, int progress) {        
        ProgressDialogFragment.setProgress(
                myActivity.getSupportFragmentManager(),
                ProgressDialogFragment.TAG, progress);                
    }
}




Java Source Code List

it.scoppelletti.mobilepower.app.AboutActivity.java
it.scoppelletti.mobilepower.app.AbstractActivity.java
it.scoppelletti.mobilepower.app.AbstractDialogFragment.java
it.scoppelletti.mobilepower.app.AbstractFragment.java
it.scoppelletti.mobilepower.app.AbstractPreferenceActivity.java
it.scoppelletti.mobilepower.app.ActionBarCompat.java
it.scoppelletti.mobilepower.app.ActionBarSupport.java
it.scoppelletti.mobilepower.app.ActivitySupport.java
it.scoppelletti.mobilepower.app.AppUtils.java
it.scoppelletti.mobilepower.app.CommonMenuFragment.java
it.scoppelletti.mobilepower.app.ConfirmDialogFragment.java
it.scoppelletti.mobilepower.app.DatePickerDialogFragment.java
it.scoppelletti.mobilepower.app.FragmentLayoutController.java
it.scoppelletti.mobilepower.app.FragmentSupport.java
it.scoppelletti.mobilepower.app.HelpActivity.java
it.scoppelletti.mobilepower.app.HelpDialogFragment.java
it.scoppelletti.mobilepower.app.MarketTagHandler.java
it.scoppelletti.mobilepower.app.ProgressDialogFragment.java
it.scoppelletti.mobilepower.app.ReleaseNoteActivity.java
it.scoppelletti.mobilepower.app.bluetooth.ActivityBTManager.java
it.scoppelletti.mobilepower.app.data.DatabaseConnectionManager.java
it.scoppelletti.mobilepower.app.data.DatabaseUpgradeTask.java
it.scoppelletti.mobilepower.app.security.ActivityLicenseClient.java
it.scoppelletti.mobilepower.app.security.LicenseBuyDialogFragment.java
it.scoppelletti.mobilepower.app.security.LicenseDemoDialogFragment.java
it.scoppelletti.mobilepower.app.security.LicenseRetryDialogFragment.java
it.scoppelletti.mobilepower.bluetooth.BTManager.java
it.scoppelletti.mobilepower.bluetooth.BTTask.java
it.scoppelletti.mobilepower.bluetooth.OnBTListener.java
it.scoppelletti.mobilepower.data.DatabaseUpgrader.java
it.scoppelletti.mobilepower.data.OnDatabaseConnectionListener.java
it.scoppelletti.mobilepower.graphics.GraphicTools.java
it.scoppelletti.mobilepower.graphics.SizeF.java
it.scoppelletti.mobilepower.io.IOTools.java
it.scoppelletti.mobilepower.media.DefaultOnScanCompletedListener.java
it.scoppelletti.mobilepower.os.AbstractAsyncTask.java
it.scoppelletti.mobilepower.os.AsyncTaskController.java
it.scoppelletti.mobilepower.os.AsyncTaskHost.java
it.scoppelletti.mobilepower.os.BuildCompat.java
it.scoppelletti.mobilepower.preference.AbstractDialogPreference.java
it.scoppelletti.mobilepower.preference.BTDevicePreference.java
it.scoppelletti.mobilepower.preference.ColorPreference.java
it.scoppelletti.mobilepower.preference.EditTextPreferenceEx.java
it.scoppelletti.mobilepower.preference.IntegerSpinnerPreference.java
it.scoppelletti.mobilepower.preference.PreferenceSavedState.java
it.scoppelletti.mobilepower.preference.SeekBarPreference.java
it.scoppelletti.mobilepower.provider.ContactsContractCompat.java
it.scoppelletti.mobilepower.reflect.MemberCache.java
it.scoppelletti.mobilepower.security.LicenseClient.java
it.scoppelletti.mobilepower.types.SimpleDate.java
it.scoppelletti.mobilepower.types.StringTools.java
it.scoppelletti.mobilepower.types.TimeTools.java
it.scoppelletti.mobilepower.types.ValueTools.java
it.scoppelletti.mobilepower.types.ValueType.java
it.scoppelletti.mobilepower.view.ViewSavedState.java
it.scoppelletti.mobilepower.widget.CompoundControl.java
it.scoppelletti.mobilepower.widget.DateControl.java
it.scoppelletti.mobilepower.widget.ImageButtonCompat.java
it.scoppelletti.mobilepower.widget.IntegerSpinner.java
it.scoppelletti.mobilepower.widget.IntegerTextWatcher.java
it.scoppelletti.mobilepower.widget.WidgetTools.java