Java tutorial
/* * Copyright 2014 Christophe Beyls * * 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.gulch.linuxday.android.alarms; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.preference.PreferenceManager; import android.support.v4.content.LocalBroadcastManager; import it.gulch.linuxday.android.constants.ActionConstants; import it.gulch.linuxday.android.fragments.SettingsFragment; import it.gulch.linuxday.android.services.AlarmIntentService; /** * This class monitors bookmarks and preferences changes to dispatch alarm update work to AlarmIntentService. * * @author Christophe Beyls */ public class FosdemAlarmManager implements OnSharedPreferenceChangeListener { private static FosdemAlarmManager instance; private Context context; private boolean isEnabled; private final BroadcastReceiver scheduleRefreshedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // When the schedule DB is updated, update the alarms too startUpdateAlarms(); } }; private final BroadcastReceiver bookmarksReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Dispatch the Bookmark broadcasts to the service Intent serviceIntent = new Intent(context, AlarmIntentService.class); serviceIntent.setAction(intent.getAction()); serviceIntent.putExtras(intent.getExtras()); context.startService(serviceIntent); } }; public static void init(Context context) { if (instance == null) { instance = new FosdemAlarmManager(context); } } public static FosdemAlarmManager getInstance() { return instance; } private FosdemAlarmManager(Context context) { this.context = context; SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); isEnabled = sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_NOTIFICATIONS_ENABLED, false); if (isEnabled) { registerReceivers(); } sharedPreferences.registerOnSharedPreferenceChangeListener(this); } public boolean isEnabled() { return isEnabled; } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (SettingsFragment.KEY_PREF_NOTIFICATIONS_ENABLED.equals(key)) { isEnabled = sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_NOTIFICATIONS_ENABLED, false); if (isEnabled) { registerReceivers(); startUpdateAlarms(); } else { unregisterReceivers(); startDisableAlarms(); } } else if (SettingsFragment.KEY_PREF_NOTIFICATIONS_DELAY.equals(key)) { startUpdateAlarms(); } } private void registerReceivers() { LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); lbm.registerReceiver(scheduleRefreshedReceiver, new IntentFilter(ActionConstants.ACTION_SCHEDULE_REFRESHED)); IntentFilter filter = new IntentFilter(); filter.addAction(ActionConstants.ACTION_ADD_BOOKMARK); filter.addAction(ActionConstants.ACTION_REMOVE_BOOKMARKS); lbm.registerReceiver(bookmarksReceiver, filter); } private void unregisterReceivers() { LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); lbm.unregisterReceiver(scheduleRefreshedReceiver); lbm.unregisterReceiver(bookmarksReceiver); } private void startUpdateAlarms() { Intent serviceIntent = new Intent(context, AlarmIntentService.class); serviceIntent.setAction(AlarmIntentService.ACTION_UPDATE_ALARMS); context.startService(serviceIntent); } private void startDisableAlarms() { Intent serviceIntent = new Intent(context, AlarmIntentService.class); serviceIntent.setAction(AlarmIntentService.ACTION_DISABLE_ALARMS); context.startService(serviceIntent); } }