1*90c8c64dSAndroid Build Coastguard Worker /* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright 2016 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.directboot; 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Worker import com.example.android.directboot.alarms.Alarm; 20*90c8c64dSAndroid Build Coastguard Worker import com.example.android.directboot.alarms.AlarmAdapter; 21*90c8c64dSAndroid Build Coastguard Worker import com.example.android.directboot.alarms.AlarmIntentService; 22*90c8c64dSAndroid Build Coastguard Worker import com.example.android.directboot.alarms.AlarmStorage; 23*90c8c64dSAndroid Build Coastguard Worker import com.example.android.directboot.alarms.AlarmUtil; 24*90c8c64dSAndroid Build Coastguard Worker 25*90c8c64dSAndroid Build Coastguard Worker import android.app.Activity; 26*90c8c64dSAndroid Build Coastguard Worker import android.content.BroadcastReceiver; 27*90c8c64dSAndroid Build Coastguard Worker import android.content.Context; 28*90c8c64dSAndroid Build Coastguard Worker import android.content.Intent; 29*90c8c64dSAndroid Build Coastguard Worker import android.content.IntentFilter; 30*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle; 31*90c8c64dSAndroid Build Coastguard Worker import android.support.annotation.Nullable; 32*90c8c64dSAndroid Build Coastguard Worker import android.support.design.widget.FloatingActionButton; 33*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment; 34*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.content.LocalBroadcastManager; 35*90c8c64dSAndroid Build Coastguard Worker import android.support.v7.widget.LinearLayoutManager; 36*90c8c64dSAndroid Build Coastguard Worker import android.support.v7.widget.RecyclerView; 37*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater; 38*90c8c64dSAndroid Build Coastguard Worker import android.view.View; 39*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup; 40*90c8c64dSAndroid Build Coastguard Worker import android.widget.TextView; 41*90c8c64dSAndroid Build Coastguard Worker 42*90c8c64dSAndroid Build Coastguard Worker /** 43*90c8c64dSAndroid Build Coastguard Worker * Fragment that registers scheduled alarms. 44*90c8c64dSAndroid Build Coastguard Worker */ 45*90c8c64dSAndroid Build Coastguard Worker public class SchedulerFragment extends Fragment { 46*90c8c64dSAndroid Build Coastguard Worker 47*90c8c64dSAndroid Build Coastguard Worker private static final String FRAGMENT_TIME_PICKER_TAG = "fragment_time_picker"; 48*90c8c64dSAndroid Build Coastguard Worker 49*90c8c64dSAndroid Build Coastguard Worker private AlarmAdapter mAlarmAdapter; 50*90c8c64dSAndroid Build Coastguard Worker private AlarmUtil mAlarmUtil; 51*90c8c64dSAndroid Build Coastguard Worker private TextView mTextViewIntroMessage; 52*90c8c64dSAndroid Build Coastguard Worker private BroadcastReceiver mAlarmWentOffBroadcastReceiver; 53*90c8c64dSAndroid Build Coastguard Worker newInstance()54*90c8c64dSAndroid Build Coastguard Worker public static SchedulerFragment newInstance() { 55*90c8c64dSAndroid Build Coastguard Worker SchedulerFragment fragment = new SchedulerFragment(); 56*90c8c64dSAndroid Build Coastguard Worker return fragment; 57*90c8c64dSAndroid Build Coastguard Worker } 58*90c8c64dSAndroid Build Coastguard Worker SchedulerFragment()59*90c8c64dSAndroid Build Coastguard Worker public SchedulerFragment() { 60*90c8c64dSAndroid Build Coastguard Worker // Required empty public constructor 61*90c8c64dSAndroid Build Coastguard Worker } 62*90c8c64dSAndroid Build Coastguard Worker 63*90c8c64dSAndroid Build Coastguard Worker @Override onActivityCreated(@ullable Bundle savedInstanceState)64*90c8c64dSAndroid Build Coastguard Worker public void onActivityCreated(@Nullable Bundle savedInstanceState) { 65*90c8c64dSAndroid Build Coastguard Worker super.onActivityCreated(savedInstanceState); 66*90c8c64dSAndroid Build Coastguard Worker mAlarmWentOffBroadcastReceiver = new AlarmWentOffReceiver(); 67*90c8c64dSAndroid Build Coastguard Worker LocalBroadcastManager.getInstance(getActivity()) 68*90c8c64dSAndroid Build Coastguard Worker .registerReceiver(mAlarmWentOffBroadcastReceiver, 69*90c8c64dSAndroid Build Coastguard Worker new IntentFilter(AlarmIntentService.ALARM_WENT_OFF_ACTION)); 70*90c8c64dSAndroid Build Coastguard Worker } 71*90c8c64dSAndroid Build Coastguard Worker 72*90c8c64dSAndroid Build Coastguard Worker @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)73*90c8c64dSAndroid Build Coastguard Worker public View onCreateView(LayoutInflater inflater, ViewGroup container, 74*90c8c64dSAndroid Build Coastguard Worker Bundle savedInstanceState) { 75*90c8c64dSAndroid Build Coastguard Worker return inflater.inflate(R.layout.fragment_alarm_scheduler, container, false); 76*90c8c64dSAndroid Build Coastguard Worker } 77*90c8c64dSAndroid Build Coastguard Worker 78*90c8c64dSAndroid Build Coastguard Worker @Override onViewCreated(final View rootView, Bundle savedInstanceState)79*90c8c64dSAndroid Build Coastguard Worker public void onViewCreated(final View rootView, Bundle savedInstanceState) { 80*90c8c64dSAndroid Build Coastguard Worker super.onViewCreated(rootView, savedInstanceState); 81*90c8c64dSAndroid Build Coastguard Worker FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.fab_add_alarm); 82*90c8c64dSAndroid Build Coastguard Worker fab.setOnClickListener(new View.OnClickListener() { 83*90c8c64dSAndroid Build Coastguard Worker @Override 84*90c8c64dSAndroid Build Coastguard Worker public void onClick(View view) { 85*90c8c64dSAndroid Build Coastguard Worker TimePickerFragment fragment = TimePickerFragment.newInstance(); 86*90c8c64dSAndroid Build Coastguard Worker fragment.setAlarmAddListener(new AlarmAddListenerImpl()); 87*90c8c64dSAndroid Build Coastguard Worker fragment.show(getFragmentManager(), FRAGMENT_TIME_PICKER_TAG); 88*90c8c64dSAndroid Build Coastguard Worker } 89*90c8c64dSAndroid Build Coastguard Worker }); 90*90c8c64dSAndroid Build Coastguard Worker mTextViewIntroMessage = (TextView) rootView.findViewById(R.id.text_intro_message); 91*90c8c64dSAndroid Build Coastguard Worker Activity activity = getActivity(); 92*90c8c64dSAndroid Build Coastguard Worker AlarmStorage alarmStorage = new AlarmStorage(activity); 93*90c8c64dSAndroid Build Coastguard Worker mAlarmAdapter = new AlarmAdapter(activity, alarmStorage.getAlarms()); 94*90c8c64dSAndroid Build Coastguard Worker if (mAlarmAdapter.getItemCount() == 0) { 95*90c8c64dSAndroid Build Coastguard Worker mTextViewIntroMessage.setVisibility(View.VISIBLE); 96*90c8c64dSAndroid Build Coastguard Worker } 97*90c8c64dSAndroid Build Coastguard Worker RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view_alarms); 98*90c8c64dSAndroid Build Coastguard Worker recyclerView.setLayoutManager(new LinearLayoutManager(activity)); 99*90c8c64dSAndroid Build Coastguard Worker recyclerView.setAdapter(mAlarmAdapter); 100*90c8c64dSAndroid Build Coastguard Worker recyclerView.addItemDecoration(new AlarmAdapter.DividerItemDecoration(activity)); 101*90c8c64dSAndroid Build Coastguard Worker mAlarmUtil = new AlarmUtil(activity); 102*90c8c64dSAndroid Build Coastguard Worker } 103*90c8c64dSAndroid Build Coastguard Worker 104*90c8c64dSAndroid Build Coastguard Worker @Override onDestroy()105*90c8c64dSAndroid Build Coastguard Worker public void onDestroy() { 106*90c8c64dSAndroid Build Coastguard Worker LocalBroadcastManager.getInstance(getActivity()) 107*90c8c64dSAndroid Build Coastguard Worker .unregisterReceiver(mAlarmWentOffBroadcastReceiver); 108*90c8c64dSAndroid Build Coastguard Worker super.onDestroy(); 109*90c8c64dSAndroid Build Coastguard Worker } 110*90c8c64dSAndroid Build Coastguard Worker 111*90c8c64dSAndroid Build Coastguard Worker /** 112*90c8c64dSAndroid Build Coastguard Worker * {@link TimePickerFragment.AlarmAddListener} to do actions after an alarm is added. 113*90c8c64dSAndroid Build Coastguard Worker */ 114*90c8c64dSAndroid Build Coastguard Worker private class AlarmAddListenerImpl implements TimePickerFragment.AlarmAddListener { 115*90c8c64dSAndroid Build Coastguard Worker 116*90c8c64dSAndroid Build Coastguard Worker @Override onAlarmAdded(Alarm alarm)117*90c8c64dSAndroid Build Coastguard Worker public void onAlarmAdded(Alarm alarm) { 118*90c8c64dSAndroid Build Coastguard Worker mAlarmAdapter.addAlarm(alarm); 119*90c8c64dSAndroid Build Coastguard Worker mAlarmUtil.scheduleAlarm(alarm); 120*90c8c64dSAndroid Build Coastguard Worker mTextViewIntroMessage.setVisibility(View.GONE); 121*90c8c64dSAndroid Build Coastguard Worker } 122*90c8c64dSAndroid Build Coastguard Worker } 123*90c8c64dSAndroid Build Coastguard Worker 124*90c8c64dSAndroid Build Coastguard Worker /** 125*90c8c64dSAndroid Build Coastguard Worker * A {@link BroadcastReceiver} that receives an intent when an alarm goes off. 126*90c8c64dSAndroid Build Coastguard Worker * This receiver removes the corresponding alarm from the RecyclerView. 127*90c8c64dSAndroid Build Coastguard Worker */ 128*90c8c64dSAndroid Build Coastguard Worker private class AlarmWentOffReceiver extends BroadcastReceiver { 129*90c8c64dSAndroid Build Coastguard Worker 130*90c8c64dSAndroid Build Coastguard Worker @Override onReceive(Context context, Intent intent)131*90c8c64dSAndroid Build Coastguard Worker public void onReceive(Context context, Intent intent) { 132*90c8c64dSAndroid Build Coastguard Worker Alarm alarm = AlarmUtil.readAlarm(intent.getExtras()); 133*90c8c64dSAndroid Build Coastguard Worker mAlarmAdapter.deleteAlarm(alarm); 134*90c8c64dSAndroid Build Coastguard Worker } 135*90c8c64dSAndroid Build Coastguard Worker } 136*90c8c64dSAndroid Build Coastguard Worker } 137