package com.javacodegeeks.android.androidtimerexample;


import java.util.Calendar;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;

public class Alarm extends Activity
{
	
	TimePicker myTimePicker;
	Button buttonstartSetDialog;
	TextView textAlarmPrompt;
	
	TimePickerDialog timePickerDialog;
	
	final static int RQS_1 = 1;
	public static final int ID_NOTIFICATION = 1988;
	
   
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        	super.onCreate(savedInstanceState);
        	setContentView(R.layout.alarm);
        
        	textAlarmPrompt = (TextView)findViewById(R.id.alarmprompt);
        
        	buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog);
        	buttonstartSetDialog.setOnClickListener(new OnClickListener()
        	{
        		@Override
        		public void onClick(View v) 
        		{
        			textAlarmPrompt.setText("");
        			openTimePickerDialog(false);
			}});
        	
            Button boutonCreateNotif = (Button) findViewById(R.id.CreateNotif);
            Button boutonClearNotif = (Button) findViewById(R.id.ClearNotif);  
     
            //écouteur d'évènement
            boutonCreateNotif.setOnClickListener(new OnClickListener()
            {
    			public void onClick(View v)
    			{
    	        	createNotify();
    			}
    		});
     
            boutonClearNotif.setOnClickListener(new OnClickListener()
            {
    			public void onClick(View v)
    			{
    				cancelNotify();
    			}
    		}); 

    }

/**********************************************************/    
		
	private void openTimePickerDialog(boolean is24r)
	{
		Calendar calendar = Calendar.getInstance();
		
		timePickerDialog = new TimePickerDialog(
				Alarm.this, 
				onTimeSetListener, 
				calendar.get(Calendar.HOUR_OF_DAY), 
				calendar.get(Calendar.MINUTE), 
				is24r);
		timePickerDialog.setTitle("Set Alarm Time");  
        
		timePickerDialog.show();

	}
    
    OnTimeSetListener onTimeSetListener = new OnTimeSetListener()
    {
			@Override
			public void onTimeSet(TimePicker view, int hourOfDay, int minute)
			{
	
				Calendar calNow = Calendar.getInstance();
				Calendar calSet = (Calendar) calNow.clone();
	
				calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
				calSet.set(Calendar.MINUTE, minute);
				calSet.set(Calendar.SECOND, 0);
				calSet.set(Calendar.MILLISECOND, 0);
				
				if(calSet.compareTo(calNow) <= 0)
				{
					//Today Set time passed, count to tomorrow
					calSet.add(Calendar.DATE, 1);
				}
				
				setAlarm(calSet);
	}};

	private void setAlarm(Calendar targetCal)
	{

			textAlarmPrompt.setText(
					"\n\n***\n"
					+ "Alarm is set@ " + targetCal.getTime() + "\n"
					+ "***\n");
			
			Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
			PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
			AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
			alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
		
	}
	
	
	//Méthode qui créer la notification
    private void createNotify()
    {
    	//On créer un "gestionnaire de notification"
    	NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);        
 
    	//On créer la notification
    	//Avec son icône et son texte défilant (optionel si l'on veut pas de texte défilant on met cet argument à null)
    	Notification notification = new Notification(R.drawable.notification, "Toc toc, c'est une notification !", System.currentTimeMillis());  
 
    	//Le PendingIntent c'est ce qui va nous permettre d'atteindre notre deuxième Activity
    	//ActivityNotification sera donc le nom de notre seconde Activity
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, Notification.class), 0);
        //On définit le titre de la notif
        String titreNotification = "C'est moi la notification !";
        //On définit le texte qui caractérise la notif
        String texteNotification = "Je suis une belle notification...";         
 
        //On configure notre notification avec tous les paramètres que l'on vient de créer
        notification.setLatestEventInfo(this, titreNotification, texteNotification, pendingIntent);
        //On ajoute un style de vibration à notre notification
        //L'utilisateur est donc également averti par les vibrations de son téléphone
        //Ici les chiffres correspondent à 0sec de pause, 0.2sec de vibration, 0.1sec de pause, 0.2sec de vibration, 0.1sec de pause, 0.2sec de vibration
        //Vous pouvez bien entendu modifier ces valeurs à votre convenance
        notification.vibrate = new long[] {0,200,100,200,100,200};
 
        //Enfin on ajoute notre notification et son ID à notre gestionnaire de notification
        notificationManager.notify(ID_NOTIFICATION, notification);
    }
 
    //Méthode pour supprimer de la liste de notification la notification que l'on vient de créer
    private void cancelNotify()
    {
    	//On créé notre gestionnaire de notfication
    	NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    	//on supprime la notification grâce à son ID
    	notificationManager.cancel(ID_NOTIFICATION);
    }

		
}
