Java tutorial
/* * Copyright (C) 2012-2016 The Android Money Manager Ex Project Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.money.manager.ex.notifications; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.support.v4.app.NotificationCompat; import android.text.Html; import android.text.TextUtils; import com.money.manager.ex.R; import com.money.manager.ex.currency.CurrencyService; import com.money.manager.ex.database.QueryBillDeposits; import com.money.manager.ex.recurring.transactions.RecurringTransactionListActivity; import info.javaperformance.money.MoneyFactory; import timber.log.Timber; public class RecurringTransactionNotifications { private static final int ID_NOTIFICATION = 0x000A; public RecurringTransactionNotifications(Context context) { super(); mContext = context.getApplicationContext(); } private Context mContext; public void notifyRepeatingTransaction() { try { notifyRepeatingTransaction_Internal(); } catch (Exception ex) { Timber.e(ex, "showing notification about recurring transactions"); } } private void notifyRepeatingTransaction_Internal() { QueryBillDeposits billDeposits = new QueryBillDeposits(mContext); /* In this query, the 0 days diff parameter HAS to be set in the query. Adding it in the parameters will not work (for whatever reason). */ Cursor cursor = mContext.getContentResolver().query(billDeposits.getUri(), null, QueryBillDeposits.DAYSLEFT + "<=0", null, QueryBillDeposits.NEXTOCCURRENCEDATE); if (cursor == null) return; if (cursor.getCount() > 0) { showNotification(cursor); } cursor.close(); } private void showNotification(Cursor cursor) { CurrencyService currencyService = new CurrencyService(mContext); NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); while (cursor.moveToNext()) { String payeeName = cursor.getString(cursor.getColumnIndex(QueryBillDeposits.PAYEENAME)); // check if payee name is null, then put toAccountName if (TextUtils.isEmpty(payeeName)) payeeName = cursor.getString(cursor.getColumnIndex(QueryBillDeposits.TOACCOUNTNAME)); // compose text String line = cursor.getString(cursor.getColumnIndex(QueryBillDeposits.USERNEXTOCCURRENCEDATE)) + " " + payeeName + ": <b>" + currencyService.getCurrencyFormatted( cursor.getInt(cursor.getColumnIndex(QueryBillDeposits.CURRENCYID)), MoneyFactory .fromDouble(cursor.getDouble(cursor.getColumnIndex(QueryBillDeposits.AMOUNT)))) + "</b>"; // add line inboxStyle.addLine(Html.fromHtml("<small>" + line + "</small>")); } NotificationManager notificationManager = (NotificationManager) getContext() .getSystemService(Context.NOTIFICATION_SERVICE); // create pending intent Intent intent = new Intent(getContext(), RecurringTransactionListActivity.class); // set launch from notification // check pin code intent.putExtra(RecurringTransactionListActivity.INTENT_EXTRA_LAUNCH_NOTIFICATION, true); PendingIntent pendingIntent = PendingIntent.getActivity(getContext(), 0, intent, 0); // todo: Actions // Intent skipIntent = new Intent(intent); // //skipIntent.setAction(Intent.) // PendingIntent skipPending = PendingIntent.getActivity(getContext(), 0, skipIntent, 0); // Intent enterIntent = new Intent(getContext(), RecurringTransactionEditActivity.class); // PendingIntent enterPending = PendingIntent.getActivity(getContext(), 0, enterIntent, 0); // create notification try { Notification notification = new NotificationCompat.Builder(getContext()).setAutoCancel(true) .setContentIntent(pendingIntent).setContentTitle(mContext.getString(R.string.application_name)) .setContentText(mContext.getString(R.string.notification_repeating_transaction_expired)) .setSubText(mContext.getString(R.string.notification_click_to_check_repeating_transaction)) .setSmallIcon(R.drawable.ic_stat_notification) .setTicker(mContext.getString(R.string.notification_repeating_transaction_expired)) .setDefaults( Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS) .setNumber(cursor.getCount()).setStyle(inboxStyle) .setColor(mContext.getResources().getColor(R.color.md_primary)) // .addAction(R.drawable.ic_action_content_clear_dark, getContext().getString(R.string.skip), skipPending) // .addAction(R.drawable.ic_action_done_dark, getContext().getString(R.string.enter), enterPending) .build(); // notify notificationManager.cancel(ID_NOTIFICATION); notificationManager.notify(ID_NOTIFICATION, notification); } catch (Exception e) { Timber.e(e, "showing notification for recurring transaction"); } } private Context getContext() { return mContext; } }