@Override public int onStartCommand(Intent intent, int flags, int startId) { DebugLogging.log( getApplicationContext(), (LOG_TAG + " onStartCommand handlerIsCreated " + handlerIsCreated + " " + (intent == null))); if ((intent != null) && (intent.getAction() != null) && (intent.getAction().equals(INSERT_DATA_ACTION))) { if (handlerIsCreated) { Message msg = thread.getHandler().obtainMessage(); msg.arg1 = startId; msg.what = INSERT_DATA; msg.obj = intent.getExtras(); thread.getHandler().sendMessage(msg); } else { needToSaveTransaction = true; bundle = intent.getExtras(); } } return START_STICKY; }
@Override public void onDestroy() { DebugLogging.log(getApplicationContext(), (LOG_TAG + " onDestroy")); if (myDBAdapter.isDatabaseOpen()) { myDBAdapter.close(); } super.onDestroy(); }
@Override public void onCreate() { DebugLogging.log(getApplicationContext(), (LOG_TAG + " onCreate")); myDBAdapter = new MyDBAdapter(getApplicationContext()); thread = new ServiceHandlerThread(); thread.start(); }
@Override public void handleMessage(Message msg) { DebugLogging.log(getApplicationContext(), (LOG_TAG + " handleMessage " + msg.what)); boolean loadResult = false; boolean deleteResult = false; if (!myDBAdapter.isDatabaseOpen()) { myDBAdapter.open(); } switch (msg.what) { case GET_TRANSACTION_DATA: { try { Cursor transactionCursor = myDBAdapter.getTransactionWithFilter(msg.obj.toString()); callbackObject.showTransactionData(transactionCursor); } catch (SQLiteException exc) { callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } case GET_BALANCE: { try { String balanceValue = myDBAdapter.getBalance(msg.obj.toString()); callbackObject.setBalance(balanceValue); } catch (SQLiteException exc) { callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } case GET_CARDS_DATA: { try { Cursor cardsCursor = myDBAdapter.selectCardsNumber(msg.obj.toString()); callbackObject.showCardsData(cardsCursor, msg.obj.toString()); } catch (SQLiteException exc) { callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } case INSERT_DATA: { Bundle bundle = (Bundle) msg.obj; TransactionData transactionData = new TransactionData(bundle); try { boolean insertResult = myDBAdapter.insertTransaction(transactionData); if (insertResult) { Intent updateIntent = new Intent(SMSBankingActivity.UPDATE_TRANSACTION_LIST_INTENT); getApplicationContext().sendBroadcast(updateIntent); } } catch (SQLiteException exc) { // TODO if error I should inform callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } case UPDATE_CARD_ALIAS: { Bundle cardMap = (Bundle) msg.obj; try { Boolean updateResult = myDBAdapter.updateCardAlias( cardMap.getString(CARD_ALIAS_DATA), cardMap.getString(CARD_DATA)); callbackObject.aliasUpdated(updateResult); } catch (SQLiteException exc) { callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } case DELETE_DATA: { // for (int j = 0; j < 10000000; j++); try { myDBAdapter.beginDatabaseTranzaction(); deleteResult = myDBAdapter.deleteData(); if (deleteResult) { myDBAdapter.setSuccesfullTranzaction(); } myDBAdapter.endDatabaseTranzaction(); callbackObject.dataWasDeleted(deleteResult); } catch (SQLiteException exc) { callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } case LOAD_DATA_FROM_SMS: { try { myDBAdapter.beginDatabaseTranzaction(); // for (int j = 0; j < 10000000; j++); loadResult = loadDataFromSMS(); if (loadResult) { myDBAdapter.setSuccesfullTranzaction(); } myDBAdapter.endDatabaseTranzaction(); callbackObject.dataWasLoaded(loadResult); } catch (SQLiteException exc) { callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } case OPEN_DATABASE: { try { DebugLogging.log(getApplicationContext(), (LOG_TAG + " OPEN_DATABASE")); myDBAdapter.open(); } catch (SQLiteException exc) { callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } case DELETE_AND_LOAD_DATA_FROM_SMS: { try { myDBAdapter.beginDatabaseTranzaction(); // for (int j = 0; j < 10000000; j++); deleteResult = myDBAdapter.deleteData(); if (deleteResult) { loadResult = loadDataFromSMS(); if (loadResult) { myDBAdapter.setSuccesfullTranzaction(); } } myDBAdapter.endDatabaseTranzaction(); callbackObject.dataWasLoaded(loadResult); } catch (SQLiteException exc) { callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } case DELETE_CARD: { try { myDBAdapter.beginDatabaseTranzaction(); if (myDBAdapter.deleteCardData(msg.obj.toString())) { myDBAdapter.setSuccesfullTranzaction(); } myDBAdapter.endDatabaseTranzaction(); callbackObject.cardDataWasDeleted(); } catch (SQLiteException exc) { callbackObject.sqlLiteExceptionIsCatched(); DebugLogging.log(getApplicationContext(), (LOG_TAG + exc.getMessage())); } break; } default: DebugLogging.log( getApplicationContext(), (LOG_TAG + " ServiceHandler handleMessage default tag")); break; } }
@Override public IBinder onBind(Intent intent) { // for (int i = 0; i < 1000000; i++); DebugLogging.log(getApplicationContext(), (LOG_TAG + " onBind")); return myBinder; }