package com.myMinistry.util; import java.io.File; import java.io.IOException; import java.text.ParseException; import java.util.Calendar; import java.util.Locale; import android.annotation.TargetApi; import android.app.Activity; import android.app.AlarmManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.app.PendingIntent; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.Build; import android.os.Bundle; import android.text.format.DateFormat; import android.webkit.WebView; import com.myMinistry.Helper; import com.myMinistry.R; import com.myMinistry.provider.MinistryContract.Literature; import com.myMinistry.provider.MinistryContract.LiteratureType; import com.myMinistry.provider.MinistryContract.Publisher; import com.myMinistry.provider.MinistryContract.Time; import com.myMinistry.provider.MinistryDatabase; import com.myMinistry.provider.MinistryService; import com.myMinistry.services.DailyBackupService; import com.myMinistry.services.WeeklyBackupService; @TargetApi(Build.VERSION_CODES.HONEYCOMB) public class HelpUtils { public static void showOpenSourceLicenses(Activity activity) { FragmentManager fm = activity.getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment prev = fm.findFragmentByTag("dialog_licenses"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); new OpenSourceLicensesDialog().show(ft, "dialog_licenses"); } public static class OpenSourceLicensesDialog extends DialogFragment { public OpenSourceLicensesDialog() { } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { WebView webView = new WebView(getActivity()); webView.loadUrl("file:///android_asset/licenses.html"); return new AlertDialog.Builder(getActivity()) .setTitle(R.string.pref_about_licenses) .setView(webView) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } } ) .create(); } } public static boolean isApplicationUpdated(Context context) { int currentVersionNumber = 0; try { currentVersionNumber = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode; } catch (Exception e) {} return currentVersionNumber > PrefUtils.getVersionNumber(context) ? true : false; } public static void doApplicationUpdatedWork(Context mContext) { int currentVersionNumber = 0; int savedVersionNumber = PrefUtils.getVersionNumber(mContext); try { currentVersionNumber = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionCode; } catch (Exception e) {} /** Cleanup SharedPrefs - This will always check for the old "defaults" as well as cleanup the prefs to use the Android default. */ // sp.upgradePrefs(); if(savedVersionNumber <= 161) { Helper.renameDB(mContext); Helper.renameAndMoveBackups(mContext); File intDB = mContext.getDatabasePath(MinistryDatabase.DATABASE_NAME); File extDB = FileUtils.getExternalDBFile(mContext, "auto-db-v" + MinistryDatabase.DATABASE_VERSION + "-1.db"); /** Create a backup just in case */ try { if(extDB != null) { if(!extDB.exists()) extDB.createNewFile(); FileUtils.copyFile(intDB, extDB); } } catch (IOException e) { } /** This is to recalculate everyone's roll over time entries. */ processRolloverTime(mContext); } PrefUtils.setVersionNumber(mContext,currentVersionNumber); } public static void setDailyAlarm(Context context) { Calendar time = Calendar.getInstance(Locale.getDefault()); int year = time.get(Calendar.YEAR); int month = time.get(Calendar.MONTH); int day = time.get(Calendar.DAY_OF_MONTH); try { time.setTime(DateFormat.getTimeFormat(context).parse(PrefUtils.getDBBackupDailyTime(context))); } catch (ParseException e) { e.printStackTrace(); } time.set(year, month, day); int alarmType = AlarmManager.RTC; long interval = AlarmManager.INTERVAL_DAY; //long start = time.getTimeInMillis() + interval; long start = time.getTimeInMillis(); PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, DailyBackupService.class), PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); am.setInexactRepeating(alarmType, start, interval, pi); } public static void setWeeklyAlarm(Context context) { Calendar time = Calendar.getInstance(Locale.getDefault()); int year = time.get(Calendar.YEAR); int month = time.get(Calendar.MONTH); int day = time.get(Calendar.DAY_OF_MONTH); int weekday = PrefUtils.getDBBackupWeeklyWeekday(context); try { time.setTime(DateFormat.getTimeFormat(context).parse(PrefUtils.getDBBackupWeeklyTime(context))); } catch (ParseException e) { e.printStackTrace(); } time.set(year, month, day); while(true) { if(time.get(Calendar.DAY_OF_WEEK) == weekday) break; time.add(Calendar.DAY_OF_MONTH, 1); } int alarmType = AlarmManager.RTC; long interval = AlarmManager.INTERVAL_DAY * 7; //long start = time.getTimeInMillis() + interval; long start = time.getTimeInMillis(); PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, WeeklyBackupService.class), PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); am.setInexactRepeating(alarmType, start, interval, pi); } public static void disableDailyAlarm(Context context) { PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, DailyBackupService.class), PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); am.cancel(pi); } public static void disableWeeklyAlarm(Context context) { PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, WeeklyBackupService.class), PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); am.cancel(pi); } public static void sortPublicationTypes(Context context, int how_to_sort) { MinistryService database = new MinistryService(context); Cursor cursor = null; if(!database.isOpen()) database.openWritable(); if(how_to_sort == MinistryDatabase.SORT_BY_ASC) cursor = database.fetchAllPublicationTypes("ASC"); else if(how_to_sort == MinistryDatabase.SORT_BY_DESC) cursor = database.fetchAllPublicationTypes("DESC"); else if(how_to_sort == MinistryDatabase.SORT_BY_POPULAR) cursor = database.fetchAllPublicationTypesByPopularity(); ContentValues values = new ContentValues(); for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) { values.put(LiteratureType.SORT_ORDER, cursor.getPosition()); database.savePublicationType(cursor.getLong(cursor.getColumnIndex(LiteratureType._ID)), values); } cursor.close(); database.close(); } public static void sortPublications(Context context, int how_to_sort) { MinistryService database = new MinistryService(context); Cursor cursor = null; if(!database.isOpen()) database.openWritable(); if(how_to_sort == MinistryDatabase.SORT_BY_ASC) cursor = database.fetchAllPublications("ASC"); else if(how_to_sort == MinistryDatabase.SORT_BY_DESC) cursor = database.fetchAllPublications("DESC"); else if(how_to_sort == MinistryDatabase.SORT_BY_POPULAR) cursor = database.fetchPublicationsByPopularity(); ContentValues values = new ContentValues(); for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) { values.put(Literature.SORT_ORDER, cursor.getPosition()); database.saveLiterature(cursor.getLong(cursor.getColumnIndex(Literature._ID)), values); } cursor.close(); database.close(); } public static void processRolloverTime(Context mContext) { MinistryService database = new MinistryService(mContext); database.openWritable(); Calendar start = Calendar.getInstance(Locale.getDefault()); int pubID = 0; /** Loop over each publisher for each available month to convert */ if(!database.isOpen()) database.openWritable(); Cursor pubs = database.fetchAllPublishers(); Cursor theDate; try { Thread.sleep(500); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } for(pubs.moveToFirst();!pubs.isAfterLast();pubs.moveToNext()) { pubID = pubs.getInt(pubs.getColumnIndex(Publisher._ID)); /** Get first time entry date for publisher */ theDate = database.fetchPublisherFirstTimeEntry(pubID); if(theDate.moveToFirst()) { try { start.setTime(TimeUtils.dbDateFormat.parse(theDate.getString(theDate.getColumnIndex(Time.DATE_START)))); database.processRolloverTime(pubID, start); } catch (ParseException e) { start = Calendar.getInstance(Locale.getDefault()); } } theDate.close(); } pubs.close(); database.close(); } /* public static boolean isCreateId(int id) { return (id == MinistryDatabase.CREATE_ID); } public static boolean isCreateId(long id) { return isCreateId((int)id); } */ }